Skip to content

Releases: yusong652/itasca-mcp

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 04 Jul 14:13
4d4e700

Removed

  • FLAC 6.0 documentation. FLAC 6.x embeds Python 2.7, which cannot run
    itasca-mcp-bridge (Python >= 3.6), so its command docs were removed from
    the corpus and from the doc tools' version selectors. Requesting
    software="flac" with version="6.0" now returns an unsupported_version
    error stating the covered versions (FLAC: 7.0/9.0). PFC 6.0 is unaffected —
    it ships Python 3.6 and remains fully supported (PFC: 6.0/7.0/9.0). Shared
    _common docs no longer advertise versions outside the requesting engine's
    coverage.

Fixed

  • Bridge (itasca-mcp-bridge 0.4.1): client disconnects no longer dump
    tracebacks into the engine GUI console.
    A dropped MCP client socket on
    Windows (WinError 10053, e.g. an SSE stream reconnecting) surfaced as a
    noisy ConnectionAbortedError traceback; the connection now deregisters
    quietly. Bridges pick this up automatically via self-upgrade on start.

Documentation

  • README prerequisites and the agentic bootstrap guide now state per-engine
    minimum versions, with an engine-aware embedded-interpreter mapping; during
    bootstrap the agent stops early with a clear report when the interpreter
    resolves to python27 (FLAC 6.x) instead of failing at the pip step.
  • README and bootstrap guide reframed as multi-engine (PFC → ITASCA), with
    client-native mcp add-style commands for manual setup and an explicit
    9.0+ engine recommendation.

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 27 Jun 10:17
c7b6615

First release under the itasca-mcp name (formerly pfc-mcp). The server is
now multi-engine and the bridge transport is HTTP-based.

Changed

  • Renamed pfc-mcpitasca-mcp. The Python package is itasca_mcp,
    the console script is itasca-mcp, and every tool is renamed pfc_*
    itasca_*: itasca_execute_code, itasca_execute_task,
    itasca_check_task_status, itasca_list_tasks, itasca_interrupt_task,
    itasca_browse_commands, itasca_browse_python_api,
    itasca_browse_reference, itasca_query_command, itasca_query_python_api.
    Update your MCP client config to uvx itasca-mcp. The pfc-mcp package
    continues only as a deprecation shim that forwards here.
  • Bridge transport switched from WebSocket to HTTP + SSE (httpx client).
    Requires itasca-mcp-bridge >= 0.4.0 (submodule pin bumped to v0.4.0).
    The bridge self-upgrades from PyPI on every start, so existing installs move
    in step; WebSocket-era bridges are no longer supported.

Added

  • Multi-engine documentation corpus with a required software selector on
    the browse/query tools, spanning PFC, FLAC, 3DEC, MPoint, and MassFlow:
    • 3DEC: commands plus the full engine-specific Python API (block family
      and all proprietary modules), with references for FISH intrinsics,
      initial/boundary conditions, geometry data tables, structural properties,
      plot items, histories-and-results, and joint constitutive models.
    • MPoint (MPM) and MassFlow (gravity flow / caving): commands, Python
      SDK skeletons, engine-exposed modules, and plot-items references.
    • Shared references (range-elements, zone constitutive models) factored via a
      _common layer across PFC / FLAC / 3DEC where the engines agree.

Fixed

  • Engine resolution folds FLAC 9.x into a single key and resolves 9.0-only
    engines at 9.0.
  • Docker dev container passes an explicit bridge mode instead of mode=auto.

Documentation

  • Command docs sourced from engine HTML now carry verified figure references
    and flag figure-defined entries as text-incomplete, so an agent knows when a
    command's full definition lives in an image rather than text.
  • Version-gated the program call GIL-blocking warning to the engine versions
    it actually applies to.
  • README, install docs, and the agentic bootstrap guides updated for the
    itasca-mcp name; daily-start flow recommends the self-upgrading two-liner
    with addon.py as first-install only.

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 27 Jun 10:36

Deprecated

  • pfc-mcp is deprecated and frozen in favor of itasca-mcp. This final
    release is a thin shim: it depends on itasca-mcp and runs it unchanged,
    after leading the MCP server instructions with a migration notice so a
    connecting agent is told to switch. uvx pfc-mcp keeps working (it now runs
    the multi-engine itasca-mcp server), but please update your client config to
    uvx itasca-mcp. No further pfc-mcp releases are planned.

    (Tagged from the renamed yusong652/itasca-mcp repository on a throwaway
    branch where the package name is restored to pfc-mcp; main is unaffected.)

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 13:03
563a211

Added

  • --bridge-port CLI argument to override the bridge connection port —
    shorthand for --bridge-url ws://localhost:PORT. When a full
    --bridge-url / PFC_MCP_BRIDGE_URL is also supplied, only its port is
    overridden.

Changed

  • pfc_execute_task now submits over the bridge's execute_task message
    (renamed from pfc_task so the shared bridge protocol is product-neutral;
    the bridge keeps pfc_task as a deprecated alias). Requires
    itasca-mcp-bridge >= 0.1.5
    — older bridges silently ignore the message
    and submission times out. If that happens, confirm the bridge version with
    pfc_execute_code (import itasca_mcp_bridge; print(itasca_mcp_bridge.__version__)) and upgrade by re-running addon.py.
  • Slimmed pfc_check_task_status pagination to total_lines + line_range,
    replacing the heavier pagination object. Output windows are still selected
    with skip_newest / limit / filter_text.
  • Bumped itasca-mcp-bridge to 0.1.5 (submodule pin). Picks up the PySide6
    Qt task-pump fix so the bridge starts on PFC 9.7+ (Python 3.10 / Qt6),
    where a hard PySide2 import previously froze the GUI on startup, and the
    execute_task protocol rename.

v0.4.4

Choose a tag to compare

@github-actions github-actions released this 03 Jun 14:31
3349963

Fixed

  • Bumped itasca-mcp-bridge to 0.1.3 (submodule pin 25668d7), picking up
    two abspath-vs-CWD fixes since 0.4.3. Command-log capture: itasca.command()
    output no longer comes back empty when the engine's working directory
    diverges from Python's (headless consoles, or after a task os.chdir()).
    Task-log resolution: pfc_check_task_status no longer returns (no output)
    for a task that called os.chdir() — the task log and tasks.json are now
    read from a bridge root frozen at startup rather than the live working
    directory.

Changed

  • Task elapsed_time is now rounded to 2 decimals in pfc_check_task_status
    and pfc_list_tasks (e.g. 0.01 instead of 0.010000944137573242). The
    field stays numeric; the bridge still reports full precision, with rounding
    applied at the MCP presentation layer alongside the existing
    start_time / end_time formatting.

v0.4.3

Choose a tag to compare

@github-actions github-actions released this 26 May 10:22

Contact API documentation now distinguishes mechanical and thermal
contact interfaces, eliminating fictitious force_normal /
force_shear advertisements on thermal contacts and adding version
gating for the PFC 9.0-only VertexFacetContact. Rblock contacts
and thermal-specific power methods join their respective interfaces
as first-class entries.

Fixed

  • pfc_browse_python_api / pfc_query_python_api no longer falsely
    advertise mechanical force methods on thermal contacts. The five
    *ThermalContact types (BallBallThermalContact,
    BallFacetThermalContact, BallPebbleThermalContact,
    PebblePebbleThermalContact, PebbleFacetThermalContact) are
    now documented through a dedicated ThermalContact interface that
    exposes contact state, geometry, grouping, model/property, and
    orientation methods — without force_normal / force_shear.
    Verified against the live PFC 9 bridge: 0 cross-contamination
    across all 15 contact classes. Closes #10.
  • VertexFacetContact is now correctly tagged as PFC 9.0-only via
    per-type availability.versions, so 6.0 / 7.0 queries no longer
    suggest it exists on those versions.

Added

  • Mechanical Contact interface now expands to all four rblock
    contact types (BallRBlockContact, PebbleRBlockContact,
    RBlockFacetContact, RBlockRBlockContact) and the 9.0-only
    VertexFacetContact, matching the official PFC class hierarchy.
  • Thermal-specific power() / set_power(value) methods are now
    documented for all five thermal contact types, sourced from the
    official PFC 9 Python HTML reference.

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 25 May 07:57

Expanded Python SDK array API coverage (9 new modules) and bumped the
fastmcp dependency to the 3.x line so tests against its public API
surface work on a fresh install.

Added

  • pfc_browse_python_api / pfc_query_python_api now cover the
    vectorized array API: ballarray, clumparray, wallarray,
    rblockarray, and the four contact-pair arrays (ballballarray,
    ballfacetarray, ballpebblearray, pebblepebblearray,
    pebblefacetarray). Availability is encoded per function with
    availability.versions covering PFC 6.0 / 7.0 / 9.0.

Changed

  • Bump minimum fastmcp to >=3.0.0. Tests now use FastMCP's public
    mcp.call_tool(...) / mcp.list_tools() API.
  • pfc_browse_commands lower-cases command input so mixed-case paths
    (e.g. "Ball Create") resolve correctly, and the "command not found"
    suggestion list is now version-filtered (no more 9.0-only commands
    surfaced when querying 6.0).
  • pfc_browse_python_api no longer echoes the full functions block
    inside summary when browsing a module, avoiding response truncation
    on large modules.

Fixed

  • Corrected availability.versions on the new array docs:
    rotation / set_rotation / fill_rotation entries were removed
    (they don't exist in any PFC version), and euler / moi_prin
    families are now correctly marked as available on PFC 6.0 as well,
    not 7.0/9.0 only. Verified against PFC 6.0 and 9.0 GUI bridges.

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 23 May 17:31

Two reliability fixes for the bootstrap path users hit on day one — pip
entry-point detection, network fallback — plus a sharp agent-guidance
warning to stop program call '*.p?dat' from wedging the bridge, which
many existing PFC workflows would otherwise trigger.

Changed

  • Bridge startup output is quieter: callback registration, TaskManager
    init, and historical-task counts now only go to bridge.log, not the
    PFC IPython console. The status banner shows URL + log path and stops.
    Ships when pfc-mcp's pin moves past itasca-mcp-bridge bc68380.
  • addon.py drops the interactive upgrade prompt. PFC's pythonfile
    host has no usable stdin, so the input() prompt was effectively
    dead — it either hit the EOFError fallback or silently returned an
    empty string and skipped the upgrade. A top-of-file
    AUTO_UPGRADE = True constant replaces it: the bootstrap now installs
    or upgrades to the latest itasca-mcp-bridge on every start with zero
    interaction. Flip to False to pin the locally installed version.

Fixed

  • addon.py no longer hard-codes pip's entry point to pip.main. That
    symbol exists in pip <= 9 (what PFC 6.0 ships) and was later restored
    as an internal shim, but it was absent in pip 10.0 through ~19.x -- a
    PFC interpreter carrying a pip from that range crashed with
    AttributeError instead of installing the bridge. The bootstrap now
    probes pip._internal.cli.main, pip._internal, and pip.main in
    turn, so it works regardless of which pip the embedded Python carries.
  • A failed bridge install now points at pip's real error output and
    offers a manual pip install fallback, instead of surfacing only a
    bare exit code 2 that hid the underlying cause.

Documentation

  • pfc_execute_code and pfc_execute_task docstrings now warn agents
    off itasca.command("program call '<file>.p?dat'"). PFC's
    command-script interpreter blocks the entire bridge for the script's
    duration — even bridge-internal calls like pfc_list_tasks time out,
    and recovery requires the user to manually stop PFC. If a user asks
    to run a .dat / .p3dat / .p2dat file, agents are instructed to
    read the file and translate each command into a itasca.command(...)
    call in Python instead, which preserves cycle-gap interleaving and
    keeps every command inspectable. Lots of existing PFC workflows are
    .p?dat scripts, so pointing an agent at one was previously a usage
    trap that made the toolchain look broken.
  • The agentic bootstrap guide's Step 3 (agent-driven bridge install)
    now documents the PyPI -> Tsinghua mirror fallback, matching the
    fallback addon.py already performs. An agent installing the bridge
    for a user on a network that blocks PyPI previously had no documented
    retry path and would stall there.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 21 May 17:15

Bridge installation path migrates from pfc-mcp-bridge to itasca-mcp-bridge.
Tool surface (MCP tools and their wire contracts) is unchanged; the minor bump
reflects the user-visible install/dependency move, not a tool API change.

Changed

  • addon.py now installs itasca-mcp-bridge (PyPI) instead of
    pfc-mcp-bridge. End users get the multi-line it.command() deadlock fix
    (recognized aliases like import itasca as it) automatically — the
    splitter in pfc-mcp-bridge only matched the literal itasca.command(...)
    form and silently skipped any aliased call, letting one C batch hold the
    GIL while IPython's ZMQIOStream backed up. Re-download addon.py from the
    pfc-mcp repo to pick up the new install path.
  • Agentic install now defaults the MCP client config to user/global scope
    instead of workspace, with workspace as an explicit last-resort fallback.
    Per-client profiles are CLI-first where a verified user-scope command
    exists (Claude/Codex/Gemini/Copilot) and file-edit for OpenCode. Affects
    nearly all users of the agentic install flow.

Deprecated

  • pfc-mcp-bridge PyPI package is frozen at 0.3.3 (final release). It
    emits a DeprecationWarning at import and prints a migration banner from
    start(). Users still on the old addon.py that upgrade will see the
    signal; those who decline the upgrade prompt stay on the affected version
    until they upgrade once. No further fixes ship to this package.

Removed

  • Embedded pfc-mcp-bridge/ directory. Bridge sources now live in the
    separate itasca-mcp-bridge
    repo and are referenced from this repo as a git submodule
    (itasca-mcp-bridge/). Fresh clones intended for bridge development need
    git clone --recurse-submodules (or git submodule update --init --recursive); end users running addon.py do not need the submodule.
  • .github/workflows/publish-bridge.yml — bridge releases now happen from
    the bridge's own repo.
  • tests/test_command_splitter.py and tests/test_command_log.py — they
    reached into the embedded bridge source via sys.path and now live with
    the bridge in its repo.

Documentation

  • docs/development/source-install.{md,zh-CN.md} document the submodule
    workflow: clone with --recurse-submodules, re-sync after pull, pin
    bump recipe, push order (bridge first), and how to read submodule
    status noise.
  • Per-AI bootstrap files (CLAUDE/AGENTS/GEMINI/WARP.md) and the agentic
    install guide describe the new layout: src/pfc_mcp/ for the MCP server,
    itasca-mcp-bridge/ (submodule) for the bridge runtime.

bridge-v0.3.3

Choose a tag to compare

@github-actions github-actions released this 21 May 16:52

Deprecated

Final release. pfc-mcp-bridge has been superseded by
itasca-mcp-bridge, a
product-neutral bridge that supports PFC and FLAC3D from one codebase.

This release exists solely to deliver a migration signal:

  • Emits DeprecationWarning at import time so programmatic users
    (pytest, lint, CI) catch the move automatically.
  • Prints a banner inside start() directing addon.py users to install
    itasca-mcp-bridge and download the new addon.py from the
    pfc-mcp repo.

The multi-line it.command() deadlock fix (recognized aliases like
import itasca as it) ships only in itasca-mcp-bridge 0.1.1+, NOT
in this package.