itasca-mcp
pfc-mcp
pfc3d>model new ;jetzt mit LLM.
pfc-mcp verbindet KI-Agenten mit ITASCA PFC über das Model Context Protocol – durchsuchen Sie Dokumentationen, führen Sie Simulationen aus und lassen Sie Code ausführen, alles durch natürliche Konversation.
pfc3d>model solve ;LLM löst.

Tools (10)
5 Dokumentations-Tools — Durchsuchen und Suchen von PFC-Befehlen, Python-API und Referenzdokumentationen. Keine Bridge erforderlich.
5 Ausführungs-Tools — interaktive REPL, Aufgabenübermittlung, Fortschrittsüberwachung, Unterbrechung und Verlauf. Erfordert eine Bridge.
Related MCP server: mcp-server-terminal
Schnellstart
Voraussetzungen
ITASCA PFC 6.0, 7.0 oder 9.0 installiert
uv installiert (für
uvx)
Agenten-Einrichtung (Empfohlen)
Kopieren Sie dies in Ihren KI-Agenten und lassen Sie ihn sich selbst konfigurieren:
Fetch and follow this bootstrap guide end-to-end:
https://raw.githubusercontent.com/yusong652/pfc-mcp/main/docs/agentic/pfc-mcp-bootstrap.mdManuelle Einrichtung
1. Registrieren Sie den MCP-Server in Ihrer Client-Konfiguration:
{
"mcpServers": {
"pfc-mcp": {
"command": "uvx",
"args": ["pfc-mcp"]
}
}
}2. Starten Sie die Bridge innerhalb von PFC:
Laden Sie addon.py herunter und verwenden Sie dann einen dieser beiden Abläufe innerhalb von PFC:
Kopieren Sie den Dateiinhalt in die PFC IPython-Konsole und führen Sie ihn aus
Oder laden Sie die Datei herunter und führen Sie sie in der PFC-GUI aus
Überprüfung
Starten Sie Ihren KI-Agenten (Claude Code, Codex CLI, Gemini CLI usw.) neu und bitten Sie ihn, pfc_execute_code aufzurufen, um die Verbindung zu überprüfen.
Funktionen
Unterstützung für mehrere PFC-Versionen - Befehlsdokumentationen für PFC 6.0, 7.0 und 9.0 über den Parameter
versionHierarchische Dokumentationssuche - Agenten navigieren durch den PFC-Befehlsbaum, um Funktionen und Grenzen zu entdecken, was halluzinierte Befehle reduziert
Erweiterte Diagrammdokumentation - Diagrammelemente verweisen auf Dokumentationen, die die offizielle Dokumentation ergänzen
Interaktive REPL - schnelle Iteration vor der Festlegung auf vollständige Skripte; Agenten können Code schnell testen und verfeinern
Aufgabenlebenszyklus-Management - Übermittlung lang laufender Simulationen, Überwachung des Fortschritts, Unterbrechung laufender Aufgaben und Durchsuchen des Aufgabenverlaufs
Multi-Client-kompatibel - funktioniert mit Claude Code, Codex CLI, Gemini CLI, GitHub Copilot CLI, OpenCode, toyoura-nagisa und anderen MCP-Clients
Fehlerbehebung
Siehe Leitfaden zur Fehlerbehebung.
Entwicklung
Siehe Entwicklerhandbuch: Installation und Ausführung aus dem Quellcode.
Mitwirken
PRs und Issues sind willkommen! Siehe das Entwicklerhandbuch, um loszulegen.
Lizenz
MIT - siehe LICENSE.
Available Tools
7 toolsitasca_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, whether it is 2D or 3D only), 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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path 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. | |
| source | Yes | Documentation tree: 'commands' (Itasca command syntax), 'python_api' (itasca Python SDK), 'fish' (FISH intrinsic functions), 'reference' (model properties, range elements, plot items). | |
| version | No | Documentation 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 |
| software | Yes | ITASCA engine to query: 'pfc', 'flac', '3dec', 'mpoint', or 'massflow'. Required — there is no default engine. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: the 'ls + cat' framing makes it clear this is a read-only traversal, and each level listing its children is disclosed. It also exposes non-obvious truncation behavior (summary.omitted_sections / summary.compacted / summary.hint) that an agent would otherwise misread as missing data; only an explicit 'no side effects' statement is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb and the ls+cat analogy, then a per-tree breakdown, then the sibling routing tip — a sensible priority order. The source enumeration partially restates the schema enum, which is mild redundancy but aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter, four-tree tool with version gating, the description covers traversal model, per-tree path conventions, truncation handling, and sibling routing. Return values are covered by an output schema, so nothing critical is missing, though version-selection consequences are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the per-tree path syntax and version gating is already documented in the schema. The description adds the conceptual framing that 'source picks the tree', but no syntax or format detail beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Browse ITASCA documentation by path') and immediately grounds it in an analogy ('like ls + cat over one documentation tree') that tells an agent exactly what the operation does. It also enumerates the four trees by content type, which separates it from itasca_query_doc and the execution siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: use this tool when you have a path, use itasca_query_doc 'when you only have keywords', and notes that query results are paths for this tool, forming a clear workflow. It also advises 'start at the top of a tree when unsure and descend', covering the unknown-path case.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Output lines per page | |
| filter | No | Only keep output lines containing this text | |
| task_id | Yes | Task ID returned by itasca_execute_task or listed by itasca_list_tasks | |
| skip_newest | No | Skip N newest output lines before pagination | |
| wait_seconds | No | Long-poll: return when the task changes state or after this many seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 baredefine, through its terminating standaloneend) 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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python code to execute in the Itasca engine user console | |
| timeout | No | Seconds before the bridge aborts the snippet; longer work belongs in itasca_execute_task. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 baredefine, through its terminating standaloneend) 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.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | Brief task purpose | |
| entry_script | Yes | Absolute path to entry Python script in the Itasca engine workspace |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID returned by itasca_execute_task or listed by itasca_list_tasks |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max tasks to return | |
| skip_newest | No | Skip N most recent tasks before listing |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (1-20). | |
| query | Yes | Search keywords or a name fragment. Examples: 'ball create', 'contact force', 'ball.pos', 'mohr-coulomb', 'zone pore pressure'. Case-insensitive. | |
| source | No | Documentation tree to search: 'commands', 'python_api', 'fish' or 'reference'. Omit to search all four at once; each hit is then tagged with its source. | |
| version | No | Documentation 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 |
| software | Yes | ITASCA engine to query: 'pfc', 'flac', '3dec', 'mpoint', or 'massflow'. Required — there is no default engine. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v0.11.1- Removed
itasca_browse_commands - Added
itasca_browse_doc - Removed
itasca_browse_python_api - Removed
itasca_browse_reference - Removed
itasca_query_command - Added
itasca_query_doc - Removed
itasca_query_python_api
2 tool updates
v0.10.6- Changed
itasca_check_task_status1 field changed- changed
Input schema / properties / task_id / descriptionPrevious value: -"Task ID returned by itasca_execute_task"New value: +"Task ID returned by itasca_execute_task or listed by itasca_list_tasks"
- Changed
itasca_interrupt_task1 field changed- changed
Input schema / properties / task_id / descriptionPrevious value: -"Task ID returned by itasca_execute_task"New value: +"Task ID returned by itasca_execute_task or listed by itasca_list_tasks"
20 tool updates
v0.5.1- Added
itasca_browse_commands - Added
itasca_browse_python_api - Added
itasca_browse_reference - Added
itasca_check_task_status - Added
itasca_execute_code - Added
itasca_execute_task - Added
itasca_interrupt_task - Added
itasca_list_tasks - Added
itasca_query_command - Added
itasca_query_python_api - Removed
pfc_browse_commands - Removed
pfc_browse_python_api - Removed
pfc_browse_reference - Removed
pfc_check_task_status - Removed
pfc_execute_code - Removed
pfc_execute_task - Removed
pfc_interrupt_task - Removed
pfc_list_tasks - Removed
pfc_query_command - Removed
pfc_query_python_api
10 tool updates
v0.4.2- Added
pfc_browse_commands - Added
pfc_browse_python_api - Added
pfc_browse_reference - Added
pfc_check_task_status - Added
pfc_execute_code - Added
pfc_execute_task - Added
pfc_interrupt_task - Added
pfc_list_tasks - Added
pfc_query_command - Added
pfc_query_python_api
10 tool updates
v0.4.0- Removed
pfc_browse_commands - Removed
pfc_browse_python_api - Removed
pfc_browse_reference - Removed
pfc_check_task_status - Removed
pfc_execute_code - Removed
pfc_execute_task - Removed
pfc_interrupt_task - Removed
pfc_list_tasks - Removed
pfc_query_command - Removed
pfc_query_python_api
10 tool updates
v0.3.15- Added
pfc_browse_commands - Added
pfc_browse_python_api - Added
pfc_browse_reference - Added
pfc_check_task_status - Added
pfc_execute_code - Added
pfc_execute_task - Added
pfc_interrupt_task - Added
pfc_list_tasks - Added
pfc_query_command - Added
pfc_query_python_api
10 tool updates
v0.3.14- Removed
pfc_browse_commands - Removed
pfc_browse_python_api - Removed
pfc_browse_reference - Removed
pfc_check_task_status - Removed
pfc_execute_code - Removed
pfc_execute_task - Removed
pfc_interrupt_task - Removed
pfc_list_tasks - Removed
pfc_query_command - Removed
pfc_query_python_api
5 tool updates
v0.1.1- Changed
pfc_browse_commands2 fields changed- added
Input schema / $defsAdded value: +{ + "CommandDocVersion": { + "description": "Supported PFC documentation versions for command tools.", + "enum": [ + "6.0", + "7.0", + "9.0" + ], + "type": "string" + } +} - added
Input schema / properties / versionAdded value: +{ + "$ref": "#/$defs/CommandDocVersion", + "default": "7.0", + "description": "PFC documentation version to browse. Defaults to 7.0." +}
- Changed
pfc_browse_reference1 field changed- changed
Input schema / properties / topic / descriptionPrevious 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"
- Removed
pfc_capture_plot - Added
pfc_execute_code - Changed
pfc_query_command2 fields changed- added
Input schema / $defsAdded value: +{ + "CommandDocVersion": { + "description": "Supported PFC documentation versions for command tools.", + "enum": [ + "6.0", + "7.0", + "9.0" + ], + "type": "string" + } +} - added
Input schema / properties / versionAdded value: +{ + "$ref": "#/$defs/CommandDocVersion", + "default": "7.0", + "description": "PFC documentation version to search. Defaults to 7.0." +}
10 tool updates
v0.1.0- First observed
pfc_browse_commands - First observed
pfc_browse_python_api - First observed
pfc_browse_reference - First observed
pfc_capture_plot - First observed
pfc_check_task_status - First observed
pfc_execute_task - First observed
pfc_interrupt_task - First observed
pfc_list_tasks - First observed
pfc_query_command - First observed
pfc_query_python_api
TDQS
Scored across 7 tools
Each tool occupies a clearly distinct slot: query_doc (keyword search) vs browse_doc (path traversal), execute_code (synchronous inline) vs execute_task (async script file), and the task trio check_task_status / interrupt_task / list_tasks. The descriptions explicitly contrast the potentially confusable pairs and cross-reference each other for next steps, leaving no room for misselection.
Every tool uses the same itasca_ prefix plus a verb_noun pattern (browse_doc, query_doc, execute_code, execute_task, check_task_status, interrupt_task, list_tasks). The lifecycle tools even share the _task suffix, making the grouping obvious from names alone.
Seven tools is tightly scoped for an engine bridge: two for docs, two for code execution, three for async task lifecycle. Nothing feels redundant and no tool is a trivial wrapper, since each has a separate mechanism (sync/async, poll/interrupt/history).
The surface covers docs lookup, sync and async execution, plus full task lifecycle including status output, interruption, and persisted history — a solid closed loop. Minor gaps remain: there is no dedicated tool to write/upload the script file that execute_task consumes, and no way to wait/join on a task or prune task history, though both are workable via execute_code or polling.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for AI dialogue using various LLM models via AceDataCloud
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceA simple MCP server for interacting with OpenAI assistants. This server allows other tools (like Claude Desktop) to create and interact with OpenAI assistants through the Model Context Protocol.939MIT
- AlicenseNot gradedqualityBmaintenanceMCP 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.56 npm21MIT
- AlicenseAqualityAmaintenanceyade-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.736 PyPI15MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server for Discord-based AI agent-user communication. Enables AI agents to communicate with users through Discord instead of IDE chat interfaces.58MIT