xyz.pflow.sim/whatif

MCPcommunitylive
v1.0.0xyz.pflow.simUnknownUpdated 1mo ago

Conversational what-if simulation: build, diagnose and compare Petri-net models; CC0 catalog.

Endpoint healthlive
checked 9 days ago · 643ms
100% of the last 5 checks reached this endpoint
Works in
ClaudeCursorCopilotChatGPTGemini

Inferred from the transports this listing declares (streamable-http). A client not listed here hasn’t been ruled out — it just isn’t something Forge can confirm.

Automatically indexed from public sources. Not yet verified by the developer on Forge.Claim this listing →
1mo agoLast update
Package
Authorxyz.pflow.sim
LicenseUnknown
Version1.0.0
Sourcemcp-registry
Trust Status
B
60/100Good
✓Listed in Forge index+10/10
—Publisher identity verified+0/30
→ Publisher: this listing has no repository on file, so `forge publish` cannot verify ownership automatically. Use "Claim this listing" above — Forge reviews these by hand.
—Domain verification+0/10
→ Not currently available for this listing type — the domain-verification check only runs for npm-backed packages today, so this row cannot be earned here yet regardless of what's hosted at the domain.
✓Prompt-injection scan · clean+30/30
✓Obfuscation / exfil scan · clean+20/20
StatusCommunity-indexed
PublisherUnverified
SignatureUnsigned
Domain—
Provenance—
DependenciesNot audited
Tool surface46 tools · 1 privileged
Security scan✓ Cleanvlive · 9d agoHow well does this scan work?
PROMPTtool:sim_propose_typesImperative addressed to the AI model
EvalsNone
IndexedAug 14, 2026

Verification confirms publisher identity (repo ownership), not code safety. The security scan covers known CVEs and suspicious install scripts.

Tools

46 tools · 1 privileged
Observed live from the vendor's endpoint9d ago

Read from a real MCP initialize → tools/list handshake against the declared endpoint. No tool was ever invoked — tools/list is the read-only introspection call the protocol defines for this. It reflects what the server advertised at that moment; a hosted endpoint is not pinned to any version and can change without notice.

  • https://sim.pflow.xyz/mcp46 tools · 643ms
sim_bindRecord an intended connection between two stored models' declared ports — fromModel's fromPort feeding toModel's toPort — as a new content-addressed Binding, alongside sim_link's Relation graph rather than inside either model (ROADMAP.md Phase 9). This does not run anything, does not validate that…

Record an intended connection between two stored models' declared ports — fromModel's fromPort feeding toModel's toPort — as a new content-addressed Binding, alongside sim_link's Relation graph rather than inside either model (ROADMAP.md Phase 9). This does not run anything, does not validate that…

ParameterTypeDescription
fromModel*stringid of the model supplying the connection's output
fromPort*stringelement id of the declared output port on fromModel (see GET /api/models/{id}/ports)
toModel*stringid of the model receiving the connection
toPort*stringelement id of the declared input port on toModel
transformstringfree-text account of how fromPort's value becomes toPort's — a unit scale, a resample window, an aggregation. Not yet interpreted by anything; recorded for who…
sim_calibrateCalibrate a model against YOUR event log — the reading that meets reality. Upload CSV (case_id, activity, timestamp; the shape sim_dataset emits, activities = transition ids), and rates are learned from the observed timings: sources from inter-arrival times, services from the gap before their compl…

Calibrate a model against YOUR event log — the reading that meets reality. Upload CSV (case_id, activity, timestamp; the shape sim_dataset emits, activities = transition ids), and rates are learned from the observed timings: sources from inter-arrival times, services from the gap before their compl…

ParameterTypeDescription
id*stringmodel id to calibrate
log*stringthe event log, as CSV text
sim_canonicalTell whether two differently-labelled models are actually the same net: an isomorphism-invariant id computed from the model's EXACT automorphism orbits (orbits.go), not the colour-refinement (WL) kind sim_classify falls back to when the exact search can't decide. Two models differing only by renami…

Tell whether two differently-labelled models are actually the same net: an isomorphism-invariant id computed from the model's EXACT automorphism orbits (orbits.go), not the colour-refinement (WL) kind sim_classify falls back to when the exact search can't decide. Two models differing only by renami…

ParameterTypeDescription
id*stringmodel id
sim_classifyDiscover the parameter classes of a stored model and return them as JSON-LD with empty annotation slots for you to fill in (label, comment, unit, domain, substitutes — nothing else; membership/kind/evidence are derived and settled by measurement, not yours to edit). With verify=true a shared colour…

Discover the parameter classes of a stored model and return them as JSON-LD with empty annotation slots for you to fill in (label, comment, unit, domain, substitutes — nothing else; membership/kind/evidence are derived and settled by measurement, not yours to edit). With verify=true a shared colour…

ParameterTypeDescription
id*stringmodel id
inline_contextbooleanembed the full JSON-LD @context map in the result instead of the URL it is served from (https://sim.pflow.xyz/ns/v1/context). Default false: the URL resolves t…
verifybooleanrun the permutation experiment (costs simulation; default false, and classes then say they are candidates)
sim_code_to_flowDerive a Petri-net model from source code with the configured LLM (control flow, state machine, resources or concurrency focus), validate it, and store it as a NEW model you own. The same generator the /api/code-to-flow endpoint uses; refused when this deployment has no LLM provider configured. Ret…

Derive a Petri-net model from source code with the configured LLM (control flow, state machine, resources or concurrency focus), validate it, and store it as a NEW model you own. The same generator the /api/code-to-flow endpoint uses; refused when this deployment has no LLM provider configured. Ret…

ParameterTypeDescription
code*stringsource code to analyse
focusstringcontrol-flow (default), state-machine, resources or concurrency
languagestringsource language hint, e.g. go, python, javascript
namestringname for the derived model
sim_compareRun several scenarios against one model on one shared seed and return them side by side — the seed sharing is server-enforced, so differences are the scenarios, not the dice. Returns a summary by default (finals, throughput/mean/P95 metrics, contention, depletion — no time series); pass full=true f…

Run several scenarios against one model on one shared seed and return them side by side — the seed sharing is server-enforced, so differences are the scenarios, not the dice. Returns a summary by default (finals, throughput/mean/P95 metrics, contention, depletion — no time series); pass full=true f…

ParameterTypeDescription
fullbooleaninclude the sample-grid time series in every result (large; default false); a scenario with its own "summary": true is left summarized regardless
id*stringmodel id
scenarios*stringJSON array of scenarios, each with a name, e.g. [{"name":"today","hours":8},{"name":"one more","hours":8,"marking":{"staff":3}},{"name":"bigger batches","hours…
sim_componentsList the component registry: pre-baked subnet templates (arrivals, service, hazard, inventory, decision, mailbox, datastore) with the calibration discipline baked into the arcs and rates. Each entry names its ports (places you can attach onto existing places), its params with recommended defaults,…

List the component registry: pre-baked subnet templates (arrivals, service, hazard, inventory, decision, mailbox, datastore) with the calibration discipline baked into the arcs and rates. Each entry names its ports (places you can attach onto existing places), its params with recommended defaults,…

No input schema was published for this tool.

sim_composeInstantiate a registry component into a model and store the result as a NEW content-addressed model you own (lineage recorded when composing onto an existing id). Omit id to start a model from the component alone; pass attach to fuse a component port onto one of the model's existing places (e.g. at…

Instantiate a registry component into a model and store the result as a NEW content-addressed model you own (lineage recorded when composing onto an existing id). Omit id to start a model from the component alone; pass attach to fuse a component port onto one of the model's existing places (e.g. at…

ParameterTypeDescription
attachstringJSON object mapping port name -> existing place id
component*stringregistry component name (see sim_components)
idstringmodel to compose onto; omit to start fresh
namestringmodel name for the stored result (kept from the base when composing onto an id)
paramsstringJSON object overriding param defaults, e.g. {"staff": 3}
prefixstringinstance prefix for created elements (default: component name)
sim_conformanceCheck how well a stored model matches an observed event log WITHOUT rewriting its rates — the read sim_calibrate bundles into calibration, offered on its own and in full: fitness (can the model replay each case?), precision (does it allow behaviour never observed?), generalization and simplicity, w…

Check how well a stored model matches an observed event log WITHOUT rewriting its rates — the read sim_calibrate bundles into calibration, offered on its own and in full: fitness (can the model replay each case?), precision (does it allow behaviour never observed?), generalization and simplicity, w…

ParameterTypeDescription
id*stringmodel id
log*stringthe event log, as CSV text
sim_create_collectionMint a named Collection and return its content id. A collection carries no member list of its own — a mutable list would change the collection's own id every time something joined it, the same reason Lineage lives beside a model rather than inside it. Add members with sim_link(collectionID, "hasMem…

Mint a named Collection and return its content id. A collection carries no member list of its own — a mutable list would change the collection's own id every time something joined it, the same reason Lineage lives beside a model rather than inside it. Add members with sim_link(collectionID, "hasMem…

ParameterTypeDescription
name*stringcollection name
sim_create_modelStore a Petri-net model (JSON with name/places/transitions/arcs) and return its content id. Models are immutable; a changed model is a new id. Structural validation rejects malformed nets with every reason at once. The model is yours: it appears only in your own listing until you dedicate it to th…

Store a Petri-net model (JSON with name/places/transitions/arcs) and return its content id. Models are immutable; a changed model is a new id. Structural validation rejects malformed nets with every reason at once. The model is yours: it appears only in your own listing until you dedicate it to th…

ParameterTypeDescription
model*stringthe model JSON
sim_crosscheckRun every applicable READING of a model against the others and report agreement or divergence with the reason: discrete SSA means vs the continuous mean-field solve, algebraically derived conservation laws vs simulated means, and (for game-schema models) the closed-form incidence ranking vs rollout…

Run every applicable READING of a model against the others and report agreement or divergence with the reason: discrete SSA means vs the continuous mean-field solve, algebraically derived conservation laws vs simulated means, and (for game-schema models) the closed-form incidence ranking vs rollout…

ParameterTypeDescription
hoursnumberhorizon (default 8)
id*stringmodel id
realizationsnumberSSA runs averaged, max 200 (default 24)
sim_datasetGenerate a synthetic event log from a stored model (seeded SSA playout; case-per-arrival). Returns CSV. Deterministic: same id, same seed, same bytes.

Generate a synthetic event log from a stored model (seeded SSA playout; case-per-arrival). Returns CSV. Deterministic: same id, same seed, same bytes.

ParameterTypeDescription
casesnumbercases to generate (default 200, max 2000 over MCP)
id*stringmodel id
seednumberPRNG seed (default 1)
sim_delete_modelprivilegedDelete a model you created. Refused for the curated catalog, for models you do not own, and for models already dedicated to the commons (a dedication is irrevocable).

Delete a model you created. Refused for the curated catalog, for models you do not own, and for models already dedicated to the commons (a dedication is irrevocable).

ParameterTypeDescription
id*stringmodel id to delete
sim_diagnoseTest a stored model without writing a fitness test for it. Reports generic gates (mass balance, dormant sources, whether staffing has a knee, whether any knob binds), every derived control ranked by MEASURED influence on the outcome (pool/source/patience/parameter knobs, rate-knob influence is sign…

Test a stored model without writing a fitness test for it. Reports generic gates (mass balance, dormant sources, whether staffing has a knee, whether any knob binds), every derived control ranked by MEASURED influence on the outcome (pool/source/patience/parameter knobs, rate-knob influence is sign…

ParameterTypeDescription
hoursnumberhorizon per run (default 8)
id*stringmodel id
inline_contextbooleanembed the full JSON-LD @context map in the result instead of the URL it is served from (https://sim.pflow.xyz/ns/v1/context). Default false: the URL resolves t…
maxRealizationsnumberbounds how far the adaptive default may escalate (default 200, the same ceiling an explicit realizations refuses above). Ignored once realizations is set. For…
realizationsnumberruns averaged per measurement, max 200. Leave unset and the default ADAPTS: a 24-realization pilot that doubles while the baseline outcome sits inside its own…
seednumberseed shared by every run, so differences measure the knob and not the dice (default 7)
sim_diffStructural difference between two stored models: places, transitions and arcs added or removed, and surviving elements whose numbers changed (initial, capacity, rate, stages, arc weight or kind). The readout for what a builder turn, a sim_extend or a sim_refine actually changed between two ids in a…

Structural difference between two stored models: places, transitions and arcs added or removed, and surviving elements whose numbers changed (initial, capacity, rate, stages, arc weight or kind). The readout for what a builder turn, a sim_extend or a sim_refine actually changed between two ids in a…

ParameterTypeDescription
a*stringmodel id (before)
b*stringmodel id (after)
sim_distillDistill exact search into the play scorer: fit rate multipliers for named transition groups so play's rankings agree with exact minimax, on positions sampled by random self-play and labeled by search. This is TACTICAL calibration — the counterpart of sim_calibrate, which learns rates from an event…

Distill exact search into the play scorer: fit rate multipliers for named transition groups so play's rankings agree with exact minimax, on positions sampled by random self-play and labeled by search. This is TACTICAL calibration — the counterpart of sim_calibrate, which learns rates from an event…

ParameterTypeDescription
groups*stringJSON object: group name -> transition ids sharing one fitted multiplier, e.g. {"detectors":["x_win_0","o_win_0"],"draw":["call_draw"]}
id*stringmodel id (needs simulation.objective, players with turnPlace)
optionsstringJSON: {"games":20,"positions":40,"iters":40,"horizon":3,"realizations":40,"seed":11,"engine":""}
sim_edgesList every relation touching an entity, as either subject or object — the two-directional view datum_edges gives. A filtered scan over every stored relation rather than a maintained index: this is a simulation sandbox's model graph, not a large corpus, so scanning on each call is the honest tradeof…

List every relation touching an entity, as either subject or object — the two-directional view datum_edges gives. A filtered scan over every stored relation rather than a maintained index: this is a simulation sandbox's model graph, not a large corpus, so scanning on each call is the honest tradeof…

ParameterTypeDescription
id*stringentity id to look up
sim_evaluateScore a player's legal next moves by NEXT-MOVE ELIMINATION (the tic-tac-toe blog technique): compute the expected objective from the given marking with all moves available, then once per candidate with that move's rate zeroed — the move whose elimination loses the most is the best move. Needs the g…

Score a player's legal next moves by NEXT-MOVE ELIMINATION (the tic-tac-toe blog technique): compute the expected objective from the given marking with all moves available, then once per candidate with that move's rate zeroed — the move whose elimination loses the most is the best move. Needs the g…

ParameterTypeDescription
horizonnumbermodel time to explore ahead (default 3)
id*stringmodel id
markingstringJSON object, sparse marking override (the position to evaluate from); default = the initial marking
player*stringplayer name from simulation.players
realizationsnumberSSA rollouts per elimination (default 40)
sim_extendApply structural edits to a stored model and store the result as a NEW model you own, with lineage back to the original — the same vocabulary the guided builder uses behind its interview, now callable directly. Operations (JSON array, each with "op"): add_place {id, initial}, add_transition {id, gu…

Apply structural edits to a stored model and store the result as a NEW model you own, with lineage back to the original — the same vocabulary the guided builder uses behind its interview, now callable directly. Operations (JSON array, each with "op"): add_place {id, initial}, add_transition {id, gu…

ParameterTypeDescription
id*stringmodel id to edit
namestringoptional name for the edited model
operations*stringJSON array of operations
sim_get_bindingFetch a stored Binding (see sim_bind) by id: which model/port feeds which, and any recorded transform.

Fetch a stored Binding (see sim_bind) by id: which model/port feeds which, and any recorded transform.

ParameterTypeDescription
id*stringbinding id
sim_get_modelFetch a stored model's full Petri-net JSON by id.

Fetch a stored model's full Petri-net JSON by id.

ParameterTypeDescription
id*stringmodel id (content hash)
sim_invariantsDerive a model's full algebraic invariant structure: conservation laws (Farkas P-invariants — weighted place sums every run preserves, the arithmetic a trust panel should show), firing cycles (T-invariants, named per-cycle with a readable detail sentence, each tagged StructuralProof), and the sipho…

Derive a model's full algebraic invariant structure: conservation laws (Farkas P-invariants — weighted place sums every run preserves, the arithmetic a trust panel should show), firing cycles (T-invariants, named per-cycle with a readable detail sentence, each tagged StructuralProof), and the sipho…

ParameterTypeDescription
id*stringmodel id
sim_license_modelDedicate a model you created to the commons under CC0-1.0, CC-BY-4.0, CC-BY-SA-4.0. It then appears in every user's listing with the license shown, and the dedication is IRREVOCABLE — it cannot be changed or deleted afterwards, which is what makes it safe for others to build on. CC0-1.0 is the clea…

Dedicate a model you created to the commons under CC0-1.0, CC-BY-4.0, CC-BY-SA-4.0. It then appears in every user's listing with the license shown, and the dedication is IRREVOCABLE — it cannot be changed or deleted afterwards, which is what makes it safe for others to build on. CC0-1.0 is the clea…

ParameterTypeDescription
id*stringmodel id to dedicate
license*stringone of CC0-1.0, CC-BY-4.0, CC-BY-SA-4.0
sim_linkRecord a typed edge between any two stored entities — models, prompts, artifacts, maps, collections, or anything else addressed by a content id — with no fixed predicate vocabulary: the caller's choice, the same as datum_link ("hasMember", "cites", "supersedes", whatever the relationship actually i…

Record a typed edge between any two stored entities — models, prompts, artifacts, maps, collections, or anything else addressed by a content id — with no fixed predicate vocabulary: the caller's choice, the same as datum_link ("hasMember", "cites", "supersedes", whatever the relationship actually i…

ParameterTypeDescription
object*stringid of the entity the relation points to
predicate*stringthe relationship, e.g. hasMember, cites, supersedes — no fixed vocabulary
subject*stringid of the entity the relation starts from
sim_list_bindingsList the content id of every stored Binding.

List the content id of every stored Binding.

No input schema was published for this tool.

sim_list_modelsList the models visible to you: the curated catalog, models dedicated to the commons (their entry carries the license), and your own (marked mine). Other users' undedicated models are not listed, but any model id works with every sim_* tool — an id someone shares with you is the model.

List the models visible to you: the curated catalog, models dedicated to the commons (their entry carries the license), and your own (marked mine). Other users' undedicated models are not listed, but any model id works with every sim_* tool — an id someone shares with you is the model.

No input schema was published for this tool.

sim_map_getFetch a stored Map's key->value data by id.

Fetch a stored Map's key->value data by id.

ParameterTypeDescription
id*stringmap id
sim_map_listList the content id of every stored Map.

List the content id of every stored Map.

No input schema was published for this tool.

sim_map_putStore a key->value lookup table as its own content-addressed entity — a generated parameter sweep, a rate table, a component registry, anything shaped as key->value rather than free text (an artifact) or a Petri net (a model). Returns its content id; the same data, even with keys inserted in a diff…

Store a key->value lookup table as its own content-addressed entity — a generated parameter sweep, a rate table, a component registry, anything shaped as key->value rather than free text (an artifact) or a Petri net (a model). Returns its content id; the same data, even with keys inserted in a diff…

ParameterTypeDescription
data*stringthe table as a JSON object
sim_my_sheetsList the sheets this user has published, with their URLs.

List the sheets this user has published, with their URLs.

No input schema was published for this tool.

sim_neighborsOne-hop traversal from an entity: every object reachable via a relation where it is the subject, optionally filtered to a single predicate (omit for all of them). Pass a collection's id with predicate hasMember to list its members.

One-hop traversal from an entity: every object reachable via a relation where it is the subject, optionally filtered to a single predicate (omit for all of them). Pass a collection's id with predicate hasMember to list its members.

ParameterTypeDescription
id*stringsubject id to traverse from
predicatestringrestrict to this predicate; omit for every outgoing relation
sim_optimizeMulti-objective optimisation over transition rates for a stored model: Monte Carlo samples the rate ranges, runs each combination to the horizon with the continuous engine, and returns every sample with a Pareto flag — the non-dominated set is the trade-off frontier ('which staffing is non-dominate…

Multi-objective optimisation over transition rates for a stored model: Monte Carlo samples the rate ranges, runs each combination to the horizon with the continuous engine, and returns every sample with a Pareto flag — the non-dominated set is the trade-off frontier ('which staffing is non-dominate…

ParameterTypeDescription
hoursnumberhorizon per run (default 8)
id*stringmodel id
objectives*stringJSON array of {"place": id, "direction": "max"|"min"}
parameters*stringJSON object transition_id → [min, max] rate range, e.g. {"finish_brew": [10, 40]}
samplesnumberMonte Carlo samples (default 100, max 1000)
seednumbersampling seed (default 42)
sim_param_heatmapTwo-rate grid for a stored model: vary two transition rates over ranges, run each combination to the horizon with the continuous engine, and return the observable's final value as a grid — 'which regime of arrivals × restock keeps the queue empty'. Continuous reading: a model with a schedule or a g…

Two-rate grid for a stored model: vary two transition rates over ranges, run each combination to the horizon with the continuous engine, and return the observable's final value as a grid — 'which regime of arrivals × restock keeps the queue empty'. Continuous reading: a model with a schedule or a g…

ParameterTypeDescription
hoursnumberhorizon per run (default 8)
id*stringmodel id
log_scalebooleanspace the grid in log10 (default false)
observable*stringplace id whose final value fills the grid
param_x*stringfirst transition id
param_y*stringsecond transition id
range_x*stringJSON [start, stop, n] for param_x
range_y*stringJSON [start, stop, n] for param_y
sim_promptAsk an LLM to derive something from a stored entity: a variant model, a report, a piece of generated code — whatever the prompt asks for. The parent's JSON rides along as context, the same way the guided builder gives its interviewer the draft. The parent is looked up as a model first, then a promp…

Ask an LLM to derive something from a stored entity: a variant model, a report, a piece of generated code — whatever the prompt asks for. The parent's JSON rides along as context, the same way the guided builder gives its interviewer the draft. The parent is looked up as a model first, then a promp…

ParameterTypeDescription
parent*stringid to run the prompt against — a model, prompt, artifact, or map
systemstringoptional system-level instructions, in addition to the parent context this tool always supplies
text*stringthe natural-language instruction
sim_propose_typesPropose candidate @type values for one or more stored models, e.g. "QueueingSystem" or "ResourcePool", from each model's own Diagnosis — never from a fresh simulation this tool runs itself for the sole purpose of classifying, only from an existing measurement it reuses. Every rule is a hand-written…

Propose candidate @type values for one or more stored models, e.g. "QueueingSystem" or "ResourcePool", from each model's own Diagnosis — never from a fresh simulation this tool runs itself for the sole purpose of classifying, only from an existing measurement it reuses. Every rule is a hand-written…

NOTEImperative addressed to the AI model or "ResourcePool", from each model's own Diagnosis — never from a fresh simulation this …
ParameterTypeDescription
idsstringJSON array of model ids to consider, e.g. ["id1","id2"]. Omit to scan every model ListFor("") would list (the public catalog), truncated to limit.
limitnumbermaximum number of models to diagnose (default 10, max 25) — a cost control, since this runs a simulation per model
realizationsnumberrealizations per model's Diagnose run (default 8, max 16) — deliberately small, this only needs to name a shape, not measure precise influence
sim_publishPublish a stored model into the signed-in user's Google Sheets: the model workbook (live formulas when honest, a refusal tab when not), a server-run scenario as data tabs, and trajectory + contention charts. Returns the sheet URL. Counts against the daily quota.

Publish a stored model into the signed-in user's Google Sheets: the model workbook (live formulas when honest, a refusal tab when not), a server-run scenario as data tabs, and trajectory + contention charts. Returns the sheet URL. Counts against the daily quota.

ParameterTypeDescription
id*stringmodel id
scenariostringoptional scenario JSON to run for the data tabs
sim_publish_appPublish the generated application for a model you own — the single-file HTML a generator produced from the model's `view` prompt. Served at /app/<id> in a sandboxed opaque origin (no cookies, no session; only the CORS-open public API is reachable). START FROM THE RUNTIME, not from scratch: /lib/app…

Publish the generated application for a model you own — the single-file HTML a generator produced from the model's `view` prompt. Served at /app/<id> in a sandboxed opaque origin (no cookies, no session; only the CORS-open public API is reachable). START FROM THE RUNTIME, not from scratch: /lib/app…

ParameterTypeDescription
html*stringthe complete self-contained HTML document
id*stringmodel id the app presents
sim_publish_comparePublish a multi-scenario comparison into the signed-in user's Google Sheets — sim_compare's export, the counterpart of sim_publish for a single scenario. Runs every scenario on one shared seed (the same server-enforced sharing sim_compare uses, so differences are the scenarios and not the dice) and…

Publish a multi-scenario comparison into the signed-in user's Google Sheets — sim_compare's export, the counterpart of sim_publish for a single scenario. Runs every scenario on one shared seed (the same server-enforced sharing sim_compare uses, so differences are the scenarios and not the dice) and…

ParameterTypeDescription
id*stringmodel id
scenarios*stringJSON array of scenarios, each with a name, e.g. [{"name":"today","hours":8},{"name":"one more","hours":8,"marking":{"staff":3}}]
sim_receiptRun a seeded scenario and get back the result PLUS a signed run receipt: an Ed25519 certificate over (model id, scenario, result hash, service revision). Anyone can check it two ways — verify the signature offline against the embedded public key (proves this service reported this result), and POST…

Run a seeded scenario and get back the result PLUS a signed run receipt: an Ed25519 certificate over (model id, scenario, result hash, service revision). Anyone can check it two ways — verify the signature offline against the embedded public key (proves this service reported this result), and POST…

ParameterTypeDescription
id*stringmodel id to run
scenariostringscenario JSON (hours, samples, seed, marking, rates, schedule, summary — the same shape sim_scenario takes); defaults apply when omitted. The result hash cover…
sim_refineRefine a model's parameter classes by editing what the model SAYS (tags on a place or transition, or assertedClasses), then re-derive. Returns a NEW model id (ids are content addresses, so the original stays reachable) plus a before/after class diff. tags can only split classes; assertedClasses dec…

Refine a model's parameter classes by editing what the model SAYS (tags on a place or transition, or assertedClasses), then re-derive. Returns a NEW model id (ids are content addresses, so the original stays reachable) plus a before/after class diff. tags can only split classes; assertedClasses dec…

ParameterTypeDescription
assertedClassesstringJSON array, e.g. [{"id":"items","members":["item0","item1"],"note":"one stocking decision"}]
id*stringmodel id to refine
signaturestringoptional hex signature over the CID of the signed claim; see modelstore.SignedClaim for the exact bytes. An unverifiable signature is refused, not stored with…
signerstringoptional {"type":"eth"|"ed25519","address":"..."} — signs the lineage claim so it is the refiner's word rather than the server's account of a session
tagsstringJSON object of place OR transition id -> {key: value}, e.g. {"nurse_avail":{"refine.shift":"night"}}. Keys not prefixed refine. are stored as metadata and refi…
sim_rerollRe-run a stored sim_prompt against the SAME parent it originally ran against — a sibling attempt, never a chain: it never derives from the previous attempt's output, only from the original parent, so rerolling ten times leaves ten independent siblings in lineage rather than a chain of ten. Reuses t…

Re-run a stored sim_prompt against the SAME parent it originally ran against — a sibling attempt, never a chain: it never derives from the previous attempt's output, only from the original parent, so rerolling ten times leaves ten independent siblings in lineage rather than a chain of ten. Reuses t…

ParameterTypeDescription
prompt*stringid of the sim_prompt (or earlier sim_reroll) to re-run
systemstringoverride the original prompt's system text; default reuses it verbatim
textstringoverride the original prompt's text; default reuses it verbatim
sim_run_pipelineRun a set of stored Bindings (see sim_bind) as a composed pipeline: each bound model runs through its own ordinary scenario, in topological order, with an output port's own trajectory resampled into the target's input-transition schedule. One seed and horizon shared across every model in the pipeli…

Run a set of stored Bindings (see sim_bind) as a composed pipeline: each bound model runs through its own ordinary scenario, in topological order, with an output port's own trajectory resampled into the target's input-transition schedule. One seed and horizon shared across every model in the pipeli…

ParameterTypeDescription
bindingIds*stringJSON array of binding ids to run together, e.g. ["id1","id2"] — every model these bindings touch is included automatically.
hoursnumberhorizon in hours, shared across every model in the pipeline (default 8)
realizationsnumberrealizations per model (0 leaves each model's own Run to its adaptive default)
seednumbershared seed across every model's run (default 1)
sim_scenarioRun a seeded what-if scenario against a stored model: marking overrides, rate overrides, piecewise rate schedules, and params assignments to the model's declared structural parameters (arc weights, capacities — batch sizes and shelf sizes). Pure read — asking cannot change the model. Returns trajec…

Run a seeded what-if scenario against a stored model: marking overrides, rate overrides, piecewise rate schedules, and params assignments to the model's declared structural parameters (arc weights, capacities — batch sizes and shelf sizes). Pure read — asking cannot change the model. Returns trajec…

ParameterTypeDescription
id*stringmodel id
scenariostringscenario JSON, e.g. {"hours":8,"samples":60,"realizations":16,"seed":7,"marking":{"staff":3},"params":{"batch_size":6},"schedule":{"arrive":[{"until":2,"value"…
sim_supersede_modelMark an old version of your model as replaced by a newer one. The old id keeps working and its commons dedication (if any) stands — only the listing moves on to the successor. Both models must be yours.

Mark an old version of your model as replaced by a newer one. The old id keeps working and its commons dedication (if any) stands — only the listing moves on to the successor. Both models must be yours.

ParameterTypeDescription
new*stringmodel id of the successor
old*stringmodel id being replaced
sim_verifyVerify declared properties of a stored model: deadlock-free, bounded, mutual-exclusion, invariant expressions, reachable/unreachable targets. Verdicts are proved/refuted/unknown — unknown is never a pass — and each carries a method: structural means it holds for ANY initial marking (linear algebra…

Verify declared properties of a stored model: deadlock-free, bounded, mutual-exclusion, invariant expressions, reachable/unreachable targets. Verdicts are proved/refuted/unknown — unknown is never a pass — and each carries a method: structural means it holds for ANY initial marking (linear algebra…

ParameterTypeDescription
id*stringmodel id
propertiesstringJSON array of properties, e.g. [{"kind":"deadlock-free"},{"kind":"mutual-exclusion","places":["win_x","win_o"]},{"kind":"invariant","expr":"a + 2*b == 10"}]. D…

46 of 46 tools published a description.

Tool names and descriptions are written by the publisher and shown verbatim as inert text. They are the strings an MCP client passes to a model, so Forge scans them for prompt-injection patterns — any finding appears with the security scan above. “Privileged” is a keyword match on the tool name, not an audit of what the tool does: a benign-sounding name can still do anything.

About

Conversational what-if simulation: build, diagnose and compare Petri-net models; CC0 catalog.

Keywords
mcp
Alternatives
Comparing tool surfaces…

No dependency coverage

This entry publishes no npm package, so Forge has no dependency tree for it. That is a gap in coverage — not a statement that it has no dependencies.