Yade Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Yade Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- mcp-name: io.github.yusong652/yade-mcp -->
<p align="center"> <img src="https://raw.githubusercontent.com/yusong652/yade-mcp/assets/assets/header.gif" alt="yade-mcp header" width="720"> </p>
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.md1. 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-mcpOr 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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.