DiscoMCP
๐ชฉ DiscoMCP
Your agent, meet your tools and context.
Teach any AI agent how you use the tools it connects to โ safely, in one command.
Agents are great at code. They get lost inside your tools โ they don't know which of a hundred actions matter, how your data connects, or what's safe to touch. So they guess, or they freeze.
DiscoMCP fixes that. Point it at any MCP server and it hands your agent a skill for how you use it โ not a generic tool list, but your workflows on your data: the views, tables and records you actually work with, the sequences that answer your real questions, and how one result leads into the next. Learned by looking at your own workspace, and without ever changing a thing.
A tool catalogue tells an agent the server has 90 actions. DiscoMCP tells it the five you actually use, in the order you use them, against the data that's really there.
Why teams use it
๐ฏ Tailored to how you work | Not a generic capability dump โ a profile of your usage: your workflows, your conventions, the parts of your workspace that matter, grounded in what's really in your data. |
๐งญ Agents that know their way around | Your agent follows the sequences that answer real questions and chains one result into the next, instead of guessing across a hundred tools. |
๐ Read-only, guaranteed | Exploring can never write. It runs a step only when it can prove that step is a read. Nothing is deleted or modified while it learns. |
โก One command, zero setup | A single 8 MB binary. No runtime, no toolchain โ |
Related MCP server: Agent Delegation MCP
Read-only, guaranteed
This is the part that lets you actually turn an agent loose on a real system.
DiscoMCP explores behind a default-deny gate: it runs an action only when it can prove that action is a read. A safe lookup runs. Anything that could write, change, or delete โ even if a tool claims it's harmless โ is refused. Secrets are stripped from everything it saves.
So your agent can learn your production tools without you holding your breath.
Does it help?
Same question, same server, same model โ with and without the generated skill. Read-only, against a genuinely wide, unfamiliar server. n=2 per row.
Task | Cold (no skill) | With skill | Tokens |
Targeted lookup | ~12 round-trips | ~5 | โ28% |
Cross-dataset reasoning | ~10 round-trips | ~6 | โ44% |
Full pipeline trace | ~10โ13 round-trips | ~3 | โ57% |
The harder and less familiar the task, the more it helps: the skill front-loads the map a cold agent has to rediscover by trial. Both reach correct answers โ the skill reaches them in far fewer round-trips.
Small sample, directional โ not a guarantee. On a trivial task or a narrow server the skill's own prompt cost can wash out what it saves; the durable win is fewer round-trips and steadier behavior on complex servers. Full method in benchmarks/METRICS.md.
Get started
1. Run it โ no install needed:
npx @ieranama/discomcp --help2. Point it at a server โ the whole config is a few lines:
[targets.example]
transport = "stdio"
command = "npx"
args = ["-y", "some-mcp-server"]3. Hand it to your agent and let it explore:
discomcp serve --config ./discomcp.tomlYour agent does the exploring; DiscoMCP keeps it safe and writes the skill. The result lands in .discomcp/profiles/<server>/SKILL.md โ ready to drop into your agent.
Under the hood
Built in Rust: the model does the thinking, a small deterministic core enforces every safety check. Every claim in a generated skill is tagged with how it was known โ declared, documented, observed, or inferred โ so an agent never mistakes a guess for a fact.
License
Licensed under either of Apache License, Version 2.0 or MIT License at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in DiscoMCP by you, as defined in the Apache-2.0 license, shall be dual-licensed as above, without any additional terms or conditions.
Available Tools
7 toolsexecute_probeA
Validate and, if permitted, execute ONE tool call against the target. DEFAULT-DENY: a probe runs ONLY IF it is provably read-only โ a read-verb tool name (list/get/read/search/...), a server readOnlyHint, or a query-executor whose sql/query argument is a read-only statement (SELECT/WITH/SHOW/DESCRIBE/EXPLAIN/PRAGMA). A write-verb tool name or the destructive backstop (server destructiveHint or destructive-verb name) rejects regardless of your declaration. Your classification is REQUIRED but ADVISORY โ recorded as evidence, it never authorizes execution. Also enforces JSON-schema validation, anti-fabrication provenance (an argument that DECLARES an observed source must cite a value actually captured โ otherwise rejected; providing provenance is optional but citing a non-existent observation is fabrication), and the probe budget. Returns a redacted observation or the rejection reason. The observation's identifiers list EVERY short leaf scalar as a candidate (name, value, json_pointer, from_tool) โ your raw material to author entity names, identifiers, enums (from distinct values), and relationships. Every result includes a gaps report (unsampled_structures, unexecuted_tools, untraversed_identifiers, sampling_hints, depth_signal).
Inputs: tool (required), target (required), arguments (required), classification (required), +2 more.
finalize_profileA
Synthesize the workspace model, operational model, capability profile, quality report and SKILL.md from this session's accumulated safe observations, and write the full artifact set to disk. VERIFY every claim against the captured observations first โ do not assert unobserved structures, identifiers, or relationships (the anti-fabrication provenance check will reject invented observed citations), and mark authored/inferred claims distinctly from probe-observed ones. If ZERO probes were accepted, only a STUB skill is written that plainly states nothing was safely observed โ no rich profile is fabricated over a bare catalogue. Pass usage_summary: YOUR narrative of how THIS user actually uses this source, reasoned from what you observed (their saved searches, folders, tracked entities, recurring queries) โ not a generic capability list. This becomes the skill's 'How You Use This MCP' section and is the whole point: the skill must let an agent exploit the MCP the way this user does. Returns skill_path to report back to the user.
Inputs: target (required), usage_summary.
generate_skillB
Regenerate SKILL.md from an existing profile directory (profile-metadata.json + tool-catalogue.json + workspace-model.json + operational-model.json).
Inputs: profile_dir (required).
inspect_targetB
Connect to the target MCP, list its declared tools/resources/prompts, and start a profiling session. Returns tool cards (name, description, input schema, raw server annotations, backstop_blocked advisory) as raw material โ YOU classify each tool's risk; DiscoMCP never keyword-guesses.
Inputs: target (required), goal.
list_targetsA
List target MCP ids configured in this DiscoMCP server.
Inputs: no named parameters.
lookup_targetA
Check whether a DiscoMCP skill already covers this target's current declared catalogue, without probing. A MISS (no existing_skill_dir) means dispatch a BACKGROUND subagent to profile the target (inspect_target -> execute_probe gap loop -> finalize_profile) and keep working the user's task while it runs.
Inputs: target (required).
session_statusA
Return the current GAP REPORT for an active session, computed only from state already gathered โ no target calls, no probe consumed. Reports (does not decide): unsampled_structures (collections listed but never drilled into), unexecuted_tools (unprobed tools minus backstop-blocked; you judge which are read-safe, with why_useful), untraversed_identifiers (ids seen in output but never used as a get-by-id argument, with likely_consumer_tools), sampling_hints (schema params like orderBy/pageSize/q/filter on unused tools for smart sampling), and depth_signal (raw coverage counts + probe budget). The same report rides every execute_probe result under gaps. You decide when coverage is enough.
Inputs: target (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 7 tools
Each tool has a distinct role in the profiling lifecycle: executing probes, finalizing profiles, inspecting targets, etc. No two tools overlap in purpose.
Six of seven tools follow the verb_noun pattern (execute_probe, finalize_profile, generate_skill, inspect_target, list_targets, lookup_target). Only session_status deviates with a noun_noun format.
Seven tools cover the entire profiling workflow from target discovery to skill generation without being excessive. Each tool serves a necessary step.
The tool set covers the core profiling operations but lacks profile management features like deletion or session cancellation, which are minor gaps.
Maintenance
Related MCP Connectors
MCP server teaching AI agents to implement TideCloak: auth, E2EE, IGA, security analysis
Official MCP server for Agentwork โ delegate tasks to AI agents with human-in-the-loop
Cloud-hosted MCP server for durable AI memory
Cloudflare Workers MCP server: ai-agent-scratchpad
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server to dynamically load Claude Code skills into AI agents598 npm15MIT
- AlicenseNot gradedqualityCmaintenanceAgent Delegation - MCP server providing AI-powered tools and automation by MEOK AI Labs6 npm125 PyPIMIT
- AlicenseNot gradedqualityFmaintenanceConsciousness Engine - MCP server providing AI-powered tools and automation by MEOK AI Labs5 npm37 PyPIMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to discover, install, configure, and manage MCP servers through natural language conversation, automating tedious manual setup across multiple clients.11MIT