What this demo is, and what it is not
Two pieces of software meet on this page, neither owned by the other.
Division Swarm is an open-source workflow orchestration engine from division.sh (github.com/division-sh/swarm, a Go project). You author a contract bundle: entities move through lifecycle stages, guards check conditions, decision gates open review cards for humans, and every admitted event lands in an immutable log.
The AINumbers MCP server (https://mcp.ainumbers.co/mcp) exposes deterministic financial calculators over standard MCP JSON-RPC, with no authentication. Every tool call returns a fully verifiable artifact: an execution_hash you can check later with the verify_execution_hash tool, with zero network access at verification time.
The demo is one sentence: the orchestration log becomes a chain of receipts instead of a chain of trust. Division provides the orchestration and evidence accumulation; the MCP server provides verifiable computation; a human holding the decision gate reviews the receipt, not the node's word.
Five steps, each pointing at something verifiable
This is the conceptual event log a real run of the drafted flow would produce. The column that matters is the last one: what each entry lets you check independently.
- 1
A caller publishes the ingress event
The event mcp-evidence.started arrives with tool_name: catalog-search; the platform creates the entity in its ingress stage.
Points at: the ingress event payload itself, the tool name the caller asked for. - 2
A system node calls the public MCP tool
The deterministic node mcp-evidence-node passes its guard and calls the tool through the platform's connector to mcp.ainumbers.co/mcp.
Points at: the JSON-RPC result, which carries an execution_hash: a verifiable artifact receipt rather than a plain text answer. - 3
The platform records the hash as evidence
The returned execution_hash is appended to the entity's evidence accumulator, and the entity advances to review_stage.
Points at: the recorded evidence field on the entity (mcp_evidence.execution_hash), auditable for the life of the record. - 4
A decision gate opens a review card for a human
The typed gate mcp_result_review opens a mailbox card showing the tool name, the recorded hash, and one review question.
Points at: the card content is derived from the recorded evidence, so the human is reviewing the receipt rather than the node's word. - 5
The human decides, and the decision joins the evidence chain
Approve advances to evidence_accepted; reject advances to evidence_rejected with the reviewer's feedback attached as evidence.
Points at: the human outcome, recorded against the receipt it was raised on. The final authority stays human; the computation under it stays checkable.
Three files, one clearly marked mock
All three were authored from public sources only: the swarm repository's own examples and spec, and the AINumbers public docs.
- A
flow.yaml, the contract bundle draft
One entity lifecycle: an ingress event starts the flow, the system node calls the MCP tool and records execution_hash as an evidence field, and a decision gate routes the result to a human. Every format choice cites the swarm repo file it was copied from.
- B
scenario.yaml, the scripted test draft
A swarm test style scenario exercising the flow against a mocked MCP response whose values are clearly marked MOCK-. Its expect block asks for exactly what a reviewer would want: the evidence event emitted, the entity parked at the review stage, and no dead letters.
- C
real-mcp-response.json, the real receipt
A response captured from the live endpoint, input chosen as the first committed fixture vector of the lookup_reg_z_thresholds kernel so anyone can reproduce it bit for bit:
curl -s https://mcp.ainumbers.co/mcp -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"lookup_reg_z_thresholds","arguments":{"policy_parameters":{"year":2026,"table":"qm_points_fees"},"compute":"server"}}}'The receipt: execution_hash 43d43e1b5ac519566dd345496b655fe80a2f815428ab17703c092c15f490c8b6, tool_id the art-220 node, compute_mode server.
How to run it
For a human with the swarm CLI available. These commands were drafted from the swarm repo's documented mechanisms and were never executed by us. Treat them as a checklist and read the CLI's own help for exact flags.
- 1
Clone both repositories at the pinned commits
git clone https://github.com/division-sh/swarm && cd swarm && git checkout 5a334401cThe demo's format choices were read at swarm commit 5a334401c; if the repo has moved, re-check the pack layout against its current examples.
- 2
Arrange the files as a pack
Place the bundle and scenario into the pack layout the swarm repo's own examples use: a package manifest at the pack root with flows and tests beneath it, following examples/ and tests/ in the clone.
- 3
Run the scripted scenario
swarm test <pack> <scenario>The exact flag surface was not read from live help text; the repo README documents the test workflow. That limitation is stated here rather than hidden.
Success looks like: the evidence event emitted, the entity parked at review_stage, no dead letters. The approve or reject choice stays unscripted on purpose: the gate is held for human judgment against the receipt.
Swap the mock for the real response, then verify
Two minutes, and the demo stops being a mock.
Swap: in the scenario, replace the MOCK- tool id and hash values with art-220-reg-z-threshold-lookup and the 43d43e1b... hash from the captured response above, and point the scenario's tool name at lookup_reg_z_thresholds with the same input. The evidence field the flow records then holds a hash from a real server run.
Verify: feed the recorded pair to the verify_execution_hash tool on the same MCP server, or run the calculator yourself on the art-220 threshold lookup page with the same inputs and compare hashes. Because the input is the kernel's committed fixture vector, the value reproduces for anyone, forever, with no network at verification time.
For the same receipt idea in a browser-native walkthrough, see WebMCP Demo 1; for prompts that drive the MCP suite end to end, see the prompt library, and the MCP playground runs example prompts live, hash by hash.