Skip to main content
Glama

๐Ÿชฉ DiscoMCP

Your agent, meet your tools and context.

Teach any AI agent how you use the tools it connects to โ€” safely, in one command.

CI Release License

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 โ€” npx and you're running.

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 --help

2. 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.toml

Your 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 tools
execute_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

    A3.8/5.0

    Scored across 7 tools

    Disambiguation5/5

    Each tool has a distinct role in the profiling lifecycle: executing probes, finalizing profiles, inspecting targets, etc. No two tools overlap in purpose.

    Naming Consistency4/5

    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.

    Tool Count5/5

    Seven tools cover the entire profiling workflow from target discovery to skill generation without being excessive. Each tool serves a necessary step.

    Completeness4/5

    The tool set covers the core profiling operations but lacks profile management features like deletion or session cancellation, which are minor gaps.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers