Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
764 MCP tools across 1236 fintech tools: ChainGraph AP2 decisions, execution_hash. Zero PII.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://mcp.ainumbers.co/mcp在终端中运行这条命令
claude mcp add --transport http tools https://mcp.ainumbers.co/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"tools": {
"url": "https://mcp.ainumbers.co/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"tools": {
"type": "http",
"url": "https://mcp.ainumbers.co/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://mcp.ainumbers.co/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
工具名称和描述与服务器在 2026年11月6日 报告的完全一致。这些内容由作者撰写,不是我们写的;我们以纯文本形式显示。
list_ainumbers_toolsSearch the AINumbers catalog (1230+ client-side fintech tools). Returns deep-links; prefill-enabled tools accept #in= [&run=1] for one-click invocation.
build_workflow_linksConstructs an ordered set of ready-to-use deep-links for a named AINumbers workflow chain or an ad-hoc sequence of tools. Each link points directly to the browser tool; prefill-enabled steps accept #in= fragments so the tool opens pre-filled. Zero server-side execution -- all too
verify_execution_hashIndependently verify a ChainGraph artifact (ChainGraph Standard v0.1 §6). Recomputes SHA-256 over the canonical (sorted-key, whitespace-stripped) JSON of policy_parameters + output_payload and compares it to the claimed execution_hash. A match proves integrity: policy_parameters
build_chaingraphHash-aware sibling of build_workflow_links (ChainGraph Standard v0.1 §8.1). Returns an ordered, executable DAG over the ChainGraph suite's verifiable tools, with explicit parent_hash wiring: which upstream execution_hash each step must cite in its chain block. Pass target_tool_id
emit_chaingraph_artifactMakes ChainGraph tools agent-callable (ChainGraph Standard v0.1 §3.1). Mode 1 — supply pre_computed_artifact (exported from the browser tool): validates §4 schema fields, recomputes execution_hash via SHA-256 over canonical {policy_parameters, output_payload}, returns verified st
build_session_receiptAggregates execution_hashes from N ChainGraph tool calls in one agent session into a single SHA-256 Merkle root (session_receipt_root). Returns a tamper-evident session receipt and a regulator-framed PTG-01 audit prompt. One receipt covers an entire agent session: supply all exec
find_toolBM25 search over all 703 live AINumbers ChainGraph node tools. Returns ranked tools with mcp_name, URL, mandate type, and wave. Use to locate a specific computation node (e.g. "FRTB expected shortfall", "MiCA own funds", "XVA calculator", "reserve composition", "2052a", "initial
find_chainBM25 search over all 416 AINumbers ChainGraph chains. Returns ranked chains with their full recipe: ordered node sequence, deep-links, composer URL, and entry tool mcp_name. Agent flow: find_chain(query) → read recipe → call the listed node MCP tools in order, passing parent_hash
run_chainExecutes every step of a named chain (list names with find_chain / build_workflow_links) and returns ONE composite artifact whose execution_hash anchors all step outputs. compute:"server"/"auto" (default) runs each kernel-backed step server-side, threading step N's execution_hash
suite_howtoHow to chain AINumbers tools into audited workflows: call with NO recipe_id for the compact recipe index, or with one recipe_id for that workflow's full step-by-step recipe. Every recipe carries the suite conventions end to end: Policy Mandate exports, execution_hash verification
describe_toolReturns the full definition of exactly one AINumbers MCP tool: name, description, inputSchema, outputSchema (the JSON Schema its structuredContent validates against), annotations, and lifecycle_status. Use it after find_tool or find_chain hands you an mcp_name, or after tools/lis
run_chain_batchBatch over named chains in ONE round-trip with a PER-ROW terminal status — one row's failure never fails another, and every row's result rides the single response. mode:"run" (default) executes each row through the same engine as run_chain (composite artifact + execution_hash per
call_toolRuns ONE read-only AINumbers tool that is not in your tool list. tools/list is paginated (13 pages, 722 tools) and many hosts read only the first page; this is the door to the rest. Pass { name: " ", arguments: { ... } } — the target's own inputSchema is validated and its result
baas_provider_comparatorScore and compare BaaS providers across 10 capability dimensions (regulatory standing, programme management, card issuance, rails, KYC/KYB, disputes, developer experience, pricing, FDIC pass-through, compliance tooling) with a user-adjustable 1-5 weighting matrix. Outputs a weigh
validate_ap2_mcp_policyValidate AP2 Policy Mandate JSON payloads against the Unified Build Contract v1.0 schema. Auto-generates MCP tool definitions from the mandate and simulates agent ingestion of agent_instructions. Use when authoring or testing AP2 agentic payment policies. Renders the interactive
build_google_ap2_mandateBuild or validate a Google AP2 Checkout/Payment Mandate VDC (Open/Closed). Targets the external AP2 spec, not the AINumbers Policy Mandate. Renders the interactive AINumbers tool as a widget; inputs are applied via the AIN Bridge and the tool runs client-side (zero PII, zero netw
score_mcp_readinessCompute a composite MCP server ship-readiness score across tool definitions, server.json, OAuth, transport, tool poisoning, and spec compliance. Renders the interactive AINumbers tool as a widget; inputs are applied via the AIN Bridge and the tool runs client-side (zero PII, zero
agentic_mandate_sandboxSimulate agent payment policies for tokenized A2A corridors: set spend caps, MCC allowlists, velocity throttles, and approval thresholds; run synthetic transactions against the policy and export the result as a Policy Mandate. Browser-based, client-side only, zero PII. Renders th
customer_risk_ratingScore individual and entity KYC risk across six FATF dimensions: customer type, product/service type, delivery channel, geographic risk, transaction behaviour, Browser-based, client-side only. Zero PII. Link users to https://ainumbers.co/tools/110-customer-risk-rating.html for in
ap2_aml_mandate_builderAnchor agentic tool for Cat-12. Translate AML/BSA program controls, TM rules, and customer risk policy into a structured Policy Mandate JSON for agentic payment sy Browser-based, client-side only. Zero PII. Link users to https://ainumbers.co/tools/131-ap2-aml-mandate-builder.html
lint_mcp_tool_definitionValidate an MCP tool definition against JSON Schema 2020-12 and current naming, output-schema, and annotation rules; returns findings, a conformance score, and a recommended annotation set. Use when a developer wants to check an MCP tool definition before publishing. Renders the
validate_mcp_server_jsonValidate an MCP server.json against the 2025-12-11 schema and the official registry publishing rules; returns findings, a registry-readiness score, and an optional compliant skeleton. Use when a developer wants to check a server.json before publishing to the MCP Registry. Renders
compare_agentic_payment_protocolsCompare agentic payment protocols (AP2, ACP/Shared Payment Token, x402, Visa TAP, Mastercard Agent Pay) across credential, signing, scope, rail, identity, and audit dimensions; optionally recommend a fit for a scenario. Read-only local lookup and comparison — no state change, no
decode_x402_paymentDecode an x402 payment header or lint an exact-scheme PaymentPayload, and describe the HTTP-402 verify/settle flow. Use when a developer is integrating x402 and needs to inspect a header, check a payload shape, or understand the flow. Renders the interactive AINumbers tool as a w
audit_mcp_oauthAudit MCP OAuth 2.1 authorization: validate RFC 9728 protected-resource-metadata, check RFC 8707 audience binding, and assess token-passthrough / confused-deputy risk. Use when a developer is securing an MCP server's authorization. Renders the interactive AINumbers tool as a widg
scan_tool_poisoningScan an MCP tool description/manifest for tool-poisoning and prompt-injection smells; returns a risk score and flagged patterns. Renders the interactive AINumbers tool as a widget; inputs are applied via the AIN Bridge and the tool runs client-side (zero PII, zero network). Outpu
validate_a2a_agent_cardValidate an A2A agent-card.json against the v1.0 shape, check signatures, and confirm extension declarations. Renders the interactive AINumbers tool as a widget; inputs are applied via the AIN Bridge and the tool runs client-side (zero PII, zero network). Output schema: call desc
inspect_visa_tap_signatureInspect a Visa Trusted Agent Protocol HTTP Message Signature and score TAP readiness. Renders the interactive AINumbers tool as a widget; inputs are applied via the AIN Bridge and the tool runs client-side (zero PII, zero network). Output schema: call describe_tool("inspect_visa_
run_kernel_vmRun a ChainGraph decision kernel's compute(policy_parameters) inside a sandboxed, deterministic, in-browser QuickJS-ng WebAssembly VM (ocg-deterministic-compute@2) and return its output_payload. Demo kernel set only -- for the full catalog, use the worker's compute kernels direct
validate_input_attestationsVerify an artifact's input_attestations[] (ChainGraph Standard §23): per RFC 6901 pointer, checks the attested value resolves inside policy_parameters and its digest binding matches, then verifies each type along its own path -- vc-2.0 via the shipped §16/§13.11 Data Integrity pr
validate_private_inputsVerify an artifact's private_inputs[] (ChainGraph Standard §25 ocg-private-input@1) WITHOUT ever seeing the plaintext witness: per RFC 6901 pointer, checks the pointed value inside policy_parameters IS the declared sha256-salted@1 commitment (never the plaintext, §25.2), that the
build_disclosure_manifestBuilds a Merkle-rooted disclosure manifest from a caller-supplied digest list (DATAROOM-1-BUILD-SPEC.md §DR-4) -- the agent hashes files itself and passes {path,size,digest,content_type} entries; the worker never sees file contents. Same leaf scheme as tools/546-disclosure-manife
verify_disclosure_inclusionProves (or refutes) that a {path,digest} pair was in a disclosure manifest's room (DATAROOM-1-BUILD-SPEC.md §DR-4) -- worker-side mirror of tools/547-disclosure-manifest-verifier.html's single-file inclusion check. Recomputes the manifest's Merkle root over its entries[], builds
suggest_tool_ideaBuilds a prefilled GitHub Issue-Forms URL for proposing a new AINumbers fintech tool, OpenChainGraph compute node, or verifiable workflow. Returns the URL only -- it never posts to GitHub on the caller's behalf. Companion to the site's mailto suggestion form (suggest.html); this
export_artifactRender a verified OpenChainGraph v0.4 artifact into a chaingraph_export profile (OCG Standard §13). Generated downstream of and EXCLUDED from the execution_hash preimage — the export is a view, not a fact; verification always routes back to the canonical JSON artifact. Pass the F
vc_issueComposes and signs a W3C Verifiable Credential 2.0 with an eddsa-jcs-2022 Data Integrity proof over a fresh ephemeral did:key (generated per call, not reused). Returns the signed credential, an OCG Standard §23 vc-2.0 input-attestation block ready to embed in a ChainGraph chain's
sdjwt_issueIssues a Selective Disclosure JWT (RFC 9901) from a claims object, marking selected top-level claim keys as selectively disclosable via salted-hash digests in the _sd array. Signed EdDSA over a fresh ephemeral did:key (generated per call, not reused). Pair with sdjwt_present to b
sdjwt_presentBuilds a redacted presentation from an existing SD-JWT (as returned by sdjwt_issue), keeping only the listed disclosures. Pass aud to add a KB-JWT holder-binding (a fresh ephemeral holder key is generated per call). Pass issuer_did (the sd_jwt's "issuer" field) to also verify the
checklist_validate_definitionValidates a checklist or SOP definition JSON against the CHECKRUN-1 schema (definition_id, title, semver version, non-empty steps[] each with step_id/title/instruction/evidence_requirement (none|text|file-digest|attestation)/gate (blocking|advisory)). Returns valid:true/false plu
checklist_step_receiptCompletes ONE step of a checklist/SOP run and returns its OCG v0.4 step receipt: execution_hash chains to prev_step_receipt_digest (pass the previous step's execution_hash, or omit for step 0). A blocking-gate step with evidence_requirement != "none" and no evidence supplied is r
checklist_verify_runRecomputes and checks a checklist run: every step receipt's execution_hash, the hash-chain link between consecutive steps, and (if a run_receipt is supplied) the §20.1 RFC 6962 Merkle root over every step. Returns valid:true/false, per-step ok/hash_ok/link_ok, and broken_at (the
ha_record_validateStructural (non-cryptographic) §27.2 signed-named-human check: does this record carry a §16 whole-artifact proof (eddsa-jcs-2022) whose verificationMethod is bound to the record's own identity.id? Does NOT verify the signature bytes -- pair with verify_execution_hash / a proof ve
ha_gate_statusGiven a step's haGatePolicy and the human_accountability_records[] collected for a subject, returns whether the gate is satisfied, held, rejected, escalated, or overridden -- same algorithm as the browser verify.html HA gate card (kernels/_hagate.mjs, SPEC.md §27.4-27.5). A rejec
ha_bundle_exportAssembles a §27.6 haEvidenceBundle from a subject's collected human_accountability_records[] (reviewers, approvers, annotations, exception rationale, timestamps) -- same algorithm as the browser verify.html HA export card (kernels/_haevidence.mjs). Set sd_jwt:true to also export
intoto_record_chain_runWraps the result of a run_chain call (server/auto compute mode) as standard in-toto links, one per successfully-executed step, plus a generated in-toto layout matching the chain's linear topology (each step MATCHes the previous step's product). Materials/products are keyed by the
build_evidence_packComposes a session receipt (build_session_receipt logic), an optional §27.6 HA evidence bundle (ha_bundle_export logic, included only when ha_records is supplied and non-empty), and a disclosure manifest (build_disclosure_manifest logic) from one array of already-produced artifac
anchor_stampCalls the anchor-suite MCP server (server-to-server, not the browser CORS-gated relay) to timestamp one execution_hash, or batch-anchor an array via anchor-suite's own anchor_batch (one upstream call per batch, RFC 6962 Merkle root anchored, per-hash merkle_inclusion returned), a
otlp_validateStructurally validates an OTLP/JSON trace (resourceSpans -> scopeSpans -> spans: hex traceId/spanId shape, quoted nanosecond timestamps, parent-span references, time ordering) and checks every gen_ai span's attributes against a pinned gen_ai semantic-convention attribute snapshot
otlp_span_receiptOTLP span/trace to receipt bundle; does NOT build a ChainGraph (use build_chaingraph for that). Three modes, chosen by which input is supplied. (1) Pass `trace` alone to GENERATE a receipt bundle: a per-span receipt (span digest, parent-span receipt digest, semconv_snapshot, edds
redline_diffAn agent proposes an edit: diffs original text/markdown against its own revised version and returns the line-level hunks plus a diff receipt (original/revised digests, diff-algorithm declaration, per-hunk digests). Byte-identical to what the tools/552 browser workbench computes f
redline_verifyRecomputes a redline review from scratch: the diff (from the pasted original+revised text), the diff_receipt's execution_hash, every hunk_receipt's digest/execution_hash/chain-link (in the order supplied -- entries may be minted by an agent, a human, or both interleaved), the dis
lei_kyb_checkFetches an entity's live GLEIF LEI record (api.gleif.org -- the worker's only egress target for this tool, RULINGS-2026-07-19-EGRESS-APEX.md R1) and grades it across six GLEIF data-quality dimensions -- registration status, renewal timeliness, corroboration level, entity status,
acdc_said_checkAgent-facing mirror of the tools/553 browser workbench (VS-1) -- recomputes the self-addressing identifiers (SAIDs) of a pasted ACDC / vLEI credential JSON (top-level "d" plus any nested a/e/r blocks) under the KERI/CESR Blake3-256 ("E") or SHA2-256 ("I") derivation codes, and cr
workbook_evaluateFeeds a set of A1-style cells (formulas and/or literals) through the SAME headless evaluator the tools/554 browser workbook uses -- topo-sorted dependency graph, ~20 functions (SUM AVG MIN MAX COUNT COUNTIF IF AND OR NOT ROUND ABS CONCAT LEN LEFT RIGHT TRIM UPPER LOWER SUMIF), cy
workbook_range_digestSpreadsheet-range digest only; NOT the general artifact emitter (use emit_chaingraph_artifact to wrap arbitrary computation output — this tool's as_artifact mode covers whole-sheet workbook runs only). Evaluates the supplied cells (same evaluator as workbook_evaluate) and compute
workbook_csv_parseParses CSV text with the SAME strict RFC 4180 parser as the tools/554 browser workbook -- quoted fields, embedded quotes/commas/newlines, CRLF -- and REJECTS malformed input rather than repairing it (deterministic beats forgiving for hash-stable digests). Numeric-looking and TRUE
workbook_roundtrip_verifyCompares a WB-2 Spreadsheet Input Manifest (expected digests) against pasted-back CSV/TSV text per manifest range (observed, e.g. after a recompute in Excel) and returns an XLR-1 round-trip receipt -- `result: "match"|"mismatch"` plus a `mismatches[]` cell list when expected_by_r
pain001_validateValidates a pain.001.001.09 customer credit transfer initiation XML document against the same hand-derived schema-subset table as the tools/555 browser validator -- structural (mandatory fields), facet (IBAN mod-97, BIC format, ISO 4217 currency, decimal/date patterns), and batch
camt053_parseParses a camt.053.001 bank-to-customer statement XML document with the same schema-subset structural and facet checks as the tools/565 browser reconciliation workbench (IBAN mod-97, BIC, currency, date/decimal facets), returning the extracted statement (message id, statement id,
recon_matchParses a camt.053.001 statement (same schema-subset checks as camt053_parse) and a counterpart expectation set (CSV, header EndToEndId,Amount,Currency,Date -- same strict RFC 4180 parser as the WORKBOOK-1 CSV tools), then runs the SAME deterministic match engine as the tools/565
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过域名 ainumbers.co 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 551 毫秒内响应(HTTP 200)
无需登录
已读取 60 个工具描述,未发现针对 AI 的隐藏指令
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(0.4.48)于今天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, SSTracker free youth training
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Free youth sports drills, practice plans and age-group answers for parents and coaches.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
An agent calling a fintech tool by name has no way to know if the tool actually ran the math it claims to have run. This server closes that gap for the AINumbers.co suite: every tool call is deterministic, zero PII, and served straight from the suite's own single-file HTML, not a paraphrase of it.
An MCP Apps (SEP-1865) server that exposes the AINumbers.co fintech tool suite to any MCP host, including Claude, ChatGPT, M365 Copilot, VS Code, and Cursor.
# Claude: Settings -> Connectors -> Add custom connector
https://mcp.ainumbers.co/mcp
npx @modelcontextprotocol/inspector # then Streamable HTTP -> the URL above
No auth, no API key, no account. Production runs on Cloudflare Workers (/healthz reports runtime: cloudflare-workers), so there are no cold starts. Cursor and other Open Plugins directories pick this repo up automatically via the root .mcp.json, which declares the same endpoint.
Live endpoint: https://mcp.ainumbers.co/mcp (streamable HTTP) · Docs: ainumbers.co/mcp.html · Registry: co.ainumbers/tools on the Official MCP Registry
Fork this repo and deploy the button above to run the same server inside your own Cloudflare account: no auth to add, no build step at deploy time, the Worker boots straight from the data/ and kernels/ already committed here.
Two edits to wrangler.jsonc before that first deploy will succeed on a fresh account:
mcp.ainumbers.co, a zone this fork doesn't own. Rename name and either delete routes (ship on the free workers.dev subdomain) or point it at a zone in your own account.if (env.EVENTS_QUEUE), if (env.RENEWAL_WATCH_WORKFLOW)) — the MCP handshake and every tool call work without them. Queues need a Workers Paid plan; drop both blocks to stay free-tier.Everything else, including the ASSETS binding serving the committed tool data, works unmodified. Full write-up (WAF rate-limit recipe, re-vendor cadence, conformance-attestation offer): ainumbers.co/mcp.html#deploy-your-own.
Read-only MCP tools — count intentionally not hardcoded here (it drifted stale the last time it was). See data/counts.json for the live figure; never hand-type this number, scripts/surface-parity.mjs and the site repo's count-drift gate both check against it. The flagship widgets below render as interactive widgets, the rest are ChainGraph compute nodes plus a handful of catalog and discovery utility tools: list_ainumbers_tools, find_tool, find_chain, build_workflow_links, run_chain, verify_execution_hash, build_chaingraph, emit_chaingraph_artifact, build_session_receipt.
Every tool declares readOnlyHint: true. No account, no auth, zero PII, nothing mutates state.
Each renders as the actual single-file AINumbers tool, served as a text/html;profile=mcp-app resource and driven by the AIN Bridge (prefill, run, Policy Mandate export). This table IS the enumeration — its row count is the widget count, never a number typed elsewhere:
| MCP tool | AINumbers tool |
|---|---|
baas_provider_comparator | T152 BaaS Provider Comparator |
validate_ap2_mcp_policy | T320 AP2 MCP Policy Validator & Bridge |
build_google_ap2_mandate | T285 Google AP2 Checkout/Payment Mandate Builder |
score_mcp_readiness | T288 MCP Developer Readiness Scorecard |
agentic_mandate_sandbox | RBE-06 Agentic Mandate Sandbox |
customer_risk_rating | T110 Customer Risk Rating Engine |
ap2_aml_mandate_builder | T131 AP2 AML Mandate Builder |
lint_mcp_tool_definition | T274 MCP Tool-Definition Linter |
validate_mcp_server_json | T275 MCP server.json Validator |
compare_agentic_payment_protocols | T276 Agentic Payments Protocol Comparator |
decode_x402_payment | T277 x402 Decoder & 402 Flow Simulator |
audit_mcp_oauth | T278 MCP OAuth 2.1 Authorization Auditor |
scan_tool_poisoning | T282 MCP Tool-Poisoning Scanner |
validate_a2a_agent_card | T283 A2A Agent Card Validator |
inspect_visa_tap_signature | T286 Visa TAP Signature Inspector |
run_kernel_vm | Kernel VM Widget |
list_ainumbers_tools and find_tool search the full catalog (see data/counts.json for the current tool count) and return deep-links. Prefill-enabled tools accept #in= [&run=1] for one-click invocation. find_chain and build_workflow_links return ordered deep-links for a named multi-tool workflow. run_chain executes one server-side; each run returns an OpenTelemetry span document as a resource link (one execute_tool span per executed step under an invoke_agent parent). verify_execution_hash independently re-verifies a returned artifact's hash.
../repo (site repo, PostOakLabs/ainumbers)
| chaingraph.json, manifests/, pilot.mjs-referenced tool HTML | v node generate.mjs (build-time only, cannot run in cloud CI, needs the sibling repo) data/ vendored: chaingraph.json, catalog.json, manifests, counts.json kernels/ vendored: server-side compute kernels | v worker.mjs (Cloudflare Workers, this repo's live runtime) server.mjs (Node/express variant, local dev only, not deployed) | v https://mcp.ainumbers.co/mcp (the one live endpoint: the Worker, not the express variant)
data/ and kernels/ are generated, committed artifacts. The Worker boots from what's committed, not from a live read of ../repo. Any change to chaingraph.json, a manifest, pilot.mjs, or a kernel in the site repo requires re-running generate.mjs here and committing data/ and kernels/ in the same push, or the worker deploys stale.
Branch, then PR. CI runs the validate job: tool-name collisions, surface-parity, kernel coverage, chain validation, vendor-freshness, and a wrangler deploy --dry-run. Merging to master runs the deploy job, which runs wrangler deploy against Cloudflare Workers, then a post-deploy /mcp smoke test (a real initialize call against the live endpoint). No manual wrangler deploy, ever: Cloudflare Workers Builds stays disconnected on purpose, since running both is a double-deployer and has caused outages before. A green CI bundle does not by itself prove the live handshake works; only the smoke step does.
Dependabot auto-merges every dependency update (patch, minor, and major, all CI-gated), so run git pull --rebase before pushing any local branch since master moves on its own.
MCP Queen is a third-party operational probe: it continuously re-checks the live /mcp endpoint's protocol handshake and tool-schema responses and grades what it observes. This is not a security or compliance attestation, ours or theirs — it describes observable server behavior only.
npm install
node generate.mjs # re-vendor tool HTML + manifests + catalog + kernels from ../repo into data/ + kernels/ npm start # http://localhost:3300/mcp (+ /healthz), Node/express variant (server.mjs), local dev only node scripts/check-tool-names.mjs # verify no mcp_name collision before pushing node scripts/surface-parity.mjs # verify counts.json matches the registered surface
pilot.mjs is the single source of truth for the widget tool set. After changing any pilot tool in the site repo, run node generate.mjs, commit data/ and kernels/, and push. CI validates and deploys.
All tool content is client-side, deterministic, and zero PII. Code is MIT licensed (see LICENSE); content is CC BY 4.0, Post Oak Labs. See README-SPEC.md for architecture and history.
Transport conformance (MCP-STREAMABLE-HTTP-CONFORMANCE-1). The /mcp door is a full Streamable HTTP endpoint per the MCP spec (2025-03-26 / 2025-06-18): initialize issues an Mcp-Session-Id (echoed thereafter, never required — the server is stateless behind the scenes), GET /mcp with Accept: text/event-stream and that session id opens a server-to-client SSE stream with a 25 s keepalive that closes on disconnect (a session-less GET keeps the spec-clean 405 + Allow it always gave), DELETE /mcp with the session id ends the session with 204 (a bare DELETE stays 405), an unknown MCP-Protocol-Version is a JSON-RPC 400 (never a 500), and tools/list honours params.cursor/returns nextCursor (page size TOOLS_LIST_PAGE_SIZE in worker.mjs is deliberately ≥ the whole surface for one release). Verify any door — local (node server.mjs) or production — with the zero-dependency six-check script: bash scripts/transport-conformance.sh [BASE_URL].
Idempotency & retry (RUN-1-1). Every tool call is deterministic: a safe retry is a re-run that returns a byte-identical artifact (generated_at/opened_at differ; hashes do not), and run_chain echoes a stable dedupe: { input_hash, composite_execution_hash } for client-side dedupe. Dedupe is a cache concern, not a correctness concern. The not-stateless carve-outs (RenewalWatchWorkflow, scheduled(), queue(), MRTR_STATE_KEY requestState, the input_required flow, shared-cache hints, the null-strip live-vs-golden drift class) are documented in docs/IDEMPOTENCY.md; the KV/Cache receipt cache (D2) stays deferred.