Skip to main content

CLI tool to analyze your MCP server and get a comprehensive report on its quality

Project description

MCPScore

CI Coverage PyPI Python License

A command-line tool for auditing MCP (Model Context Protocol) servers. MCPScore connects to your server, runs a comprehensive set of validation rules against it, and produces a severity-based report showing what's compliant and what needs attention.

Why MCPScore?

MCP servers that violate the spec fail silently in the worst place: inside someone else's AI agent. A missing tool description, an outdated protocol version, or an unencrypted endpoint won't crash your server — it will just make agents pick the wrong tool, drop your server from their registry, or leak traffic. MCPScore catches these issues in seconds, before your users do.

pip install mcpscore
mcpscore https://your-server.example/mcp

How scoring works

Every rule has a severity, and each passing rule contributes its weight to the score:

Severity Points Meaning
CRITICAL 5 Spec violations that break interoperability (protocol version, server name, TLS)
HIGH 3 Strong spec expectations (server version, valid tool schemas)
MEDIUM 2 Recommendations that improve agent UX (titles, descriptions, error hygiene)
LOW 1 Nice-to-haves (capability extras, transport recommendations)

The final score is reported as earned/maximum — higher means better MCP compliance.

Features

  • Multiple transports: STDIO (local servers), Streamable HTTP, and SSE (remote servers)
  • Auto-detection: Picks the right transport automatically — tries Streamable HTTP first, falls back to SSE for URLs
  • Real handshake verification: A connection only counts once the server completes the MCP initialize handshake — pointing it at a non-MCP endpoint fails cleanly
  • Multi-language: Audits both Python (.py) and Node.js (.js) MCP servers via STDIO
  • Severity-based reporting: Rules categorized as CRITICAL, HIGH, MEDIUM, or LOW
  • Library-friendly: Fully typed (py.typed); use MCPClient + MCPAuditor programmatically

What it audits

  • Protocol Version Compliance:

    • ✅ Allowed versions check (CRITICAL)
    • ✅ Latest version recommendation (MEDIUM)
    • ✅ Deprecated version detection (HIGH)
  • Server Information:

    • ✅ Server name presence (CRITICAL)
    • ✅ Server title presence (MEDIUM)
    • ✅ Server version presence (HIGH)
  • Capabilities: Tools, resources, prompts, logging, and subscription support

  • Tools: Names (presence, uniqueness, format), titles, descriptions, and JSON Schema validity of input/output schemas

  • Security:

    • ✅ HTTPS/TLS usage with the actually negotiated TLS version
    • ✅ Valid certificate checks
    • ✅ Error responses checked for data leaks
  • Transport:

    • ✅ Streamable HTTP usage (the current MCP standard; SSE-only servers get migration advice)

Requirements

  • Python 3.11+
  • Node.js on PATH if auditing a Node.js MCP server
  • A Python interpreter on PATH if auditing a Python MCP server

Installation

pip install mcpscore

Or with uv:

uv tool install mcpscore

Quick start

Run mcpscore against any MCP server — local script or remote URL. The transport is detected automatically.

# Local Python MCP server (STDIO)
mcpscore path/to/your/server.py

# Local Node.js MCP server (STDIO)
mcpscore path/to/your/server.js

# Remote MCP server (auto-detects Streamable HTTP or SSE)
mcpscore https://example.com/mcp

Example output

Welcome to MCPScore!
Connected to the MCP server: /path/to/server.py
Transport: stdio
Starting the audit...
✅ Protocol version '2025-11-25' is one of the allowed versions
✅ Protocol version '2025-11-25' is not deprecated
✅ Protocol version '2025-11-25' is the latest version
✅ Server name is present: 'weather'
✅ Server version is present: '1.17.0'
❌ Server title is not present in server info
✅ Tools capability is present
❌ listChanged is not supported by Tools
✅ Prompts capability is present
❌ listChanged is not supported by Prompts
✅ Resources capability is present
❌ listChanged is not supported by Resources
❌ subscribe is not supported by Resources
❌ Logging is not present in capabilities
✅ MCP Server provides at least one tool
✅ All Tools have a Name property specified
✅ All Tools have a Title property specified
✅ All Tools have a Description property specified
✅ All Tools have a valid Input Schema
✅ All Tools have a valid Output Schema
Audit finished. Final score: 55/71

Troubleshooting

Connection fails

  • Check the path or URL is correct and reachable
  • For local servers, make sure Python or Node.js is on PATH
  • "Not a valid MCP server (handshake failed)" means the endpoint responded but did not complete the MCP initialize handshake — verify the URL points at an actual MCP endpoint (often /mcp)

Protocol version errors

  • Confirm your server uses a currently supported MCP protocol version
  • If your server uses a newer version that MCPScore doesn't yet recognize, please open an issue

Contributing

See CONTRIBUTING.md for development setup and how to add audit rules. Security reports: SECURITY.md. Release history: CHANGELOG.md.

Feedback

Bug reports, feature requests, and general feedback are welcome at https://github.com/mcp-box/mcpscore/issues.

License

MIT — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcpscore-0.4.0.tar.gz (42.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcpscore-0.4.0-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file mcpscore-0.4.0.tar.gz.

File metadata

  • Download URL: mcpscore-0.4.0.tar.gz
  • Upload date:
  • Size: 42.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcpscore-0.4.0.tar.gz
Algorithm Hash digest
SHA256 f28158ae074f88ff657e227e08cc8e54aaa532ac3abce9c0557aa6b825bbf205
MD5 72bff265a3c3261be0a032432fb29923
BLAKE2b-256 5902ea1bacd49a50191f0e7a49c219db745513a2ed17b0d65ba357ca40d15575

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpscore-0.4.0.tar.gz:

Publisher: publish.yml on mcp-box/mcpscore

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcpscore-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: mcpscore-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcpscore-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b862c8af258cf4b67dfd7f8e8f717dfb00d42ebefbf360a927cc44cc88adea7f
MD5 bdaccb9519fc2a57692807fa6f12dd17
BLAKE2b-256 b87f2f63e7ecca37f12bb9e97fa6b164d1c1e66da20708c95cf8467cbb5943d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpscore-0.4.0-py3-none-any.whl:

Publisher: publish.yml on mcp-box/mcpscore

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page