MCP Hub
Back to servers

ACM MCP Server

An MCP server that automates Aspen Custom Modeler (ACM) via COM, enabling steady-state and dynamic simulations and variable manipulation. It allows users to programmatically manage ACM sessions and interact with .acmf files through standardized tools.

glama
Updated
Apr 2, 2026

ACM MCP Server

An MCP (Model Context Protocol) server that automates Aspen Custom Modeler (ACM) via COM. Designed for use with Claude Code to open .acmf files, run simulations, and read/write variable values programmatically.

Features

  • 15 MCP tools for full ACM automation: session management, steady-state and dynamic simulation, variable access, and task control
  • Session-based — manage multiple ACM instances
  • COM automation via comtypes (not win32com, which has known VARIANT issues with ACM)
  • Comprehensive docs — includes condensed ACM V15 Help (2,227 pages distilled to 10 markdown files)

Requirements

  • Windows (COM automation is Windows-only)
  • Python 3.10+
  • Aspen Custom Modeler V15 installed
  • Claude Code (or any MCP-compatible client)

Installation

pip install "mcp[cli]>=1.0.0" "comtypes>=1.4.0"

Setup with Claude Code

Add this to your project's .mcp.json:

{
  "mcpServers": {
    "acm": {
      "command": "python",
      "args": ["<path-to>/acm-mcp/server.py"]
    }
  }
}

Restart Claude Code after first setup to pick up the server.

Tools

Session Tools

ToolDescription
open_acmOpen an .acmf file and create a session
connect_acmConnect to an already-running ACM instance
close_acmClose a session and quit ACM
list_acm_sessionsList all active sessions

Simulation Tools

ToolDescription
run_steady_stateRun steady-state simulation
run_dynamicRun dynamic simulation to a specified end time
get_simulation_statusGet current status, DOF, convergence info
reset_simulationReset to initial conditions

Variable Tools

ToolDescription
get_variableGet a variable by dot-notation path (e.g. B1.Tank.h)
set_variableSet a variable's value
get_variables_bulkGet multiple variables at once
find_variablesFind variables matching a wildcard pattern

Task Tools

ToolDescription
create_taskCreate a task on the flowsheet
activate_taskActivate a task for dynamic simulation
deactivate_taskDeactivate a task

Quick Start

1. open_acm("path/to/model.acmf")
2. run_steady_state("model")
3. get_variable("model", "B1.Tank.h")  →  "B1.Tank.h = 40.0 [cm] (Free)"

Dynamic step change procedure

To observe transient dynamics after a step change:

  1. run_steady_state at initial conditions
  2. run_dynamic to a small time (e.g. 0.001) — locks state variables at old SS
  3. set_variable to apply the step change
  4. run_dynamic to successive times, reading variables at each point

Important: Do NOT set_variable before the first run_dynamic — ACM re-initializes state variables at the new conditions, producing an instant jump to new SS with no visible transient.

Documentation

Detailed documentation is in docs/:

  • overview.md — Architecture and design decisions
  • tools.md — Full tool reference with parameters and examples
  • com-api.md — ACM COM API notes and gotchas
  • Error_Logbook.txt — Known ACM errors and fixes
  • acm_help/ — Condensed ACM V15 Help system (10 files covering modeling language, solver options, library reference, examples, etc.)

Architecture

server.py              # FastMCP entry point, 15 tool registrations
acm_manager.py         # COM lifecycle: subprocess launch, GetActiveObject, sessions
tools/
  session_tools.py     # open, connect, close, list
  simulation_tools.py  # run steady/dynamic, status, reset
  variable_tools.py    # get, set, bulk get, find
  task_tools.py        # create, activate, deactivate
docs/                  # Documentation and ACM Help reference

License

MIT

Reviews

No reviews yet

Sign in to write a review