Skip to main content

mock-gkn-hpc

DOI

A public MCP mock of GKN's internal HPC server for Ansys / Finite Element analysis. It lets external clients exercise the full submit → poll → fetch-artifacts loop against a fake HPC — no real solver, queue, or cluster behind it.

This is a sample MCP server developed alongside the DUCTILE agentic orchestration paper. See the DUCTILE repository or the paper (DOI: TBD) for context.

Install and run

uvx mock-gkn-hpc

Or wire it into your MCP client config:

{
  "mcpServers": {
    "mock-gkn-hpc": {
      "command": "uvx",
      "args": ["mock-gkn-hpc"]
    }
  }
}

Job artifacts default to a system tempdir (gettempdir()/mock-gkn-hpc). Override with --runs-dir /custom/path or the MOCK_GKN_HPC_RUNS_DIR env var.

Tool surface

submit_ansys_run mirrors GKN's qansys wrapper:

Param qansys flag Default Notes
input_file -i (required) Path to .ans / .cdb
version wrapper version "2025r1" Picks the qansysX release
job_name -j input filename stem Descriptive only — storage uses a UUID
output_file -o auto Recorded but not enacted by the mock
np --np 4 Cosmetic; doesn't scale runtime
product -p "ansys" One of "ansys", "meba", "mechs"
start_time -a None MMDDhhmm; recorded but doesn't delay
high_prio --highprio False Cosmetic

All parameters round-trip through meta.json, the log banner, and the rendered results.rst.

Other tools and resources:

Name What it does
job_status(job_id, wait_s=0) Status of one job (pending/ready/failed/expired); with wait_s, waits up to that many seconds (max 120) for a pending job to finish
get_job_log(job_id), get_job_results(job_id) The log so far and, once ready, the results file (for clients that cannot read MCP resources)
list_jobs() Every job with its status and age
delete_results(job_id) Deletes one job's log, results and metadata
ansys://{job_id}/log, /results, /meta The job's log (as written so far), results file and meta.json

The log is built from the job: the requested version and product, every file the deck reads, and one LOAD STEP line per SOLVE the deck executes, with its load file.

Jobs are stateless: a job's status, log and results follow from its submit time (pending for ~30 s, then ready, expired 1 h later), so they need no running process and survive a server restart (e.g. when a client session ends and a new one starts).

Input pre-flight check (v0.6.1)

A real solve stops at the first /INPUT or CDREAD whose file it cannot read. The mock has no solver, so submit_ansys_run walks the runscript at submission (parameters, arrays, *DO loops, macros and %...% substitution) and checks every file the deck would read. A job sees:

  • its staged directory, the input file's folder (relative paths resolve against it; an absolute path to the submitting machine is not visible to the job, even inside that folder), and
  • the cluster's shared /project storage, described by src/mock_gkn_hpc/cluster_files.txt (override with the MOCK_GKN_HPC_CLUSTER_FILES env var, one absolute path per line).

If any file is missing, the job is recorded as failed (its log holds the error) and the tool returns status: "failed" with Ansys-style messages (a normal result, not an MCP error), e.g.

Job e816a8ac (runscript) failed during input processing: 6 file(s) read by the deck do not exist.
 *** ERROR ***
 /INPUT failed (runscript line 139). File /project/.../01_inputs/loads/limit_load_2.inp does not exist.

so an agent sees the failure in its context and can fix the deck and resubmit. A successful submission reports input_files_checked (and notes, e.g. a character value cut to 32 characters).

The walker follows APDL's parameter rules:

  • array parameters must be dimensioned with *DIM before values are assigned, unless an implied (colon) loop defines them (a(1:3)=1,2,3);
  • CHAR array elements hold 8 characters and scalar character parameters 32;
  • in a STRING array the first subscript is the character position and the next ones select the string: name(1,j) is the j-th string. Writing name(2)='x' into a one-column STRING array therefore writes from character 2 of the same string.

It also handles *SET, NINT, INT, ABS, CHRVAL and STRCAT. A /INPUT or CDREAD whose file name cannot be resolved with this subset is reported as a deck error, not skipped.

Each client can keep its own job store with --runs-dir (useful when several agents run in parallel and should not see each other's jobs in list_jobs).

Metadata

Release files for mock-gkn-hpc 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mock-gkn-hpc 0.6.1
File Size Uploaded Provenance
mock_gkn_hpc-0.6.1.tar.gz 57.3 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mock-gkn-hpc 0.6.1
File Interpreter ABI Platform
mock_gkn_hpc-0.6.1-py3-none-any.whl Python 3 none any Details

Total release size: 74.8 kB

Release files / mock_gkn_hpc-0.6.1.tar.gz

Download URL mock_gkn_hpc-0.6.1.tar.gz
Size 57.3 kB
Tags Source
SHA-256 checksum
How to use checksums
26dc7f992821355091be9cb493c1e01c880e0eeef4ef4818b44bb784aacc3bc7
BLAKE2b-256 checksum
How to use checksums
740ed850965a54aa840c51b533d4837057bc29640e13b2ea99aff33f21437ba1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / mock_gkn_hpc-0.6.1-py3-none-any.whl

Download URL mock_gkn_hpc-0.6.1-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef508ccc2246dc725be5350356654649dccf4e7dc4adfa82ed5795faa6606b67
BLAKE2b-256 checksum
How to use checksums
23dfc87c1fe48e7a0e72126409d4c7ed9f534ec30b7351b8f9bac3c9ab8b306a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Security for mock-gkn-hpc 0.6.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for mock_gkn_hpc-0.6.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page