Skip to main content
Glama

itasca-mcp

English | 简体中文

CI PyPI Downloads GitHub stars License: MIT Python 3.10+

itasca>model new ;now, with LLM.

itasca-mcp connects AI agents to ITASCA's geomechanics simulation software — PFC, FLAC, 3DEC, MPoint, and MassFlow — through the Model Context Protocol. Browse documentation, run simulations, and execute code, all through natural conversation.

itasca>model solve ;LLM solves.

itasca-mcp demo

Tools (10)

5 documentation tools — browse and search the selected engine's commands, Python API, and reference docs. No bridge required.

5 execution tools — interactive REPL, task submission, progress monitoring, interruption, and history. Requires bridge.

Related MCP server: mcp-server-terminal

Example Prompts

  • "Run a biaxial compression test on a dense specimen and plot the stress–strain curve"

  • "Build a slope model in FLAC3D and find the factor of safety"

  • "Model a tunnel excavation in jointed rock with 3DEC and check block displacements around the opening"

  • "Simulate a landslide runout with MPoint and report the final deposit profile"

  • "The simulation is still running — check the current unbalanced force without stopping it"

  • "What's different about the zone commands between FLAC 7.0 and 9.0?"

First-time Setup

Prerequisites

  • An ITASCA engine installed — PFC, FLAC, 3DEC, MPoint, or MassFlow. 9.0+ recommended; PFC 6.0 / 7.0, FLAC 7.0, and 3DEC 7.0 are also supported.

  • uv installed (for uvx)

  • An AI agent — Claude Code, Codex CLI, Gemini CLI, or any MCP-capable client

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/itasca-mcp/main/docs/agentic/itasca-mcp-bootstrap.md

Manual Setup

1. Register the MCP server with your agent.

Most agents register it with a single command:

# Claude Code
claude mcp add itasca-mcp -- uvx itasca-mcp

# Codex / Codex-cli
codex mcp add itasca-mcp -- uvx itasca-mcp

# Gemini CLI
gemini mcp add itasca-mcp uvx itasca-mcp

Or fill in the MCP config file manually:

{
  "mcpServers": {
    "itasca-mcp": {
      "command": "uvx",
      "args": ["itasca-mcp"]
    }
  }
}

2. Start the bridge from inside the ITASCA engine:

Download addon.py, then use either of these two flows inside the engine GUI (PFC, FLAC, 3DEC, ...):

  • Copy the file contents into the engine's IPython console and run them

  • Or download the file and execute it in the engine GUI

Verify

Restart your AI agent and ask it to call itasca_execute_code to verify the connection.

Daily Startup

Once first-time setup is done, each new engine session only needs the bridge re-started — run this in the engine's IPython console and you're back online:

import itasca_mcp_bridge
itasca_mcp_bridge.start()

start() checks PyPI for a newer bridge release and self-upgrades before starting. The MCP client config persists.

Features

  • Multi-engine corpus - command, Python API, and reference docs for PFC, FLAC, 3DEC, MPoint, and MassFlow, selected via the required software parameter

  • Multi-version support - command docs across engine versions (PFC: 6.0/7.0/9.0, FLAC: 7.0/9.0, 3DEC: 7.0/9.0) via the version parameter

  • Hierarchical documentation browsing - agents navigate the engine command tree to discover capabilities and boundaries, reducing hallucinated commands

  • Enhanced plot documentation - plot items reference docs supplementing the official documentation

  • Live REPL alongside running tasks - execute code while a simulation is running: check model state and intermediate results without stopping the task; also useful for quick iteration before writing a full script

  • Task lifecycle management - submit long-running simulations, monitor progress, interrupt running tasks, and browse task history

  • Multi-client compatible - works with Claude Code, Codex CLI, Gemini CLI, GitHub Copilot CLI, OpenCode, toyoura-nagisa, and other MCP clients

Troubleshooting

See Troubleshooting in the bootstrap guide.

Development

See Developer Guide: Install and Run from Source.

Contributing

PRs and issues are welcome! See CONTRIBUTING.md for where changes land and how the documentation corpus is structured, and the Developer Guide for the source install.

License

MIT - see LICENSE.

Available Tools

10 tools
pfc_browse_commandsA

Browse PFC 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:

  • pfc_query_command: Search commands by keywords (when path unknown)

  • pfc_browse_reference: Browse reference docs (e.g., "contact-models linear")

ParametersJSON Schema
NameRequiredDescriptionDefault
commandNoPFC command to browse (space-separated, matching PFC syntax). Examples: - None or '': List all command categories - 'ball': List all ball commands - 'ball create': Get ball create documentation - 'contact': List all contact commands - 'contact property': Get contact property command documentation
versionNoPFC documentation version to browse. Defaults to 7.0.7.0

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description should fully disclose behavior. It explains the three navigation levels and the version parameter, implying read-only browsing. However, it does not explicitly state that no modifications are made or that results are text documentation, which is important for transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured with bullet points for navigation levels and when-to-use. No redundant sentences; every line adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown) and the tool's simple purpose, the description covers all necessary aspects: purpose, usage guidelines, parameter details, and related tools. It is fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with examples. The description adds context like 'space-separated, matching PFC syntax' and the three navigation levels, but these are already implied in the schema examples. Baseline 3 is correct as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool browses PFC command documentation by path, with specific navigation levels (all categories, category only, full command). It distinguishes from siblings like pfc_query_command and pfc_browse_reference by purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'When to use' section tells the agent to use this when the command category or exact command is known, and lists alternatives for other cases (pfc_query_command for keyword search, pfc_browse_reference for reference docs).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_browse_python_apiA

Browse PFC Python SDK documentation by path (like glob + cat).

ParametersJSON Schema
NameRequiredDescriptionDefault
apiNoPFC Python API path to browse (dot-separated, starting from itasca). Examples: - None or '': Root overview - all modules and objects - 'itasca': Core module functions (command, cycle, gravity, etc.) - 'itasca.ball': Ball module functions (create, find, list, etc.) - 'itasca.ball.create': Specific function documentation - 'itasca.ball.Ball': Ball object method groups - 'itasca.ball.Ball.pos': Specific method documentation - 'itasca.wall.facet': Nested submodule - 'itasca.wall.facet.Facet': Facet object in wall.facet module

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It states 'Browse ... by path (like glob + cat)' which implies read-only behavior (browsing documentation). However, it lacks explicit disclosure of traits like error behavior, rate limits, or whether it modifies state. The behavioral insight is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with effective analogy, clearly front-loaded. No superfluous content. However, the description could be slightly more informative without sacrificing length (e.g., mentioning it returns structured docs). Still, very concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single optional parameter with exhaustive schema examples and presence of an output schema (which covers return values), the description is sufficient for a browse tool. The analogy provides context for expected behavior. Minor gap: no mention of error handling or recursion depth, but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and includes detailed examples for the api parameter. The description adds no additional parameter information beyond what the schema provides, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states it browses PFC Python SDK documentation by path, using the analogy 'like glob + cat' which clearly indicates listing and reading. It distinguishes from siblings like pfc_browse_commands (commands) and pfc_browse_reference (reference) by specifying 'Python API' and hierarchical path navigation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives mentioned. The analogy 'like glob + cat' and the detailed path examples in the schema imply usage for navigating hierarchical documentation, but no comparison to siblings like pfc_query_python_api or pfc_browse_commands is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_browse_referenceA

Browse PFC reference documentation (syntax elements, model properties).

References are language elements used within commands, not standalone commands.

Navigation levels:

  • No topic: All reference categories

  • Category (e.g., "contact-models"): List items in category

  • Full path (e.g., "contact-models linear"): Full documentation

When to use:

  • Need contact model property names (kn, ks, fric, pb_*)

  • Need range filtering syntax (position, cylinder, group, id)

  • Need plot item configuration (color-by, cut plane, transparency, legend)

  • Setting up "contact cmat add model ... property ..." commands

  • Using range filters in any PFC command

  • Configuring "plot item create" commands

Related tools:

  • pfc_browse_commands: Command syntax (e.g., "ball create")

  • pfc_query_command: Search commands by keywords

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoReference topic to browse (space-separated path). Examples: - None or '': List all reference categories - 'contact-models': List all contact models - 'contact-models linear': Linear model properties - 'range-elements': Range elements overview (24 elements) - 'range-elements position': Position range syntax - 'plot-items': Plot item types (ball, wall, contact keywords) - 'plot-items ball': Ball overview + available sub-topics - 'plot-items ball color-by': Ball color-by keyword details
versionNoPFC documentation version (6.0/7.0/9.0). Defaults to 7.0. Filters contact models by version availability; range-elements and plot-items are version-agnostic.7.0

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It explains navigation levels (no topic, category, full path), how the version parameter filters contact models, and that range-elements and plot-items are version-agnostic. This provides essential behavioral context beyond basic read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: main purpose, navigation levels, when-to-use list, and related tools. It is front-loaded with the core purpose and uses bullet points for readability. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-level navigation, version filtering, multiple use cases) and the presence of an output schema, the description is complete. It covers all necessary information for an agent to understand when and how to use the tool, including examples and version behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but the description adds significant meaning beyond the schema: it explains the navigation structure with concrete examples for the topic parameter and clarifies how version filters contact models while noting version-agnostic topics. This enhances usability for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it browses PFC reference documentation for syntax elements and model properties, and distinguishes from siblings by specifying that references are language elements used within commands, not standalone commands. It also lists related tools with their purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists when to use this tool (e.g., need contact model property names, range filtering syntax, plot item configuration) and mentions related tools (pfc_browse_commands for command syntax, pfc_query_command for keyword search), providing clear guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_check_task_statusA

Check status and paginated output for a submitted PFC task.

Output combines Python prints and PFC console output from itasca.command() calls (table dumps, list output, command summaries) interleaved in execution order. Use skip_newest / limit to paginate, or filter to keep only matching lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID returned by pfc_execute_task
skip_newestNoSkip N newest output lines before pagination
limitNoOutput lines per page
filterNoOnly keep output lines containing this text
wait_secondsNoWait time before querying status

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It transparently describes the output as 'combined Python prints and PFC console output interleaved in execution order' and explains pagination and filtering behavior. It lacks discussion of error handling or rate limits but is generally sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no waste. The first sentence states the purpose, and the second adds key behavioral details. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no annotations, and an output schema, the description covers the main usage and output structure well. It does not detail edge cases (e.g., task not found) but is complete for normal operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining that skip_newest/limit control pagination, filter selects matching lines, and wait_seconds sets a delay before querying. This goes beyond the schema's bare descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Check status and paginated output' and the resource 'submitted PFC task'. It distinguishes from siblings like pfc_execute_task (submits) and pfc_interrupt_task (interrupts) by focusing on status checking and output retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains pagination and filtering mechanics but does not explicitly state when to use this tool versus alternatives (e.g., after submitting a task). The context is implied but not fully articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_execute_codeA

Execute Python code synchronously in the running PFC process.

Returns stdout and an optional result variable immediately. Code runs in PFC's main thread, sharing the same main namespace as any running task — side effects persist and are immediately visible to the task on its next cycle.

This tool remains responsive EVEN WHILE a simulation task is running (submitted via pfc_execute_task), as long as the task is actively cycling — execute_code interleaves at cycle gaps. Use it as a live REPL to inspect simulation state in real time — no need to pre-script print statements, and parameter sweeps or sentinel-based control don't have to be baked into the task script up front.

Environment: PFC's embedded Python interpreter. The version is bundled with PFC (PFC 6/7 → Python 3.6, PFC 9 → 3.10); the PFC version is encoded in sys.executable (e.g. PFC700, PFC900). When unsure, write code compatible with Python 3.6+.

Typical uses:

  • Query model state: ball/wall/contact counts, current cycle

  • Issue PFC commands and read their console output: itasca.command('ball list'), itasca.command('model list information'). Table dumps, list output, and command summaries are captured and interleaved with Python prints in execution order — no need to re-implement queries via the SDK just to see what a command would print

  • Live inspection during a running task: check forces, energy, coordination number, contact statistics

  • Live tuning during a running task: modify parameters, swap callbacks, or set sentinel variables that the task reads each cycle (e.g. change a servo target, adjust damping, signal early termination)

  • Create and export plots: itasca.command('plot ...')

  • Development and REPL-style testing

Do NOT invoke program call '<file>.p3dat' (or .p2dat / .dat) through this tool. PFC's command-script interpreter blocks the bridge for the script's entire duration with no cycle-gap interleaving, so any long model cycle inside the file leaves the bridge unreachable until PFC is stopped manually. If the user asks to run a .dat / .p3dat / .p2dat file, read the file and translate its commands into a sequence of itasca.command(...) calls in Python instead.

This is a synchronous tool: the request blocks until the code finishes or hits the timeout (default 10s, max 600s). Output is returned in full; the call is NOT tracked by pfc_list_tasks and cannot be interrupted mid-execution. For cancellable, pollable, or background work, submit it via pfc_execute_task instead — and you can still call pfc_execute_code against the task while it cycles.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesPython code to execute in PFC user console
timeoutNoConsole execution timeout in seconds

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses synchronous blocking, main thread execution, side effects persistence, interleaving with tasks, timeout limits, and non-cancellability. No annotations present, so tool carries full disclosure burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections, front-loaded with core purpose. Slightly verbose with environment details and extensive typical uses, but information is relevant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Comprehensive given no annotations: covers behavioral traits, environment, typical uses, error conditions (timeout), and distinction from other tools. No gaps for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters with descriptions. Description adds context (code runs in main thread, timeout defaults/max) but schema already provides sufficient meaning. High schema coverage reduces need for extra description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it executes Python code synchronously in PFC. Differentiates from pfc_execute_task (synchronous vs. background) and other sibling tools like pfc_query_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists typical uses (REPL, inspection, tuning) and warnings (do not use for .dat files, prefer pfc_execute_task for cancellable work). Provides clear when-to-use and when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_execute_taskA

Submit a Python script file for asynchronous execution in PFC.

Returns a task_id immediately; the script runs in the background. Use the companion tools to manage the task lifecycle:

  • pfc_check_task_status: poll output, progress, and final status

  • pfc_interrupt_task: cancel a running task

  • pfc_list_tasks: browse task history

While the task is cycling, you can call pfc_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 PFC'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 pfc_check_task_status.

Do NOT have the script invoke program call '<file>.p3dat' (or .p2dat / .dat). PFC's command-script interpreter blocks the bridge for the script's entire duration with no cycle-gap interleaving, leaving the bridge unreachable until PFC is stopped manually. If the user asks to run a .dat / .p3dat / .p2dat file, read the file and translate its commands into a sequence of itasca.command(...) calls in the Python script instead.

This is the async / background execution path: pollable via pfc_check_task_status, cancellable via pfc_interrupt_task. Submission does not lock parameters — start with reasonable values and refine live via pfc_execute_code as the task cycles. For synchronous, inline execution, use pfc_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 pfc_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/pfc-mcp/main/docs/agentic/pfc-mcp-bootstrap.md

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_scriptYesAbsolute path to entry Python script in PFC workspace
descriptionYesBrief task purpose

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses async behavior, immediate task_id return, background execution, pollable/cancellable nature, ability to modify state during execution via pfc_execute_code, namespace sharing, console output interleaving, and timeout resolution. No annotations exist, so burden is fully on description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with primary action, then logically structured with lifecycle details, sync alternative, warnings, and troubleshooting. Every sentence adds information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of async task submission with lifecycle management, the description covers all necessary aspects: async behavior, sibling tools, namespace sharing, console output, .dat file warning, timeout handling, and references to external resources. Output schema existence (task_id) is noted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema described 100% of parameters. Description adds context (absolute path, workspace) for entry_script, and purpose for description. While schema already has descriptions, the description integrates parameter usage into the async execution flow, providing added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Submit a Python script file for asynchronous execution in PFC' and differentiates from sibling pfc_execute_code by specifying sync vs async paths. It also contrasts with pfc_check_task_status, pfc_interrupt_task, pfc_list_tasks for lifecycle management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (async/background) and when not (use pfc_execute_code for sync), provides alternatives for .dat file execution, and warns against blocking practices. Troubleshooting steps for timeouts are included.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_interrupt_taskC

Request graceful interruption of a running PFC task.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID returned by pfc_execute_task

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only adds 'graceful' to indicate cooperative shutdown but does not disclose side effects (e.g., whether it can be called multiple times, if it blocks, or error behavior). The description adds minimal transparency beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is front-loaded but minimal. It is concise but could benefit from slightly more detail without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple (one parameter, output schema exists), the description lacks context about when the task must be running or the outcome if already stopped. The output schema exists, so return description is not required, but usage context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (task_id is described as 'Task ID returned by pfc_execute_task'). The tool description adds no further parameter guidance. Baseline of 3 is appropriate since the schema already documents the parameter sufficiently.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('request graceful interruption') and the resource ('running PFC task'). It distinguishes itself from sibling tools like pfc_execute_task (which starts tasks) and pfc_check_task_status (which checks status). However, the term 'graceful' is ambiguous and not elaborated upon.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives, no prerequisites (e.g., task must be running), no exclusions (e.g., cannot interrupt completed tasks), and no mention of expected preconditions. The usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_list_tasksB

List tracked PFC tasks with pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
skip_newestNoSkip N most recent tasks before listing
limitNoMax tasks to return

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It mentions pagination but does not explain behavioral details like ordering, impact on tasks (read-only?), or how to navigate pages. The schema's skip_newest parameter hints at chronological order but is not explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. However, it could be slightly more informative without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and full schema coverage, the description is adequate but could be improved by clarifying ordering or scope (e.g., lists all tracked tasks ordered by creation time).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, setting baseline at 3. The description adds only the generic term 'pagination' which loosely relates to limit/skip parameters but does not explain their specific semantics (e.g., skip_newest skips most recent tasks).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'tracked PFC tasks' with the qualifier 'with pagination'. This distinguishes it from siblings like pfc_check_task_status (status checking) and pfc_execute_task (execution).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like pfc_check_task_status or pfc_execute_task. The description lacks any context or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_query_commandA

Search PFC command documentation by keywords (like grep).

Returns matching command paths. Use pfc_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:

  • pfc_browse_commands: Get full documentation for a known command path

  • pfc_browse_reference: Browse reference docs (e.g., "contact-models linear")

  • pfc_query_python_api: Search Python SDK by keywords

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch keywords for PFC commands. Examples: 'ball create', 'contact property', 'model solve'. Case-insensitive.
limitNoMaximum number of results (1-20).
versionNoPFC documentation version to search. Defaults to 7.0.7.0

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It explains that the tool returns matching command paths and accepts search keywords. While it doesn't explicitly state read-only or safety, the functionality implies a safe search operation. The description adds value by mentioning case-insensitivity and version support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It starts with the core functionality, then provides usage guidelines, examples, and related tools. Every sentence adds value without redundancy. The structure is front-loaded with the essential purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown but confirmed), the description is complete. It covers the tool's purpose, parameters, usage recommendations, and links to sibling tools. No critical information is missing for effective tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter documented. The description adds extra context beyond the schema, such as examples for the query parameter, explanation that results are matching command paths, and default version mention. This enhances the agent's understanding of parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search PFC command documentation by keywords (like grep)'. It specifies the action (search), resource (command documentation), and method (by keywords). It also differentiates from the sibling tool pfc_browse_commands, which is for full documentation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides 'When to use' guidance, stating to use this tool when keywords are known but exact command path is unknown, with examples. It also lists related tools and their distinct purposes, offering clear guidance on alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pfc_query_python_apiA

Search PFC Python SDK documentation by keywords (like grep).

Returns matching API paths with signatures. Use pfc_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:

  • pfc_browse_python_api: Get full documentation for a known API path

  • pfc_query_command: Search PFC commands by keywords

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch keywords for PFC Python SDK API. Examples: 'ball pos', 'contact force', 'model solve'. Case-insensitive.
limitNoMaximum number of results (1-20).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the return type (matching API paths with signatures) but does not disclose any other behavioral traits like pagination, case-insensitivity (though in schema), or side effects. For a read-only search, it is minimally adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, followed by return info and usage guidelines. Every sentence is useful and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (return values not needed in description), two well-documented parameters, and clear related tools, the description is complete for a simple search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds overall context and examples but does not significantly enhance parameter understanding beyond the schema descriptions, which already provide examples and constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches PFC Python SDK documentation by keywords, returning matching API paths with signatures. It distinguishes itself from siblings like pfc_browse_python_api (for known paths) and pfc_query_command (for commands), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides 'When to use' guidance: when you have keywords but don't know the exact API path, with examples. It also lists related tools with their purposes, giving clear direction on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.4.2
    • Addedpfc_browse_commands
    • Addedpfc_browse_python_api
    • Addedpfc_browse_reference
    • Addedpfc_check_task_status
    • Addedpfc_execute_code
    • Addedpfc_execute_task
    • Addedpfc_interrupt_task
    • Addedpfc_list_tasks
    • Addedpfc_query_command
    • Addedpfc_query_python_api
  2. 10 tool updatesv0.4.0
    • Removedpfc_browse_commands
    • Removedpfc_browse_python_api
    • Removedpfc_browse_reference
    • Removedpfc_check_task_status
    • Removedpfc_execute_code
    • Removedpfc_execute_task
    • Removedpfc_interrupt_task
    • Removedpfc_list_tasks
    • Removedpfc_query_command
    • Removedpfc_query_python_api
  3. 10 tool updatesv0.3.15
    • Addedpfc_browse_commands
    • Addedpfc_browse_python_api
    • Addedpfc_browse_reference
    • Addedpfc_check_task_status
    • Addedpfc_execute_code
    • Addedpfc_execute_task
    • Addedpfc_interrupt_task
    • Addedpfc_list_tasks
    • Addedpfc_query_command
    • Addedpfc_query_python_api
  4. 10 tool updatesv0.3.14
    • Removedpfc_browse_commands
    • Removedpfc_browse_python_api
    • Removedpfc_browse_reference
    • Removedpfc_check_task_status
    • Removedpfc_execute_code
    • Removedpfc_execute_task
    • Removedpfc_interrupt_task
    • Removedpfc_list_tasks
    • Removedpfc_query_command
    • Removedpfc_query_python_api
  5. 5 tool updatesv0.1.1
    • Changedpfc_browse_commands2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "CommandDocVersion": {
        +    "description": "Supported PFC documentation versions for command tools.",
        +    "enum": [
        +      "6.0",
        +      "7.0",
        +      "9.0"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / version
        Added value: +{
        +  "$ref": "#/$defs/CommandDocVersion",
        +  "default": "7.0",
        +  "description": "PFC documentation version to browse. Defaults to 7.0."
        +}
    • Changedpfc_browse_reference1 field changed
      • changedInput schema / properties / topic / description
        Previous value: -"Reference topic to browse (space-separated path). Examples:\n- None or '': List all reference categories\n- 'contact-models': List all contact models\n- 'contact-models linear': Linear model properties\n- 'range-elements': Range elements overview (24 elements)\n- 'range-elements position': Position range syntax\n- 'range-elements cylinder': Cylinder range syntax\n- 'range-elements group': Group range syntax"New value: +"Reference topic to browse (space-separated path). Examples:\n- None or '': List all reference categories\n- 'contact-models': List all contact models\n- 'contact-models linear': Linear model properties\n- 'range-elements': Range elements overview (24 elements)\n- 'range-elements position': Position range syntax\n- 'plot-items': Plot item types (ball, wall, contact keywords)\n- 'plot-items ball': Ball overview + available sub-topics\n- 'plot-items ball color-by': Ball color-by keyword details"
    • Removedpfc_capture_plot
    • Addedpfc_execute_code
    • Changedpfc_query_command2 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "CommandDocVersion": {
        +    "description": "Supported PFC documentation versions for command tools.",
        +    "enum": [
        +      "6.0",
        +      "7.0",
        +      "9.0"
        +    ],
        +    "type": "string"
        +  }
        +}
      • addedInput schema / properties / version
        Added value: +{
        +  "$ref": "#/$defs/CommandDocVersion",
        +  "default": "7.0",
        +  "description": "PFC documentation version to search. Defaults to 7.0."
        +}
  6. 10 tool updatesv0.1.0
    • First observedpfc_browse_commands
    • First observedpfc_browse_python_api
    • First observedpfc_browse_reference
    • First observedpfc_capture_plot
    • First observedpfc_check_task_status
    • First observedpfc_execute_task
    • First observedpfc_interrupt_task
    • First observedpfc_list_tasks
    • First observedpfc_query_command
    • First observedpfc_query_python_api

TDQS

A4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: browsing vs searching documentation, synchronous vs asynchronous code execution, and task lifecycle management. No overlaps even among similar-looking pairs like browse_commands/query_command.

Naming Consistency5/5

All tools follow a consistent pfc_verb_noun pattern with underscores. Verbs like browse, query, execute, check, interrupt, list are used uniformly, and nouns are appropriately singular or plural.

Tool Count5/5

10 tools is well-scoped for a simulation environment server, covering documentation browsing/searching, task submission/management, and code execution without redundancy.

Completeness4/5

The set covers documentation browsing/searching for both commands and Python API, plus full task lifecycle management. The only minor gap is a dedicated simulation state query tool, but that is achievable via pfc_execute_code.

Maintenance

ActivityActive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server enabling AI agents to interact with terminal applications through structured Terminal State Tree representation. Works with any AI assistant that supports the Model Context Protocol.
    53
    19
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    yade-mcp connects AI agents to YADE — the open-source discrete element method engine — through the Model Context Protocol. Browse API docs, run simulations, and execute code, all through natural conversation.
    7
    13
    MIT