wasm-mcp
Provides tools for querying WebAssembly core specification data, including instructions, types, sections, proposals, and specification searches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wasm-mcpWhat are the details of i32.add?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Related MCP server: speclib-mcp
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 in
vendor/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-mcpWire it into any MCP client by adding the server to its config (the launch command is the same everywhere; only the config file differs):
{
"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://mcp.xyzzylabs.ai/wasm/mcpGET /wasm/health reports status and the pinned SHAs; GET /wasm/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) — no
NPM_TOKEN. Configure it once on npmjs.com (wasm-mcp → Settings → Trusted Publisher → GitHub Actions: orgxyzzylabs, repowasm-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 a
WORKFLOW_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 anxyzzylabsorg secret — can serve both repos.)
License
MIT — see LICENSE.
Available Tools
9 toolsinstruction_getGet instructionARead-onlyInspect
Fetch one WebAssembly instruction by mnemonic (i32.add, br_if) or binary opcode (0x6a, 0xfd 0x89 0x02) as structured JSON: opcode bytes, category, introducing version, stack type signature, validation/execution prose anchors + spec URLs, and traps — the runtime conditions under which it traps (each with the spec's canonical trap name; empty + can_trap: false for instructions that never trap). Provide mnemonic or opcode (mnemonic wins if both match).
| Name | Required | Description | Default |
|---|---|---|---|
| opcode | No | Binary opcode as hex bytes, e.g. `0x6a`, `6a`, or multi-byte `0xfd 0x89 0x02`. Exact match. Used when `mnemonic` is absent or doesn't match. | |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
| mnemonic | No | Instruction mnemonic, e.g. `i32.add`, `br_if`, `local.get`. Case-insensitive. Exact match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, and the description adds value by detailing the output fields (opcode bytes, category, version, traps, etc.). It does not contradict annotations. However, it does not discuss authentication or rate limits beyond what is implied by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The main purpose is front-loaded, and details about output fields follow. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description enumerates all expected output fields (opcode bytes, category, version, stack signature, validation/execution prose anchors, spec URLs, traps). This is complete for a single-instruction fetch tool with 3 optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters well. The description adds extra semantics: 'mnemonic wins if both match' and clarifies opcode format (hex bytes). This provides useful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool fetches one WebAssembly instruction by mnemonic or binary opcode, clearly distinguishing it from siblings like instruction_list (lists all) and instruction_search (searches). The verb 'Fetch' and resource 'instruction' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear disambiguation (mnemonic wins if both match) and explains when opcode is used. However, it does not explicitly state when not to use this tool or list alternatives beyond the sibling tools, which is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instruction_listList instructionsARead-onlyInspect
Enumerate WebAssembly instructions with optional filters: category (control, numeric, parametric, variable, table, memory, ref, i31, struct, array, extern, vec), introduced_in (1.0 | 2.0 | 3.0), prefix (mnemonic prefix like i32.), and can_trap (only trapping / only non-trapping instructions). Returns lightweight rows (incl. can_trap) sorted by opcode; follow up with instruction_get for full detail incl. trap conditions.
| Name | Required | Description | Default |
|---|---|---|---|
| prefix | No | Filter to mnemonics starting with this prefix, e.g. `i32.` or `v128.`. Case-insensitive. | |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
| can_trap | No | Filter by trapping behavior: `true` keeps only instructions that can trap at runtime, `false` keeps only those that never trap. See instruction_get for the per-instruction trap conditions. | |
| category | No | Filter by instruction category: control, numeric, parametric, variable, table, memory, ref, i31, struct, array, extern, vec (vector/SIMD). | |
| introduced_in | No | Filter to instructions introduced in this WebAssembly version: `1.0`, `2.0`, or `3.0`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that results are sorted by opcode and includes the can_trap field, which adds behavioral context beyond the readOnlyHint annotation. It also references instruction_get for trap conditions, managing expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two well-structured sentences. Every element earns its place, with no redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's functionality, return format (lightweight rows, sorted, includes can_trap), and relationship to sibling tools. Given no output schema, it provides sufficient information for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds value by explaining the purpose of each filter, giving an example for prefix, and noting the return includes can_trap, thus providing meaningful context beyond schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Enumerate' with the resource 'WebAssembly instructions' and lists all optional filters, clearly defining the tool's scope. It distinguishes from the sibling 'instruction_get' by noting that tool provides full detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool returns lightweight rows and suggests following up with instruction_get for full detail, providing clear usage guidance. However, it could explicitly mention when not to use this tool versus alternatives like instruction_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instruction_searchSearch instructionsARead-onlyInspect
Search WebAssembly instructions by free-text query, matched against mnemonic (exact > substring), category name, and opcode hex. The entry point when you don't know the exact mnemonic. Returns ranked lightweight hits with a matched_on field; follow up with instruction_get.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max ranked hits returned. | |
| query | Yes | Search text. Matched against mnemonic (exact > substring), category name, and opcode hex. E.g. `extend`, `trunc`, `vec`, `0x6a`. | |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description aligns by describing a search operation. The description adds behavioral context like matching strategy (exact > substring) and the matched_on field, which extends beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with purpose. No unnecessary words, each sentence adds value: purpose, usage guidance, and what to expect in return.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters and no output schema, the description adequately covers the tool's behavior, return fields (matched_on), and follow-up action. It is complete for a search tool with well-documented parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by providing example queries and explaining the matching strategy, slightly exceeding the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Search WebAssembly instructions') and resources ('instruction list'), and distinguishes itself from siblings like instruction_get and instruction_list by stating it is the entry point when the exact mnemonic is unknown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'The entry point when you don't know the exact mnemonic', providing clear when-to-use context. It also advises to follow up with instruction_get for details, guiding the agent on the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proposal_listList WebAssembly proposalsARead-onlyInspect
List WebAssembly proposals and their phases from the pinned WebAssembly/proposals repository. Filter by status (phase-0…phase-5, finished, inactive), phase (0–5), champion substring, affects (finished proposals touching core / js-api / web-api), or contains (name/champion substring). Each row carries name, status, phase, champion, affected_specs, spec_version, and the proposal URL.
| Name | Required | Description | Default |
|---|---|---|---|
| phase | No | Filter by numeric phase 0–5 (active + finished proposals carry a phase). | |
| status | No | Filter by lifecycle status: `phase-0`…`phase-5`, `finished` (merged into the spec), or `inactive`. | |
| affects | No | Filter to finished proposals affecting a given spec: `core`, `js-api`, or `web-api`. | |
| champion | No | Champion substring, case-insensitive. | |
| contains | No | Name or champion substring, case-insensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation and adds value by detailing the source repository and the fields returned per row. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the main purpose, and every sentence provides necessary information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description enumerates the fields in each row, making the return value clear. All filter options are explained, ensuring completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with individual parameter descriptions. The tool description repeats and groups these parameters but does not add substantial new meaning beyond what the schema provides, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists WebAssembly proposals and their phases from a specific repository, with explicit filtering options. This distinguishes it from sibling tools focused on instructions, types, sections, and specs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and how to filter, but it does not explicitly state when to use this tool versus alternatives. However, the sibling tools are sufficiently distinct in purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
section_getGet spec sectionARead-onlyInspect
Fetch one spec clause by id or anchor, across core / js-api / web-api (set spec). For core: syntax-numtype, valid-unreachable, binary-instr, … For the embedding specs: modules, memories, streaming-modules, … Matches the rendered spec's stable fragment ids. Returns the clause title, cleaned prose, cross-references, the SpecTec formal_refs it cites (core), and the rendered URL. Core validation/execution clauses are SpecTec-generated: prose may be terse, but formal_refs + url point to the formal rule.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Clause id or anchor. For `core`: `syntax-numtype`, `valid-unreachable`, `binary-instr`, … For `js-api` / `web-api`: `modules`, `memories`, `streaming-modules`, … These match the stable fragment ids in the rendered spec. | |
| spec | No | Which WebAssembly spec to query: `core` (default; instructions, types, validation, execution, formats), `js-api` (JavaScript embedding), or `web-api` (Web platform integration). | core |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the `readOnlyHint` annotation by indicating a fetch operation. It adds valuable context about the nature of core validation/execution clauses being SpecTec-generated with terse prose but pointing to formal rules via `formal_refs` and URL. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is adequately concise and front-loaded with the core purpose. It includes useful examples and return information without unnecessary fluff. A minor improvement could be slightly shorter sentences, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently outlines what the tool returns (clause title, cleaned prose, cross-references, formal_refs, rendered URL). It covers the main behavioral expectations and output structure, making it complete for the agent to understand the tool's functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for all three parameters. The tool description adds substantial meaning beyond the schema by providing concrete examples of valid `id` values (e.g., `syntax-numtype`, `valid-unreachable`) and explaining that these match stable fragment IDs in the rendered spec.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetch' and resource 'spec clause by id or anchor', clearly stating its purpose. It distinguishes itself from sibling tools like `section_list` and `spec_version` by focusing on fetching a single clause by identifier, not listing or searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: to retrieve a specific clause by its id/anchor across different specs (core, js-api, web-api). It implicitly differentiates from siblings like `section_list` by focusing on individual clause retrieval, though it does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
section_listList spec sectionsARead-onlyInspect
Enumerate spec clauses for navigation, across core / js-api / web-api (set spec). Filter by source path (core: intro, syntax, valid, exec, binary, text, appendix, or sub-paths like syntax/types), anchor_prefix, titled_only, and max_level. Returns lightweight rows {id, anchors, title, level, path, url}; follow up with section_get.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter to a source path / prefix. Top-level areas: `intro`, `syntax` (structure), `valid` (validation), `exec` (execution), `binary`, `text`, `appendix`. Sub-paths like `syntax/types` also work. | |
| spec | No | Which WebAssembly spec to query: `core` (default; instructions, types, validation, execution, formats), `js-api` (JavaScript embedding), or `web-api` (Web platform integration). | core |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
| max_level | No | Cap heading depth (1 = page titles only). Anchor-only blocks are unaffected. | |
| titled_only | No | Drop anchor-only content blocks (keep only clauses with a heading). | |
| anchor_prefix | No | Filter to clauses whose id/anchor starts with this prefix, e.g. `syntax-`, `valid-`, `exec-`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that it returns lightweight rows for navigation, which is consistent. It does not contradict annotations. The description adds context about the return structure and filtering, but does not mention rate limits or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that immediately convey the core action and key parameters. No wasted words. The structure is front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters with full schema coverage, no output schema, the description provides a complete picture: what it does, key filters, and the return structure. It also suggests a follow-up tool, which enhances completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions. The description adds value by listing specific values for path and spec, and summarizing the filter parameters. This goes beyond the schema's individual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it enumerates spec clauses for navigation, specifying the spec parameter and filters. Distinguishes from sibling tools like section_get (which retrieves a single section) and instruction_list. The verb 'enumerate' plus 'for navigation' gives a specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions the spec parameter and suggests follow-up with section_get. Provides a clear usage context for navigation. Does not explicitly state when not to use, but the follow-up suggestion implies appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spec_searchSearch specARead-onlyInspect
Full-text search across the section index of a spec (core / js-api / web-api, set spec) — clause anchors/ids, titles, and prose. The entry point when you don't know the exact anchor. Returns ranked hits with a matched_on field (anchor-exact > title > anchor > prose) and a prose snippet for body matches; follow up with section_get.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | No | Which WebAssembly spec to query: `core` (default; instructions, types, validation, execution, formats), `js-api` (JavaScript embedding), or `web-api` (Web platform integration). | core |
| limit | No | Max ranked hits returned. | |
| query | Yes | Search text. Matched against clause anchors/ids, titles, and prose. E.g. `block type`, `trap`, `funcref`, `streaming compilation`. | |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate readOnlyHint=true, and the description describes a read-only search operation with no contradiction. It adds transparency by explaining the ranking order ('anchor-exact > title > anchor > prose') and that a prose snippet is included for body matches. This provides behavioral detail beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences plus a clear follow-up instruction. It is front-loaded with the primary purpose and uses no unnecessary words. Every sentence contributes to understanding the tool's function and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters and no output schema. The description explains the search scope, ranking, the 'matched_on' field, and suggests a follow-up tool. While it does not detail the exact response structure, it provides sufficient context for an agent to use the tool and interpret results. For a search tool, this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description adds minimal extra semantics: it relates the 'spec' parameter to the index being searched and explains that 'query' matches against multiple fields. However, the schema already documents these details sufficiently, so the description provides marginal added value. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs 'Full-text search across the section index of a spec' and enumerates the specific specs (core/js-api/web-api). It explicitly describes what is matched (clause anchors/ids, titles, prose) and distinguishes itself as the entry point when the exact anchor is unknown, with a follow-up suggestion to section_get. This is specific and distinguishes from sibling tools like section_get or instruction_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'The entry point when you don't know the exact anchor. ... follow up with section_get,' providing clear usage context and a recommended next step. It also lists the three spec values, guiding selection. However, it does not explicitly state when not to use this tool (e.g., when the exact anchor is known), though that is implied by the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spec_versionPinned spec versionARead-onlyInspect
Return self-description of this MCP server: package name + version, plus the pinned upstream commit SHA for every spec snapshot baked into the package. Use this first when citing the spec, or to verify the server's freshness and reproducibility.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. Description adds value by detailing the return content (package info, commit SHAs) and purpose of reproducibility verification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, efficiently packed with purpose and usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and good annotations, the description fully covers what the agent needs: purpose, usage context, and return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline is 4. Description does not need to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns self-description: package name, version, and pinned upstream commit SHA. It contrasts with sibling tools that fetch specific content like instructions or types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use this tool first when citing the spec or verifying freshness and reproducibility. Does not list when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_getGet typeARead-onlyInspect
Look up a WebAssembly type or type form by name: concrete value types (i32, i64, f32, f64, v128, funcref, externref, …) or type forms (functype, limits, memtype, tabletype, globaltype, reftype, valtype, rectype, heaptype, …). Returns its classification, sibling members for category types, defining clause prose, SpecTec formal-rule references, and the rendered spec URL.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Type or type-form name. Concrete value types: `i32`, `i64`, `f32`, `f64`, `v128`, `funcref`, `externref`, … Type forms: `functype`, `limits`, `memtype`, `tabletype`, `globaltype`, `reftype`, `valtype`, `rectype`, `heaptype`, … Case-insensitive, exact match. | |
| version | No | WebAssembly spec version to query. `latest` (default) is the current served version; `main` is the upstream working draft. | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds behavioral context beyond annotations: it details the return components (classification, sibling members, clause prose, SpecTec references, spec URL). This gives the agent a good understanding of what to expect without contradicting the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently packs the core purpose, examples, and return types. Every phrase adds value, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, 100% schema coverage, no output schema, and readOnlyHint annotation, the description adequately covers what the tool does and returns. It does not explain error behavior (e.g., if name is not found), but given the simplicity and good schema annotations, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by providing examples of accepted values for the 'name' parameter (e.g., 'i32', 'functype') and noting case-insensitivity, which goes beyond the schema's basic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'look up' and clearly identifies the resource as 'WebAssembly type or type form by name'. It lists concrete value types and type forms, and specifies the outputs (classification, sibling members, defining clause prose, SpecTec references, spec URL), distinguishing it from sibling tools that focus on instructions, sections, or proposals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use the tool (to look up a type or type form) and what it returns. However, it does not explicitly state when not to use it or provide direct comparison with sibling tools such as instruction_get or spec_search. The context signals indicate siblings, but the description lacks 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.2.22- First observed
instruction_get - First observed
instruction_list - First observed
instruction_search - First observed
proposal_list - First observed
section_get - First observed
section_list - First observed
spec_search - First observed
spec_version - First observed
type_get
TDQS
Scored across 9 tools
Each tool targets a distinct aspect: server metadata, instructions (with clear get/list/search separation), type lookup, spec sections (get/list/search), and proposals. No overlapping purposes; an agent can easily distinguish them.
Most tools follow a noun_verb pattern (e.g., instruction_get, type_get, section_list). The exception is spec_version (noun_noun), but it's a single outlier and still readable. Overall pattern is predictable.
9 tools is well-scoped for a WebAssembly spec reference server. Each tool provides unique functionality without being too few or too many, covering instructions, types, sections, and proposals.
The tool set covers the core reference needs: instruction lookup/enumeration/search, type lookup, spec section navigation and search, and proposal listing. There are no obvious gaps for the server's purpose of providing spec information.
Maintenance
Related MCP Connectors
Independent MCP server for the TC39 specs (ECMA-262 + ECMA-402): clauses, search, diffs, history.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
MCP server for querying Forkast documentation
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP Server for accessing W3C/WHATWG/IETF web specifications. Provides AI assistants with access to official web standards data including specifications, WebIDL definitions, CSS properties, and HTML elements.113554MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI agents to search, discover, and retrieve technical specifications from a SpecLib instance. It provides tools for full-text search, scope listing, and reading specs as markdown content.-
- AlicenseNot gradedqualityCmaintenanceMCP server for exploring the ECMAScript specification and its implementation, enabling semantic search of spec sections, JavaScript execution in engine262, and access to a knowledge graph linking spec sections to implementation functions.8ISC
- AlicenseAqualityBmaintenanceRead-only MCP server for precise lookup, search, and versioned retrieval of OWASP testing guides (WSTG, MASTG, ISTG, AITG) with full provenance on every result.11Apache 2.0