MCP server for YADE — open-source DEM engine. Browse API docs, run simulations, manage tasks.
Runs on your machine from its package; the steps are below.

At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx yade-mcp
MCP client config
{
"mcpServers": {
"yade-mcp-server": {
"command": "uvx",
"args": [
"yade-mcp"
]
}
}
}
O.engines += [LLM()] # yet another engine.
yade-mcp connects AI agents to YADE, the open-source discrete element method engine, through the Model Context Protocol. The agent browses the YADE API, runs code in a live YADE session, launches long simulations as background tasks, and reads what you type at the YADE console.

Two documentation tools (no bridge needed) and five execution tools (bridge required):
| Tool | Purpose | Bridge |
|---|---|---|
yade_browse_api | Walk the YADE Python class tree | No |
yade_query_api | BM25 keyword search across the API | No |
yade_execute_code | Run Python in the live YADE process; returns synchronously | Yes |
yade_execute_task | Submit a script as a long-running background task | Yes |
yade_check_task_status | Inspect a running or finished task (output, status) | Yes |
yade_interrupt_task | Stop a running task at an iteration boundary, or cancel a queued one | Yes |
yade_list_tasks | List submitted tasks with metadata | Yes |
uvx launcher that agent clients use to run yade-mcp; without it the client reports No such file or directory when starting the server.Copy this to your AI agent and let it self-configure:
Fetch and follow this bootstrap guide end-to-end:
https://raw.githubusercontent.com/yusong652/yade-mcp/master/docs/agentic/yade-mcp-bootstrap.md
1. Register the MCP server with your agent (use the line for yours):
# Claude Code
claude mcp add yade-mcp -- uvx yade-mcp
# Codex CLI
codex mcp add yade-mcp -- uvx yade-mcp
# Gemini CLI
gemini mcp add yade-mcp uvx yade-mcp
Or fill in the MCP config file by hand:
{
"mcpServers": {
"yade-mcp": {
"command": "uvx",
"args": ["yade-mcp"]
}
}
}
2. Install the bridge into YADE's Python.
YADE embeds one specific interpreter (the system python3 for the Debian and Ubuntu packages, or the one it was built against). A conda or venv Python is a different interpreter, and a package installed there is invisible to YADE. The reliable way to hit the right one is to install from inside YADE, where sys.executable is that interpreter. In the YADE console:
import sys, subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install", "--user", "yade-mcp-bridge"])
Two things can go wrong here:
No module named pip: the interpreter has no pip. Install it with the system package manager, for example sudo apt install python3-pip.externally-managed-environment (Debian 12, Ubuntu 23.04 and later): pip refuses --user by default. Add "--break-system-packages" after "--user" in the command above.Then exit and restart YADE so the new package directory is picked up.
The bridge is proposed for inclusion in YADE itself (yade-dev/trunk !1187). Once it ships with YADE, this step goes away and the bridge starts with from yade import mcpbridge.
3. Start the bridge in the YADE console:
import yade_mcp_bridge
yade_mcp_bridge.start()
It prints one line: YADE MCP Bridge on http://localhost:9002, log: <cwd>/.yade-mcp/bridge.log.
Restart your AI agent and ask it to check that it is connected to YADE. It calls yade_execute_code; ok: true in the response means the whole chain works.
Once first-time setup is done, each new YADE session only needs the bridge started again. In the YADE console:
import yade_mcp_bridge
yade_mcp_bridge.start()
The MCP client config persists.
The bridge listens on 9002 by default. To use another port, pass it to start():
yade_mcp_bridge.start(port=9008)
The MCP server connects to 9002 unless told otherwise, so register it with the matching URL:
{
"mcpServers": {
"yade-mcp": {
"command": "uvx",
"args": ["yade-mcp", "--bridge-url", "http://localhost:9008"]
}
}
}
When YADE runs inside a container, bind the bridge to all interfaces so it is reachable from outside:
yade_mcp_bridge.start(host="0.0.0.0")
Publish the port when starting the container (for Docker, -p 9002:9002).
yade_execute_code runs Python in the session's own namespace, so state persists between calls. It keeps working while a task runs, for reading intermediate results without stopping the simulation.See Troubleshooting in the bootstrap guide.
See CONTRIBUTING.md for development setup and guidelines.
MIT, see LICENSE.