@kryptosai/mcp-observatory 0.20.2 → 0.21.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.
Files changed (60) hide show
  1. package/COMMERCIAL.md +67 -0
  2. package/PRIVACY.md +52 -0
  3. package/README.md +100 -4
  4. package/TERMS.md +30 -0
  5. package/dist/src/checks/resources.js +9 -19
  6. package/dist/src/checks/resources.js.map +1 -1
  7. package/dist/src/checks/security-rules.js.map +1 -1
  8. package/dist/src/checks/security.js +33 -14
  9. package/dist/src/checks/security.js.map +1 -1
  10. package/dist/src/checks/tools-invoke.js.map +1 -1
  11. package/dist/src/checks/tools.js.map +1 -1
  12. package/dist/src/ci-issue.js +3 -1
  13. package/dist/src/ci-issue.js.map +1 -1
  14. package/dist/src/cli.js +49 -2
  15. package/dist/src/cli.js.map +1 -1
  16. package/dist/src/commands/ci-report.js +4 -0
  17. package/dist/src/commands/ci-report.js.map +1 -1
  18. package/dist/src/commands/enterprise-report.d.ts +12 -0
  19. package/dist/src/commands/enterprise-report.js +192 -0
  20. package/dist/src/commands/enterprise-report.js.map +1 -0
  21. package/dist/src/commands/init-ci.d.ts +17 -0
  22. package/dist/src/commands/init-ci.js +106 -0
  23. package/dist/src/commands/init-ci.js.map +1 -0
  24. package/dist/src/commands/scan.js +4 -0
  25. package/dist/src/commands/scan.js.map +1 -1
  26. package/dist/src/commands/score.js +2 -0
  27. package/dist/src/commands/score.js.map +1 -1
  28. package/dist/src/commands/telemetry.js +47 -2
  29. package/dist/src/commands/telemetry.js.map +1 -1
  30. package/dist/src/commands/test.js +11 -5
  31. package/dist/src/commands/test.js.map +1 -1
  32. package/dist/src/commercial.d.ts +5 -0
  33. package/dist/src/commercial.js +46 -0
  34. package/dist/src/commercial.js.map +1 -0
  35. package/dist/src/runner.js +1 -1
  36. package/dist/src/runner.js.map +1 -1
  37. package/dist/src/telemetry.d.ts +27 -0
  38. package/dist/src/telemetry.js +57 -3
  39. package/dist/src/telemetry.js.map +1 -1
  40. package/dist/src/types.d.ts +5 -0
  41. package/dist/src/validate.js +48 -5
  42. package/dist/src/validate.js.map +1 -1
  43. package/docs/architecture.md +32 -0
  44. package/docs/certification-campaign-template.md +167 -0
  45. package/docs/certification-distribution.md +125 -0
  46. package/docs/compatibility.md +164 -0
  47. package/docs/decisions.md +23 -0
  48. package/docs/demo.svg +59 -0
  49. package/docs/directory-listing-copy.md +78 -0
  50. package/docs/distribution-launch.md +76 -0
  51. package/docs/enterprise-outreach-playbook.md +83 -0
  52. package/docs/feishu-lark-mcp.md +65 -0
  53. package/docs/known-issues.md +27 -0
  54. package/docs/mcp-safety-report-latest.md +85 -0
  55. package/docs/project-case-study.md +106 -0
  56. package/docs/proof.md +68 -0
  57. package/docs/publish-readiness.md +73 -0
  58. package/package.json +31 -18
  59. package/schemas/diff-artifact.schema.json +62 -66
  60. package/schemas/run-artifact.schema.json +107 -142
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ # Architecture
2
+
3
+ MCP Observatory is intentionally small. The core data flow is:
4
+
5
+ 1. **Target config**
6
+ A JSON description of how to start a target via the local-process adapter.
7
+ 2. **Adapter**
8
+ The adapter starts an MCP server over stdio and establishes a client session.
9
+ 3. **Checks**
10
+ The runner executes `tools`, `prompts`, `resources`, and `semantics`.
11
+ 4. **Run artifact**
12
+ Results are normalized into a stable, versioned JSON artifact with a top-level `gate`.
13
+ 5. **Diff**
14
+ Two run artifacts can be compared to classify regressions and recoveries.
15
+ 6. **Report**
16
+ Run or diff artifacts render as terminal output, JSON, or Markdown.
17
+
18
+ ## Design Intent
19
+
20
+ - keep the adapter boundary obvious so more target types can be added later
21
+ - keep checks isolated and typed
22
+ - treat artifacts as product surfaces, not incidental output
23
+ - keep the Markdown report strong enough to stand on its own in issues, PRs, and CI
24
+
25
+ ## Stability Surfaces
26
+
27
+ These are the most important surfaces to preserve carefully:
28
+
29
+ - artifact schema
30
+ - diff semantics
31
+ - `unsupported` vs `failed` interpretation
32
+ - Markdown report structure and usefulness
@@ -0,0 +1,167 @@
1
+ # MCP Observatory Certification Campaign
2
+
3
+ Use this tracker for outbound PR waves against MCP server repositories.
4
+
5
+ ## Campaign Goal
6
+
7
+ Open helpful PRs that add MCP Observatory CI checks and a public compatibility/security badge to popular MCP server projects.
8
+
9
+ One-shot campaign target:
10
+
11
+ - 50 researched repos
12
+ - 25 PRs opened
13
+ - 10 accepted checks or badges
14
+ - 5 public proof points added to launch materials
15
+ - 3 production/security pilot conversations started
16
+
17
+ ## Qualification Rules
18
+
19
+ Prioritize:
20
+
21
+ - active MCP server repos
22
+ - clear install/run command
23
+ - recent commit or release in the last 90 days
24
+ - 100+ stars, meaningful npm downloads, directory popularity, or enterprise category
25
+ - developer tools, security, CI/CD, database, browser automation, SaaS, cloud, or finance servers
26
+
27
+ Skip:
28
+
29
+ - servers that require private credentials to start
30
+ - repos with destructive default tools
31
+ - abandoned repos unless they have major download volume
32
+ - projects that already have equivalent MCP compatibility/security CI
33
+
34
+ ## Tracker
35
+
36
+ | Priority | Repo | Package/Command | Category | Stars/Downloads/Listing Signal | Activity Signal | Risk Notes | Status | PR URL | Accepted/Badge/Proof |
37
+ | ---: | --- | --- | --- | --- | --- | --- | --- | --- | --- |
38
+ | 1 | `owner/repo` | `npx -y package` | Security | | | | researched | | |
39
+ | 2 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
40
+ | 3 | `owner/repo` | `uvx package` | Browser Automation | | | | researched | | |
41
+ | 4 | `owner/repo` | `docker run image` | Database | | | | researched | | |
42
+ | 5 | `owner/repo` | `npx -y package` | Cloud | | | | researched | | |
43
+ | 6 | `owner/repo` | `npx -y package` | SaaS | | | | researched | | |
44
+ | 7 | `owner/repo` | `uvx package` | Finance | | | | researched | | |
45
+ | 8 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
46
+ | 9 | `owner/repo` | `npx -y package` | Security | | | | researched | | |
47
+ | 10 | `owner/repo` | `docker run image` | Infrastructure | | | | researched | | |
48
+ | 11 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
49
+ | 12 | `owner/repo` | `uvx package` | Data | | | | researched | | |
50
+ | 13 | `owner/repo` | `npx -y package` | Search | | | | researched | | |
51
+ | 14 | `owner/repo` | `npx -y package` | Filesystem | | | | researched | | |
52
+ | 15 | `owner/repo` | `docker run image` | Browser Automation | | | | researched | | |
53
+ | 16 | `owner/repo` | `npx -y package` | API | | | | researched | | |
54
+ | 17 | `owner/repo` | `uvx package` | Security | | | | researched | | |
55
+ | 18 | `owner/repo` | `npx -y package` | Database | | | | researched | | |
56
+ | 19 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
57
+ | 20 | `owner/repo` | `docker run image` | Cloud | | | | researched | | |
58
+ | 21 | `owner/repo` | `npx -y package` | SaaS | | | | researched | | |
59
+ | 22 | `owner/repo` | `uvx package` | Data | | | | researched | | |
60
+ | 23 | `owner/repo` | `npx -y package` | Security | | | | researched | | |
61
+ | 24 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
62
+ | 25 | `owner/repo` | `docker run image` | Infrastructure | | | | researched | | |
63
+ | 26 | `owner/repo` | `npx -y package` | Browser Automation | | | | researched | | |
64
+ | 27 | `owner/repo` | `uvx package` | API | | | | researched | | |
65
+ | 28 | `owner/repo` | `npx -y package` | Database | | | | researched | | |
66
+ | 29 | `owner/repo` | `npx -y package` | Search | | | | researched | | |
67
+ | 30 | `owner/repo` | `docker run image` | Cloud | | | | researched | | |
68
+ | 31 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
69
+ | 32 | `owner/repo` | `uvx package` | Security | | | | researched | | |
70
+ | 33 | `owner/repo` | `npx -y package` | SaaS | | | | researched | | |
71
+ | 34 | `owner/repo` | `npx -y package` | Data | | | | researched | | |
72
+ | 35 | `owner/repo` | `docker run image` | Infrastructure | | | | researched | | |
73
+ | 36 | `owner/repo` | `npx -y package` | Finance | | | | researched | | |
74
+ | 37 | `owner/repo` | `uvx package` | Browser Automation | | | | researched | | |
75
+ | 38 | `owner/repo` | `npx -y package` | API | | | | researched | | |
76
+ | 39 | `owner/repo` | `npx -y package` | Database | | | | researched | | |
77
+ | 40 | `owner/repo` | `docker run image` | Security | | | | researched | | |
78
+ | 41 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
79
+ | 42 | `owner/repo` | `uvx package` | Data | | | | researched | | |
80
+ | 43 | `owner/repo` | `npx -y package` | Search | | | | researched | | |
81
+ | 44 | `owner/repo` | `npx -y package` | SaaS | | | | researched | | |
82
+ | 45 | `owner/repo` | `docker run image` | Cloud | | | | researched | | |
83
+ | 46 | `owner/repo` | `npx -y package` | Filesystem | | | | researched | | |
84
+ | 47 | `owner/repo` | `uvx package` | Security | | | | researched | | |
85
+ | 48 | `owner/repo` | `npx -y package` | Developer Tools | | | | researched | | |
86
+ | 49 | `owner/repo` | `npx -y package` | Infrastructure | | | | researched | | |
87
+ | 50 | `owner/repo` | `docker run image` | Browser Automation | | | | researched | | |
88
+
89
+ Statuses:
90
+
91
+ - `researched`
92
+ - `branch-ready`
93
+ - `pr-opened`
94
+ - `accepted`
95
+ - `declined`
96
+ - `needs-maintainer-input`
97
+ - `proof-captured`
98
+ - `pilot-lead`
99
+
100
+ ## PR Checklist
101
+
102
+ - Add `.github/workflows/mcp-observatory.yml`
103
+ - Use `deep: true` and `security: true`
104
+ - Keep `fail-on-regression: true` unless the repo is noisy
105
+ - Add README badge only when it fits the repo style
106
+ - Include the maintainer PR body from `certification-distribution.md`
107
+ - Do not include raw telemetry, private evidence, or sales pricing
108
+
109
+ ## PR Templates
110
+
111
+ ### Workflow-Only PR
112
+
113
+ ```md
114
+ This adds a lightweight MCP Observatory check for this MCP server.
115
+
116
+ Why it helps:
117
+
118
+ - verifies MCP tools/prompts/resources still respond correctly
119
+ - catches schema drift and common security footguns before release
120
+ - posts a readable PR report for maintainers
121
+ - gives users a compatibility signal when evaluating MCP servers
122
+
123
+ It runs in GitHub Actions and does not require an account. If the check is too strict for this repo, `fail-on-regression: false` can be used while keeping the report visible.
124
+ ```
125
+
126
+ ### Workflow + Badge PR
127
+
128
+ ```md
129
+ This adds MCP Observatory CI plus a small README badge so users can see this server is checked for MCP compatibility, schema drift, and common security issues.
130
+
131
+ The workflow runs on PRs and pushes to `main`. The badge links back to MCP Observatory for context and can be removed if it does not fit the repo style.
132
+ ```
133
+
134
+ ### Issue-Only Fallback
135
+
136
+ ```md
137
+ I tried preparing a small MCP Observatory CI check for this server, but did not want to open a PR without confirming the safest startup command.
138
+
139
+ Would you accept a workflow that runs:
140
+
141
+ ```bash
142
+ npx @kryptosai/mcp-observatory test <server command> --security --deep
143
+ ```
144
+
145
+ The goal is to give users a visible compatibility/security signal and catch schema drift before releases.
146
+ ```
147
+
148
+ ## Proof Capture
149
+
150
+ For accepted PRs, record:
151
+
152
+ - repo
153
+ - PR URL
154
+ - category
155
+ - accepted date
156
+ - badge added: yes/no
157
+ - CI status
158
+ - quote or maintainer reaction if public
159
+ - whether the repo appears in Glama, PulseMCP, Smithery, or awesome-MCP lists
160
+
161
+ Use accepted PRs as proof for:
162
+
163
+ - README traction section
164
+ - launch posts
165
+ - enterprise outreach
166
+ - directory listing copy
167
+ - weekly MCP safety report
@@ -0,0 +1,125 @@
1
+ # Certification Distribution Loop
2
+
3
+ Use this when opening helpful PRs to MCP server projects. The motion is simple: run MCP Observatory, give the maintainer a useful security/compatibility check, and leave them with a badge/report they can keep.
4
+
5
+ ## Offer
6
+
7
+ MCP Observatory gives MCP server maintainers:
8
+
9
+ - CI coverage for tools, prompts, resources, schema quality, and security checks
10
+ - A PR comment report on every change
11
+ - A README badge they can show publicly
12
+ - A local-first OSS path with no account required
13
+ - A paid production path only if they need hosted history, private repo reporting, support, certification, or fleet visibility
14
+
15
+ ## Copy-Paste Badge
16
+
17
+ For repos that add the GitHub Action, suggest this README badge:
18
+
19
+ ```md
20
+ [![MCP Observatory](https://img.shields.io/badge/MCP%20Observatory-enabled-2563eb)](https://github.com/KryptosAI/mcp-observatory)
21
+ ```
22
+
23
+ For repos that generate a score badge, suggest:
24
+
25
+ ```bash
26
+ npx @kryptosai/mcp-observatory badge npx -y <server-package> --output docs/mcp-health.svg
27
+ ```
28
+
29
+ ```md
30
+ [![MCP Health](./docs/mcp-health.svg)](https://github.com/KryptosAI/mcp-observatory)
31
+ ```
32
+
33
+ ## GitHub Action Template
34
+
35
+ Fast path:
36
+
37
+ ```bash
38
+ npx @kryptosai/mcp-observatory init-ci --command "npx -y <server-package>" --badge
39
+ ```
40
+
41
+ That creates:
42
+
43
+ - `.github/workflows/mcp-observatory.yml`
44
+ - `docs/mcp-observatory-badge.md`
45
+
46
+ Manual template:
47
+
48
+ ```yaml
49
+ name: MCP Observatory
50
+
51
+ on:
52
+ pull_request:
53
+ push:
54
+ branches: [main]
55
+
56
+ jobs:
57
+ mcp-observatory:
58
+ runs-on: ubuntu-latest
59
+ steps:
60
+ - uses: actions/checkout@v6
61
+ - uses: KryptosAI/mcp-observatory/action@main
62
+ with:
63
+ command: npx -y <server-package>
64
+ deep: true
65
+ security: true
66
+ comment-on-pr: true
67
+ ```
68
+
69
+ For repos with a local target config:
70
+
71
+ ```yaml
72
+ - uses: KryptosAI/mcp-observatory/action@main
73
+ with:
74
+ target: ./observatory-target.json
75
+ deep: true
76
+ security: true
77
+ ```
78
+
79
+ ## Maintainer PR Body
80
+
81
+ ```md
82
+ This adds a lightweight MCP Observatory check for this server.
83
+
84
+ Why it helps:
85
+
86
+ - verifies MCP tools/prompts/resources still respond correctly
87
+ - catches schema drift and common security footguns before release
88
+ - posts a readable PR report for maintainers
89
+ - creates a public compatibility signal for users evaluating MCP servers
90
+
91
+ It runs locally/inside GitHub Actions and does not require an account. If the check is too strict for this repo, `fail-on-regression: false` can be used while keeping the PR report visible.
92
+ ```
93
+
94
+ ## Comment For Passing Repos
95
+
96
+ ```md
97
+ Nice, this server passes MCP Observatory checks. If you want the signal in the README, you can add:
98
+
99
+ ```md
100
+ [![MCP Observatory](https://img.shields.io/badge/MCP%20Observatory-enabled-2563eb)](https://github.com/KryptosAI/mcp-observatory)
101
+ ```
102
+
103
+ That gives users a quick compatibility/security signal when they are choosing MCP servers.
104
+ ```
105
+
106
+ ## Targeting Order
107
+
108
+ Prioritize repos with:
109
+
110
+ - 100+ GitHub stars or visible npm downloads
111
+ - active releases in the last 90 days
112
+ - MCP servers used by developer tools, security, CI/CD, databases, browser automation, or enterprise SaaS
113
+ - no existing MCP compatibility/security CI
114
+ - clear package command that can run in GitHub Actions
115
+
116
+ Avoid drive-by PRs where the server requires private credentials, paid services, or destructive default actions.
117
+
118
+ ## Directory Follow-Through
119
+
120
+ After a repo accepts the check or badge:
121
+
122
+ - ask the maintainer to mention “tested with MCP Observatory” in their MCP directory listing
123
+ - update the MCP Observatory launch/story docs with the accepted repo
124
+ - use accepted PRs as proof in enterprise outreach
125
+ - invite production users to hosted reporting or certification pilots
@@ -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 sk-...` |
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=ghp_...",
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>