Skip to main content
Glama

pfc-mcp

English | 简体中文

PyPI Downloads GitHub stars License: MIT Python 3.10+

pfc3d>model new ;теперь с LLM.

pfc-mcp подключает ИИ-агентов к ITASCA PFC через Model Context Protocol — просматривайте документацию, запускайте симуляции и выполняйте код с помощью естественного общения.

pfc3d>model solve ;LLM решает.

pfc-mcp demo

Инструменты (10)

5 инструментов для документации — просмотр и поиск команд PFC, Python API и справочной документации. Мост не требуется.

5 инструментов для выполнения — интерактивный REPL, отправка задач, мониторинг прогресса, прерывание и история. Требуется мост.

Related MCP server: mcp-server-terminal

Быстрый старт

Предварительные требования

  • Установленный ITASCA PFC 6.0, 7.0 или 9.0

  • Установленный uv (для uvx)

Настройка агента (рекомендуется)

Скопируйте это в своего ИИ-агента и позвольте ему настроиться самостоятельно:

Fetch and follow this bootstrap guide end-to-end:
https://raw.githubusercontent.com/yusong652/pfc-mcp/main/docs/agentic/pfc-mcp-bootstrap.md

Ручная настройка

1. Зарегистрируйте MCP-сервер в конфигурации вашего клиента:

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

2. Запустите мост изнутри PFC:

Скачайте addon.py, затем используйте один из двух способов внутри PFC:

  • Скопируйте содержимое файла в консоль IPython в PFC и выполните его

  • Или скачайте файл и выполните его в графическом интерфейсе PFC

Проверка

Перезапустите своего ИИ-агента (Claude Code, Codex CLI, Gemini CLI и т.д.) и попросите его вызвать pfc_execute_code для проверки соединения.

Функции

  • Поддержка нескольких версий PFC — документация по командам для PFC 6.0, 7.0 и 9.0 через параметр version

  • Иерархический просмотр документации — агенты перемещаются по дереву команд PFC для обнаружения возможностей и ограничений, что снижает количество галлюцинаций при использовании команд

  • Улучшенная документация по графикам — элементы графиков ссылаются на документацию, дополняющую официальную

  • Интерактивный REPL — быстрая итерация перед переходом к полноценным скриптам; агенты могут быстро тестировать и уточнять код

  • Управление жизненным циклом задач — отправка длительных симуляций, мониторинг прогресса, прерывание запущенных задач и просмотр истории задач

  • Совместимость с несколькими клиентами — работает с Claude Code, Codex CLI, Gemini CLI, GitHub Copilot CLI, OpenCode, toyoura-nagisa и другими MCP-клиентами

Устранение неполадок

См. Руководство по устранению неполадок.

Разработка

См. Руководство разработчика: установка и запуск из исходного кода.

Участие в разработке

Пул-реквесты и сообщения об ошибках приветствуются! См. Руководство разработчика для начала работы.

Лицензия

MIT — см. LICENSE.

Available Tools

10 tools
itasca_browse_commandsA

Browse Itasca command documentation by path (like glob + cat).

Navigation levels:

  • No command: All command categories overview

  • Category only (e.g., "ball"): List commands in category

  • Full command (e.g., "ball create"): Full documentation

When to use:

  • You know the command category or exact command

  • You want to explore available commands

Related tools:

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

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

NameRequiredDescriptionDefault
commandNoItasca command to browse (space-separated, matching Itasca command 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
versionNoDocumentation version to browse. Defaults to 7.0 for multi-version engines (PFC: 6.0/7.0/9.0, FLAC: 7.0/9.0, 3DEC: 7.0/9.0); 9.0-only engines (MPoint, MassFlow) always resolve at 9.0.7.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.7/5.0
Behavior4/5

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

No annotations exist, so the description must carry the behavioral load; it does so by disclosing the read-only return shape at each navigation level (category overview, command list, full doc). It stops short of stating how invalid or ambiguous paths behave, which matters for an agent guessing at command names.

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 one-line purpose, then tight labeled blocks for navigation levels, when to use, and related tools. Every line carries decision-relevant information; nothing is repeated from the schema verbatim.

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?

A three-parameter read tool with full schema coverage and an output schema; the description supplies the path-granularity model and sibling routing that the structured fields cannot. Nothing an agent needs in order 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.

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, but the description adds value by mapping the 'command' argument's granularity to distinct behaviors ('ball' lists, 'ball create' returns full docs) and by giving a concrete reference-style example ('contact-models linear') that clarifies separator conventions. The version/software parameters are left to the schema, which already documents them fully.

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?

Names a specific verb and resource ('Browse Itasca command documentation') and the analogy 'like glob + cat' immediately conveys the three-level lookup model. The 'Related tools' section explicitly separates it from itasca_query_command (keyword search when path unknown) and itasca_browse_reference, so an agent can route without opening schemas.

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?

Gives explicit navigation levels (no command = categories, category only = command list, full command = docs) plus a 'When to use' block and named alternatives with the condition that selects each. Both branches — path known vs path unknown — are covered.

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

itasca_browse_python_apiA

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

NameRequiredDescriptionDefault
apiNoItasca 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
softwareYesITASCA engine to query: 'pfc', 'flac', '3dec', 'mpoint', or 'massflow'. Required — there is no default engine.

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 burden; 'browse' and the glob+cat analogy do imply a read-only, non-destructive operation that returns documentation text. However, it says nothing about output size, pagination, or what happens when a path is invalid, leaving real behavioral gaps.

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?

A single front-loaded sentence with the verb, resource, and access model; nothing wasted.

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?

An output schema exists and both parameters are fully documented, so the basics are covered. But for a documentation-browsing tool sitting among several overlapping siblings, the description lacks the routing detail needed to call it confidently instead of itasca_query_python_api or itasca_browse_reference.

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% and the api parameter already carries exhaustive path examples, so the schema does the heavy lifting. The description's 'by path' phrase reinforces the key concept but adds no syntax or edge-case meaning beyond the schema.

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 (browse) and resource (Itasca Python SDK documentation) with a path-based access pattern. It implicitly separates itself from itasca_browse_commands and itasca_browse_reference via 'Python SDK', 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?

The '(like glob + cat)' analogy implies navigation then retrieval, but there is no explicit when-to-use guidance versus itasca_query_python_api, itasca_browse_reference, or itasca_browse_commands. Usage must be inferred from the tool name and analogy.

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

itasca_browse_referenceA

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

Works across engines via the required software selector (pfc/flac/3dec). References are language elements used within commands, not standalone commands.

Navigation levels:

  • No topic: All reference categories for the engine

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

  • Full path (e.g., "constitutive-models mohr-coulomb"): Full documentation

  • Sub-item path (e.g., "plot-items zone contour"): Sub-item details

When to use:

  • Need material/contact/joint model property names (kn, ks, fric, cohesion, friction, ...)

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

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

  • Setting up model-assignment commands (e.g. "... cmodel assign ... property ...")

  • Using range filters in any command

  • Configuring "plot item create" commands

Related tools:

  • itasca_browse_commands: Command syntax (e.g., "zone create")

  • itasca_query_command: Search commands by keywords

NameRequiredDescriptionDefault
topicNoReference topic to browse (space-separated path). Categories vary by engine — call with no topic first to discover them. Examples (by engine): - None or '': List all reference categories for the chosen engine - PFC 'contact-models' / 'contact-models linear': contact model + its properties - FLAC 'constitutive-models' / 'constitutive-models mohr-coulomb': zone model + properties - 3DEC 'joint-models' / 'joint-models mohr': joint (sub-contact) model + properties - 'range-elements' / 'range-elements cylinder': range filter syntax (all engines) - 'plot-items' / 'plot-items <type>' / 'plot-items <type> <sub>': plot item keywords
versionNoDocumentation version (PFC: 6.0/7.0/9.0, FLAC: 7.0/9.0). Only gates version-specific items (e.g. PFC contact models by availability). range-elements, plot-items, and the FLAC/3DEC reference sets are version-agnostic, so the value is ignored for them. 9.0-only engines (MPoint, MassFlow) always resolve at 9.0.7.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?

No annotations, so the description carries the burden: it discloses that references are not standalone commands, that behavior varies by the required software selector, and details the four navigation levels (no topic, category, full path, sub-item). It does not discuss access requirements or return payload, though an output schema exists.

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, then structured navigation levels, when-to-use, and related tools. Some redundancy: plot-items and range examples appear both in navigation levels and in the when-to-use bullets, and the category example 'constitutive-models' conflicts with the PFC contact-models naming, adding minor noise.

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 and all three parameters are fully described in schema. Combined with the description's navigation model, engine selector explanation, and when-to-use guidance, an agent has everything needed to call this correctly.

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% and the schema already documents topic path formats, version gating, and the software enum with examples. The description's navigation-level list reinforces the topic parameter's semantics but largely restates what the schema provides, so baseline 3 is appropriate.

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?

Specific verb+resource: browse ITASCA reference documentation for syntax elements and model properties. The description also explicitly distinguishes references from commands ('References are language elements used within commands, not standalone commands'), separating it from itasca_browse_commands.

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?

Provides an explicit 'When to use' list of concrete tasks (model property names, range filtering syntax, plot item config, cmodel assignment) plus a 'Related tools' section naming itasca_browse_commands and itasca_query_command with their distinct roles. Nothing left to inference.

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_commandA

Search Itasca command documentation by keywords (like grep).

Returns matching command paths. Use itasca_browse_commands for full documentation.

When to use:

  • You have keywords but don't know exact command path

  • Example: "ball create", "contact property", "model solve"

Related tools:

  • itasca_browse_commands: Get full documentation for a known command path

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

  • itasca_query_python_api: Search Python SDK by keywords

NameRequiredDescriptionDefault
limitNoMaximum number of results (1-20).
queryYesSearch keywords for Itasca commands. Examples: 'ball create', 'contact property', 'model solve'. Case-insensitive.
versionNoDocumentation version to search. Defaults to 7.0 for multi-version engines (PFC: 6.0/7.0/9.0, FLAC: 7.0/9.0, 3DEC: 7.0/9.0); 9.0-only engines (MPoint, MassFlow) always resolve at 9.0.7.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.5/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, but it clearly discloses the key behavioral trait: this returns matching command paths only, not full documentation, and points to another tool for details. It does not explicitly state read-only/non-destructive behavior or result ranking, but the grep analogy and output schema cover most operational expectations.

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 front-loaded with the core behavior and return value, then structured with a short when-to-use list and related-tool routing. Every sentence serves a purpose with no wasted text.

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?

For a read-only search tool with an output schema and full schema description coverage, the description supplies everything needed: purpose, return shape, usage conditions, examples, and sibling tool alternatives. No critical gap remains for correct invocation.

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 query, software, version, and limit with examples and defaults. The description adds only illustrative keyword examples and does not add syntax, format, or semantic details beyond the schema.

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 specific verb and resource ('Search Itasca command documentation by keywords') and clarifies the return ('matching command paths'), while explicitly distinguishing itself from itasca_browse_commands for full documentation. The grep analogy adds an immediate mental model.

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 when-to-use criteria ('You have keywords but don't know exact command path') with concrete examples, and names the relevant sibling tools with their selection conditions. The routing to itasca_browse_commands, itasca_browse_reference, and itasca_query_python_api is unambiguous.

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

itasca_query_python_apiA

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

Returns matching API paths with signatures. Use itasca_browse_python_api for full documentation.

When to use:

  • You have keywords but don't know exact API path

  • Example: "ball velocity", "create", "contact force"

Related tools:

  • itasca_browse_python_api: Get full documentation for a known API path

  • itasca_query_command: Search Itasca commands by keywords

NameRequiredDescriptionDefault
limitNoMaximum number of results (1-20).
queryYesSearch keywords for Itasca Python SDK API. Examples: 'ball pos', 'contact force', 'model solve'. Case-insensitive.
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 full burden, and it does disclose key behavior: keyword/substring matching (grep analogy), case-insensitive semantics, and that results are API paths with signatures rather than full docs. It stops short of stating that this is a non-mutating read-only search or how ranking/truncation works, but the search framing makes the safety profile unambiguous.

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 the core purpose in the first two lines, then scannable bullets for when-to-use and siblings. Minor redundancy: itasca_browse_python_api is named both in the opening and again under 'Related tools,' costing a line without adding information.

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 no prose explanation, and all three parameters are fully specified in the schema. For a three-parameter, two-required search tool, the description supplies purpose, selection criteria, and alternatives: everything an agent needs to pick and call it correctly.

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%, so query, software, and limit are already fully documented with examples, enum values, and bounds. The description adds only the grep-style matching model, which is useful but is largely a restatement of the search framing rather than new parameter-level guidance. Baseline 3 is appropriate.

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 ('Search Itasca Python SDK documentation by keywords') and immediately disambiguates from the sibling tool with 'Use itasca_browse_python_api for full documentation.' The grep analogy plus 'returns matching API paths with signatures' tells an agent exactly what it gets back versus what browse returns.

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 with the decisive condition ('you have keywords but don't know exact API path') and concrete example queries. It also names the alternatives (itasca_browse_python_api, itasca_query_command) and the condition that selects each, leaving nothing to inference.

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. 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"
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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."
        +}
  8. 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 10 tools

Disambiguation5/5

Each tool has a distinct purpose: task lifecycle tools are separated from execution tools and documentation lookup tools. The sync-vs-async distinction between itasca_execute_code and itasca_execute_task is explicit, and query-vs-browse documentation tools are clearly differentiated. No significant overlap remains.

Naming Consistency5/5

All tools use a consistent itasca_ prefix followed by snake_case verb_noun patterns. Minor singular/plural variation exists (query_command vs browse_commands), but it does not break predictability. The naming is uniform across the entire set.

Tool Count5/5

Ten tools is well-scoped for an engine bridge that needs task management, code execution, and documentation lookup. Each tool earns its place without excessive surface area.

Completeness4/5

Core workflows are covered: sync and async execution, task polling, interruption, task listing, and browsing/searching Python API and command docs. Minor gaps exist, such as no keyword-search tool for reference documentation, but agents can work around this via itasca_browse_reference categories.

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
    48 PyPI
    15
    MIT