@kryptosai/mcp-observatory 0.20.3 → 0.22.0
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/COMMERCIAL.md +67 -0
- package/PRIVACY.md +52 -0
- package/README.md +100 -4
- package/TERMS.md +30 -0
- package/dist/src/checks/resources.js +9 -19
- package/dist/src/checks/resources.js.map +1 -1
- package/dist/src/checks/security-rules.js.map +1 -1
- package/dist/src/checks/security.js +33 -14
- package/dist/src/checks/security.js.map +1 -1
- package/dist/src/checks/tools-invoke.js.map +1 -1
- package/dist/src/checks/tools.js.map +1 -1
- package/dist/src/ci-issue.js +3 -1
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +48 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/ci-report.js +4 -0
- package/dist/src/commands/ci-report.js.map +1 -1
- package/dist/src/commands/enterprise-report.d.ts +12 -0
- package/dist/src/commands/enterprise-report.js +192 -0
- package/dist/src/commands/enterprise-report.js.map +1 -0
- package/dist/src/commands/init-ci.d.ts +31 -0
- package/dist/src/commands/init-ci.js +238 -0
- package/dist/src/commands/init-ci.js.map +1 -0
- package/dist/src/commands/scan.js +4 -0
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js +2 -0
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/telemetry.js +47 -2
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +11 -5
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/commercial.d.ts +5 -0
- package/dist/src/commercial.js +46 -0
- package/dist/src/commercial.js.map +1 -0
- package/dist/src/reporters/common.d.ts +16 -0
- package/dist/src/reporters/common.js +76 -0
- package/dist/src/reporters/common.js.map +1 -1
- package/dist/src/reporters/html.js +20 -0
- package/dist/src/reporters/html.js.map +1 -1
- package/dist/src/reporters/markdown.js +14 -2
- package/dist/src/reporters/markdown.js.map +1 -1
- package/dist/src/reporters/pr-comment.js +18 -1
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/terminal.js +9 -1
- package/dist/src/reporters/terminal.js.map +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runner.js.map +1 -1
- package/dist/src/telemetry.d.ts +27 -0
- package/dist/src/telemetry.js +57 -3
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +5 -0
- package/dist/src/validate.js +48 -5
- package/dist/src/validate.js.map +1 -1
- package/docs/architecture.md +32 -0
- package/docs/certification-campaign-template.md +181 -0
- package/docs/certification-distribution.md +129 -0
- package/docs/compatibility.md +164 -0
- package/docs/decisions.md +23 -0
- package/docs/demo.svg +59 -0
- package/docs/directory-listing-copy.md +78 -0
- package/docs/distribution-launch.md +76 -0
- package/docs/enterprise-outreach-playbook.md +83 -0
- package/docs/feishu-lark-mcp.md +65 -0
- package/docs/known-issues.md +27 -0
- package/docs/mcp-safety-report-latest.md +85 -0
- package/docs/project-case-study.md +106 -0
- package/docs/proof.md +68 -0
- package/docs/publish-readiness.md +77 -0
- package/package.json +33 -18
- package/schemas/diff-artifact.schema.json +62 -66
- package/schemas/run-artifact.schema.json +107 -142
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# MCP Server Compatibility
|
|
2
|
+
|
|
3
|
+
MCP Observatory supports two transport adapters — **local-process (stdio)** and **HTTP (Streamable HTTP + SSE)** — which together cover ~95% of the MCP server ecosystem.
|
|
4
|
+
|
|
5
|
+
This document tracks which servers work, how to configure them, and what patterns are not yet supported.
|
|
6
|
+
|
|
7
|
+
## Tested and Passing
|
|
8
|
+
|
|
9
|
+
These servers have been tested directly with MCP Observatory and produce valid results.
|
|
10
|
+
|
|
11
|
+
| Server | Package | Transport | Setup | Tools | Prompts | Resources |
|
|
12
|
+
|--------|---------|-----------|-------|-------|---------|-----------|
|
|
13
|
+
| Everything | [`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) | stdio | Zero-config | ✅ pass | ✅ pass | ✅ pass |
|
|
14
|
+
| Filesystem | [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) | stdio | Path args | ✅ pass | — unsupported | — unsupported |
|
|
15
|
+
| Context7 | [`@upstash/context7-mcp`](https://www.npmjs.com/package/@upstash/context7-mcp) | stdio | Zero-config | ✅ pass | — unsupported | — unsupported |
|
|
16
|
+
| Puppeteer | [`puppeteer-mcp-server`](https://www.npmjs.com/package/puppeteer-mcp-server) | stdio | Zero-config | ✅ pass | — unsupported | ✅ pass |
|
|
17
|
+
| OpenTofu | [`@opentofu/opentofu-mcp-server`](https://www.npmjs.com/package/@opentofu/opentofu-mcp-server) | stdio | Zero-config | ✅ pass | — unsupported | ✅ pass |
|
|
18
|
+
| Ref Tools | [`ref-tools-mcp`](https://www.npmjs.com/package/ref-tools-mcp) | stdio | Zero-config | ✅ pass | ✅ pass | — unsupported |
|
|
19
|
+
| Promptopia | [`promptopia-mcp`](https://www.npmjs.com/package/promptopia-mcp) | stdio | Zero-config | ✅ pass | ✅ pass | — unsupported |
|
|
20
|
+
| GitHub MCP | Docker-based | stdio | `GITHUB_PERSONAL_ACCESS_TOKEN` | ✅ pass | ✅ pass | ✅ pass |
|
|
21
|
+
|
|
22
|
+
## Compatible (stdio, zero-config or env vars only)
|
|
23
|
+
|
|
24
|
+
These servers use standard stdio transport and should work with MCP Observatory. Most just need an API key as an env var.
|
|
25
|
+
|
|
26
|
+
### Zero-config (just `npx`)
|
|
27
|
+
|
|
28
|
+
| Server | Package | Command |
|
|
29
|
+
|--------|---------|---------|
|
|
30
|
+
| Sequential Thinking | [`@modelcontextprotocol/server-sequential-thinking`](https://www.npmjs.com/package/@modelcontextprotocol/server-sequential-thinking) | `npx -y @modelcontextprotocol/server-sequential-thinking` |
|
|
31
|
+
| Memory | [`@modelcontextprotocol/server-memory`](https://www.npmjs.com/package/@modelcontextprotocol/server-memory) | `npx -y @modelcontextprotocol/server-memory` |
|
|
32
|
+
| ESLint | [`@eslint/mcp`](https://www.npmjs.com/package/@eslint/mcp) | `npx -y @eslint/mcp` |
|
|
33
|
+
| SAP UI5 | [`@ui5/mcp-server`](https://www.npmjs.com/package/@ui5/mcp-server) | `npx -y @ui5/mcp-server` |
|
|
34
|
+
|
|
35
|
+
### API key via env var
|
|
36
|
+
|
|
37
|
+
| Server | Package | Env Var | Command |
|
|
38
|
+
|--------|---------|---------|---------|
|
|
39
|
+
| Brave Search | [`@modelcontextprotocol/server-brave-search`](https://www.npmjs.com/package/@modelcontextprotocol/server-brave-search) | `BRAVE_API_KEY` | `npx -y @modelcontextprotocol/server-brave-search` |
|
|
40
|
+
| Sentry | [`@sentry/mcp-server`](https://www.npmjs.com/package/@sentry/mcp-server) | `SENTRY_AUTH_TOKEN` | `npx -y @sentry/mcp-server` |
|
|
41
|
+
| Tavily | [`tavily-mcp`](https://www.npmjs.com/package/tavily-mcp) | `TAVILY_API_KEY` | `npx -y tavily-mcp` |
|
|
42
|
+
| Firecrawl | [`firecrawl-mcp`](https://www.npmjs.com/package/firecrawl-mcp) | `FIRECRAWL_API_KEY` | `npx -y firecrawl-mcp` |
|
|
43
|
+
| HubSpot | [`@hubspot/mcp-server`](https://www.npmjs.com/package/@hubspot/mcp-server) | API key | `npx -y @hubspot/mcp-server` |
|
|
44
|
+
| LaunchDarkly | [`@launchdarkly/mcp-server`](https://www.npmjs.com/package/@launchdarkly/mcp-server) | API key | `npx -y @launchdarkly/mcp-server` |
|
|
45
|
+
| Notion | [`@notionhq/notion-mcp-server`](https://www.npmjs.com/package/@notionhq/notion-mcp-server) | `OPENAPI_MCP_HEADERS` | `npx -y @notionhq/notion-mcp-server` |
|
|
46
|
+
| Stripe | [`@stripe/mcp`](https://www.npmjs.com/package/@stripe/mcp) | `--api-key` arg | `npx -y @stripe/mcp --api-key ${STRIPE_API_KEY}` |
|
|
47
|
+
|
|
48
|
+
Target config example with env vars:
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"targetId": "brave-search",
|
|
53
|
+
"adapter": "local-process",
|
|
54
|
+
"command": "npx",
|
|
55
|
+
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
|
|
56
|
+
"env": { "BRAVE_API_KEY": "your-key-here" },
|
|
57
|
+
"timeoutMs": 15000
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Positional args required
|
|
62
|
+
|
|
63
|
+
| Server | Package | Args | Command |
|
|
64
|
+
|--------|---------|------|---------|
|
|
65
|
+
| Filesystem | [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) | Directory paths | `npx -y @modelcontextprotocol/server-filesystem /path/to/dir` |
|
|
66
|
+
| PostgreSQL | [`@modelcontextprotocol/server-postgres`](https://www.npmjs.com/package/@modelcontextprotocol/server-postgres) | Connection URL | `npx -y @modelcontextprotocol/server-postgres postgres://...` |
|
|
67
|
+
| SQLite | [`@modelcontextprotocol/server-sqlite`](https://www.npmjs.com/package/@modelcontextprotocol/server-sqlite) | `--db-path` | `npx -y @modelcontextprotocol/server-sqlite --db-path ./db.sqlite` |
|
|
68
|
+
| Redis | [`@modelcontextprotocol/server-redis`](https://www.npmjs.com/package/@modelcontextprotocol/server-redis) | Redis URL | `npx -y @modelcontextprotocol/server-redis redis://localhost:6379` |
|
|
69
|
+
| Git | [`mcp-server-git`](https://pypi.org/project/mcp-server-git/) | `--repository` | `uvx mcp-server-git --repository /path/to/repo` |
|
|
70
|
+
| Nx | [`nx-mcp`](https://www.npmjs.com/package/nx-mcp) | Workspace path | `npx -y nx-mcp --workspace /path` |
|
|
71
|
+
|
|
72
|
+
### Python servers (via `uvx`)
|
|
73
|
+
|
|
74
|
+
Python-based MCP servers work with the `local-process` adapter as long as `uv` is installed:
|
|
75
|
+
|
|
76
|
+
```json
|
|
77
|
+
{
|
|
78
|
+
"targetId": "git-server",
|
|
79
|
+
"adapter": "local-process",
|
|
80
|
+
"command": "uvx",
|
|
81
|
+
"args": ["mcp-server-git", "--repository", "."],
|
|
82
|
+
"timeoutMs": 15000
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Compatible (HTTP/SSE remote)
|
|
87
|
+
|
|
88
|
+
These servers expose a hosted HTTP endpoint. Use the `http` adapter:
|
|
89
|
+
|
|
90
|
+
| Server | URL | Auth |
|
|
91
|
+
|--------|-----|------|
|
|
92
|
+
| Cloudflare | `https://observability.mcp.cloudflare.com/mcp` | API token via `authToken` |
|
|
93
|
+
| Exa | `https://mcp.exa.ai/mcp` | `EXA_API_KEY` via `authToken` |
|
|
94
|
+
| Tavily (remote) | `https://mcp.tavily.com/mcp` | Bearer token via `authToken` |
|
|
95
|
+
| Context7 (remote) | `https://mcp.context7.com/mcp` | Optional API key |
|
|
96
|
+
|
|
97
|
+
Target config example:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"targetId": "cloudflare",
|
|
102
|
+
"adapter": "http",
|
|
103
|
+
"url": "https://observability.mcp.cloudflare.com/mcp",
|
|
104
|
+
"authToken": "your-cloudflare-api-token",
|
|
105
|
+
"timeoutMs": 15000
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Compatible (Docker)
|
|
110
|
+
|
|
111
|
+
Many MCP servers ship Docker images. These work with the `local-process` adapter — Docker's `-i` flag attaches stdin/stdout, which is standard stdio transport.
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"targetId": "github-docker",
|
|
116
|
+
"adapter": "local-process",
|
|
117
|
+
"command": "docker",
|
|
118
|
+
"args": ["run", "-i", "--rm",
|
|
119
|
+
"-e", "GITHUB_PERSONAL_ACCESS_TOKEN=${GITHUB_PERSONAL_ACCESS_TOKEN}",
|
|
120
|
+
"ghcr.io/github/github-mcp-server"],
|
|
121
|
+
"timeoutMs": 30000
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
mcp-observatory run -- docker run -i --rm ghcr.io/github/github-mcp-server
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
All official `@modelcontextprotocol/server-*` packages publish Docker images that work this way.
|
|
130
|
+
|
|
131
|
+
## Known Incompatible
|
|
132
|
+
|
|
133
|
+
These servers do not work with MCP Observatory due to transport or architecture constraints:
|
|
134
|
+
|
|
135
|
+
| Server | Why | Workaround |
|
|
136
|
+
|--------|-----|------------|
|
|
137
|
+
| BrowserTools MCP | Custom WebSocket transport between Chrome extension, middleware, and MCP server | None — non-standard transport |
|
|
138
|
+
| Google Drive | Requires interactive OAuth browser flow before first use | Pre-authenticate manually, then run Observatory |
|
|
139
|
+
| `@modelcontextprotocol/server-map` | Times out under stdio harness | May need specific startup args |
|
|
140
|
+
| `@modelcontextprotocol/server-threejs` | Closes connection before init | App-oriented, not a pure stdio server |
|
|
141
|
+
| `@modelcontextprotocol/server-pdf` | Times out under probe setup | May need specific startup args |
|
|
142
|
+
| `@jsonresume/mcp` | Closes connection before init | May expect different invocation |
|
|
143
|
+
|
|
144
|
+
## Transport Coverage
|
|
145
|
+
|
|
146
|
+
MCP Observatory covers both standard MCP transports:
|
|
147
|
+
|
|
148
|
+
| Transport | Adapter | Status |
|
|
149
|
+
|-----------|---------|--------|
|
|
150
|
+
| **stdio** (subprocess, JSON-RPC over stdin/stdout) | `local-process` | ✅ Supported |
|
|
151
|
+
| **Streamable HTTP** (POST to endpoint, SSE response) | `http` | ✅ Supported |
|
|
152
|
+
| **HTTP+SSE** (deprecated, separate GET/POST endpoints) | `http` (fallback) | ✅ Supported |
|
|
153
|
+
| WebSocket (non-standard) | — | ❌ Not supported |
|
|
154
|
+
|
|
155
|
+
Per the [MCP specification](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports), stdio and Streamable HTTP are the two standard transports. The deprecated HTTP+SSE transport is handled automatically via SDK fallback.
|
|
156
|
+
|
|
157
|
+
## Ecosystem Stats
|
|
158
|
+
|
|
159
|
+
Based on analysis of the top 30+ MCP servers by npm downloads:
|
|
160
|
+
|
|
161
|
+
- **~85%** use stdio as primary transport → covered by `local-process` adapter
|
|
162
|
+
- **~10%** are HTTP-only remote services → covered by `http` adapter
|
|
163
|
+
- **~5%** support both stdio and HTTP → both adapters work
|
|
164
|
+
- **<1%** use non-standard transports (WebSocket) → not supported
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Decisions
|
|
2
|
+
|
|
3
|
+
These decisions exist so the repo does not drift into vague feature accumulation.
|
|
4
|
+
|
|
5
|
+
## 2026-03-19: Semantics v1 stays intentionally narrow
|
|
6
|
+
|
|
7
|
+
`semantics` only checks advertised capability, callable endpoint response, and minimal expected shape. The first job of MCP Observatory is to explain drift, not to claim semantic correctness it does not yet earn.
|
|
8
|
+
|
|
9
|
+
## 2026-03-19: The project stays CLI-first
|
|
10
|
+
|
|
11
|
+
The durable product surface is the artifact plus the report. A dashboard can wait. Until the evidence surface is boringly trustworthy, adding hosted UX would mostly be theater.
|
|
12
|
+
|
|
13
|
+
## 2026-03-19: `unsupported` and `failed` remain separate
|
|
14
|
+
|
|
15
|
+
`unsupported` means the target did not advertise the capability. `failed` means the capability path or startup path should have worked and did not. Collapsing those states would hide useful ecosystem truth.
|
|
16
|
+
|
|
17
|
+
## 2026-03-19: installability is part of the credibility bar
|
|
18
|
+
|
|
19
|
+
The package stays scoped as `@kryptosai/mcp-observatory`, and the release flow should be able to publish it. Until npm credentials are configured, GitHub release tarballs are the honest fallback. The repo should never imply a one-command install path that does not actually work.
|
|
20
|
+
|
|
21
|
+
## 2026-03-19: Every release needs a reason to exist
|
|
22
|
+
|
|
23
|
+
Packaging-only churn is not a release story. Every release should include at least one real-server learning, one report-quality improvement, or one schema trust improvement.
|
package/docs/demo.svg
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="820" height="320" viewBox="0 0 820 320">
|
|
2
|
+
<defs>
|
|
3
|
+
<style>
|
|
4
|
+
.bg { fill: #1e1e2e; }
|
|
5
|
+
.title-bar { fill: #313244; }
|
|
6
|
+
.dot-red { fill: #f38ba8; }
|
|
7
|
+
.dot-yellow { fill: #f9e2af; }
|
|
8
|
+
.dot-green { fill: #a6e3a1; }
|
|
9
|
+
.text { fill: #cdd6f4; font-family: 'Menlo', 'Monaco', 'Courier New', monospace; font-size: 13px; }
|
|
10
|
+
.bold { fill: #cdd6f4; font-weight: bold; }
|
|
11
|
+
.dim { fill: #6c7086; }
|
|
12
|
+
.green { fill: #a6e3a1; }
|
|
13
|
+
.yellow { fill: #f9e2af; }
|
|
14
|
+
.prompt { fill: #89b4fa; }
|
|
15
|
+
.line { stroke: #45475a; stroke-width: 1; }
|
|
16
|
+
</style>
|
|
17
|
+
</defs>
|
|
18
|
+
<rect class="bg" width="820" height="320" rx="10"/>
|
|
19
|
+
<rect class="title-bar" width="820" height="36" rx="10"/>
|
|
20
|
+
<rect class="title-bar" x="0" y="26" width="820" height="10"/>
|
|
21
|
+
<circle class="dot-red" cx="20" cy="18" r="6"/>
|
|
22
|
+
<circle class="dot-yellow" cx="40" cy="18" r="6"/>
|
|
23
|
+
<circle class="dot-green" cx="60" cy="18" r="6"/>
|
|
24
|
+
<text class="dim" x="350" y="22" text-anchor="middle">mcp-observatory — scan</text>
|
|
25
|
+
|
|
26
|
+
<text class="prompt" x="20" y="65">$</text>
|
|
27
|
+
<text class="text" x="35" y="65">npx @kryptosai/mcp-observatory scan --invoke-tools</text>
|
|
28
|
+
|
|
29
|
+
<text class="bold" x="20" y="100">Discovered 2 MCP server(s):</text>
|
|
30
|
+
<text class="dim" x="30" y="118">github (from ~/.claude.json)</text>
|
|
31
|
+
<text class="dim" x="30" y="136">filesystem (from ~/.claude.json)</text>
|
|
32
|
+
|
|
33
|
+
<text class="bold" x="20" y="170">Scan Results:</text>
|
|
34
|
+
|
|
35
|
+
<text class="bold" x="20" y="195">Target</text>
|
|
36
|
+
<text class="bold" x="230" y="195">Gate</text>
|
|
37
|
+
<text class="bold" x="300" y="195">Tools</text>
|
|
38
|
+
<text class="bold" x="400" y="195">Prompts</text>
|
|
39
|
+
<text class="bold" x="510" y="195">Resources</text>
|
|
40
|
+
<text class="bold" x="630" y="195">Invoke</text>
|
|
41
|
+
|
|
42
|
+
<line class="line" x1="20" y1="203" x2="750" y2="203"/>
|
|
43
|
+
|
|
44
|
+
<text class="text" x="20" y="225">github</text>
|
|
45
|
+
<text class="green" x="230" y="225">pass</text>
|
|
46
|
+
<text class="green" x="300" y="225">pass</text>
|
|
47
|
+
<text class="green" x="400" y="225">pass</text>
|
|
48
|
+
<text class="green" x="510" y="225">pass</text>
|
|
49
|
+
<text class="yellow" x="630" y="225">partial</text>
|
|
50
|
+
|
|
51
|
+
<text class="text" x="20" y="250">filesystem</text>
|
|
52
|
+
<text class="green" x="230" y="250">pass</text>
|
|
53
|
+
<text class="green" x="300" y="250">pass</text>
|
|
54
|
+
<text class="dim" x="400" y="250">unsupported</text>
|
|
55
|
+
<text class="dim" x="510" y="250">unsupported</text>
|
|
56
|
+
<text class="green" x="630" y="250">pass</text>
|
|
57
|
+
|
|
58
|
+
<text class="dim" x="20" y="295">Checked 2 servers in 3.2s</text>
|
|
59
|
+
</svg>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Directory And Marketplace Listing Copy
|
|
2
|
+
|
|
3
|
+
## Standard Positioning
|
|
4
|
+
|
|
5
|
+
MCP Observatory helps teams test, secure, and monitor MCP servers before agents depend on them.
|
|
6
|
+
|
|
7
|
+
## Short Description
|
|
8
|
+
|
|
9
|
+
CI, security checks, schema drift detection, reports, and badges for MCP servers.
|
|
10
|
+
|
|
11
|
+
## Medium Description
|
|
12
|
+
|
|
13
|
+
MCP Observatory is a CLI, GitHub Action, and MCP server for testing MCP servers before agents depend on them. It checks tools, prompts, resources, schema quality, security footguns, regressions, and drift, then generates reports and badges maintainers can share.
|
|
14
|
+
|
|
15
|
+
## Long Description
|
|
16
|
+
|
|
17
|
+
MCP Observatory gives MCP servers production safety rails: one-command CI setup, compatibility checks, security analysis, schema drift detection, record/replay/verify workflows, PR comments, health score badges, and static enterprise reports. It can run as a CLI, inside GitHub Actions, or as an MCP server that lets agents inspect other MCP servers.
|
|
18
|
+
|
|
19
|
+
Free for local OSS use. Paid pilots are available for hosted reporting, private repo CI history, recurring security reports, certification, support, and fleet visibility.
|
|
20
|
+
|
|
21
|
+
## Primary CTA
|
|
22
|
+
|
|
23
|
+
Add MCP CI in one command:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx @kryptosai/mcp-observatory init-ci --all --command "npx -y my-mcp-server"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Tags
|
|
30
|
+
|
|
31
|
+
### GitHub Topics
|
|
32
|
+
|
|
33
|
+
- `mcp`
|
|
34
|
+
- `model-context-protocol`
|
|
35
|
+
- `mcp-server`
|
|
36
|
+
- `mcp-testing`
|
|
37
|
+
- `mcp-security`
|
|
38
|
+
- `mcp-ci`
|
|
39
|
+
- `schema-drift`
|
|
40
|
+
- `developer-tools`
|
|
41
|
+
- `security`
|
|
42
|
+
- `github-action`
|
|
43
|
+
|
|
44
|
+
### Directory Tags
|
|
45
|
+
|
|
46
|
+
- MCP
|
|
47
|
+
- Model Context Protocol
|
|
48
|
+
- Security
|
|
49
|
+
- Developer Tools
|
|
50
|
+
- Testing
|
|
51
|
+
- CI/CD
|
|
52
|
+
- Observability
|
|
53
|
+
- Schema Drift
|
|
54
|
+
- Regression Testing
|
|
55
|
+
- AI Agents
|
|
56
|
+
|
|
57
|
+
### npm Keywords
|
|
58
|
+
|
|
59
|
+
- `mcp`
|
|
60
|
+
- `mcp-server`
|
|
61
|
+
- `model-context-protocol`
|
|
62
|
+
- `mcp-testing`
|
|
63
|
+
- `mcp-security`
|
|
64
|
+
- `mcp-ci`
|
|
65
|
+
- `schema-drift`
|
|
66
|
+
- `github-action`
|
|
67
|
+
- `developer-tools`
|
|
68
|
+
- `security`
|
|
69
|
+
- `production-monitoring`
|
|
70
|
+
- `enterprise-report`
|
|
71
|
+
|
|
72
|
+
## Links
|
|
73
|
+
|
|
74
|
+
- README: `https://github.com/KryptosAI/mcp-observatory#readme`
|
|
75
|
+
- GitHub Action: `https://github.com/KryptosAI/mcp-observatory/tree/main/action`
|
|
76
|
+
- Certification guide: `https://github.com/KryptosAI/mcp-observatory/blob/main/docs/certification-distribution.md`
|
|
77
|
+
- Proof: `https://github.com/KryptosAI/mcp-observatory/blob/main/docs/proof.md`
|
|
78
|
+
- Commercial pilots: `https://github.com/KryptosAI/mcp-observatory/blob/main/COMMERCIAL.md`
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Distribution And Pilot Launch
|
|
2
|
+
|
|
3
|
+
Use this as the reversible launch motion for MCP Observatory commercialization.
|
|
4
|
+
|
|
5
|
+
For the release gate and publication checklist, see [Publish And Distribution Readiness](./publish-readiness.md).
|
|
6
|
+
For listing copy, use [Directory And Marketplace Listing Copy](./directory-listing-copy.md).
|
|
7
|
+
For public proof, use [MCP Observatory Proof](./proof.md).
|
|
8
|
+
|
|
9
|
+
## Positioning
|
|
10
|
+
|
|
11
|
+
MCP Observatory helps teams test, secure, and monitor MCP servers before agents depend on them.
|
|
12
|
+
|
|
13
|
+
## Public Surface Checklist
|
|
14
|
+
|
|
15
|
+
- README pricing and enterprise CTA
|
|
16
|
+
- npm description and keywords
|
|
17
|
+
- GitHub repository homepage pointing to the README or commercial page
|
|
18
|
+
- MCP directory listings updated with production/security language
|
|
19
|
+
- Launch post published
|
|
20
|
+
- Badge or certification language available for passing servers
|
|
21
|
+
- Certification distribution loop published at [`docs/certification-distribution.md`](./certification-distribution.md)
|
|
22
|
+
|
|
23
|
+
## Launch Post Draft
|
|
24
|
+
|
|
25
|
+
MCP servers are becoming production dependencies. If an agent depends on a server, that server needs regression tests, security checks, and monitoring before it breaks workflows.
|
|
26
|
+
|
|
27
|
+
MCP Observatory scans MCP servers, verifies capabilities, detects schema drift, records/replays sessions, and can run in CI or as an MCP server itself.
|
|
28
|
+
|
|
29
|
+
Free for local OSS use. Paid pilots are available for hosted reporting, private repo CI, security reports, production monitoring, certification, support, and fleet visibility.
|
|
30
|
+
|
|
31
|
+
Production MCP usage? Contact william@banksey.com.
|
|
32
|
+
|
|
33
|
+
## Outreach Template
|
|
34
|
+
|
|
35
|
+
Subject: MCP production testing and security checks
|
|
36
|
+
|
|
37
|
+
Hi,
|
|
38
|
+
|
|
39
|
+
I noticed signals that your team may be evaluating or using MCP servers. MCP Observatory helps teams test, secure, and monitor MCP servers before agents depend on them.
|
|
40
|
+
|
|
41
|
+
We are running a small number of production pilots for hosted reports, private repo CI, security monitoring, certification, support, and fleet visibility.
|
|
42
|
+
|
|
43
|
+
Would it be useful to compare what your MCP servers look like today and where regressions or production risk could show up?
|
|
44
|
+
|
|
45
|
+
William
|
|
46
|
+
|
|
47
|
+
## Helpful Maintainer PR Motion
|
|
48
|
+
|
|
49
|
+
For popular MCP server repositories, open small PRs that add:
|
|
50
|
+
|
|
51
|
+
- `.github/workflows/mcp-observatory.yml`
|
|
52
|
+
- optional README badge
|
|
53
|
+
- a short PR body explaining the security/compatibility benefit
|
|
54
|
+
|
|
55
|
+
Frame this as free OSS safety infrastructure:
|
|
56
|
+
|
|
57
|
+
> I added a lightweight MCP Observatory check so users can see this server is tested for compatibility, schema drift, and common security issues. It runs in GitHub Actions, comments a readable report on PRs, and does not require an account.
|
|
58
|
+
|
|
59
|
+
Use the full template in [`certification-distribution.md`](./certification-distribution.md).
|
|
60
|
+
|
|
61
|
+
Track each outbound wave with [`certification-campaign-template.md`](./certification-campaign-template.md).
|
|
62
|
+
|
|
63
|
+
## Account Ranking Inputs
|
|
64
|
+
|
|
65
|
+
Rank prospects with:
|
|
66
|
+
|
|
67
|
+
- Company domain or GitHub organization
|
|
68
|
+
- Evidence source: git email domain, git remote URL, hostname domain, CI provider
|
|
69
|
+
- Event count and unique sessions
|
|
70
|
+
- Commands used
|
|
71
|
+
- Targets or servers seen
|
|
72
|
+
- Production signals: CI, private repo naming, repeated scans, security checks, matrix scans
|
|
73
|
+
- Confidence: high, medium, low
|
|
74
|
+
- Tier recommendation: Team, Business, Enterprise, Strategic
|
|
75
|
+
|
|
76
|
+
Do not publish raw emails. Keep account evidence internal.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Enterprise Outreach Playbook
|
|
2
|
+
|
|
3
|
+
Use this playbook after running:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm run telemetry:intelligence -- --input telemetry-exports/events-flat-full.json --out-dir reports
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Start from `reports/telemetry-usage-summary.html` to confirm external usage before reading account rankings. Do not treat first-party CI, release workflows, or internal/personal sessions as market traction.
|
|
10
|
+
|
|
11
|
+
Do not include raw personal emails in public issues, posts, or docs. Use account domains, GitHub orgs, and aggregate telemetry evidence.
|
|
12
|
+
|
|
13
|
+
## Priority Accounts
|
|
14
|
+
|
|
15
|
+
| Priority | Account | Evidence | Motion |
|
|
16
|
+
| ---: | --- | --- | --- |
|
|
17
|
+
| 1 | `thinkingdata.cn` | High-confidence external usage, repeated sessions, private-network target signal, Feishu/Lark MCP targets | Enterprise pilot |
|
|
18
|
+
| 2 | `kimquy.capital` | Recent light usage across multiple sessions | Business pilot / design partner |
|
|
19
|
+
| 3 | `paperstreetdata.com` | Small usage cluster | Business pilot / testimonial ask |
|
|
20
|
+
| 4 | `cyberneticsplus.com` | Single company signal | Team pilot / feedback ask |
|
|
21
|
+
| 5 | GitHub org/user signals | CI or repo-based usage | Team pilot unless company identity is confirmed |
|
|
22
|
+
|
|
23
|
+
## ThinkingData First Email
|
|
24
|
+
|
|
25
|
+
Subject: MCP security reporting for Feishu/Lark production workflows
|
|
26
|
+
|
|
27
|
+
Hi,
|
|
28
|
+
|
|
29
|
+
I build MCP Observatory, an open source tool for testing, securing, and monitoring MCP servers before agents depend on them.
|
|
30
|
+
|
|
31
|
+
We are seeing serious production-style usage patterns around Feishu/Lark MCP workflows and internal HTTP MCP targets. I am opening a small number of enterprise pilots for teams that want hosted MCP security reports, private-repo CI history, and fleet visibility across agent environments.
|
|
32
|
+
|
|
33
|
+
If your team is running MCP servers in production, I can prepare a short evidence-based report and a pilot proposal focused on:
|
|
34
|
+
|
|
35
|
+
- Feishu/Lark MCP compatibility
|
|
36
|
+
- private HTTP MCP health checks
|
|
37
|
+
- security findings and schema drift
|
|
38
|
+
- CI history and production monitoring
|
|
39
|
+
- MCP fleet visibility across teams
|
|
40
|
+
|
|
41
|
+
Would it be useful to compare notes this week?
|
|
42
|
+
|
|
43
|
+
William
|
|
44
|
+
|
|
45
|
+
## Pilot Routing
|
|
46
|
+
|
|
47
|
+
- Repeated sessions + internal/private target: Enterprise Pilot, starts at `$3k/month`.
|
|
48
|
+
- Major platform, AI lab, or very large company: Strategic only, `$250k+/year` anchor.
|
|
49
|
+
- Light but recent company usage: Business Pilot, starts at `$999/month`.
|
|
50
|
+
- GitHub-user-only or hobby-looking usage: Team Pilot, starts at `$299/month`.
|
|
51
|
+
|
|
52
|
+
## Call Agenda
|
|
53
|
+
|
|
54
|
+
1. Confirm whether MCP is already in production or only evaluation.
|
|
55
|
+
2. Identify the owner: platform, security, AI infra, developer productivity, or app team.
|
|
56
|
+
3. Ask which value matters most: CI, security report, dashboard, certification, fleet inventory, or private deployment.
|
|
57
|
+
4. Offer to generate a static enterprise report from their first pilot run.
|
|
58
|
+
5. Quote manually. Do not route large companies to self-serve Team/Business pricing.
|
|
59
|
+
|
|
60
|
+
## Evidence Packet
|
|
61
|
+
|
|
62
|
+
Prepare this before outreach:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npx @kryptosai/mcp-observatory enterprise-report \
|
|
66
|
+
--account "Account Name" \
|
|
67
|
+
--format html \
|
|
68
|
+
--output reports/account-enterprise-report.html
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Include only aggregate facts:
|
|
72
|
+
|
|
73
|
+
- company or GitHub organization domain
|
|
74
|
+
- event count
|
|
75
|
+
- unique sessions
|
|
76
|
+
- first seen / last seen
|
|
77
|
+
- commands used
|
|
78
|
+
- targets seen
|
|
79
|
+
- CI/private-network/security signals
|
|
80
|
+
- confidence
|
|
81
|
+
- recommended pilot tier
|
|
82
|
+
|
|
83
|
+
Do not include raw hostnames, personal emails, tokens, or private URLs in external outreach.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Testing Feishu/Lark MCP Servers
|
|
2
|
+
|
|
3
|
+
Feishu and Lark workflows often put documents, approvals, project data, and internal knowledge behind MCP servers. MCP Observatory helps teams test those servers before agents depend on them.
|
|
4
|
+
|
|
5
|
+
## Local Server Check
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx @kryptosai/mcp-observatory test --security npx -y feishu-doc-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Use `--security` when the server exposes document search, write actions, internal URLs, or credential-backed tools.
|
|
12
|
+
|
|
13
|
+
## Internal HTTP MCP Check
|
|
14
|
+
|
|
15
|
+
For an internal HTTP MCP endpoint, create a target file:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"targetId": "feishu-doc-mcp",
|
|
20
|
+
"adapter": "http",
|
|
21
|
+
"url": "https://internal.example.com/mcp",
|
|
22
|
+
"authToken": "${FEISHU_MCP_TOKEN}",
|
|
23
|
+
"timeoutMs": 30000
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Then run:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
export FEISHU_MCP_TOKEN="..."
|
|
31
|
+
npx @kryptosai/mcp-observatory test --target feishu-target.json --security
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## CI Report
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
name: Feishu MCP Check
|
|
38
|
+
on: [pull_request]
|
|
39
|
+
|
|
40
|
+
jobs:
|
|
41
|
+
observatory:
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
env:
|
|
44
|
+
MCP_OBSERVATORY_ORG: your-company.com
|
|
45
|
+
MCP_OBSERVATORY_CONTACT: mcp-owner@your-company.com
|
|
46
|
+
steps:
|
|
47
|
+
- uses: actions/checkout@v4
|
|
48
|
+
- uses: KryptosAI/mcp-observatory/action@main
|
|
49
|
+
with:
|
|
50
|
+
target: feishu-target.json
|
|
51
|
+
security: true
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Enterprise Report
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx @kryptosai/mcp-observatory enterprise-report \
|
|
58
|
+
--account "Feishu MCP production fleet" \
|
|
59
|
+
--format html \
|
|
60
|
+
--output feishu-mcp-report.html
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Production teams can use the report for MCP owner reviews, private-repo CI history, security review, and certification conversations.
|
|
64
|
+
|
|
65
|
+
Contact `william@banksey.com` for production Feishu/Lark MCP usage, hosted reporting, private deployment, or fleet visibility.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Known Issues
|
|
2
|
+
|
|
3
|
+
## `unsupported` vs `failed`
|
|
4
|
+
|
|
5
|
+
This distinction is one of the main reasons the repo exists.
|
|
6
|
+
|
|
7
|
+
- `unsupported` means the target did not advertise the capability. Example: `@modelcontextprotocol/server-filesystem` currently surfaces `prompts` and `resources` as `unsupported`.
|
|
8
|
+
- `failed` means the capability path or startup path should have worked and did not. Example: a target that advertises a capability but errors during the list call, or a package that closes the connection before initialization completes.
|
|
9
|
+
|
|
10
|
+
Collapsing those states would make the ecosystem look simpler than it is.
|
|
11
|
+
|
|
12
|
+
## Not every MCP package is a drop-in stdio target
|
|
13
|
+
|
|
14
|
+
Some packages in the ecosystem are app-oriented, require additional startup flags, or close immediately when invoked like a plain local-process stdio server. That is not a failure of MCP Observatory; it is useful ecosystem signal.
|
|
15
|
+
|
|
16
|
+
Observed examples during launch hardening:
|
|
17
|
+
|
|
18
|
+
- `@modelcontextprotocol/server-map` timed out under the current local-process harness
|
|
19
|
+
- `@modelcontextprotocol/server-threejs` closed the connection before initialization completed
|
|
20
|
+
- `@jsonresume/mcp` closed the connection before initialization completed
|
|
21
|
+
- `@modelcontextprotocol/server-pdf` timed out under the current probe setup
|
|
22
|
+
|
|
23
|
+
These are good candidates for future integration work because they help clarify:
|
|
24
|
+
|
|
25
|
+
- stdio vs app/server transport expectations
|
|
26
|
+
- startup requirements for package-specific servers
|
|
27
|
+
- how MCP Observatory should present connection/setup failures clearly
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# MCP Safety Report
|
|
2
|
+
|
|
3
|
+
Latest generated baseline: June 19, 2026.
|
|
4
|
+
|
|
5
|
+
MCP servers are becoming production dependencies. When agents depend on a server, that server needs repeatable compatibility checks, security review, schema drift detection, and visible trust signals.
|
|
6
|
+
|
|
7
|
+
## What Observatory Checks
|
|
8
|
+
|
|
9
|
+
MCP Observatory checks:
|
|
10
|
+
|
|
11
|
+
- tools, prompts, and resources list/respond correctly
|
|
12
|
+
- advertised capabilities match observed behavior
|
|
13
|
+
- safe read-only tools can be invoked
|
|
14
|
+
- schemas are usable by agents
|
|
15
|
+
- security footguns are visible before production use
|
|
16
|
+
- runs can be compared for regressions and schema drift
|
|
17
|
+
- artifacts can be rendered as JSON, Markdown, HTML, JUnit, SARIF, or PR comments
|
|
18
|
+
|
|
19
|
+
## Aggregate Usage Snapshot
|
|
20
|
+
|
|
21
|
+
Safe aggregate telemetry from the latest local export:
|
|
22
|
+
|
|
23
|
+
| Metric | Value |
|
|
24
|
+
| --- | ---: |
|
|
25
|
+
| Total telemetry events | 10,278 |
|
|
26
|
+
| Unique sessions | 7,211 |
|
|
27
|
+
| External sessions | 5,368 |
|
|
28
|
+
| External CI sessions | 2,434 |
|
|
29
|
+
| Attributed company/org sessions | 128 |
|
|
30
|
+
|
|
31
|
+
Top external commands:
|
|
32
|
+
|
|
33
|
+
1. `serve`
|
|
34
|
+
2. `run`
|
|
35
|
+
3. `diff`
|
|
36
|
+
4. `test`
|
|
37
|
+
5. `scan`
|
|
38
|
+
6. `history`
|
|
39
|
+
|
|
40
|
+
No raw emails, hostnames, private URLs, tokens, or response bodies are included in this report.
|
|
41
|
+
|
|
42
|
+
## Common MCP Failure Classes
|
|
43
|
+
|
|
44
|
+
From public sample artifacts and Observatory check categories, the most important failure classes are:
|
|
45
|
+
|
|
46
|
+
- server startup failure
|
|
47
|
+
- malformed or missing tools/list, prompts/list, or resources/list responses
|
|
48
|
+
- schema quality issues that make tools harder for agents to call correctly
|
|
49
|
+
- regressions between two runs
|
|
50
|
+
- unexpected drift from a recorded baseline
|
|
51
|
+
- broad filesystem/network/security-sensitive tool surfaces
|
|
52
|
+
- slow or unreliable connection behavior
|
|
53
|
+
|
|
54
|
+
## How Maintainers Add The Check
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npx @kryptosai/mcp-observatory init-ci --all --command "npx -y my-mcp-server"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
That creates a GitHub Action and a README badge snippet. The action can comment on PRs and fail when MCP compatibility or security checks regress.
|
|
61
|
+
|
|
62
|
+
## Production Path
|
|
63
|
+
|
|
64
|
+
Production teams can use MCP Observatory for:
|
|
65
|
+
|
|
66
|
+
- private repo CI history
|
|
67
|
+
- hosted reporting
|
|
68
|
+
- recurring security reports
|
|
69
|
+
- MCP certification
|
|
70
|
+
- support and rollout review
|
|
71
|
+
- fleet visibility across teams and repos
|
|
72
|
+
|
|
73
|
+
Contact `william@banksey.com` for pilots.
|
|
74
|
+
|
|
75
|
+
## Launch Post
|
|
76
|
+
|
|
77
|
+
MCP servers are becoming production dependencies.
|
|
78
|
+
|
|
79
|
+
I built MCP Observatory so MCP maintainers can add CI, security checks, schema drift detection, PR reports, and trust badges in one command:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
npx @kryptosai/mcp-observatory init-ci --all --command "npx -y my-mcp-server"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Free for local OSS use. Paid pilots are available for hosted reporting, private repo CI, certification, support, and fleet visibility.
|