MCP server exposing Google's Stim quantum stabilizer circuit library as LLM tools
Project description
stim-mcp-server
MCP server wrapping Google's Stim stabilizer circuit simulator. Wire it up to an LLM and you can build and sample circuits through conversation.
Tools
| Tool | Description |
|---|---|
hello_quantum |
Health check — returns Stim version and active session count |
create_circuit |
Validate a Stim circuit string and open a persistent session |
append_operation |
Append one or more Stim instructions to an existing circuit |
sample_circuit |
Simulate a circuit and return measurement statistics |
analyze_errors |
Build the Detector Error Model and find shortest logical error paths |
get_circuit_diagram |
Return an ASCII, SVG, or timeline diagram |
inject_noise |
Add depolarizing or X error noise to a circuit |
Connecting to the remote server
A hosted instance runs on Google Cloud Run:
URL: https://stim-mcp-5s3woqufqa-uc.a.run.app/mcp
Transport: Streamable HTTP (MCP 1.x)
Claude.ai
Go to Settings → Integrations → Add custom integration and enter the URL above.
Claude Code (CLI)
Add to your ~/.claude/claude.json (or project-level .claude/claude.json):
{
"mcpServers": {
"stim-mcp": {
"url": "https://stim-mcp-5s3woqufqa-uc.a.run.app/mcp"
}
}
}
Other MCP clients
Use POST https://stim-mcp-5s3woqufqa-uc.a.run.app/mcp with Content-Type: application/json and Accept: application/json, text/event-stream.
Cold start: The server scales to zero when idle. The first request after a period of inactivity may take 5–10 seconds. In-memory circuit sessions are lost on scale-down — circuits are cheap to recreate.
Installation
Needs uv.
Via PyPI (recommended)
No cloning needed. Configure your MCP client (see below) and uvx handles the rest on first run.
From source (development)
git clone https://github.com/DeDuckProject/stim-mcp
cd stim-mcp
uv sync
Running locally
Claude Desktop
macOS — ~/Library/Application Support/Claude/claude_desktop_config.json
Windows — %APPDATA%\Claude\claude_desktop_config.json
Linux — ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"stim": {
"command": "/path/to/uvx",
"args": ["--from", "stim-mcp-server", "stim-mcp-server"]
}
}
}
Replace /path/to/uvx with the output of which uvx.
Claude Code
claude mcp add stim -- /path/to/uvx --from stim-mcp-server stim-mcp-server
Replace /path/to/uvx with the output of which uvx.
From source (development)
claude mcp add stim -- /path/to/uv run --directory /path/to/stim-mcp stim-mcp-server
Stdio (direct)
uv run stim-mcp-server
HTTP / SSE (local testing)
MCP_TRANSPORT=sse stim-mcp-server
# Server listens on http://localhost:8080/mcp
Inspect with the MCP inspector:
npx @modelcontextprotocol/inspector http://localhost:8080/mcp
Docker
docker build -t stim-mcp .
docker run -p 8080:8080 stim-mcp
# Server listens on http://localhost:8080/mcp
MCP dev tools
uv run mcp dev src/stim_mcp_server/server.py
Deploying to Cloud Run
Prerequisites
brew install --cask google-cloud-sdk
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
gcloud services enable run.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
Deploy
gcloud run deploy stim-mcp \
--source . \
--region us-central1 \
--allow-unauthenticated \
--port 8080 \
--memory 512Mi \
--cpu 1 \
--min-instances 0 \
--max-instances 1
--source . triggers Cloud Build to build the Docker image — no local Docker required.
--max-instances 1 keeps circuit sessions consistent (in-memory store).
--min-instances 0 enables scale-to-zero.
Environment variables
| Variable | Default | Description |
|---|---|---|
MCP_TRANSPORT |
stdio |
Set to anything else (e.g. sse) to start the HTTP server |
MCP_HOST |
0.0.0.0 |
Bind address for HTTP mode |
MCP_PORT |
8080 |
Port for HTTP mode |
Examples
"Create a Bell state and sample it 1000 times"
"What's the shortest error path in this surface code?"
"Add 0.1% depolarizing noise and show me what changes"
Development
uv sync
uv run pytest
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stim_mcp_server-0.1.1.tar.gz.
File metadata
- Download URL: stim_mcp_server-0.1.1.tar.gz
- Upload date:
- Size: 129.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c1ff30aa6efbae9fd2ec253cd283c24d91f86e80b4e4695fa873237ecf1e4a7
|
|
| MD5 |
c591a222226f17bb8c05619c2238c291
|
|
| BLAKE2b-256 |
363f38b26aa5fec8979af0afbdca1742f52b3abc1cd9b885d5be708d7eec1c07
|
File details
Details for the file stim_mcp_server-0.1.1-py3-none-any.whl.
File metadata
- Download URL: stim_mcp_server-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fd793abfaa73cf8608528c8f79fd79a92e0a96cc22dc820d990ef4eab886d0f
|
|
| MD5 |
56a41fc465f567e1f166477092ce093f
|
|
| BLAKE2b-256 |
8a1a96bfc406e5c19d5b2912572ddb69efc32eecdb965eb60ffc36474ffa44a3
|