Skip to main content

MCP Readiness Scanner

Production readiness scanner for MCP servers and agentic AI tools

Python 3.11+ License: Apache-2.0 CI


Note: For security scanning, see Cisco's MCP Scanner. This tool focuses on operational readiness — whether your MCP tools will behave reliably in production.


What It Does

MCP Readiness Scanner analyzes MCP tool definitions and configurations for operational issues like:

  • Missing timeout guards — Will operations hang indefinitely?
  • Unsafe retry loops — Could retries cause resource exhaustion?
  • Silent failure paths — Are errors properly surfaced?
  • Overloaded tool scope — Is the tool trying to do too much?
  • Missing error schemas — Can agents handle failures programmatically?

Quick Start

# Install
pip install mcp-readiness-scanner

# Scan a tool definition
mcp-readiness scan-tool --tool my_tool.json

# Scan an MCP config
mcp-readiness scan-config --config-file ~/.config/mcp/config.json

# List available providers
mcp-readiness list-providers

No API keys required. Works out of the box with zero external dependencies.

Example Output

$ mcp-readiness scan-tool --tool examples/sample_tool_definitions/bad_tool.json --format markdown

# MCP Readiness Scan Report

## Summary
**Target:** `examples/sample_tool_definitions/bad_tool.json`
**Readiness Score:** **25/100** (Critical)
**Production Ready:** No ❌

### Findings Overview
| Severity | Count |
|----------|-------|
| 🔴 Critical | 0 |
| 🟠 High | 1 |
| 🟡 Medium | 4 |
| 🔵 Low | 2 |
| ⚪ Info | 0 |

## Findings

### 🟠 High (1)
#### 1. No timeout configuration
- **Category:** Missing Timeout Guard
- **Location:** `tool.do_everything`

Tool 'do_everything' does not specify a timeout. Operations may hang indefinitely...

Features

Inspection Providers

Provider Status Dependencies Description
Heuristic ✅ Always Available None Static analysis for common issues
YARA Optional yara-python Pattern matching on metadata
OPA Optional opa binary Policy-based checks with Rego
LLM Judge Disabled by default LiteLLM + model Semantic analysis

Output Formats

  • JSON — For CI pipelines and programmatic consumption
  • Markdown — For PR comments and human review
  • SARIF — For GitHub Code Scanning integration

Operational Risk Categories

Category Description
silent_failure_path Tool may fail without surfacing errors
non_deterministic_response Response format varies unpredictably
missing_timeout_guard Operations may hang indefinitely
no_observability_hooks Lacks logging, metrics, or tracing
unsafe_retry_loop Retry logic may cause resource exhaustion
overloaded_tool_scope Too many capabilities in one tool
no_fallback_contract No graceful degradation defined
missing_error_schema Error responses lack structure

Installation

# Basic installation
pip install mcp-readiness-scanner

# With YARA support
pip install mcp-readiness-scanner[yara]

# With all optional dependencies
pip install mcp-readiness-scanner[all]

Optional Dependencies

# For YARA pattern matching
pip install yara-python

# For OPA policy checks
brew install opa  # macOS
# or download from https://www.openpolicyagent.org/

# For LLM semantic analysis
pip install litellm
export MCP_READINESS_LLM_MODEL=ollama/llama2  # or gpt-4, claude-3-sonnet, etc.

CI/CD Integration

GitHub Actions

name: MCP Readiness Check
on: [push, pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - run: pip install mcp-readiness-scanner
      - run: mcp-readiness scan-tool --tool tool.json --format sarif -o results.sarif
      - uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif

Exit Codes

Code Meaning
0 Success (no critical/high findings)
1 High severity findings found
2 Critical findings found

Configuration

Create .mcp-readiness.toml in your project:

[scan]
fail_on_critical = true
fail_on_high = false
min_score = 70

[heuristic]
max_capabilities = 10

[yara]
enabled = true

[llm]
enabled = false  # Disabled by default
model = "ollama/llama2"

Or use environment variables:

export MCP_READINESS_SCAN_FAIL_ON_CRITICAL=true
export MCP_READINESS_SCAN_MIN_SCORE=70

Programmatic Usage

import asyncio
from mcpreadiness import ScanOrchestrator
from mcpreadiness.providers import HeuristicProvider

async def main():
    orchestrator = ScanOrchestrator()
    orchestrator.register_provider(HeuristicProvider())

    result = await orchestrator.scan_tool({
        "name": "my_tool",
        "description": "Does something useful",
        "timeout": 30000,
    })

    print(f"Score: {result.readiness_score}/100")
    print(f"Ready: {result.is_production_ready}")

asyncio.run(main())

Documentation

  • Architecture — System design and components
  • Taxonomy — Operational risk categories explained
  • Providers — How to use and create providers
  • Usage — Detailed CLI and configuration guide

Contributing

Contributions are welcome! Please see our contributing guidelines.

# Development setup
git clone https://github.com/mcp-readiness/scanner
cd scanner
pip install -e ".[dev]"

# Run tests
pytest

# Run linting
ruff check mcpreadiness tests

License

Apache-2.0 — See LICENSE for details.


MCP Readiness Scanner — Because production reliability matters.

Metadata

Release files for mcp-readiness-scanner 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mcp-readiness-scanner 0.1.0
File Size Uploaded Provenance
mcp_readiness_scanner-0.1.0.tar.gz 77.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for mcp-readiness-scanner 0.1.0
File Interpreter ABI Platform
mcp_readiness_scanner-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 150.8 kB

Release files / mcp_readiness_scanner-0.1.0.tar.gz

Download URL mcp_readiness_scanner-0.1.0.tar.gz
Size 77.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5ae8882c8c91af97263768c66a46be66e0c3fb60f8bbac4e2ca0f9a4b4448574
BLAKE2b-256 checksum
How to use checksums
440cc4fc0658860d5431ab648e8c584a1cc673c7485eb755560e87ce03454f7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Release files / mcp_readiness_scanner-0.1.0-py3-none-any.whl

Download URL mcp_readiness_scanner-0.1.0-py3-none-any.whl
Size 73.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7f6ddbcd88d888255dab6d3faeb388bf2ad3be89080906a7caa16321482e9ea0
BLAKE2b-256 checksum
How to use checksums
27a76919c360aae5e8270f76d5379ac4c000499b7d2b65c400f9005865e05406
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Security for mcp-readiness-scanner 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page