Skip to main content

See what an MCP server exposes before you trust or connect it.

Project description

mcp-preflight

Downloads PyPI version

ls -la for MCP servers. See what an MCP server exposes before you connect it.

Install

pipx install mcp-preflight

Quick start

mcp-preflight "npx @modelcontextprotocol/server-filesystem /tmp"

Example output

my-server (MCP 2025-03-26)

  Caution: the server process runs locally without sandboxing.
  Use --isolate-home to prevent access to your real HOME directory.

  MCP Tools (client-visible):
    🟢 list_items     "List all items in the database"
    🟢 get_item       "Get a single item by ID"
    🟡 create_item    "Create a new item"
    🟡 update_item    "Update an existing item"
    🔴 delete_item    "Permanently delete an item"

  Resources:
    📄 my-server://items
    📄 my-server://items/{id}

  Action-level Capabilities (server-declared, 12 operations across 3 tools):
    Not directly visible via MCP introspection.
    These represent additional actions exposed behind the tools above.
      ↳ items (8): list, get, create, update, delete, search, export, archive
      ↳ reports (3): daily, weekly, monthly
      ↳ auth_login (single action)

  Prompts:
    💬 analyze_items (project_name)

  Risk summary:
    write: 2
    destructive: 1
    read-only: 2
    (best-effort heuristic from tool names/descriptions; not enforced)

Common workflows

# Run against your own server
mcp-preflight "uv run server.py"
mcp-preflight "npx my-mcp-server"
mcp-preflight "python3 /path/to/server.py"

# Save a report (JSON)
mcp-preflight --save report.json "uv run server.py"

# Diff two saved reports
mcp-preflight diff before.json after.json

# JSON output
mcp-preflight --json "uv run server.py"

Notes

  • Runs the server locally in inspection mode (no tools are executed).
  • Lists exposed MCP tools, resources, and prompts.
  • If a single tool supports multiple actions, publish a {scheme}://mcp/manifest resource so preflight can surface and diff them. See server manifest docs.
Auth-gated servers / custom env

Some MCP servers only reveal tools/resources after authentication. mcp-preflight does not run login flows, so it may report capabilities as not enumerable until credentials are provided.

# Pass a token via env
mcp-preflight --env MCP_SERVER_TOKEN=... "npx -y my-mcp-server"

# Point HOME (and XDG_* dirs) somewhere else (useful for servers that read ~/.config, ~/.local, etc.)
mcp-preflight --home /tmp/mcp-preflight-home "npx -y my-mcp-server"

# Isolate HOME entirely to reduce side effects/pollution
mcp-preflight --isolate-home "npx -y my-mcp-server"
Risk classification heuristic

Based on tool names and descriptions (conservative by default):

  • 🟢 read-only: get, list, search, read, fetch, find, show, view
  • 🟡 write: create, add, update, set, send, write, upload
  • 🔴 destructive: delete, remove, destroy, drop, purge, clear, reset
  • Unknown → 🟡 (assume write until proven otherwise)
Signals (heuristic)

mcp-preflight can emit “signals” based on text matching (best-effort). These are hints, not guarantees, and may have false positives/negatives.

Disable with:

mcp-preflight --no-signals "uv run server.py"

Non-goals

  • No sandboxing
  • No policy enforcement
  • No runtime analysis

This tool inspects exposed MCP capabilities. It does not call tools (call_tool). Manifest data is read via read_resource — no server state is mutated.

Support

  • Bugs / feature requests: https://github.com/jordanstarrk/mcp-preflight/issues

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

mcp_preflight-0.3.0.tar.gz (23.9 kB view details)

Uploaded Source

Built Distribution

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

mcp_preflight-0.3.0-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file mcp_preflight-0.3.0.tar.gz.

File metadata

  • Download URL: mcp_preflight-0.3.0.tar.gz
  • Upload date:
  • Size: 23.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mcp_preflight-0.3.0.tar.gz
Algorithm Hash digest
SHA256 fec553f9f211271245bd8df6e1ed712147c6b7eee8d818580391c29b1f76733e
MD5 d0f9bd7c8ba55e7635cf2ee69ec883b8
BLAKE2b-256 3f4e247fe8f1cc1daeaba3f0c2d9f2a8222e319a629182a5988812aab9be6933

See more details on using hashes here.

File details

Details for the file mcp_preflight-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_preflight-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mcp_preflight-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5dbd9f31cb16807419c7cd4fe16949c17377204cd1d187966b6dd1f664cc91e4
MD5 6f34582c886c1e9afba9cdc88684b2f3
BLAKE2b-256 68db2f913dfc0514be391b942cc29b4a7bb2d509aac700dc86ccf0884c3f734d

See more details on using hashes here.

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