Content
# SciCompute MCP Server
MCP server for scientific computing with multiple backends. Provides AI coding assistants with mathematical computation and visualization capabilities.
## Features
- Multiple computing backends (Mathematica, Octave, Python Scientific, R, SageMath)
- Image output support (plots, graphics)
- Automatic backend selection
- Persistent session state (variables persist across calls)
- Documentation query for unknown symbols
- Multi-platform support (Claude Code, Claude Desktop, OpenCode/Crush)
- **Recommended**: Use alongside [official MATLAB MCP Server](https://github.com/matlab/matlab-mcp-core-server) for MATLAB support
## Supported Backends
| Backend | Status | Capabilities |
|---------|--------|--------------|
| Mathematica | ✅ Ready | symbolic, numeric, plot, image, audio |
| SageMath | ✅ Ready | symbolic, numeric, plot |
| Python Scientific | ✅ Ready | symbolic, numeric, plot |
| R | ✅ Ready | numeric, plot |
| Octave | ✅ Ready | numeric, plot |
| Julia | ✅ Ready | numeric, plot |
| Maxima | ✅ Ready | symbolic, numeric, plot |
### MATLAB Support
For **MATLAB** support, we recommend using the official [MATLAB MCP Core Server](https://github.com/matlab/matlab-mcp-core-server) from MathWorks alongside SciCompute:
**Why use the official server?**
- No Python version restrictions (works with any Python version)
- No library installation or patching required
- Standalone Go binary with no dependencies
- Additional features: code analysis, test running, toolbox detection
**Installation:**
1. Download the MATLAB MCP Core Server binary from the [latest release](https://github.com/matlab/matlab-mcp-core-server/releases/latest):
```bash
# Linux x86_64
curl -L -o ~/matlab-mcp-core-server https://github.com/matlab/matlab-mcp-core-server/releases/latest/download/matlab-mcp-core-server-glnxa64
chmod +x ~/matlab-mcp-core-server
```
2. Configure both servers in your MCP config:
```json
{
"mcpServers": {
"scicompute": {
"command": "uvx",
"args": ["scicompute-mcp"]
},
"matlab": {
"command": "/home/username/matlab-mcp-core-server",
"args": ["--matlab-root=/usr/local/MATLAB/R2024a"]
}
}
}
```
See the [MATLAB MCP Core Server documentation](https://github.com/matlab/matlab-mcp-core-server) for more details.
## Installation
> **Tip**: Ask your AI assistant to install it for you! Just say "Install scicompute-mcp" and it will handle everything automatically.
### Quick Start (Recommended)
```bash
# Install and run with uvx (auto-manages environment)
uvx scicompute-mcp
# Or install with pip
pip install scicompute-mcp
scicompute-mcp
```
### Debian 12+ / Ubuntu 23.04+
These systems enable PEP 668 by default, which prevents direct pip installs. Use one of these methods:
```bash
# Method 1: Use --break-system-packages (quick)
pip install --break-system-packages scicompute-mcp
# Method 2: Use pipx (recommended for CLI tools)
sudo apt install -y pipx
pipx install scicompute-mcp
# Method 3: Use China mirror (faster in China)
pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple scicompute-mcp
```
After installation, add `~/.local/bin` to PATH if needed:
```bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```
### Install with Optional Backends
```bash
# With Mathematica support
pip install scicompute-mcp[mathematica]
# With Octave support
pip install scicompute-mcp[octave]
# With all backends
pip install scicompute-mcp[all]
```
### Environment Architecture
```
┌───────────────────────────────────────────────────────────────────────────┐
│ MCP Server (Python 3.10+) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌────────────────────┐ │
│ │ Mathematica │ │ Octave │ │ MATLAB │ │ py_scientific │ │
│ │ Backend │ │ Backend │ │ Backend │ │ (same Python env) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └────────────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Wolfram │ │ octave │ │ MATLAB │ │ R │ sage │
│ │ Kernel │ │ process │ │ process │ │ process │ process │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ │
│ Independent Independent Independent Independent conda │
│ (official) (apt/brew) (official) (apt/brew) env │
└───────────────────────────────────────────────────────────────────────────┘
```
**Key Points**:
- MCP server only needs **one** Python environment
- Each backend (except py_scientific) runs as independent process, not sharing Python environment
- SageMath requires separate conda environment (Python < 3.13)
### Step 1: Install Computing Backends
Install the computing backends you need (not all required):
#### Python Scientific Backend
Pre-installed with the main package, no additional configuration needed.
#### SageMath Backend
SageMath requires Python < 3.13, must be installed separately via conda:
```bash
# Configure mirror (optional, recommended for users in China)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
# Create SageMath environment
conda create -n sage python=3.11 -y
conda install -n sage -c conda-forge sage -y
```
Configure path (choose one):
```bash
# Method A: Environment variable (recommended)
export SAGE_PATH="$HOME/miniconda3/envs/sage/bin/sage"
# Method B: Modify SAGE_PATH in code
# Edit src/scicompute_mcp/backends/sage.py
```
#### R Backend
```bash
# Ubuntu/Debian
sudo apt install r-base
# macOS
brew install r
# Windows: Download from CRAN
```
#### Octave Backend
```bash
# Ubuntu/Debian
sudo apt install octave gnuplot
# macOS
brew install octave gnuplot
# Windows: Download Octave installer
```
#### Julia Backend
```bash
# Install Julia (recommended: use juliaup)
curl -fsSL https://install.julialang.org | sh
# Or download from https://julialang.org/downloads/
# Install Python package
pip install juliacall
```
#### Mathematica Backend
1. Purchase and install from [Wolfram website](https://www.wolfram.com/mathematica/)
2. Configure path:
```bash
export MATHEMATICA_KERNEL_PATH="/usr/local/Wolfram/Wolfram/14.3/Executables/WolframKernel"
```
## Configuration
### Environment Variables
| Variable | Description | Example |
|----------|-------------|---------|
| `SAGE_PATH` | SageMath path | `$HOME/miniconda3/envs/sage/bin/sage` |
| `MATHEMATICA_KERNEL_PATH` | WolframKernel path | `/usr/local/Wolfram/Wolfram/14.3/Executables/WolframKernel` |
| `JULIA_PATH` | Julia executable path | `$HOME/.juliaup/bin/julia` |
| `SCICOMPUTE_PRIORITY` | Backend priority | `mathematica,sage,julia,py_scientific` |
### Claude Code (`.mcp.json`)
```json
{
"mcpServers": {
"scicompute": {
"command": "uvx",
"args": ["scicompute-mcp"]
}
}
}
```
### Claude Desktop (`claude_desktop_config.json`)
```json
{
"mcpServers": {
"scicompute": {
"command": "uvx",
"args": ["scicompute-mcp"]
}
}
}
```
### OpenCode / Crush
#### OpenCode 1.4.6+
OpenCode 1.4.6+ reads configuration from `~/.config/opencode/opencode.json`:
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"scicompute": {
"type": "local",
"command": ["/home/username/.local/bin/scicompute-mcp"]
}
}
}
```
> **Important**: Use absolute path to `scicompute-mcp` (from `pip install`). Avoid `uvx` because it downloads dependencies on first run, which may timeout.
To verify:
```bash
opencode mcp list
```
#### Using `opencode mcp add` (Interactive)
Alternatively, add via interactive command:
```bash
opencode mcp add
# Name: scicompute
# Type: Local
# Command: /home/username/.local/bin/scicompute-mcp
```
#### Older OpenCode versions
For older versions, use `~/.opencode.json`:
```json
{
"mcpServers": {
"scicompute": {
"type": "stdio",
"command": "/home/username/.local/bin/scicompute-mcp"
}
}
}
```
### Local Development
For development or if you want to use a local installation:
```json
{
"mcpServers": {
"scicompute": {
"command": "/path/to/.venv/bin/python",
"args": ["-m", "scicompute_mcp.server"]
}
}
}
```
## Multi-Platform Support
This project supports multiple AI assistant platforms. Configuration templates are provided in the `configs/` directory:
| File | Platform |
|------|----------|
| `configs/claude-code.json` | Claude Code |
| `configs/claude-desktop.json` | Claude Desktop |
| `configs/opencode.json` | OpenCode / Crush |
### Custom Prompts / Skills
Each platform has its own way to provide custom instructions:
| Platform | Directory | Format |
|----------|-----------|--------|
| Claude Code | `.claude/skills/*.md` | Markdown |
| OpenCode / Crush | `.opencode/commands/*.md` | Markdown |
Users can create custom skill files if needed.
## Tools
### Calling Convention
Different MCP clients have different naming conventions for calling tools:
| Client | Format | Example |
|--------|--------|---------|
| Claude Code | `mcp__{server}__{tool}` | `mcp__scicompute__compute(code="1+1")` |
| OpenCode | `{server}_{tool}` | `scicompute_compute(code="1+1")` |
The examples below use the base tool names (`compute`, `list_backends`, `stop`). Your AI assistant will automatically use the correct format for its client.
### compute(code, backend?)
Execute scientific computing code.
```python
# Plot with Octave
compute("x = 0:0.1:10; y = sin(x); plot(x, y)", "octave")
# Symbolic computation with SageMath
compute("integrate(sin(x), x)", "sage")
compute("diff(x^3 * exp(x), x)", "sage")
# Mathematica
compute("Plot[Sin[x], {x, 0, 2 Pi}]", "mathematica")
compute("Integrate[x^2, x]", "mathematica")
# R Statistics
compute("mean(rnorm(1000))", "r")
compute("hist(rnorm(1000))", "r")
# Python Scientific
compute("sp.integrate(sp.sin(sp.Symbol('x')), sp.Symbol('x'))", "py_scientific")
# Julia
compute("plot(rand(10))", "julia")
compute("sqrt(2.0)", "julia")
# MATLAB
compute("plot(1:10, rand(1,10))", "matlab")
compute("[V,D] = eig(magic(3))", "matlab")
```
### list_backends()
List all available backends and their capabilities.
### stop(backend?)
Stop backend process and clear all state. Useful to reset variables or free memory.
```python
stop() # List running backends (does NOT stop any)
stop("octave") # Stop specific backend
stop("ALL") # Stop all running backends
```
**Safety design**: Calling `stop()` without arguments will NOT stop any backends. It returns a list of running backends. This prevents accidental data loss.
### doc(backend?, symbol?)
Get documentation URLs for computing backends. Use this to find where to look up function documentation.
```python
# List all backends with documentation
doc()
# Get URLs for a specific backend
doc(backend="mathematica")
doc(backend="numpy")
# Get URL for a specific function
doc(backend="mathematica", symbol="Plot3D")
doc(backend="octave", symbol="linspace")
```
**Supported backends**: mathematica, numpy, scipy, matplotlib, sympy, pandas, python, r, julia, octave, sage, maxima, matlab
## Usage Examples
Ask your AI assistant:
```
Plot sin(x) from 0 to 2π
Calculate ∫x²dx from 0 to 1
Solve x² - 4 = 0
Look up NDSolve documentation
```
## Getting Documentation
When you need detailed documentation for a function:
1. Use the `doc` tool to get documentation URLs
2. Launch a subagent with Task tool to fetch and extract documentation
3. Supported backends: Mathematica, NumPy, SciPy, Matplotlib, SymPy, Pandas, R, Julia, Octave, SageMath, Maxima, MATLAB
Example:
```
# Get documentation URL
doc(backend="mathematica", symbol="Plot3D")
# Then fetch the documentation
Task(
description="Fetch Plot3D docs",
prompt="Fetch Mathematica documentation for Plot3D from the URL returned by doc tool",
subagent_type="general"
)
```
## Documentation
- `docs/sage.md` - SageMath collaboration guide
- `docs/r.md` - R collaboration guide
- `docs/maxima.md` - Maxima collaboration guide
- `docs/octave.md` - Octave collaboration guide
- Use `doc()` tool for documentation URLs
## Requirements
- Miniconda (recommended) or Python 3.10+
- For SageMath backend: conda environment with Python 3.11
- For R backend: R installation
- For Octave backend: GNU Octave + gnuplot
- For Mathematica backend: Wolfram Mathematica
- For MATLAB backend: MATLAB + MATLAB Engine for Python
## License
Unlicense - Public Domain
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
everything-claude-code
Complete Claude Code configuration collection - agents, skills, hooks,...
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
cc-switch
All-in-One Assistant for Claude Code, Codex & Gemini CLI across platforms.
servers
Model Context Protocol Servers
servers
Model Context Protocol Servers
Time
A Model Context Protocol server for time and timezone conversions.