Skip to content

MDEngine

by forcefieldsilicon.com · remote · local (mcpb) · no sign-in to list tools · v0.7.1 · published by com.forcefieldsilicon

MD workbench for agents: 13 analysis tools, renders, hosted GPU runs; LAMMPS + OpenMM.

Deletes · 2Changes · 9

14 tools: 2 can delete or cancel things, 9 change things and 3 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http mdengine https://api.forcefieldsilicon.com/mcp --header 'Authorization: <your-authorization>'

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

14 tools

Deletes or cancels 2Claude Code: deny
  • cancel_jobCancel a job that is not finished.No findings

    Why it is in this group

    • The name "cancel_job" says "cancel": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Cancel a job that is not finished. A running job is billed up to the cancel time; its pod is terminated.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
    • title: Cancel job
  • delete_resultsFor a finished job: delete its deck and results tarballs immediately instead of at the automatic 30-day purge.No findings

    Why it is in this group

    • The name "delete_results" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    For a finished job: delete its deck and results tarballs immediately instead of at the automatic 30-day purge. Metadata and billing records are kept; results can no longer be downloaded.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
    • title: Delete a job's files now
Changes things 9Claude Code: ask
  • accountBalance in USD (`balance_usd`), the part of it held by your unfinished jobs (`reserved_usd`, `held_jobs`) and what a new submit can use (`available_usd` = balance - reserved; a sub…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Balance in USD (`balance_usd`), the part of it held by your unfinished jobs (`reserved_usd`, `held_jobs`) and what a new submit can use (`available_usd` = balance - reserved; a submit needs wall_limit_s x rate of it), how jobs are priced (`pricing.mode` job = the deck's own work in atom-steps at per-class prices, capped at wall_limit_s x rate; metered = per second of pod time), the rate table, the key id of the API key in use, and `packs` (when the endpoint sells credit): [{id, name, usd, gpu_h, url}] to top up THIS key by appending ?client_reference_id=<key_id> to the pack url.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Account balance and pricing
  • campaign_requestNo key needed.No findings

    Why it is in this group

    • The name "campaign_request" says "request": a word for a change.
    Description, as the server wrote it
    No key needed. Sends a study request to a person and returns a request_id, the tier that fits, the price band, what we still need from you, the next step and the claim scope. Nothing is run or charged. Call it after reading a guide.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • title: Start a study: request a quoted campaign
  • capabilitiesCapability manifest of the hosted runners: LAMMPS version, installed packages, and every style by category with gpu=true (KOKKOS-accelerated) or gpu=false (exists, but runs on the …No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Capability manifest of the hosted runners: LAMMPS version, installed packages, and every style by category with gpu=true (KOKKOS-accelerated) or gpu=false (exists, but runs on the pod's CPU cores at the GPU rate). Default = compact summary; runner=lammps&full=true returns the whole style table. Use preflight_deck to check a specific deck.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: What the runner can do
  • create_jobStep 1 of the two-step path for big decks: validates the spec, reserves a job id, returns a presigned upload_url.No findings

    Why it is in this group

    • The name "create_job" says "create": a word for a change.
    Description, as the server wrote it
    Step 1 of the two-step path for big decks: validates the spec, reserves a job id, returns a presigned upload_url. PUT the deck as a .tar.gz (<= 2 GB, relative paths, input at `input`) to upload_url, then call start_job.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • title: Create a job (returns upload URL)
  • guideNo key needed.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    No key needed. Without customer_type: the list of guides (one line each), the start page and how to get a key. With customer_type (mineral-processing | dark-proteins): the full guide, which says what to supply, what runs, what comes back and what it costs. With template (openmm-stability): the script text of that template, ready to save and submit.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Start here: guides by customer type
  • job_resultsFor a done/failed job: a presigned download_url (valid ~7 days) for the results tarball (work/, log.lammps, exitcode).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    For a done/failed job: a presigned download_url (valid ~7 days) for the results tarball (work/, log.lammps, exitcode). Results are deleted 30 days after the run.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Results download URL
  • preflight_deckDry run of the check submit_job performs: which styles the deck asks for are MISSING on every hosted LAMMPS image (the run would exit at startup), which are CPU-only, whether its p…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Dry run of the check submit_job performs: which styles the deck asks for are MISSING on every hosted LAMMPS image (the run would exit at startup), which are CPU-only, whether its pair style will use the GPU at all, and which image (`runner`) the job will be routed to — decks needing packages beyond the fast default image run on lammps-full automatically. Nothing is created or billed.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Check a deck before spending
  • start_jobStep 2: queue a job whose deck tarball has been uploaded.No findings

    Why it is in this group

    • The name "start_job" says "start": a word for a change.
    Description, as the server wrote it
    Step 2: queue a job whose deck tarball has been uploaded. A GPU pod is launched; billing starts when it reports running.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • title: Start an uploaded job
  • submit_jobOne call: create a hosted GPU job, upload the deck given INLINE as {relative_path: text}, and queue it.No findings

    Why it is in this group

    • The name "submit_job" says "submit": a word for a change.
    Description, as the server wrote it
    One call: create a hosted GPU job, upload the deck given INLINE as {relative_path: text}, and queue it. Total inline size <= 8 MB; for larger decks use create_job, PUT the tarball to upload_url, then start_job. Billing starts at the first heartbeat (state running) and stops at done/failed/cancelled. The deck is executed as a program on an isolated GPU pod.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • title: Submit a deck (inline files) and start it
Only reads 3Claude Code: allow
  • job_logThe last <= 20 thermo/log lines the running pod reported (30 s heartbeat).No findings

    Why it is in this group

    • The name "job_log" says "log": a word for reading.
    Description, as the server wrote it
    The last <= 20 thermo/log lines the running pod reported (30 s heartbeat). Full log.lammps is in the results tarball.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Job log tail
  • job_statusState (created|uploaded|queued|launching|running|uploading|done|failed|cancelled), GPU, rate, billed seconds, cost so far, exit code, error, last thermo lines, and the post-run ver…No findings

    Why it is in this group

    • The name "job_status" says "status": a word for reading.
    Description, as the server wrote it
    State (created|uploaded|queued|launching|running|uploading|done|failed|cancelled), GPU, rate, billed seconds, cost so far, exit code, error, last thermo lines, and the post-run verdict: clean | warnings (a done run whose log shows QEq CG failures, lost atoms, a fix halt, or no end_marker line; counts in `warnings`).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Job status
  • list_jobsJobs of this API key, newest first.No findings

    Why it is in this group

    • The name "list_jobs" says "list": a word for reading.
    Description, as the server wrote it
    Jobs of this API key, newest first. Compact rows (id, state, label, created, finished, gpu, cost_usd, error) unless full=true.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: List jobs

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.7.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http mdengine https://api.forcefieldsilicon.com/mcp --header 'Authorization: <your-authorization>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__mdengine__job_status",
      "mcp__mdengine__job_log",
      "mcp__mdengine__list_jobs"
    ],
    "ask": [
      "mcp__mdengine__guide",
      "mcp__mdengine__campaign_request",
      "mcp__mdengine__account",
      "mcp__mdengine__submit_job",
      "mcp__mdengine__create_job",
      "mcp__mdengine__start_job",
      "mcp__mdengine__job_results",
      "mcp__mdengine__capabilities",
      "mcp__mdengine__preflight_deck"
    ],
    "deny": [
      "mcp__mdengine__delete_results",
      "mcp__mdengine__cancel_job"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as mdengine. Review it before you use it.