Whatif
by sim.pflow.xyz in AI models & inference
Conversational what-if simulation: build, diagnose and compare Petri-net models; CC0 catalog.
https://sim.pflow.xyz/mcp
Last 30 days
- Uptime
- 100%
- Response time
- 231 ms typical, 246 ms slowest 5%
- Last check
- 2 h ago
- Next check
- in 4 h
How to call it
Add it to any MCP client that supports remote servers.
{
"mcpServers": {
"whatif": {
"type": "http",
"url": "https://sim.pflow.xyz/mcp"
}
}
}56 tools
- sim_accept_migration
Carry offered taxonomic edges of a superseded model forward to its current successor. edges lists 1 to 25 edge ids that sim_migration_offers(model) offered; pass successor (the current it returned) so a different current successor — a re-point or a chain that grew since — is refu
- sim_bind
Record a checked connection between two stored models' declared ports, fromModel's fromPort (a place tagged port.output) feeding toModel's toPort (a transition tagged port.input), as a content-addressed Binding (ROADMAP.md Phase 9/11f). Checked now, by the same binds-port-v1 rule
- sim_calibrate
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
- sim_canonical
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 diffe
- sim_check_witness
Re-check a stored structural witness against both stored models with the independent checker (pkg/morphism), which does no search. Given a structural edge's id, checks every witness of that edge; an edge with none answers unwitnessed (unproven, not disproved). Verdicts: valid, in
- sim_classify
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=t
- sim_code_to_flow
Derive a Petri-net model from source code with the configured LLM (control-flow, state-machine, resources or concurrency focus) and store it as a NEW model you own when it passes sim_create_model's decode and the model validator. Stored, it returns stored: true with id, url, name
- sim_compare
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 with finalStdDev, each final count's spread across realizations, thr
- sim_components
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 rec
- sim_compose
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 exist
- sim_conformance
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?), generalizatio
- sim_conformance_stream
Online conformance: replay an ORDERED event stream against a stored model and get a running verdict — does the model still match, or which event was the first that did not, and why. Unlike sim_conformance (whole finished cases, aggregate fitness) the order of events IS the stream
- sim_create_collection
Mint a named Collection you own 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
- sim_create_model
Store a Petri-net model and return its content id and url, plus warnings (omitted when there are none) for a model that stores but probably does not say what was meant: transitions with no rate, which simulations run at the engine default of 1 per hour (each stage of a staged one
- sim_create_system
Define a System (ROADMAP.md Phase 11f): a content-addressed, stored set of models and the bindings between them, so the catalog can answer questions about them together. Pass collection (snapshot its model and binding members now; other members are listed under skipped, and a gro
- sim_crosscheck
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
- sim_dataset
Generate a synthetic event log from a stored model (seeded SSA playout; case-per-arrival). Returns CSV. Deterministic: same id, same seed, same bytes.
- sim_delete_model
Delete a model you created signed in. Refused for the curated catalog, for models you do not own (a model created without sign-in is nobody's, for good), and for models already dedicated to the commons (a dedication is irrevocable).
- sim_diagnose
Returns what one more of each resource (and a change in each rate) is worth to the outcome, each ranked against a measured noise floor — no fitness test to write. Also reports generic gates (mass balance, dormant sources, staffing knee and practical knee, whether any knob binds),
- sim_diff
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 b
- sim_distill
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 r
- sim_edges
List every relation touching an entity, as either subject or object. Answered from an index by subject and object; each call re-lists the store so edges written by other instances are seen. Legacy edges whose predicate predates the registry are included with axis "unregistered".
- sim_evaluate
Score a player's legal next moves with the PLAY method (the blog post's move picker): apply each candidate hypothetically and score the expected objective of the position it leads to, by seeded SSA rollouts (seed 11, shared across candidates so a difference measures the move, not
- sim_extend
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
- sim_get_artifact
Fetch a stored prompt or artifact by id as JSON-LD: the two records sim_prompt and sim_reroll store besides a model. An artifact (@type Artifact) is an LLM reply that was not stored as a model — a report, code, or model JSON that failed validation — returned whole as content (the
- sim_get_binding
Fetch a stored Binding by id, with its check computed now (binds-port-v1; binds-port-v2 for a binding that declares a unit conversion, which is returned as convert; binds-port-v3 for one that declares a delay, returned as delay in hours): ok (with the unit verdict: agree, convert
- sim_get_model
Fetch a stored model's full Petri-net JSON by its content id. A name in place of an id is refused saying to search with sim_list_models' query, and that a model created without sign-in is listed for nobody, so its id is the one its create returned; or naming the curated model's i
- sim_invariants
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 StructuralPr
- sim_license_model
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.
- sim_link
Record a typed edge between two stored entities (models, prompts, artifacts, maps, collections, bindings, relations — not witnesses), using a registered predicate. sim_link writes these (subject → object): @type (model → a https://sim.pflow.xyz/ns/models/v1 type name); about (art
- sim_list_bindings
List the content id of every stored Binding.
- sim_list_models
List the models visible to you, as a JSON array of {id, name, description, license, curated, mine} sorted by name (a field that does not apply is left out): the curated catalog (curated: true), models dedicated to the commons (each carries its license), and your own (mine: true).
- sim_map_get
Fetch a stored Map's key->value data by id.
- sim_map_list
List the content id of every stored Map.
- sim_map_put
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
- sim_migration_offers
List what happens to the edges of a superseded model. Taxonomic edges (hasMember, @type, broader, related, closeMatch, cites, about) are OFFERED: each row gives the edge as it would read on the model's current successor (followed through its supersession chain), whether sim_link'
- sim_my_sheets
List the sheets this user has published, with their URLs.
- sim_neighbors
One-hop traversal from an entity, read through the predicate registry. With no predicate: the object of every relation where the entity is the subject. With a predicate: the entities one hop along it — for an inverse name that is never stored (narrower) the stored predicate is re
- sim_optimize
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 staff
- sim_param_heatmap
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 wit
Security scan
- Unusually long description in tool:sim_bind
sim_bind Record a checked connection between two stored models' declared ports, … - Unusually long description in tool:sim_check_witness
sim_check_witness Re-check a stored structural witness against both stored model… - Unusually long description in tool:sim_create_model
sim_create_model Store a Petri-net model and return its content id and url, plus… - Unusually long description in tool:sim_create_system
sim_create_system Define a System (ROADMAP.md Phase 11f): a content-addressed, s… - Unusually long description in tool:sim_prompt
sim_prompt Ask an LLM to derive something from a stored entity: a variant model,… - Unusually long description in tool:sim_prove
sim_prove Prove a structural relation between two stored models and record it wi… - Unusually long description in tool:sim_query
sim_query Answer a question over the edge graph between stored models: bounded p… - Unusually long description in tool:sim_reach
sim_reach Returns whether the marking to is reachable from the marking from in O… - Unusually long description in tool:sim_run_pipeline
sim_run_pipeline Returns one scenario result per model that a set of stored Bind… - Unusually long description in tool:sim_scenario
sim_scenario Run a seeded what-if scenario against a stored model: marking overr… - Unusually long description in tool:sim_system
sim_system Returns a stored System's view ({id}), the models whose ports can bin…
Recent checks
| When | Result | HTTP | Time |
|---|---|---|---|
| 2 h ago | Passed | 200 | 223 ms |
| 11 h ago | Passed | 200 | 262 ms |
| 20 h ago | Passed | 200 | 196 ms |
| 29 h ago | Passed | 200 | 246 ms |
| 38 h ago | Passed | 200 | 231 ms |
| 2 days ago | Passed | 200 | 234 ms |