Read-only MCP server for the WebAssembly spec: instructions, types, sections, search, proposals.
Read-only MCP server for the WebAssembly spec: instructions, types, sections, search, proposals.
wasm-mcp · v0.2.6
by Xyzzylabs
wasm-mcp
Model Context Protocol server for the
WebAssembly core specification.
SHA-pinned, read-only, deterministic — safe to host as a public
unauthenticated endpoint.
Not affiliated with, endorsed by, or sponsored by the W3C
WebAssembly Community Group or Working Group.
What it gives you
spec_version— the pinned upstream commit and package version.instruction_get— opcode bytes, category, introducing version,
stack type signature, validation + execution prose anchors / URLs,
and trap conditions (traps+can_trap), by mnemonic (i32.add)
or binary opcode (0x6a).instruction_list— enumerate, filterable by category (numeric,
vector, reference, parametric, variable, table, memory, control,
ref, i31, struct, array, extern), introducing version, or prefix.instruction_search— ranked free-text search across mnemonics,
categories, and opcodes.type_get— value types (number / vector / reference) and type
forms (functype,limits,memtype, …) with defining prose.section_get— one spec clause by id / anchor (structure,
validation, execution, binary, text), with prose, cross-references,
SpecTec formal-rule references, and the rendered URL.section_list— navigate the clause tree by area or anchor prefix.spec_search— full-text search across anchors, titles, and prose.proposal_list— WebAssembly proposals and their phases (from the
pinnedWebAssembly/proposalsrepo), filterable by status, phase,
champion, or affected spec.
section_get, section_list, and spec_search take a spec
argument covering all three specs in the WebAssembly/spec repo:
core (default), js-api (the JavaScript embedding API), and
web-api (Web-platform integration). The instruction and type tools
are core-only.
Contract
Every tool is:
- Read-only. No state mutation, no writes outside an optional
local cache. - Deterministic. Same input → same output, over the pinned spec
commit recorded invendor/PINNED.txt. - No execution. Never compiles, validates-by-running,
instantiates, or runs any WebAssembly or arbitrary code. Validation
and reduction rules are returned as data. - No auth, no secrets, no PII. Usable anonymously.
- No network at request time. All spec data is fetched and
indexed at build time and baked into the package.
Install (stdio, local)
npx wasm-mcp
Wire into Claude Code by adding to your project's .mcp.json:
{
"mcpServers": {
"wasm": {
"type": "stdio",
"command": "npx",
"args": ["wasm-mcp"]
}
}
}
Hosted Worker
The Cloudflare Worker in worker/ exposes the same tool
surface as the stdio package over streamable HTTP at a single
unauthenticated endpoint, rate-limited per source IP (30 req / 60 s):
https://wasm-mcp.chicoxyzzy.workers.dev/mcp
GET /health reports status and the pinned SHAs; GET /privacy
states the anonymous, no-storage posture. All spec data is bundled
into the Worker, so it does pure in-memory lookups — no storage, no
network at request time.
Releases & data refresh
The pinned commits live in vendor/PINNED.txt
and are reported by spec_version. A scheduled GitHub Actions
workflow (refresh.yml) SHA-diffs
the upstream repos daily; when a pin moves it re-pins, bumps the patch
version, and tags a release, which publishes the npm package
(release.yml) and redeploys the
Worker (deploy-worker.yml).
Maintainers:
- npm publish uses Trusted Publishing
(OIDC) — noNPM_TOKEN. Configure it once on npmjs.com (wasm-mcp →
Settings → Trusted Publisher → GitHub Actions: orgxyzzylabs, repo
wasm-mcp, workflowrelease.yml). - Worker deploy needs
CLOUDFLARE_API_TOKEN+CLOUDFLARE_ACCOUNT_ID,
stored as environment secrets on thecloudflareGitHub
Environment (not repo-wide) with amain+v*deployment rule —
see Securing the deploy credentials. - For the refresh workflow's tag push to trigger release + deploy,
add aWORKFLOW_PATPAT (contents: write+workflows) —
without it, refresh still re-pins and tags, but you run release /
deploy manually. (Same secret name tc39-mcp uses, so one PAT — or an
xyzzylabsorg secret — can serve both repos.)
License
MIT — see LICENSE.