First public release — a provider- and language-agnostic static linter for MCP setup correctness: tool definitions, server.json registry manifests, and client configs. Spec baseline: MCP 2025-11-25.
What it checks
- MCP-spec + JSON-Schema correctness for tool definitions,
server.json, and client configs (.mcp.json/claude_desktop_config.json), auto-detected by shape. - Provider portability against declarative profiles —
anthropic,openai,gemini, andgeneric-strict, each verified from the consumer's own docs (plus amistralstub showing the extension pattern). Catches "legal per MCP but rejected by the provider" bugs like a dotted tool name. - Three severity tiers:
error(spec MUST / would 400),warn(spec SHOULD),info(portability + quality).
Usage
# CLI (also on npm: mcpconform@0.1.0)
npx mcpconform server.json .mcp.json --target anthropic,openai
# live server, any language, via the MCP stdio handshake
mcpconform inspect --target anthropic,openai -- python server.pyGitHub Action
- uses: cejor6/mcpconform@v1
id: mcpconform
with:
files: server.json .mcp.json
targets: anthropic,openai
- uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: ${{ steps.mcpconform.outputs.sarif }}Emits SARIF for GitHub code scanning. Engine stays vendor-agnostic — a new provider or host is a profiles/*.json file, never a code change.