Connects MCP clients to ITASCA simulation engines for documentation lookup, code execution, plotting, and task control.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
This server is confirmed live โ we successfully called its tools/list endpoint directly (see the verified badge above). We haven't yet sandbox-tested the stdio install command below specifically, which is a separate, ongoing check.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Pfc MCP.
itasca_browse_commandsBrowse Itasca command documentation by path (like glob + cat). Navigation levels: - No command: All command categories overview - Category only (e.g., "ball"): List commands in category - Full command (e.g., "ball create"): Full documentation When to use: - You know the command category or exact command - You want to explore available commands Related tools: - itasca_query_command: Search commands by keywords (when path unknown) - itasca_browse_reference: Browse reference docs (e.g., "contact-models linear")
itasca_browse_python_apiBrowse Itasca Python SDK documentation by path (like glob + cat).
itasca_browse_referenceBrowse ITASCA reference documentation (syntax elements, model properties). Works across engines via the required ``software`` selector (pfc/flac/3dec). References are language elements used within commands, not standalone commands. Navigation levels: - No topic: All reference categories for the engine - Category (e.g., "constitutive-models"): List items in category - Full path (e.g., "constitutive-models mohr-coulomb"): Full documentation - Sub-item path (e.g., "plot-items zone contour"): Sub-item details When to use: - Need material/contact/joint model property names (kn, ks, fric, cohesion, friction, ...) - Need range filtering syntax (position, cylinder, group, id) - Need plot item configuration (contour, label, color-by, cut, transparency, legend) - Setting up model-assignment commands (e.g. "... cmodel assign ... property ...") - Using range filters in any command - Configuring "plot item create" commands Related tools: - itasca_browse_commands: Command syntax (e.g., "zone create") - itasca_query_command: Search commands by keywords
itasca_query_commandSearch Itasca command documentation by keywords (like grep). Returns matching command paths. Use itasca_browse_commands for full documentation. When to use: - You have keywords but don't know exact command path - Example: "ball create", "contact property", "model solve" Related tools: - itasca_browse_commands: Get full documentation for a known command path - itasca_browse_reference: Browse reference docs (e.g., "contact-models linear") - itasca_query_python_api: Search Python SDK by keywords
itasca_query_python_apiSearch Itasca Python SDK documentation by keywords (like grep). Returns matching API paths with signatures. Use itasca_browse_python_api for full documentation. When to use: - You have keywords but don't know exact API path - Example: "ball velocity", "create", "contact force" Related tools: - itasca_browse_python_api: Get full documentation for a known API path - itasca_query_command: Search Itasca commands by keywords
itasca_execute_taskSubmit a Python script file for asynchronous execution in the Itasca engine. Returns a task_id immediately; the script runs in the background. Use the companion tools to manage the task lifecycle: - itasca_check_task_status: poll output, progress, and final status - itasca_interrupt_task: cancel a running task - itasca_list_tasks: browse task history While the task is cycling, you can call itasca_execute_code at any time to inspect or modify simulation state โ including variables the task depends on. This is the standard way to probe progress, tune parameters mid-run, swap callbacks, or trigger early termination via a sentinel variable. Both tools share the same __main__ namespace in the engine's main thread. Console output from itasca.command() inside the script โ table dumps, list output, command summaries โ is captured and interleaved with Python prints in the task log, visible through itasca_check_task_status. Multi-line itasca.command("""...""") batches are normalized to one engine call per command, which keeps the bridge reachable and the task interruptible while the batch runs โ including after a `model new`/`model restore`, which reset the engine's cycle-callback registry mid-batch. The normalization applies when itasca.command is reached through its import name (`import itasca` / `import itasca as x` / `from itasca import command`); rebinding through intermediate variables (`_it = itasca`) bypasses it, and the task log then carries a bridge warning. FISH definition blocks (`fish define` / `fish operator` / legacy bare `define` ... `end`) must arrive at the engine whole: pass the complete block, header through its terminating standalone `end`, in ONE itasca.command() string โ on its own or inside a multi-line batch (normalization keeps definition blocks intact as a single engine call). Never feed a definition line-by-line (e.g. looping with one itasca.command(line) per line): the `fish define` header alone drops the console into interactive FISH mode and that engine call blocks waiting for body input that can never arrive over the bridge, leaving the engine stuck until someone completes the definition manually in the GUI console. Per-line loops are fine for ordinary commands; only definition blocks must stay in one string. Having the script invoke `program call '<file>.p3dat'` (or .p2dat / .dat) is engine-version-gated. On 6/7 the command-script interpreter blocks the bridge for the script's entire duration with no cycle-gap interleaving, leaving the bridge unreachable until the engine is stopped manually. Never emit it there, and treat unknown or unverified versions (including 9.0-9.6) the same way. On 9.7+ the bridge stays fully responsive during a `program call` (verified on 9.7: status polling, cycle-gap interleaving, and interrupt all work mid-call). Even where it is safe, prefer reading the file and translating its commands into a sequence of `itasca.command(...)` calls in the Python script โ that keeps per-command output, error locality, and mid-script control that a single opaque `program call` cannot give. This is the async / background execution path: pollable via itasca_check_task_status, cancellable via itasca_interrupt_task. Submission does not lock parameters โ start with reasonable values and refine live via itasca_execute_code as the task cycles. For synchronous, inline execution, use itasca_execute_code directly. Submission uses the bridge's `execute_task` protocol message. If a submission times out, the connected bridge may predate it โ confirm its version with itasca_execute_code (`import itasca_mcp_bridge; print(itasca_mcp_bridge.__version__)`). To upgrade, fetch and follow the bootstrap guide, then resubmit: https://raw.githubusercontent.com/yusong652/itasca-mcp/main/docs/agentic/itasca-mcp-bootstrap.md
The yusong652/pfc-mcp MCP server exposes ITASCA simulation workflows to MCP-capable AI clients. It supports PFC, FLAC, 3DEC, MPoint, and MassFlow documentation, with the target engine selected through a required software value. Depending on the engine and documentation operation, agents can inspect command syntax, reference material, Python API paths, and plot-item configuration.
The execution side connects to an ITASCA engine through a bridge started from the engine's embedded Python environment. Once connected, an agent can run Python, issue ITASCA commands, inspect model state, create plots, submit longer jobs, and manage those jobs while they run.
Documentation tools navigate a hierarchical corpus. A category path lists available commands or topics, while a complete path returns detailed documentation. Search tools return matching command or Python API paths when the exact location is unknown. Version and engine selection allow documentation queries to account for supported ITASCA product versions.
Synchronous execution uses the engine's main thread and returns output when the request finishes or reaches its timeout. For longer simulations, task submission returns a task identifier immediately. Status polling provides progress and paginated logs, interruption requests a graceful stop, and task listing exposes tracked task history. Code submitted through the live execution tool shares the __main__ namespace with a running task, so an agent can inspect or adjust state during cycle gaps.
The README requires an installed ITASCA engine, uv, and an MCP-capable client. Register the server with the uvx itasca-mcp command. The bridge is a separate setup step: download addon.py, run it from the engine GUI or its IPython console, and restart the bridge for each new engine session. Subsequent sessions can start it with itasca_mcp_bridge.start().
The README shows registration examples for Claude Code, Codex CLI, and Gemini CLI. It also lists compatibility with other MCP clients, including GitHub Copilot CLI and OpenCode. No API key or hosted service is described.
The yusong652/pfc-mcp MCP server includes tools for:
The software selector is required for cross-engine documentation and execution contexts. The embedded Python version depends on the installed ITASCA product: the supplied material identifies Python 3.6 for ITASCA 6/7 and Python 3.10 for ITASCA 9.
Execution tools require the bridge and a running ITASCA engine; documentation tools do not. Synchronous code execution is not tracked as a task and cannot be interrupted mid-call. The documented default timeout is 10 seconds, with a maximum of 600 seconds.
FISH definitions must be sent as a complete block in one itasca.command() call. Multi-line command batches are normalized to preserve command boundaries and bridge responsiveness, but rebinding the itasca module through an intermediate variable bypasses that behavior.
Long program call operations are version-sensitive. The supplied guidance says not to use them on ITASCA 6/7 or on unknown and unverified versions, including 9.0 through 9.6. On 9.7 and later, the bridge remains responsive during the call, but translating commands into separate Python calls is preferred for output visibility and control. The repository is licensed under MIT.
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/yusong652-pfc-mcp)<a href="https://allmcps.com/mcp/yusong652-pfc-mcp"><img src="https://allmcps.com/api/badge/yusong652-pfc-mcp?style=directory" alt="Pfc MCP on AllMCPs" /></a>