@ieranama/discomcp 0.5.0 โ 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -151
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
# ๐ชฉ DiscoMCP
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**Your agent, meet your tools.**
|
|
6
|
+
|
|
7
|
+
Give any AI agent a real, safe understanding of the tools it connects to โ in one command.
|
|
6
8
|
|
|
7
9
|
[](https://github.com/ieranama/discomcp/actions/workflows/ci.yml)
|
|
8
10
|
[](https://github.com/ieranama/discomcp/releases)
|
|
@@ -11,189 +13,64 @@
|
|
|
11
13
|
|
|
12
14
|
</div>
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
DiscoMCP turns an unknown Model Context Protocol (MCP) connection into a reusable, workspace-aware operational skill for AI agents.
|
|
17
|
-
|
|
18
|
-
It connects to a target MCP, collects its declared capabilities and configured documentation, safely explores only permitted read or harmless computation paths, and produces a profile with a workspace-specific `SKILL.md`.
|
|
19
|
-
|
|
20
|
-
DiscoMCP makes your agent be the one in the room you would like to dance with โ not the one who shows up, starts flailing at every button on the mixing desk, and calls it improvisation. It learns the playlist first, asks before it touches the decks, and never, ever pulls the fire alarm to see what happens.
|
|
16
|
+
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.
|
|
21
17
|
|
|
22
|
-
|
|
18
|
+
DiscoMCP fixes that. Point it at any MCP server and it hands your agent a ready-made skill: what the server does, how it's actually used, and exactly what's safe โ learned by looking, and **without ever changing a thing**.
|
|
23
19
|
|
|
24
|
-
|
|
20
|
+
## Why teams use it
|
|
25
21
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
- What remains uncertain?
|
|
33
|
-
|
|
34
|
-
## Safety Contract
|
|
22
|
+
| | |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| ๐งญ **Agents that know their way around** | Your agent gets a map of the tool instead of guessing โ the sequences that answer real questions, and how one result leads to the next. |
|
|
25
|
+
| ๐ **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. |
|
|
26
|
+
| โก **One command, zero setup** | A single 8 MB binary. No runtime, no toolchain โ `npx` and you're running. |
|
|
27
|
+
| ๐งฉ **Works with any MCP server** | Local or hosted. The same tool profiles your CRM, your data warehouse, or any API behind MCP. |
|
|
35
28
|
|
|
36
|
-
|
|
29
|
+
## Read-only, guaranteed
|
|
37
30
|
|
|
38
|
-
|
|
31
|
+
This is the part that lets you actually turn an agent loose on a real system.
|
|
39
32
|
|
|
40
|
-
-
|
|
41
|
-
- external side effect
|
|
42
|
-
- destructive
|
|
43
|
-
- administrative
|
|
44
|
-
- arbitrary execution
|
|
45
|
-
- unknown risk
|
|
33
|
+
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.
|
|
46
34
|
|
|
47
|
-
|
|
35
|
+
So your agent can learn your production tools without you holding your breath.
|
|
48
36
|
|
|
49
|
-
##
|
|
37
|
+
## Get started
|
|
50
38
|
|
|
51
|
-
Run it
|
|
39
|
+
**1. Run it** โ no install needed:
|
|
52
40
|
|
|
53
41
|
```bash
|
|
54
42
|
npx @ieranama/discomcp --help
|
|
55
43
|
```
|
|
56
44
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/ieranama/discomcp/releases/latest/download/discomcp-installer.sh | sh
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
(Windows: `powershell -ExecutionPolicy Bypass -c "irm https://github.com/ieranama/discomcp/releases/latest/download/discomcp-installer.ps1 | iex"`. All platform archives are on the [releases page](https://github.com/ieranama/discomcp/releases).)
|
|
64
|
-
|
|
65
|
-
Point a config at any MCP server you can run locally over stdio โ this is the whole file:
|
|
45
|
+
**2. Point it at a server** โ the whole config is a few lines:
|
|
66
46
|
|
|
67
47
|
```toml
|
|
68
48
|
[targets.example]
|
|
69
49
|
transport = "stdio"
|
|
70
50
|
command = "npx"
|
|
71
|
-
args = ["-y", "
|
|
72
|
-
|
|
73
|
-
[profiles]
|
|
74
|
-
privacy_mode = "balanced"
|
|
51
|
+
args = ["-y", "some-mcp-server"]
|
|
75
52
|
```
|
|
76
53
|
|
|
77
|
-
|
|
54
|
+
**3. Hand it to your agent** and let it explore:
|
|
78
55
|
|
|
79
56
|
```bash
|
|
80
|
-
|
|
57
|
+
discomcp serve --config ./discomcp.toml
|
|
81
58
|
```
|
|
82
59
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
No agent connected? The standalone CLI does the same job with a configured reasoning backend (see [examples/config.toml](examples/config.toml)):
|
|
60
|
+
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.
|
|
86
61
|
|
|
87
|
-
|
|
88
|
-
discomcp profile example \
|
|
89
|
-
--config ./examples/config.toml \
|
|
90
|
-
--mode standard \
|
|
91
|
-
--goal "Understand this MCP, safely explore my accessible workspace, and generate an operational skill"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Profiles are written below `.discomcp/profiles/<target-id>/`. The canonical outputs are:
|
|
95
|
-
|
|
96
|
-
- `capability-profile.json`
|
|
97
|
-
- `workspace-model.json`
|
|
98
|
-
- `operational-model.json`
|
|
99
|
-
|
|
100
|
-
`SKILL.md` and `AGENTS.md` are generated exports of that canonical state.
|
|
101
|
-
|
|
102
|
-
## Configuration
|
|
103
|
-
|
|
104
|
-
Start with [examples/config.toml](examples/config.toml). Targets are owned by DiscoMCP; it does not inherit servers from another agent host automatically. `stdio` launches a real MCP subprocess and communicates using newline-delimited JSON-RPC.
|
|
105
|
-
|
|
106
|
-
```toml
|
|
107
|
-
[targets.example]
|
|
108
|
-
transport = "stdio"
|
|
109
|
-
command = "npx"
|
|
110
|
-
args = ["-y", "example-mcp"]
|
|
111
|
-
docs = ["./docs/example-mcp.md"]
|
|
112
|
-
|
|
113
|
-
[targets.example.env]
|
|
114
|
-
EXAMPLE_API_KEY = "${EXAMPLE_API_KEY}"
|
|
115
|
-
|
|
116
|
-
[reasoning]
|
|
117
|
-
routing = "single"
|
|
118
|
-
everyday_backend = "primary"
|
|
119
|
-
|
|
120
|
-
[reasoning.backends.primary]
|
|
121
|
-
type = "command"
|
|
122
|
-
command = "some-agent-cli"
|
|
123
|
-
args = ["exec", "--model", "{model}"]
|
|
124
|
-
model = "your-configured-model"
|
|
125
|
-
input = "stdin_json"
|
|
126
|
-
output = "stdout_json"
|
|
127
|
-
```
|
|
62
|
+
## Under the hood
|
|
128
63
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
Environment interpolation fails clearly when a required variable is missing and never prints the resolved secret. Do not commit credentials, profile output containing sensitive workspace material, or `.env` files.
|
|
132
|
-
|
|
133
|
-
## Evidence
|
|
134
|
-
|
|
135
|
-
Every material claim in a generated profile carries one of these statuses:
|
|
136
|
-
|
|
137
|
-
| Status | Meaning |
|
|
138
|
-
| --- | --- |
|
|
139
|
-
| `declared` | Exposed directly through MCP metadata, schemas, or annotations. |
|
|
140
|
-
| `documented` | Found in configured or MCP-exposed documentation. |
|
|
141
|
-
| `observed` | Confirmed by a successful permitted MCP call. |
|
|
142
|
-
| `inferred` | Reasoned from declarations, documentation, and observations. |
|
|
143
|
-
| `user_defined` | Explicitly supplied by the user. |
|
|
144
|
-
| `unknown` | Insufficient evidence. |
|
|
145
|
-
| `contradicted` | Relevant sources disagree. |
|
|
146
|
-
|
|
147
|
-
Inferences include their confidence, supporting evidence, source references, and contradictions. DiscoMCP does not present an inferred relationship as an observed fact.
|
|
148
|
-
|
|
149
|
-
## Development
|
|
150
|
-
|
|
151
|
-
Want to contribute, or run an unreleased change? Build from source instead of installing the binary.
|
|
152
|
-
|
|
153
|
-
Prerequisites: Rust stable with `rustfmt` and `clippy`, and `cargo-audit` for the full local quality gate.
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
git clone https://github.com/ieranama/discomcp.git
|
|
157
|
-
cd discomcp
|
|
158
|
-
cargo run -p discomcp -- profile example --config ./examples/config.toml --mode standard --goal "..."
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Run the local quality gate before opening a pull request:
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
cargo fmt --check
|
|
165
|
-
cargo clippy --all-targets --all-features -- -D warnings
|
|
166
|
-
cargo test --all
|
|
167
|
-
cargo audit
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
Install the audit tool once if needed:
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
cargo install cargo-audit --locked
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
The repository includes a generic collection-oriented mock MCP fixture so tests do not require credentials or external services.
|
|
177
|
-
|
|
178
|
-
## Documentation
|
|
64
|
+
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.
|
|
179
65
|
|
|
180
66
|
- [Architecture](docs/ARCHITECTURE.md)
|
|
181
67
|
- [Threat model](docs/THREAT_MODEL.md)
|
|
182
68
|
- [Extension guide](docs/EXTENDING.md)
|
|
183
|
-
- [
|
|
184
|
-
- [Security policy](SECURITY.md)
|
|
185
|
-
|
|
186
|
-
## Contributing
|
|
187
|
-
|
|
188
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md). By participating, you agree to follow the [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
69
|
+
- [Configuration example](examples/config.toml)
|
|
70
|
+
- [Contributing](CONTRIBUTING.md) ยท [Security policy](SECURITY.md)
|
|
189
71
|
|
|
190
72
|
## License
|
|
191
73
|
|
|
192
|
-
Licensed under either of
|
|
193
|
-
|
|
194
|
-
- [Apache License, Version 2.0](LICENSE-APACHE)
|
|
195
|
-
- [MIT License](LICENSE-MIT)
|
|
196
|
-
|
|
197
|
-
at your option.
|
|
74
|
+
Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT License](LICENSE-MIT) at your option.
|
|
198
75
|
|
|
199
76
|
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.
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"hasInstallScript": true,
|
|
20
20
|
"license": "MIT OR Apache-2.0",
|
|
21
21
|
"name": "@ieranama/discomcp",
|
|
22
|
-
"version": "0.5.
|
|
22
|
+
"version": "0.5.1"
|
|
23
23
|
},
|
|
24
24
|
"node_modules/detect-libc": {
|
|
25
25
|
"engines": {
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
50
|
"requires": true,
|
|
51
|
-
"version": "0.5.
|
|
51
|
+
"version": "0.5.1"
|
|
52
52
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"artifactDownloadUrls": [
|
|
3
|
-
"https://github.com/ieranama/discomcp/releases/download/v0.5.
|
|
3
|
+
"https://github.com/ieranama/discomcp/releases/download/v0.5.1"
|
|
4
4
|
],
|
|
5
5
|
"bin": {
|
|
6
6
|
"discomcp": "run-discomcp.js"
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"zipExt": ".tar.xz"
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
|
-
"version": "0.5.
|
|
83
|
+
"version": "0.5.1",
|
|
84
84
|
"volta": {
|
|
85
85
|
"node": "18.14.1",
|
|
86
86
|
"npm": "9.5.0"
|