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 (7)

2 documentation tools — browse by path and search by keywords across the selected engine's commands, Python API, FISH intrinsics, 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"

  • "Look up the plot commands in the docs, then plot the contact force chains of the current model"

  • "The command I just typed in the console doesn't seem right, take a look"

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, multi-version corpus - command, Python API, and reference docs for PFC, FLAC, 3DEC, MPoint, and MassFlow across engine versions (PFC: 6.0/7.0/9.0, FLAC: 7.0/9.0, 3DEC: 7.0/9.0), selected via the software and version parameters

  • Documentation agents can navigate - agents browse the engine command tree to discover capabilities and boundaries, reducing hallucinated commands, with plot item 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

  • Sees what you do in the GUI - cells you run in the engine's IPython pane, commands you enter at its prompt, the plots and data files you open, close or switch to, the items you add to a plot, and the data files you execute from the editor all reach the agent on its next call, so you can work in the GUI and with the agent at the same time

  • Agent-started bridge - an AI agent can start the bridge itself through the engine's console.exe

  • 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

7 tools
itasca_browse_docA

Browse ITASCA documentation by path, like ls + cat over one documentation tree.

source picks the tree: commands (Itasca command syntax and keywords), python_api (the itasca Python SDK), fish (FISH intrinsic functions: name, signature, which versions have it), reference (contact/constitutive/joint model properties, range elements, plot items). Each level lists what is below it, so start at the top of a tree when unsure and descend.

Use itasca_query_doc when you only have keywords; its results are paths for this tool.

NameRequiredDescriptionDefault
pathNoPath inside the selected tree; omit for the top level. - commands: the command as the engine spells it ('ball' lists ball commands, 'ball create' is the full doc, 'ball create radius' one keyword or section; a heading such as 'block contact' or 'structure beam' lists its commands, summary.groups names them) - python_api: dotted from itasca ('itasca.ball', 'itasca.ball.create', 'itasca.ball.Ball.pos') - fish: dotted intrinsic name ('ball' lists the namespace, 'ball.pos' shows its signature plus ball.pos.x/y/z) - reference: 'category item sub' ('contact-models linear', 'range-elements cylinder', 'plot-items zone contour', 'contact-models linearpbond pb_ten' one property or section) A page too large for one response leaves parts out (summary.omitted_sections / summary.compacted); summary.hint gives the path to read them.
sourceYesDocumentation tree: 'commands' (Itasca command syntax), 'python_api' (itasca Python SDK), 'fish' (FISH intrinsic functions), 'reference' (model properties, range elements, plot items).
versionNoDocumentation version. Defaults to 9.0 (the current 9.x release); PFC also has 6.0 and 7.0, FLAC and 3DEC have 7.0; 9.0-only engines (MPoint, MassFlow) always resolve at 9.0. Gates commands, fish and reference entries by availability; python_api is a single 9.8 baseline whose docs carry their own availability notes.9.0
softwareYesITASCA engine to query: 'pfc', 'flac', '3dec', 'mpoint', or 'massflow'. Required — there is no default engine.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it explains that each level lists what is below, that large pages omit parts, and that summary.omitted_sections / summary.compacted and summary.hint tell the agent how to continue. It does not explicitly state read-only safety or permissions, but browsing semantics plus the truncation behavior disclosure are strong.

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 front-loaded with the core analogy and then structured by source tree, traversal, and alternative tool. It is efficient overall, though the source-tree list partially repeats the enum descriptions already present in the schema.

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 an output schema, the description does not need to explain return values, and it covers the important calling context: how to choose source trees, when to start at the top, version implications, and what to do when content is omitted. Nothing essential for correct invocation 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%, so the schema already documents all four parameters in detail, including path examples and version availability. The description reinforces the role of source and traversal, but much of its path/version detail overlaps with structured schema descriptions, so this sits at the high-coverage baseline.

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 states a specific verb and resource: browsing ITASCA documentation by path, explicitly framed as 'ls + cat over one documentation tree.' It also distinguishes the four source trees and contrasts itself with itasca_query_doc, so an agent can identify the tool without opening the schema.

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?

It gives explicit traversal guidance ('start at the top of a tree when unsure and descend') and names the alternative: use itasca_query_doc when you only have keywords, since its results are paths for this tool. That is clear when-to-use and alternative-routing guidance.

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

itasca_check_task_statusA

Check status and paginated output for a submitted Itasca task.

Output combines Python prints and Itasca 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.

NameRequiredDescriptionDefault
limitNoOutput lines per page
filterNoOnly keep output lines containing this text
task_idYesTask ID returned by itasca_execute_task or listed by itasca_list_tasks
skip_newestNoSkip N newest output lines before pagination
wait_secondsNoLong-poll: return when the task changes state or after this many seconds.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/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 disclosure burden. It does add real value by describing the return content (Python prints and console output interleaved in execution order), but it omits whether the call is read-only/safe, what happens if the task is still running or the ID is invalid, and it leaves the long-poll semantics of wait_seconds entirely to the schema.

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?

Two short paragraphs, front-loaded with the purpose and followed by the one genuinely non-obvious detail (output interleaving). No filler sentences, though the parameter advice could have been folded into the first sentence more tightly.

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?

An output schema exists, so return formatting need not be explained, yet the description usefully characterizes the content shape. With no annotations, a small gap remains around safety/read-only status and error or task-not-ready behavior, but for a status-checking tool this is close to sufficient.

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 all five parameters are already documented in structured fields; the description only restates skip_newest, limit and filter. It adds no new information about wait_seconds' long-poll behavior or about how filter interacts with pagination ordering.

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?

States a specific verb-and-resource pair ("Check status and paginated output for a submitted Itasca task") and the second paragraph clarifies what 'output' means (interleaved Python prints and console output). It implicitly separates itself from itasca_list_tasks/itasca_execute_task by scoping to an already-submitted task, but never names those siblings explicitly.

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?

"Use skip_newest / limit to paginate, or filter to keep only matching lines" gives usage for three parameters but says nothing about when to call this tool versus itasca_list_tasks or how to poll a running task. The when-to-use context is implied by 'submitted task' rather than stated.

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

itasca_execute_codeA

Execute Python code synchronously in the running Itasca engine process.

Returns stdout and an optional result variable immediately. Code runs in the engine'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.

The tool stays responsive while a task submitted via itasca_execute_task is cycling (calls interleave at cycle gaps), so use it as a live REPL — nothing has to be pre-scripted into the task up front. Typical uses:

  • Query model state and read Itasca command output: itasca.command('ball list') etc. — table dumps, list output, and command summaries are captured and interleaved with Python prints in execution order

  • Live inspection and tuning during a running task: check forces or contact statistics, modify parameters, swap callbacks, set sentinel variables the task reads each cycle

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

Environment: the engine's embedded Python interpreter (Itasca 9+ → Python 3.10, pre-9 → Python 3.6 or older; the product+version is encoded in sys.executable, e.g. PFC900). When unsure, check sys.version_info before relying on newer syntax.

Code-writing rules (shared with itasca_execute_task):

  • Multi-line itasca.command("""...""") batches are normalized to one engine call per command, keeping the bridge reachable mid-batch. Normalization recognizes itasca.command through its import name; call it through that name directly — rebinding via intermediate variables (_it = itasca) bypasses it and the output carries a bridge warning.

  • Pass each FISH definition block (fish define / fish operator / legacy bare define, through its terminating standalone end) whole, in ONE itasca.command() string; feeding one line-by-line leaves the engine blocked in interactive FISH mode until completed manually in the GUI console. Per-line loops are fine for ordinary commands.

  • program call '<file>' (.p3dat / .p2dat / .dat / ...) is supported: the bridge runs the file inline, one command per engine call, so the bridge stays reachable, the run stays interruptible, and the file's output arrives command by command.

Synchronous semantics: the request blocks until the code finishes or hits the timeout (default 10s, max 20s), and output is returned in full. The call is not tracked by itasca_list_tasks and cannot be interrupted mid-execution. For cancellable, pollable, or background work, submit via itasca_execute_task instead.

NameRequiredDescriptionDefault
codeYesPython code to execute in the Itasca engine user console
timeoutNoSeconds before the bridge aborts the snippet; longer work belongs in itasca_execute_task.

Output 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?

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses main-thread execution, persistent side effects, blocking until completion or timeout, non-trackability by itasca_list_tasks, inability to interrupt mid-execution, and bridge behavior for command batching and FISH definitions.

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?

It is front-loaded with the core synchronous semantics and well-structured with bullets. The code-writing rules are necessary but lengthy, making it less concise than ideal, though not wasteful.

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?

The definition is complete for a complex code-execution tool with an output schema. It covers environment, runtime semantics, constraints, failure/interruption behavior, parameter handling, and sibling-tool alternatives.

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 the baseline is 3. The description adds meaningful execution constraints for the code parameter, including itasca.command normalization, whole FISH blocks, and program call behavior, plus timeout usage guidance pointing longer work to itasca_execute_task.

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?

It states a precise verb and resource: execute Python code synchronously in the Itasca engine process. It also distinguishes itself from itasca_execute_task by emphasizing synchronous execution and shared engine state.

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?

It explicitly gives typical uses such as live model inspection, command output capture, parameter tuning, and plot creation. It also names the alternative and condition: cancellable, pollable, or background work should use itasca_execute_task instead.

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

itasca_execute_taskA

Submit a Python script file for asynchronous execution in the Itasca engine.

Returns a task_id immediately; the script runs in the background. Companion tools manage the lifecycle:

  • itasca_check_task_status: poll output, progress, and final status

  • itasca_interrupt_task: cancel a running task

  • itasca_list_tasks: browse task history For synchronous, inline execution, use itasca_execute_code instead.

While the task is cycling, itasca_execute_code shares the same main namespace in the engine's main thread, so you can inspect or modify simulation state live — probe progress, tune parameters mid-run, swap callbacks, or trigger early termination via a sentinel variable. Submit with reasonable starting values and refine as the task runs.

Console output from itasca.command() inside the script (table dumps, list output, command summaries) is captured into the task log alongside Python prints, visible through itasca_check_task_status.

Script-writing rules:

  • Multi-line itasca.command("""...""") batches are normalized to one engine call per command, keeping the task interruptible mid-batch. Normalization recognizes itasca.command through its import name; call it through that name directly — rebinding via intermediate variables (_it = itasca) bypasses it and logs a bridge warning.

  • Pass each FISH definition block (fish define / fish operator / legacy bare define, through its terminating standalone end) whole, in ONE itasca.command() string; feeding one line-by-line leaves the engine blocked in interactive FISH mode until completed manually in the GUI console. Per-line loops are fine for ordinary commands.

  • program call '<file>' (.p3dat / .p2dat / .dat / ...) is supported: the bridge runs the file inline, one command per engine call, so the bridge stays reachable, the task stays interruptible, and the file's output lands in the task log command by command.

NameRequiredDescriptionDefault
descriptionYesBrief task purpose
entry_scriptYesAbsolute path to entry Python script in the Itasca engine workspace

Output 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?

No annotations are provided, so the description carries the full burden and does so: it returns a task_id immediately, runs in the background, captures console and itasca.command() output into the task log, and stays interruptible. It further discloses the shared __main__ namespace with itasca_execute_code during cycling, and what happens on violating the FISH-block or program-call rules (engine blocked in interactive FISH mode, bridge warning).

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?

Front-loaded with purpose, return behavior, and the sibling routing before the long script-writing rules, which is the right order. The scripting-rules section is dense and somewhat lengthy, but each bullet prevents a concrete failure mode rather than restating the schema.

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?

An output schema exists, so return shape needn't be explained, and the description still covers the async contract, lifecycle routing, cross-tool concurrency, and script authoring constraints. Nothing an agent needs to invoke this correctly is missing.

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 the baseline is 3; the description goes beyond it by constraining what entry_script may contain — FISH definition blocks must be passed whole in a single itasca.command() string, itasca.command must be called by its import name, and program call files are run one command per engine call. That is real added meaning for the primary parameter, though the description parameter itself is unaddressed.

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 first sentence states a specific verb and resource ('Submit a Python script file') plus the execution mode ('asynchronous execution in the Itasca engine'), and later explicitly contrasts with itasca_execute_code for synchronous inline runs. An agent can distinguish it from every sibling without opening a schema.

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?

It names the alternative explicitly ('For synchronous, inline execution, use itasca_execute_code instead') and maps the entire lifecycle to companion tools: check status, interrupt, list. The condition that selects each path is stated rather than inferred.

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

itasca_interrupt_taskA

Request interruption of a pending or running Itasca task.

Returns as soon as the request is accepted; it does not wait for the task to stop. Confirm the stop and read the output produced so far with itasca_check_task_status. Only the script stops; the engine state is preserved, so you can inspect it with itasca_execute_code or continue from it with a new itasca_execute_task. Tasks already completed, failed or interrupted return an error. If the task_id is unknown, find it with itasca_list_tasks.

NameRequiredDescriptionDefault
task_idYesTask ID returned by itasca_execute_task or listed by itasca_list_tasks

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are present, so the description carries the full burden — and it does: it discloses the asynchronous acceptance semantics ('Returns as soon as the request is accepted; it does not wait'), the error condition for terminal tasks, and that engine state is preserved rather than torn down. That is exactly the non-obvious behavior an agent needs before calling a mutation tool.

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-loads the action and the async caveat in the first two lines, then layers follow-up, exclusions, and state-preservation notes. No sentence restates the name or title, and each adds a distinct operational fact.

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?

An output schema exists, so return values need not be explained, and the description instead covers the things the schema cannot: async semantics, error states, state preservation, and the correct next tool. For a single-parameter mutation tool, nothing needed to call it correctly 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 coverage is 100% and the schema already documents that task_id comes from itasca_execute_task or itasca_list_tasks, so the description is largely redundant here. Its slight value-add is the recovery hint for an unknown id, but that is guidance rather than added meaning about the parameter itself. Baseline 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?

States a specific verb ('Request interruption') and resource ('Itasca task') with clear scope: 'pending or running'. An agent can distinguish it from itasca_check_task_status and itasca_execute_task without opening the schema.

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?

Names the follow-up tool (itasca_check_task_status) to confirm the stop, the recovery path (itasca_list_tasks) for an unknown task_id, and the exclusion ('Tasks already completed, failed or interrupted return an error'). When-to-use and when-not are both explicit.

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

itasca_list_tasksA

List tasks tracked by the bridge, newest first.

Read-only. Each entry carries task_id, status (pending / running / completed / failed / interrupted), description, entry_script, start_time, end_time and elapsed_time; total_count gives the size of the full history for paging via skip_newest + limit.

Task history is persisted in the engine working directory and survives GUI restarts. Use this to recover a task_id from an earlier session, to see what is running or recently finished, or as a cheap bridge-connectivity check. For a task's output and result use itasca_check_task_status; to submit a script use itasca_execute_task.

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

Output 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?

With no annotations, the description carries the full burden and does well: it declares the tool read-only, describes ordering, explains persistence across GUI restarts, and lists returned fields and paging via total_count. It does not cover permission requirements or error behavior, but for a read-only listing tool that is a minor gap.

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 first sentence front-loads the purpose and ordering, and subsequent sentences each add useful information about return fields, paging, persistence, and use cases. There is no redundant restatement of the tool name or schema.

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?

An output schema exists, so the description need not fully explain return values, yet it still enumerates key entry fields and total_count. Combined with clear usage guidance and paging semantics, it is complete for a two-parameter read-only listing tool.

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 the schema documents limit and skip_newest. The description adds meaning beyond the schema by explaining how they page over the full history using total_count, which helps an agent use the parameters correctly.

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?

States a specific verb and resource ('List tasks tracked by the bridge'), specifies ordering ('newest first'), and distinguishes itself from siblings by naming itasca_check_task_status and itasca_execute_task as alternatives for different tasks.

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 when to use it: recovering a task_id from an earlier session, seeing running or recently finished tasks, or checking bridge connectivity. It also names the sibling tools to use for task output and script submission, leaving little inference required.

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

itasca_query_docA

Search ITASCA documentation by keywords, like grep; every hit carries a path for itasca_browse_doc.

Without source it searches commands, python_api, fish and reference together, so 'ball pos' shows the FISH intrinsic and the Python method side by side. With source it searches one tree and adds that tree's hints (available categories or namespaces, SDK fallback hints) when nothing matches.

NameRequiredDescriptionDefault
limitNoMaximum number of results (1-20).
queryYesSearch keywords or a name fragment. Examples: 'ball create', 'contact force', 'ball.pos', 'mohr-coulomb', 'zone pore pressure'. Case-insensitive.
sourceNoDocumentation tree to search: 'commands', 'python_api', 'fish' or 'reference'. Omit to search all four at once; each hit is then tagged with its source.
versionNoDocumentation version. Defaults to 9.0 (the current 9.x release); PFC also has 6.0 and 7.0, FLAC and 3DEC have 7.0; 9.0-only engines (MPoint, MassFlow) always resolve at 9.0. Gates commands, fish and reference entries by availability; python_api is a single 9.8 baseline whose docs carry their own availability notes.9.0
softwareYesITASCA engine to query: 'pfc', 'flac', '3dec', 'mpoint', or 'massflow'. Required — there is no default engine.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does provide useful non-obvious behavior: cross-tree searching, source tagging of hits, and source-specific fallback hints when nothing matches. It does not discuss ranking or exhaustive search semantics, but the output schema and parameter descriptions cover result shape and limits.

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 front-loaded and compact, with three sentences that each carry useful meaning. The phrases about source-specific hints are slightly dense but still readable and purposeful.

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?

For a read-only search tool with a rich input schema and an output schema, the description gives enough behavioral context to call it correctly. It covers keyword search, cross-source behavior, source scoping, and the handoff path to browsing; remaining details are adequately handled by structured fields.

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 the baseline is 3. The description adds semantic context for source by explaining combined versus single-tree search and fallback hints, but it does not add meaning beyond the schema for query, software, version, or limit.

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 states a specific verb and resource: searching ITASCA documentation by keywords. It also distinguishes itself from the sibling itasca_browse_doc by explaining that every hit carries a path for browsing. The grep analogy makes the retrieval model immediately clear.

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

Usage Guidelines4/5

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

It clearly explains the two usage modes: omit source to search all four documentation trees, or provide source to search one tree. The relationship to itasca_browse_doc is implied through hit paths, but the description does not explicitly state when to prefer browsing over searching or vice versa.

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. 7 tool updatesv0.11.1
    • Removeditasca_browse_commands
    • Addeditasca_browse_doc
    • Removeditasca_browse_python_api
    • Removeditasca_browse_reference
    • Removeditasca_query_command
    • Addeditasca_query_doc
    • Removeditasca_query_python_api
  2. 2 tool updatesv0.10.6
    • Changeditasca_check_task_status1 field changed
      • changedInput schema / properties / task_id / description
        Previous value: -"Task ID returned by itasca_execute_task"New value: +"Task ID returned by itasca_execute_task or listed by itasca_list_tasks"
    • Changeditasca_interrupt_task1 field changed
      • changedInput schema / properties / task_id / description
        Previous value: -"Task ID returned by itasca_execute_task"New value: +"Task ID returned by itasca_execute_task or listed by itasca_list_tasks"
  3. 20 tool updatesv0.5.1
    • Addeditasca_browse_commands
    • Addeditasca_browse_python_api
    • Addeditasca_browse_reference
    • Addeditasca_check_task_status
    • Addeditasca_execute_code
    • Addeditasca_execute_task
    • Addeditasca_interrupt_task
    • Addeditasca_list_tasks
    • Addeditasca_query_command
    • Addeditasca_query_python_api
    • 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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."
        +}
  9. 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.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct role: async script submission vs synchronous inline execution vs task lifecycle (status/interrupt/list) vs documentation browsing vs keyword search. The execute_task/execute_code pair could overlap, but the descriptions explicitly cross-reference each other and spell out sync vs async semantics, and browse_doc vs query_doc are framed as ls+cat vs grep.

Naming Consistency5/5

All tools share a consistent itasca_ prefix and snake_case verb_noun pattern (execute_task, execute_code, check_task_status, interrupt_task, list_tasks, browse_doc, query_doc). The one longer name (check_task_status) still follows the same convention and reads unambiguously.

Tool Count5/5

Seven tools is well-scoped for a bridge that runs scripts in a live simulation engine: one submit path, one live-REPL path, three lifecycle tools, and two doc tools. Nothing feels redundant or missing at the count level.

Completeness4/5

The task lifecycle (submit, poll with pagination/filter, interrupt, list, persisted history) and the doc surface (browse + search) are covered end to end. Minor gaps: no way to delete/clean up task history and no separate result-fetch tool beyond check_task_status, but these are workable.

Maintenance

ActivityActive
ResponsivenessResponsive

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.
    141 npm
    21
    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
    36 PyPI
    15
    MIT