PackMCP helps you build smaller, safer MCP toolsets for real tasks.
Instead of handing every tool to the agent, PackMCP lets you:
- inspect a
tools/listmanifest or raw tool array - estimate how much tool metadata costs in context tokens
- spot risky write, merge, deploy, or dispatch tools early
- score tools against a concrete task and pack profile
- generate a reusable PackMCP pack JSON with only the selected tools
- replay a saved pack or allowlist against a newer manifest and detect drift
- fingerprint saved tool definitions so drift checks catch schema changes, not just missing names
- export a tighter allowlist for Python and TypeScript runtimes
- run the same analysis from the CLI for scripts and CI
- compare two MCP manifests before migration or rollout
- analyze a real
mcp.jsonserver through the official MCP Inspector CLI
As of 2026-03-20, MCP is already broad enough that the problem is no longer just connection setup. The more common problem is tool overload:
- too many tools in the prompt
- too many side-effecting actions exposed by default
- too little clarity about what the agent actually needs
PackMCP is built for that layer.
- local-first static UI
- task-aware tool scoring
- risk classification and warning cards
- recommended pack generation by profile and risk budget
- copyable exports for allowlists and SDK filters
- reusable pack artifact export for downstream enforcement or review flows
- saved pack replay with drift warnings and optional strict CI failure mode
- definition-level drift detection for saved packs and Inspector-backed reviews
- optional multi-manifest comparison mode
- official MCP Inspector CLI integration for live server analysis
- sample manifest and testable core logic
npm startThen open http://localhost:4174.
You can also run the tests:
npm testYou can run a CLI analysis too:
npm run analyze:sampleOr generate a reusable pack artifact:
npm run pack:sampleReplay a saved pack against the latest manifest:
npm run replay:sampleAnd compare two manifests:
npm run compare:sampleYou can also exercise the Inspector path with a fixture:
npm run inspect:sampleindex.htmlapp shellstyles.cssvisual designsrc/app.jsbrowser UI controllersrc/core.jsscoring, recommendation, export logicsrc/data.jspresets and sample datasrc/inspector.jsMCP Inspector CLI bridgeexamples/github-mcp-server.sample.jsonexample inputexamples/github-review.pack.jsonexample saved pack artifacttest/core.test.mjsregression testsscripts/serve.mjszero-dependency dev serverbin/packmcp.mjsCLI entrypoint
- Give a coding agent read-only GitHub tools for issue triage.
- Trim a huge MCP server down before wiring it into OpenAI Agents or Claude.
- Review a vendor MCP manifest and surface high-risk tools before rollout.
- Compare how much schema/token cost you save by curating a smaller pack.
- Generate a structured JSON report in CI before approving an MCP server rollout.
- Replay a saved pack during CI to catch upstream MCP drift before agents see it.
- Compare two MCP servers or two versions of the same server before migration.
- Pull a real server's
tools/listthrough MCP Inspector and analyze it immediately.
- local-first by default
- no framework lock-in
- explain the recommendation, not just the output
- keep the core logic pure and testable
- export artifacts that are easy to paste into real runtimes
- work both as a browser product and a command-line utility
- no live MCP transport or proxy yet
- no schema compression beyond lightweight heuristics
- no client-specific config generators beyond simple snippets
- no browser-based comparison history yet
packmcp analyze \
--input ./examples/github-mcp-server.sample.json \
--preset review \
--profile balanced \
--risk medium \
--format jsonWrite the output to a file:
packmcp analyze \
--input ./examples/github-mcp-server.sample.json \
--preset coding \
--profile coding \
--risk medium \
--format json \
--output ./packmcp-report.jsonGenerate a filtered PackMCP pack artifact you can re-import later:
packmcp analyze \
--input ./examples/github-mcp-server.sample.json \
--preset review \
--profile balanced \
--risk medium \
--format pack \
--output ./github-review.pack.jsonReplay a saved pack against a newer manifest and fail CI if tools disappeared or their definitions changed:
packmcp analyze \
--input ./examples/github-mcp-server.sample.json \
--preset review \
--profile balanced \
--risk medium \
--pack ./examples/github-review.pack.json \
--strict \
--format jsonCompare two manifests:
packmcp compare \
--left ./examples/github-mcp-server.sample.json \
--right ./examples/browser-ops.sample.json \
--preset coding \
--profile coding \
--risk medium \
--format jsonAnalyze a real mcp.json server entry through MCP Inspector:
packmcp inspect \
--config ./examples/mcp.json.sample \
--server github \
--preset review \
--profile balanced \
--risk medium \
--format json \
--timeout 45000 \
--manifest-output ./inspector-tools.jsonThis command follows the official Inspector CLI shape using --cli --config ... --server ... --method tools/list.
PackMCP applies a 30000ms Inspector timeout by default so CI and local scripts do not hang forever if the target server fails to boot. Pass --timeout 0 to disable the guardrail for slower servers.
The bundled examples/mcp.json.sample file uses placeholder credentials. Use real values for a live run, or stick with npm run inspect:sample for an offline fixture-based smoke test.
The pack export keeps the selected tools in a normalized { server, tools }-compatible shape, so you can version it in git, feed it back into PackMCP later, or hand it off to a future runtime proxy layer.
When you pass --pack, PackMCP replays the saved selection against the current manifest or live Inspector result, reports missing tool names, fingerprints selected tool definitions to catch schema drift, highlights where today's recommendation changed, and can exit non-zero with --strict for CI gating.
- add runtime proxy mode for enforcement
- add direct Inspector export import in the browser UI
- compare multiple manifests side by side with diff history
- improve token estimation using schema-aware compression rules
- generate client-specific configs for more runtimes