@intentqa/mcp
v2.0.0
Published
Model Context Protocol server for intentqa: catalog, feature validation, lint, audit, triage.
Maintainers
Readme
@intentqa/mcp
A Model Context Protocol server over the intentqa CLI. JSON-RPC 2.0 on stdio.
{
"mcpServers": {
"intentqa": {
"command": "npx",
"args": ["-y", "@intentqa/mcp"]
}
}
}intentqa init writes that file for you. To check the install without standing
up a client:
npx @intentqa/mcp --toolsTools
| Tool | Writes | |
|---|---|---|
| intentqa_context | | The catalog, controls, config, features, workflow, refusals and exit codes — one call. Start here. |
| intentqa_catalog | | The vocabulary. view: json \| prompt \| snippets. |
| intentqa_explain | | One entry: params, types, enum values, risk, an example line. |
| intentqa_validate_feature | | Resolve draft Gherkin passed as text. Writes nothing. |
| intentqa_controls | | The control inventory; with check and a url, what the app is missing. |
| intentqa_lint | | Hard sleeps, focused tests, stale specs, raw locators. |
| intentqa_audit | | Vocabulary size and reuse against the budget. |
| intentqa_check | | The full pre-handoff gate. What CI runs. |
| intentqa_trace | | Requirement-to-test coverage from @req: tags. |
| intentqa_triage | | Classify failures in a Playwright JSON report. |
| intentqa_generate | yes | Compile features to specs. check: true is read-only. |
| intentqa_propose | yes | Queue a vocabulary gap for a human to turn into a step. |
| intentqa_rules | | Workflow, refusals, exit codes. Works with no config present. |
Every tool takes an optional cwd, so one server can serve several projects.
All but the two marked report readOnlyHint: true — a client can auto-approve
them and save the prompt for the two that write.
The model still only picks catalog ids. It cannot invent a step.
What is deliberately absent
No locator repair. There is no tool that asks a model to fix or invent a
selector. Run intentqa_controls with check and a url to get the list of
missing data-testid attributes, then add them to the application. That is J7,
and it is why a generated spec is worth reviewing.
No test runner. intentqa run launches browsers and can take minutes;
holding a JSON-RPC call open for that is a bad trade. Run it in a shell and
bring the report back through intentqa_triage.
Notes for anyone adding a tool
- Run the handler inside
runCaptured. stdout on this transport carries JSON-RPC only, and every intentqa command prints for a human. One strayui.success()corrupts the stream and disconnects the client. - Set
readOnlyhonestly. Clients auto-approve read-only tools. - No MCP SDK dependency: the protocol is ~150 lines in
src/protocol.ts, for the same reason the planner adapter is optional — nothing here should put a network install between the tool and a locked-down CI runner.
test/protocol.test.ts covers the handshake and framing against
handleMessage directly; test/tools.test.ts drives the real tool set through
tools/call against a project on disk.
