createmcps.com

CLI

npx createmcps validate runs the same 79-rule check the website does, from your terminal or a CI pipeline — free, with no separate install step. It is published on npm as createmcps and has no runtime dependencies.

How do I run the CLI?

Basic
npx createmcps validate https://mcp.example.com/mcp
Machine-readable, for scripts and CI
npx createmcps validate https://mcp.example.com/mcp --format json
Check a server.json without any network access
npx createmcps validate ./server.json --offline

How do I check MCP compliance in CI?

This is the habit-forming part — a compliance regression fails the build the same way a broken test would.

.github/workflows/mcp-compliance.yml — complete, valid workflow file
name: MCP Compliance

on: [push, pull_request]

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - name: Validate MCP server
        run: npx createmcps validate https://mcp.example.com/mcp

To see each failing rule as an annotation on the pull request, run with --format sarif and upload the file with GitHub's upload-sarif action. A fail maps to a SARIF error and a warn to a warning.

What do the CLI exit codes mean?

  • 0No failures at or above --fail-on — safe to pass a CI gate
  • 1One or more rule failures
  • 2No verdict — target unreachable, refused, or nothing could be checked
  • 3Usage error, or the validator itself could not run (not a finding)

A server we couldn't reach is exit 2, not 1 — a CI gate can tell “your server broke a rule” apart from “we couldn't reach your server at all.” And a crash in our checker is exit 3, never 0, so a build can't go green because the validator fell over.

What options does it take?

  • --format <text|json|sarif>

    Output format (default text). sarif uploads to GitHub code scanning.

  • --fail-on <fail|warn|never>

    When to exit non-zero (default fail).

  • --offline

    Check a local server.json's structure only. Sends nothing anywhere.

  • --api <url>

    Validate through a different deployment (default https://createmcps.com).

  • --quiet

    Suppress the summary line.

What leaves my machine?

A live URL is validated by createmcps.com, not inside the package. That keeps the rule set current — a copy bundled into your CI would go stale and report green while the spec moved — and keeps the SSRF-safe probe sandbox in one place. So the CLI sends your target URL to createmcps.com, and the resulting report is public by default at the link printed in the output.

If that isn't acceptable, --offline sends nothing anywhere and checks a local server.json's structure, and --api points the CLI at your own deployment. Offline mode checks the fields a registry publish requires; it does not confirm a publish will succeed.

Or use the web validator →

$ npx createmcps validate https://mcp.example.com/mcp

fail MCP-HDR-004 Accepted the request when MCP-Protocol-Version was omitted

fail MCP-SEC-001 Accepted a request with an unrecognised Origin

https://mcp.example.com/mcp — grade unrated, 46% coverage, dual era

2 fail · 0 warn · 33 pass · 3 info · 21 skipped

https://createmcps.com/report/68aa4e04

Example output. Failures print first; passes are counted in the summary rather than listed. This run exits 1.