Releases: yusong652/itasca-mcp
Release list
v0.6.1
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"withversion="6.0"now returns anunsupported_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
_commondocs no longer advertise versions outside the requesting engine's
coverage.
Fixed
- Bridge (
itasca-mcp-bridge0.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
noisyConnectionAbortedErrortraceback; 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 topython27(FLAC 6.x) instead of failing at the pip step. - README and bootstrap guide reframed as multi-engine (PFC → ITASCA), with
client-nativemcp add-style commands for manual setup and an explicit
9.0+ engine recommendation.
v0.6.0
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-mcp→itasca-mcp. The Python package isitasca_mcp,
the console script isitasca-mcp, and every tool is renamedpfc_*→
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 touvx itasca-mcp. Thepfc-mcppackage
continues only as a deprecation shim that forwards here. - Bridge transport switched from WebSocket to HTTP + SSE (httpx client).
Requiresitasca-mcp-bridge >= 0.4.0(submodule pin bumped tov0.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
softwareselector 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
_commonlayer across PFC / FLAC / 3DEC where the engines agree.
- 3DEC: commands plus the full engine-specific Python API (block family
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 callGIL-blocking warning to the engine versions
it actually applies to. - README, install docs, and the agentic bootstrap guides updated for the
itasca-mcpname; daily-start flow recommends the self-upgrading two-liner
withaddon.pyas first-install only.
v0.5.1
Deprecated
-
pfc-mcpis deprecated and frozen in favor ofitasca-mcp. This final
release is a thin shim: it depends onitasca-mcpand runs it unchanged,
after leading the MCP serverinstructionswith a migration notice so a
connecting agent is told to switch.uvx pfc-mcpkeeps working (it now runs
the multi-engine itasca-mcp server), but please update your client config to
uvx itasca-mcp. No furtherpfc-mcpreleases are planned.(Tagged from the renamed
yusong652/itasca-mcprepository on a throwaway
branch where the package name is restored topfc-mcp;mainis unaffected.)
v0.5.0
Added
--bridge-portCLI argument to override the bridge connection port —
shorthand for--bridge-url ws://localhost:PORT. When a full
--bridge-url/PFC_MCP_BRIDGE_URLis also supplied, only its port is
overridden.
Changed
pfc_execute_tasknow submits over the bridge'sexecute_taskmessage
(renamed frompfc_taskso the shared bridge protocol is product-neutral;
the bridge keepspfc_taskas 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_statuspagination tototal_lines+line_range,
replacing the heavier pagination object. Output windows are still selected
withskip_newest/limit/filter_text. - Bumped
itasca-mcp-bridgeto0.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 hardPySide2import previously froze the GUI on startup, and the
execute_taskprotocol rename.
v0.4.4
Fixed
- Bumped
itasca-mcp-bridgeto0.1.3(submodule pin25668d7), 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 taskos.chdir()).
Task-log resolution:pfc_check_task_statusno longer returns(no output)
for a task that calledos.chdir()— the task log andtasks.jsonare now
read from a bridge root frozen at startup rather than the live working
directory.
Changed
- Task
elapsed_timeis now rounded to 2 decimals inpfc_check_task_status
andpfc_list_tasks(e.g.0.01instead of0.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_timeformatting.
v0.4.3
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_apino longer falsely
advertise mechanical force methods on thermal contacts. The five
*ThermalContacttypes (BallBallThermalContact,
BallFacetThermalContact,BallPebbleThermalContact,
PebblePebbleThermalContact,PebbleFacetThermalContact) are
now documented through a dedicatedThermalContactinterface that
exposes contact state, geometry, grouping, model/property, and
orientation methods — withoutforce_normal/force_shear.
Verified against the live PFC 9 bridge: 0 cross-contamination
across all 15 contact classes. Closes #10.VertexFacetContactis now correctly tagged as PFC 9.0-only via
per-typeavailability.versions, so 6.0 / 7.0 queries no longer
suggest it exists on those versions.
Added
- Mechanical
Contactinterface 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
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_apinow 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.versionscovering PFC 6.0 / 7.0 / 9.0.
Changed
- Bump minimum
fastmcpto>=3.0.0. Tests now use FastMCP's public
mcp.call_tool(...)/mcp.list_tools()API. pfc_browse_commandslower-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_apino longer echoes the fullfunctionsblock
insidesummarywhen browsing a module, avoiding response truncation
on large modules.
Fixed
- Corrected
availability.versionson the new array docs:
rotation/set_rotation/fill_rotationentries were removed
(they don't exist in any PFC version), andeuler/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
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 tobridge.log, not the
PFC IPython console. The status banner shows URL + log path and stops.
Ships when pfc-mcp's pin moves pastitasca-mcp-bridgebc68380. addon.pydrops the interactive upgrade prompt. PFC'spythonfile
host has no usable stdin, so theinput()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 = Trueconstant replaces it: the bootstrap now installs
or upgrades to the latestitasca-mcp-bridgeon every start with zero
interaction. Flip toFalseto pin the locally installed version.
Fixed
addon.pyno longer hard-codes pip's entry point topip.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
AttributeErrorinstead of installing the bridge. The bootstrap now
probespip._internal.cli.main,pip._internal, andpip.mainin
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 manualpip installfallback, instead of surfacing only a
bareexit code 2that hid the underlying cause.
Documentation
pfc_execute_codeandpfc_execute_taskdocstrings now warn agents
offitasca.command("program call '<file>.p?dat'"). PFC's
command-script interpreter blocks the entire bridge for the script's
duration — even bridge-internal calls likepfc_list_taskstime out,
and recovery requires the user to manually stop PFC. If a user asks
to run a.dat/.p3dat/.p2datfile, agents are instructed to
read the file and translate each command into aitasca.command(...)
call in Python instead, which preserves cycle-gap interleaving and
keeps every command inspectable. Lots of existing PFC workflows are
.p?datscripts, 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
fallbackaddon.pyalready 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
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.pynow installsitasca-mcp-bridge(PyPI) instead of
pfc-mcp-bridge. End users get the multi-lineit.command()deadlock fix
(recognized aliases likeimport itasca as it) automatically — the
splitter inpfc-mcp-bridgeonly matched the literalitasca.command(...)
form and silently skipped any aliased call, letting one C batch hold the
GIL while IPython's ZMQIOStream backed up. Re-downloadaddon.pyfrom 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-bridgePyPI package is frozen at0.3.3(final release). It
emits aDeprecationWarningat import and prints a migration banner from
start(). Users still on the oldaddon.pythat 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
separateitasca-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(orgit submodule update --init --recursive); end users runningaddon.pydo not need the submodule. .github/workflows/publish-bridge.yml— bridge releases now happen from
the bridge's own repo.tests/test_command_splitter.pyandtests/test_command_log.py— they
reached into the embedded bridge source viasys.pathand 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
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
DeprecationWarningat 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-bridgeand download the newaddon.pyfrom the
pfc-mcprepo.
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.