{
  "markdown": "# wasm-mcp\n\nModel Context Protocol server for the\n[WebAssembly core specification](https://webassembly.github.io/spec/core/).\nSHA-pinned, read-only, deterministic — safe to host as a public\nunauthenticated endpoint.\n\n> Not affiliated with, endorsed by, or sponsored by the W3C\n> WebAssembly Community Group or Working Group.\n\n## What it gives you\n\n- `spec_version` — the pinned upstream commit and package version.\n- `instruction_get` — opcode bytes, category, introducing version,\n  stack type signature, validation + execution prose anchors / URLs,\n  and trap conditions (`traps` + `can_trap`), by mnemonic (`i32.add`)\n  or binary opcode (`0x6a`).\n- `instruction_list` — enumerate, filterable by category (numeric,\n  vector, reference, parametric, variable, table, memory, control,\n  ref, i31, struct, array, extern), introducing version, or prefix.\n- `instruction_search` — ranked free-text search across mnemonics,\n  categories, and opcodes.\n- `type_get` — value types (number / vector / reference) and type\n  forms (`functype`, `limits`, `memtype`, …) with defining prose.\n- `section_get` — one spec clause by id / anchor (structure,\n  validation, execution, binary, text), with prose, cross-references,\n  SpecTec formal-rule references, and the rendered URL.\n- `section_list` — navigate the clause tree by area or anchor prefix.\n- `spec_search` — full-text search across anchors, titles, and prose.\n- `proposal_list` — WebAssembly proposals and their phases (from the\n  pinned `WebAssembly/proposals` repo), filterable by status, phase,\n  champion, or affected spec.\n\n`section_get`, `section_list`, and `spec_search` take a `spec`\nargument covering all three specs in the `WebAssembly/spec` repo:\n`core` (default), `js-api` (the JavaScript embedding API), and\n`web-api` (Web-platform integration). The instruction and type tools\nare `core`-only.\n\n## Contract\n\nEvery tool is:\n\n- **Read-only.** No state mutation, no writes outside an optional\n  local cache.\n- **Deterministic.** Same input → same output, over the pinned spec\n  commit recorded in [`vendor/PINNED.txt`](vendor/PINNED.txt).\n- **No execution.** Never compiles, validates-by-running,\n  instantiates, or runs any WebAssembly or arbitrary code. Validation\n  and reduction rules are returned as data.\n- **No auth, no secrets, no PII.** Usable anonymously.\n- **No network at request time.** All spec data is fetched and\n  indexed at build time and baked into the package.\n\n## Install (stdio, local)\n\n```bash\nnpx wasm-mcp\n```\n\nWire it into any MCP client by adding the server to its config (the\nlaunch command is the same everywhere; only the config file differs):\n\n```json\n{\n  \"mcpServers\": {\n    \"wasm\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"wasm-mcp\"]\n    }\n  }\n}\n```\n\n## Hosted Worker\n\nThe Cloudflare Worker in [`worker/`](worker/) exposes the same tool\nsurface as the stdio package over streamable HTTP at a single\nunauthenticated endpoint, rate-limited per source IP (30 req / 60 s):\n\n```\nhttps://mcp.xyzzylabs.ai/wasm/mcp\n```\n\n`GET /wasm/health` reports status and the pinned SHAs; `GET /wasm/privacy`\nstates the anonymous, no-storage posture. All spec data is bundled\ninto the Worker, so it does pure in-memory lookups — no storage, no\nnetwork at request time.\n\n## Releases & data refresh\n\nThe pinned commits live in [`vendor/PINNED.txt`](vendor/PINNED.txt)\nand are reported by `spec_version`. A scheduled GitHub Actions\nworkflow ([`refresh.yml`](.github/workflows/refresh.yml)) SHA-diffs\nthe upstream repos daily; when a pin moves it re-pins, bumps the patch\nversion, and tags a release, which publishes the npm package\n([`release.yml`](.github/workflows/release.yml)) and redeploys the\nWorker ([`deploy-worker.yml`](.github/workflows/deploy-worker.yml)).\n\nMaintainers:\n\n- **npm publish** uses [Trusted Publishing](https://docs.npmjs.com/trusted-publishers)\n  (OIDC) — no `NPM_TOKEN`. Configure it once on npmjs.com (wasm-mcp →\n  Settings → Trusted Publisher → GitHub Actions: org `xyzzylabs`, repo\n  `wasm-mcp`, workflow `release.yml`).\n- **Worker deploy** needs `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID`,\n  stored as **environment** secrets on the `cloudflare` GitHub\n  Environment (not repo-wide) with a `main` + `v*` deployment rule —\n  see [Securing the deploy credentials](https://github.com/xyzzylabs/wasm-mcp/blob/main/docs/deployment.md#securing-the-deploy-credentials).\n- For the refresh workflow's tag push to trigger release + deploy,\n  add a `WORKFLOW_PAT` PAT (`contents: write` + `workflows`) —\n  without it, refresh still re-pins and tags, but you run release /\n  deploy manually. (Same secret name tc39-mcp uses, so one PAT — or an\n  `xyzzylabs` org secret — can serve both repos.)\n\n## License\n\nMIT — see [`LICENSE`](LICENSE).\n",
  "bytes": 4750,
  "sha": "181b00c59490581ddbb21170314982b50a3e16e38c5b7e7a6851372edd1a7812",
  "repo_slug": "xyzzylabs/wasm-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_xyzzylabs_wasm_mcp_4cb570c8/readme"
}