mcp.json
{
"mcpServers": {
"suspec": {
"command": "/absolute/path/to/suspec-mcp/bin/suspec-mcp.js",
"args": ["--suspec-bin", "/absolute/path/to/suspec-cli/bin/suspec.js"]
}
}
}suspec check for shell-less MCP clients. Two tools, local stdio, no verdict.
Terminal clients run suspec check directly. suspec-mcp gives shell-less clients the same checks over local stdio. Adapter, not second opinion.
client request
local stdioClaude Desktop, Cursor, or anything that speaks MCP without a shell.
A local process pipe, not a hosted service.
A thin, hardened adapter: fixed argv, allow-listed flags, no-verdict envelope.
The CLI records the facts: check ids, severity, exit code.
Exactly the files you name, by explicit path. Read-only.
mcp.json
{
"mcpServers": {
"suspec": {
"command": "/absolute/path/to/suspec-mcp/bin/suspec-mcp.js",
"args": ["--suspec-bin", "/absolute/path/to/suspec-cli/bin/suspec.js"]
}
}
}The server treats every client input as hostile and every result as facts-only: two tools, one verb reaching the CLI, no writes, and no review result. Ever.
suspec_check and suspec_get_checks. Shell-capable clients can use the CLI.
ok means the CLI returned parseable output. Verdicts stay human.
Absolute paths only. No workspace or artifact discovery.
Fixed argv, allow-listed flags, read-only. Relays suspec check --json.
One runs the checks over explicit artifact paths; one prints the contract they use. Both shell out to suspec check --jsonand relay the CLI's facts.
check
suspec_checkCheck ordered absolute paths. Reviews name spec and optional task companions.
contract
suspec_get_checksReturn the contract version and each check's id, name, and severity.
For a review, spec is always required and taskexactly when the review's frontmatter names a task:. A missing companion surfaces the CLI's own blocking refusal — never a silently shallower check.
Every result uses the same structure. ok means the CLI ran. Whether the artifact is clean lives in the facts; the server never adds an assessment of its own.
envelope
okRunnability, not a result: the CLI ran and returned a parseable payload. A check that found blocking diagnostics is still ok: true.
sourceProvenance: the exact CLI command run and its exit code — 0 clean · 1 warning · 2 blocking.
dataThe CLI's --json facts, verbatim or a targeted slice: level, diagnostics, locations.
noVerdictIssuedAlways true. On every result.
resources
suspec://checksThe checks contract as a fixed resource — the same payload as suspec_get_checks.
The package exposes a suspec-mcp binary. It expects the Suspec CLI on PATH. Use SUSPEC_BIN or --suspec-bin to set the binary explicitly.
# install from source; no published package yet
$ git clone https://github.com/jcosta33/suspec-mcp
$ cd suspec-mcp
$ corepack enable
$ pnpm install --frozen-lockfile
Source, issues, and tests live on GitHub. The CLI reference covers the check surface this adapter borrows.