@kryptosai/mcp-observatory 0.26.1 → 0.28.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 +13 -9
- package/CONTRIBUTORS.md +39 -0
- package/PRIVACY.md +5 -5
- package/README.md +83 -30
- package/TERMS.md +1 -1
- package/dist/src/adapters/http.js +1 -5
- package/dist/src/adapters/http.js.map +1 -1
- package/dist/src/cassette.js +3 -2
- package/dist/src/cassette.js.map +1 -1
- package/dist/src/checks/attack-sim.d.ts +18 -0
- package/dist/src/checks/attack-sim.js +304 -0
- package/dist/src/checks/attack-sim.js.map +1 -0
- package/dist/src/checks/schema-quality.js +1 -0
- package/dist/src/checks/schema-quality.js.map +1 -1
- package/dist/src/ci-issue.js +4 -3
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +17 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/attack-sim.d.ts +2 -0
- package/dist/src/commands/attack-sim.js +168 -0
- package/dist/src/commands/attack-sim.js.map +1 -0
- package/dist/src/commands/helpers.d.ts +3 -1
- package/dist/src/commands/helpers.js +2 -2
- package/dist/src/commands/helpers.js.map +1 -1
- package/dist/src/commands/init-ci.d.ts +3 -0
- package/dist/src/commands/init-ci.js +57 -11
- package/dist/src/commands/init-ci.js.map +1 -1
- package/dist/src/commands/legacy.js +24 -3
- package/dist/src/commands/legacy.js.map +1 -1
- package/dist/src/commands/scan.js +37 -10
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/serve.js +9 -1
- package/dist/src/commands/serve.js.map +1 -1
- package/dist/src/commands/setup-ci-conversion.d.ts +26 -0
- package/dist/src/commands/setup-ci-conversion.js +120 -0
- package/dist/src/commands/setup-ci-conversion.js.map +1 -0
- package/dist/src/commands/telemetry.js +20 -14
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +63 -4
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/findings.d.ts +20 -0
- package/dist/src/findings.js +272 -0
- package/dist/src/findings.js.map +1 -0
- package/dist/src/history.js +3 -2
- package/dist/src/history.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/smithery.js +5 -1
- package/dist/src/integrations/smithery.js.map +1 -1
- package/dist/src/reporters/attack-sim.d.ts +2 -0
- package/dist/src/reporters/attack-sim.js +84 -0
- package/dist/src/reporters/attack-sim.js.map +1 -0
- package/dist/src/reporters/pr-comment.js +20 -6
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/sarif.d.ts +4 -1
- package/dist/src/reporters/sarif.js +58 -37
- package/dist/src/reporters/sarif.js.map +1 -1
- package/dist/src/runner.d.ts +3 -0
- package/dist/src/runner.js +5 -0
- package/dist/src/runner.js.map +1 -1
- package/dist/src/score.js +1 -1
- package/dist/src/score.js.map +1 -1
- package/dist/src/storage.d.ts +1 -0
- package/dist/src/storage.js +28 -2
- package/dist/src/storage.js.map +1 -1
- package/dist/src/telemetry.d.ts +6 -0
- package/dist/src/telemetry.js +17 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.js +21 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/ids.js +18 -5
- package/dist/src/utils/ids.js.map +1 -1
- package/dist/src/utils/url.d.ts +2 -0
- package/dist/src/utils/url.js +15 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/src/validate.js +1 -1
- package/dist/src/validate.js.map +1 -1
- package/docs/agent-ecosystem-promotion-plan.md +244 -0
- package/docs/agent-runtime-quickstart.md +98 -0
- package/docs/agent-tasks.md +95 -0
- package/docs/automatic-ci-integration.md +33 -0
- package/docs/campaign-attribution.md +58 -0
- package/docs/code-scanning-demo.md +57 -0
- package/docs/code-scanning-launch-outreach.md +55 -0
- package/docs/contributor-proof-cards/README.md +33 -0
- package/docs/contributor-recognition.md +92 -0
- package/docs/feishu-lark-mcp.md +3 -3
- package/docs/github-code-scanning-for-mcp.md +94 -0
- package/docs/launch.md +64 -0
- package/docs/mcp-attack-simulator.md +57 -0
- package/docs/mcp-server-safety-index.md +18 -12
- package/docs/metrics-dashboard.md +2 -2
- package/docs/openclaw-agent-template/SOUL.md +156 -0
- package/docs/proof.md +7 -4
- package/docs/receipt-graph.md +54 -0
- package/docs/safety-index/artifacts/antv-chart-server.json +21 -21
- package/docs/safety-index/artifacts/antv-chart-server.md +10 -10
- package/docs/safety-index/artifacts/browsermcp-server.json +17 -17
- package/docs/safety-index/artifacts/browsermcp-server.md +10 -10
- package/docs/safety-index/artifacts/context7-server.json +17 -17
- package/docs/safety-index/artifacts/context7-server.md +10 -10
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2014 -0
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +163 -0
- package/docs/safety-index/artifacts/everything-server.json +131 -56
- package/docs/safety-index/artifacts/everything-server.md +24 -24
- package/docs/safety-index/artifacts/executeautomation-playwright-server.json +26 -18
- package/docs/safety-index/artifacts/executeautomation-playwright-server.md +10 -10
- package/docs/safety-index/artifacts/filesystem-server.json +128 -20
- package/docs/safety-index/artifacts/filesystem-server.md +10 -10
- package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
- package/docs/safety-index/artifacts/kubernetes-server.json +1348 -0
- package/docs/safety-index/artifacts/kubernetes-server.md +150 -0
- package/docs/safety-index/artifacts/memory-server.json +75 -32
- package/docs/safety-index/artifacts/memory-server.md +35 -28
- package/docs/safety-index/artifacts/opentofu-server.json +25 -17
- package/docs/safety-index/artifacts/opentofu-server.md +11 -11
- package/docs/safety-index/artifacts/playwright-mcp-server.json +56 -20
- package/docs/safety-index/artifacts/playwright-mcp-server.md +12 -12
- package/docs/safety-index/artifacts/promptopia-server.json +28 -20
- package/docs/safety-index/artifacts/promptopia-server.md +11 -11
- package/docs/safety-index/artifacts/puppeteer-server.json +42 -30
- package/docs/safety-index/artifacts/puppeteer-server.md +28 -28
- package/docs/safety-index/artifacts/ref-tools-server.json +17 -17
- package/docs/safety-index/artifacts/ref-tools-server.md +9 -9
- package/docs/safety-index/artifacts/sequential-thinking-server.json +20 -21
- package/docs/safety-index/artifacts/sequential-thinking-server.md +10 -10
- package/docs/safety-index/targets.json +90 -14
- package/docs/setup-ci-doctor.md +2 -0
- package/docs/target-contribution-guide.md +139 -0
- package/docs/target-gallery.md +49 -0
- package/docs/target-registry.md +120 -0
- package/docs/tool-call-receipts.md +116 -0
- package/package.json +52 -9
- package/schemas/run-artifact.schema.json +1 -0
- package/scripts/postinstall.mjs +123 -0
- package/docs/certification-campaign-template.md +0 -181
- package/docs/certification-distribution.md +0 -145
- package/docs/certification-pr-campaign.md +0 -68
- package/docs/clone-to-ci-campaign.md +0 -62
- package/docs/directory-listing-copy.md +0 -85
- package/docs/distribution-launch.md +0 -76
- package/docs/ecosystem-distribution-kit.md +0 -79
- package/docs/enterprise-outreach-playbook.md +0 -83
- package/docs/paid-pilot-offer.md +0 -74
- package/docs/project-case-study.md +0 -140
- package/docs/public-post-drafts.md +0 -98
- package/docs/publish-readiness.md +0 -79
package/COMMERCIAL.md
CHANGED
|
@@ -4,20 +4,25 @@ MCP Observatory is the CI and security gate for MCP servers before agents depend
|
|
|
4
4
|
|
|
5
5
|
The open source CLI and MCP server remain free for local OSS use under the MIT license. Paid pilots are for production use cases where a team needs hosted reporting, private repository CI, security reports, certification, support, or fleet visibility.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## MCP Readiness Review
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
The primary paid offer is a fixed-scope MCP Readiness Review starting at `$2,500`.
|
|
10
|
+
|
|
11
|
+
It includes CI rollout, SARIF/GitHub Code Scanning setup, private readiness reporting, prioritized remediation notes, and maintainer PR support for selected MCP servers.
|
|
12
|
+
|
|
13
|
+
These are starting points for current pilots, not permanent fixed plans. For public OSS users, the important part is simple: local CLI use remains free, and paid work is for private or production support needs.
|
|
10
14
|
|
|
11
15
|
| Pilot | Starting Price | Best Fit |
|
|
12
16
|
| --- | ---: | --- |
|
|
17
|
+
| MCP Readiness Review | $2,500 | CI rollout, Code Scanning, private readiness report, and prioritized fixes |
|
|
13
18
|
| Team Pilot | $299/month | Small teams adding MCP regression checks to CI |
|
|
14
19
|
| Business Pilot | $999/month | Private repos, recurring security reports, and shared reporting |
|
|
15
20
|
| Enterprise Pilot | $3k/month | Private MCP readiness reports, support, and fleet visibility |
|
|
16
|
-
| Strategic Accounts | Custom
|
|
21
|
+
| Strategic Accounts | Custom | Major platforms, AI labs, and companies running MCP in production at scale |
|
|
17
22
|
|
|
18
|
-
Contact:
|
|
23
|
+
Contact: open a pilot request from the GitHub issue chooser.
|
|
19
24
|
|
|
20
|
-
Primary pilot offer:
|
|
25
|
+
Primary pilot offer: private MCP readiness review + CI rollout + drift/security report.
|
|
21
26
|
|
|
22
27
|
## Paid Production Use
|
|
23
28
|
|
|
@@ -73,12 +78,11 @@ For account-level pilot reporting in CI:
|
|
|
73
78
|
|
|
74
79
|
```bash
|
|
75
80
|
MCP_OBSERVATORY_ORG=customer.com
|
|
76
|
-
MCP_OBSERVATORY_CONTACT=mcp-owner
|
|
81
|
+
MCP_OBSERVATORY_CONTACT=customer-mcp-owner
|
|
77
82
|
```
|
|
78
83
|
|
|
79
|
-
Use
|
|
80
|
-
Use [public proof](./docs/proof.md) and the [project case study](./docs/project-case-study.md) for customer-safe credibility. Do not expose private telemetry rows in outreach.
|
|
84
|
+
Use [public proof](./docs/proof.md) for customer-safe credibility. Do not expose private telemetry rows in outreach.
|
|
81
85
|
|
|
82
86
|
## Enterprise Framing
|
|
83
87
|
|
|
84
|
-
For production MCP usage, private repo CI, compliance/security reporting, or large company deployments, contact us before selecting a plan.
|
|
88
|
+
For production MCP usage, private repo CI, compliance/security reporting, or large company deployments, contact us before selecting a plan.
|
package/CONTRIBUTORS.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Contributors
|
|
2
|
+
|
|
3
|
+
MCP Observatory uses the [All Contributors](https://allcontributors.org/) spec so code, docs, tests, target research, reviews, security findings, design, and maintainer feedback can all receive visible credit.
|
|
4
|
+
|
|
5
|
+
Official GitHub profile achievements are platform-controlled; this project does not award them. Instead, contributors get public proof: a role on the recognition page, an All Contributors entry, and a proof card or recognition link they can reference from a README or GitHub profile.
|
|
6
|
+
|
|
7
|
+
See the full recognition path in [MCP Observatory Contributors](./docs/contributor-recognition.md).
|
|
8
|
+
|
|
9
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
10
|
+
[](#contributors-)
|
|
11
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
12
|
+
|
|
13
|
+
## Contributors
|
|
14
|
+
|
|
15
|
+
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
|
|
16
|
+
<!-- prettier-ignore-start -->
|
|
17
|
+
<!-- markdownlint-disable -->
|
|
18
|
+
<table>
|
|
19
|
+
<tbody>
|
|
20
|
+
<tr>
|
|
21
|
+
<td align="center" valign="top" width="14.28%"><a href="https://github.com/KryptosAI"><img src="https://avatars.githubusercontent.com/u/140749029?s=100" width="100px;" alt="William Weishuhn"/><br /><sub><b>William Weishuhn</b></sub></a><br /><a href="https://github.com/KryptosAI/mcp-observatory/commits?author=KryptosAI" title="Code">💻</a> <a href="https://github.com/KryptosAI/mcp-observatory/commits?author=KryptosAI" title="Documentation">📖</a> <a href="#ideas-KryptosAI" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-KryptosAI" title="Maintenance">🚧</a> <a href="https://github.com/KryptosAI/mcp-observatory/commits?author=KryptosAI" title="Tests">⚠️</a></td>
|
|
22
|
+
</tr>
|
|
23
|
+
</tbody>
|
|
24
|
+
</table>
|
|
25
|
+
|
|
26
|
+
<!-- markdownlint-restore -->
|
|
27
|
+
<!-- prettier-ignore-end -->
|
|
28
|
+
|
|
29
|
+
<!-- ALL-CONTRIBUTORS-LIST:END -->
|
|
30
|
+
|
|
31
|
+
## Recognition Requests
|
|
32
|
+
|
|
33
|
+
After a useful contribution is merged or accepted, request credit in the PR or issue:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
@all-contributors please add @username for code, doc, test, ideas, review
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If the bot is unavailable, open a small PR that updates `.all-contributorsrc`, this file, and any relevant proof card under `docs/contributor-proof-cards/`.
|
package/PRIVACY.md
CHANGED
|
@@ -10,7 +10,7 @@ MCP Observatory collects product usage telemetry unless telemetry is disabled. T
|
|
|
10
10
|
- Counts of tools, prompts, resources, servers, checks, and failures
|
|
11
11
|
- CI environment signals such as provider and GitHub Actions metadata when available, including repository, workflow, run ID, run number, event name, ref, and actor
|
|
12
12
|
- Declared account attribution from `MCP_OBSERVATORY_ORG` and `MCP_OBSERVATORY_CONTACT` when operators set them
|
|
13
|
-
- Git
|
|
13
|
+
- Git identity and remote metadata when available
|
|
14
14
|
- Hostname and operating system metadata
|
|
15
15
|
- Session identifiers and timestamps
|
|
16
16
|
- Error categories, check statuses, security finding counts, health scores, and scan outcomes
|
|
@@ -35,14 +35,14 @@ Production teams can make account reporting clearer without relying on inferred
|
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
37
|
MCP_OBSERVATORY_ORG=example.com
|
|
38
|
-
MCP_OBSERVATORY_CONTACT=mcp-owner
|
|
38
|
+
MCP_OBSERVATORY_CONTACT=mcp-owner
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
## Internal Account Intelligence
|
|
42
42
|
|
|
43
|
-
We may use telemetry internally to identify likely company or organization usage, including by deriving company domains from git
|
|
43
|
+
We may use telemetry internally to identify likely company or organization usage, including by deriving company domains from git metadata, repository metadata, CI usage, target names, repeated sessions, and production-looking command patterns.
|
|
44
44
|
|
|
45
|
-
Raw telemetry may include git
|
|
45
|
+
Raw telemetry may include git identity metadata, repository metadata, hostnames, target commands, HTTP target URLs, CI metadata, target IDs, and command outcomes. These fields are retained for internal product analytics, account intelligence, support, and outreach prioritization.
|
|
46
46
|
|
|
47
47
|
Raw emails, hostnames, private URLs, target commands, and private telemetry exports are not intended for public reporting. Account intelligence outputs should use company domains, GitHub organizations, aggregate counts, confidence levels, and outreach status rather than raw personal identifiers.
|
|
48
48
|
|
|
@@ -52,4 +52,4 @@ Internal usage reports separate first-party MCP Observatory project activity fro
|
|
|
52
52
|
|
|
53
53
|
Enterprise customers can request telemetry review, reduced collection, private deployment, or enterprise-controlled telemetry modes as part of a paid pilot.
|
|
54
54
|
|
|
55
|
-
Contact:
|
|
55
|
+
Contact: open an issue or pilot request from the GitHub issue chooser.
|
package/README.md
CHANGED
|
@@ -11,25 +11,84 @@
|
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
[](https://github.com/KryptosAI/mcp-observatory/actions/workflows/ci.yml)
|
|
14
|
+
[](https://github.com/KryptosAI/mcp-observatory/actions/workflows/codeql.yml)
|
|
15
|
+
[](https://github.com/KryptosAI/mcp-observatory/actions/workflows/coverage.yml)
|
|
16
|
+
[](https://securityscorecards.dev/viewer/?uri=github.com/KryptosAI/mcp-observatory)
|
|
17
|
+
[](./.github/dependabot.yml)
|
|
18
|
+
[](./.github/workflows/release.yml)
|
|
14
19
|
[](https://www.npmjs.com/package/@kryptosai/mcp-observatory)
|
|
15
|
-
[](https://www.npmjs.com/package/@kryptosai/mcp-observatory)
|
|
21
|
+
[](https://github.com/KryptosAI/mcp-observatory/stargazers)
|
|
16
22
|
[](./LICENSE)
|
|
17
23
|
[](./package.json)
|
|
18
24
|
[](https://smithery.ai/server/@kryptosai/mcp-observatory)
|
|
19
25
|
[](https://glama.ai/mcp/servers/KryptosAI/mcp-observatory)
|
|
26
|
+
[](./CONTRIBUTORS.md)
|
|
20
27
|
|
|
21
|
-
**The CI and security gate for MCP servers before agents depend on them.**
|
|
28
|
+
**The GitHub-native CI, SARIF, and security-readiness gate for MCP servers before agents depend on them.**
|
|
22
29
|
|
|
23
|
-
Agents should not depend on tools nobody tests. MCP Observatory
|
|
30
|
+
Agents should not depend on tools nobody tests. MCP Observatory turns a local MCP check into release-gate evidence maintainers already understand: GitHub Actions, security findings, schema drift detection, PR reports, score badges, agent-accessible diagnostics, and GitHub Code Scanning SARIF.
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
## Trust Signals
|
|
26
33
|
|
|
27
|
-
|
|
34
|
+
| Signal | What it means |
|
|
35
|
+
|---|---|
|
|
36
|
+
| CI + coverage | Typecheck, lint, tests, build, packed install, artifact validation, smoke test, and measured coverage run in GitHub Actions. |
|
|
37
|
+
| CodeQL + OpenSSF Scorecard | Static analysis and supply-chain posture are visible in GitHub-native security surfaces. |
|
|
38
|
+
| Dependabot | npm and GitHub Actions dependency updates are monitored weekly. |
|
|
39
|
+
| npm provenance workflow | Release automation is prepared for npm provenance through GitHub OIDC. |
|
|
40
|
+
| Security policy | Vulnerability reports go through private disclosure; see [SECURITY.md](./SECURITY.md). |
|
|
28
41
|
|
|
29
|
-
|
|
42
|
+
## Try It
|
|
43
|
+
|
|
44
|
+
Start with the homepage demo: safely simulate MCP attack-readiness for one server and emit SARIF evidence that maintainers can inspect in GitHub Code Scanning.
|
|
30
45
|
|
|
31
46
|
```bash
|
|
32
|
-
npx @kryptosai/mcp-observatory
|
|
47
|
+
npx @kryptosai/mcp-observatory attack-sim npx -y my-mcp-server --sarif attack-results.sarif
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Then make the evidence repeatable in CI:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y my-mcp-server" --sarif
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
See the [MCP Attack Simulator](./docs/mcp-attack-simulator.md), [Tool-call receipts](./docs/tool-call-receipts.md), [MCP Receipt Graph](./docs/receipt-graph.md), [launch page](./docs/launch.md), [GitHub Code Scanning demo](./docs/code-scanning-demo.md), [GitHub Code Scanning for MCP servers](./docs/github-code-scanning-for-mcp.md), [sample safety reports](./docs/mcp-server-safety-index.md), and [reference evaluations](./docs/reference-evaluations.md).
|
|
57
|
+
|
|
58
|
+
Want a receipt for a server your agent depends on? Comment on [Drop an MCP server, get a receipt #146](https://github.com/KryptosAI/mcp-observatory/issues/146) or use the [structured receipt request form](https://github.com/KryptosAI/mcp-observatory/issues/new?template=tool-call-receipt-request.yml). Public requests can become Safety Index entries, delta receipts, SARIF evidence, and maintainer CI conversations.
|
|
59
|
+
|
|
60
|
+
## Evidence You Can Inspect
|
|
61
|
+
|
|
62
|
+
| Evidence | Where |
|
|
63
|
+
|---|---|
|
|
64
|
+
| Example GitHub Actions adoption | [`setup-ci --all`](./docs/setup-ci-doctor.md) and the generated workflow docs |
|
|
65
|
+
| Attack simulation output | [MCP Attack Simulator](./docs/mcp-attack-simulator.md) |
|
|
66
|
+
| Tool-call receipts | [Receipt standard](./docs/tool-call-receipts.md) for reproducible MCP evidence |
|
|
67
|
+
| Receipt graph | [Server-to-evidence map](./docs/receipt-graph.md) for agent trust decisions |
|
|
68
|
+
| SARIF / Code Scanning output | [GitHub Code Scanning demo](./docs/code-scanning-demo.md) |
|
|
69
|
+
| Real MCP server evaluations | [MCP Server Safety Index](./docs/mcp-server-safety-index.md) |
|
|
70
|
+
| Reference reports | [Reference evaluations](./docs/reference-evaluations.md) |
|
|
71
|
+
| Maintainer and contributor proof | [MCP Observatory Contributors](./docs/contributor-recognition.md) |
|
|
72
|
+
| Security disclosure path | [SECURITY.md](./SECURITY.md) |
|
|
73
|
+
|
|
74
|
+
Two more fast paths:
|
|
75
|
+
|
|
76
|
+
Cloned this repo? Start here: [`CLONED_THIS.md`](./CLONED_THIS.md). Want to contribute? Add one server to the [MCP Target Registry](./docs/target-registry.md), use the [Agent Task Pack](./docs/agent-tasks.md), and get public credit through [MCP Observatory Contributors](./docs/contributor-recognition.md).
|
|
77
|
+
|
|
78
|
+
AI coding agents, agentic workflows, and rough PRs are welcome. Use the [10x Agentic Growth Sprint](./docs/10x-agentic-growth-sprint.md), [Agentic Contributor Outreach](./docs/agentic-contributor-outreach.md), or open a `Contributor quest`, `Agentic contribution idea`, or [`Drop an MCP server, get a receipt`](./docs/drop-server-get-receipt.md) issue to suggest a target, prompt, docs fix, receipt, or `setup-ci --sarif` integration.
|
|
79
|
+
|
|
80
|
+
Add MCP CI and Code Scanning in one command:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y my-mcp-server" --sarif
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Installing MCP Observatory in an MCP server project also prints the exact CI setup command. Projects can opt into automatic workflow creation during install with [`mcpObservatory.autoSetupCi`](./docs/automatic-ci-integration.md).
|
|
87
|
+
|
|
88
|
+
Upload normalized MCP findings to GitHub Code Scanning when you want a security-native release gate:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y my-mcp-server" --sarif
|
|
33
92
|
```
|
|
34
93
|
|
|
35
94
|
Add Observatory as an agent-accessible MCP server:
|
|
@@ -38,6 +97,8 @@ Add Observatory as an agent-accessible MCP server:
|
|
|
38
97
|
claude mcp add mcp-observatory -- npx -y @kryptosai/mcp-observatory serve
|
|
39
98
|
```
|
|
40
99
|
|
|
100
|
+
Building an autonomous agent, OpenClaw-style productivity machine, MCP gateway, or bot runtime? Start with the [agent runtime quickstart](./docs/agent-runtime-quickstart.md), copy the [OpenClaw MCP reliability agent template](./docs/openclaw-agent-template/SOUL.md), or point your agent at [`llms.txt`](./llms.txt) and [`AGENTS.md`](./AGENTS.md).
|
|
101
|
+
|
|
41
102
|
Or test a server immediately:
|
|
42
103
|
|
|
43
104
|
```bash
|
|
@@ -52,6 +113,8 @@ Use it as a CLI, a GitHub Action, or an MCP server that lets your AI agent scan,
|
|
|
52
113
|
|
|
53
114
|
[](https://glama.ai/mcp/servers/KryptosAI/mcp-observatory)
|
|
54
115
|
|
|
116
|
+
The Glama card is an external MCP directory scorecard. Treat it as directory-level social proof; click through for the underlying category details before using it as a production approval signal.
|
|
117
|
+
|
|
55
118
|
## Why MCP Observatory
|
|
56
119
|
|
|
57
120
|
MCP servers are becoming production dependencies. If agents rely on them, teams need a way to catch broken tools, unsafe schemas, schema drift, slow responses, and security footguns before those failures reach users.
|
|
@@ -60,34 +123,25 @@ Observatory gives maintainers and teams:
|
|
|
60
123
|
|
|
61
124
|
- **One-command CI setup** with `setup-ci --all`
|
|
62
125
|
- **GitHub PR comments** for compatibility, drift, and security findings
|
|
126
|
+
- **GitHub Code Scanning SARIF** for normalized MCP findings
|
|
63
127
|
- **Health score badges** for public trust signals
|
|
64
128
|
- **Record/replay/verify** workflows for regression testing
|
|
65
129
|
- **MCP server mode** so agents can inspect other MCP servers directly
|
|
66
|
-
- **Production
|
|
130
|
+
- **Production support path** for hosted history, private repo reporting, certification, support, and fleet visibility
|
|
67
131
|
|
|
68
|
-
See the [
|
|
132
|
+
See the [launch page](./docs/launch.md), [GitHub Code Scanning for MCP servers](./docs/github-code-scanning-for-mcp.md), [Code Scanning demo](./docs/code-scanning-demo.md), [target gallery](./docs/target-gallery.md), [target registry](./docs/target-registry.md), [target contribution guide](./docs/target-contribution-guide.md), [MCP Observatory Contributors](./docs/contributor-recognition.md), [Agent Task Pack](./docs/agent-tasks.md), [Tool-call receipts](./docs/tool-call-receipts.md), [MCP Receipt Graph](./docs/receipt-graph.md), [`setup-ci --doctor`](./docs/setup-ci-doctor.md), [MCP server security field guide](./docs/mcp-security-field-guide.md), [Safety Methodology](./docs/methodology.md), [MCP Server Safety Index](./docs/mcp-server-safety-index.md), [June 2026 safety field report](./docs/mcp-safety-field-report-2026-06.md), [reference evaluations](./docs/reference-evaluations.md), [MCP lock files](./docs/mcp-lock-files.md), [public proof](./docs/proof.md), [campaign attribution](./docs/campaign-attribution.md), [local metrics dashboard](./docs/metrics-dashboard.md), and [commercial support](./COMMERCIAL.md).
|
|
69
133
|
|
|
70
134
|
## For Security And Platform Teams
|
|
71
135
|
|
|
72
136
|
MCP servers are becoming part of the AI software supply chain. Agents need reliable, testable, auditable tools before those tools become dependencies in mission-critical workflows.
|
|
73
137
|
|
|
74
|
-
MCP Observatory gives security and platform teams MCP server CI, schema drift detection, security findings, SARIF/HTML/Markdown reports, and a path toward certification or fleet visibility. Local OSS use stays free; production, private repo, and fleet usage can move through a paid
|
|
138
|
+
MCP Observatory gives security and platform teams MCP server CI, schema drift detection, security findings, SARIF/HTML/Markdown reports, GitHub Code Scanning upload, and a path toward certification or fleet visibility. Local OSS use stays free; production, private repo, and fleet usage can move through a paid MCP Readiness Review.
|
|
75
139
|
|
|
76
|
-
## Production
|
|
140
|
+
## Production Support
|
|
77
141
|
|
|
78
|
-
|
|
142
|
+
Local OSS use stays free under MIT. Teams running MCP in production can use the [MCP Readiness Review](./docs/paid-pilot-offer.md) for CI rollout, SARIF/Code Scanning setup, private repo review, recurring security reports, certification review, support, and fleet visibility. The default package starts at `$2,500`.
|
|
79
143
|
|
|
80
|
-
|
|
81
|
-
|-------|----------:|----------|
|
|
82
|
-
| Team Pilot | $299/month | Small teams adding MCP checks to CI |
|
|
83
|
-
| Business Pilot | $999/month | Private repos and recurring security reports |
|
|
84
|
-
| Enterprise Pilot | $3k/month | Private MCP readiness reports, support, and fleet visibility |
|
|
85
|
-
| Strategic Accounts | Custom, $250k+/year | Major companies running MCP in production |
|
|
86
|
-
|
|
87
|
-
Run `npx @kryptosai/mcp-observatory cloud` or contact `william@banksey.com` for production MCP usage. The primary paid pilot is a [private MCP readiness review](./docs/paid-pilot-offer.md).
|
|
88
|
-
|
|
89
|
-
See [commercial pilots](./COMMERCIAL.md), [privacy and telemetry](./PRIVACY.md), and [terms for production use](./TERMS.md).
|
|
90
|
-
For a fuller narrative, see the [project case study](./docs/project-case-study.md).
|
|
144
|
+
Run `npx @kryptosai/mcp-observatory cloud`, open a pilot request from the issue chooser, or see [COMMERCIAL.md](./COMMERCIAL.md). Also see [privacy and telemetry](./PRIVACY.md), [campaign attribution](./docs/campaign-attribution.md), and [terms for production use](./TERMS.md).
|
|
91
145
|
|
|
92
146
|
## Quick Start
|
|
93
147
|
|
|
@@ -146,6 +200,7 @@ Or add it manually to your config:
|
|
|
146
200
|
| `lock verify` | Verify live servers match the lock file |
|
|
147
201
|
| `history` | Show health score trends for your MCP servers |
|
|
148
202
|
| `setup-ci` / `init-ci` | Create a GitHub Action and badge snippet for MCP compatibility/security checks |
|
|
203
|
+
| `setup-ci --sarif` | Generate a workflow that uploads normalized findings to GitHub Code Scanning |
|
|
149
204
|
| `setup-ci --doctor` | Inspect whether the repository has a complete CI adoption kit |
|
|
150
205
|
| `ci-report` | Generate CI report for GitHub issue creation |
|
|
151
206
|
| `enterprise-report` | Generate a static production/security report from run artifacts |
|
|
@@ -242,7 +297,7 @@ jobs:
|
|
|
242
297
|
runs-on: ubuntu-latest
|
|
243
298
|
steps:
|
|
244
299
|
- uses: actions/checkout@v4
|
|
245
|
-
- uses: KryptosAI/mcp-observatory/action@v0.
|
|
300
|
+
- uses: KryptosAI/mcp-observatory/action@v0.27.0
|
|
246
301
|
with:
|
|
247
302
|
command: npx -y my-mcp-server
|
|
248
303
|
deep: true
|
|
@@ -268,7 +323,7 @@ Action inputs:
|
|
|
268
323
|
|
|
269
324
|
The action can comment on PRs and set commit statuses when the workflow grants write permissions. `setup-ci` generates read-only third-party-friendly workflows by default and lets maintainers opt into comments/statuses later. `init-ci` remains available as a backward-compatible alias. See [`action/README.md`](./action/README.md) for all options.
|
|
270
325
|
|
|
271
|
-
Production teams can add hosted CI history, private-repo reporting, recurring security reports, certification review, support, and fleet visibility. Run `npx @kryptosai/mcp-observatory cloud
|
|
326
|
+
Production teams can add hosted CI history, private-repo reporting, recurring security reports, certification review, support, and fleet visibility. Run `npx @kryptosai/mcp-observatory cloud`, see [COMMERCIAL.md](./COMMERCIAL.md), or open a pilot request from the issue chooser.
|
|
272
327
|
|
|
273
328
|
### Certified by MCP Observatory
|
|
274
329
|
|
|
@@ -299,7 +354,7 @@ For clearer internal account attribution in CI, set:
|
|
|
299
354
|
|
|
300
355
|
```bash
|
|
301
356
|
MCP_OBSERVATORY_ORG=your-company.com
|
|
302
|
-
MCP_OBSERVATORY_CONTACT=
|
|
357
|
+
MCP_OBSERVATORY_CONTACT=your-team-contact
|
|
303
358
|
```
|
|
304
359
|
|
|
305
360
|
Testing Feishu/Lark integrations? See the [Feishu/Lark MCP guide](./docs/feishu-lark-mcp.md).
|
|
@@ -348,9 +403,7 @@ Your agent gets 10 tools:
|
|
|
348
403
|
| `get_last_run` | Retrieve previous check results for a server |
|
|
349
404
|
| `suggest_servers` | Discover MCP servers that match your project stack |
|
|
350
405
|
|
|
351
|
-
An AI tool that checks other AI tools. It
|
|
352
|
-
|
|
353
|
-
<sub>* I'm a dude playing a dude disguised as another dude.</sub>
|
|
406
|
+
An AI tool that checks other AI tools. It is a tool testing tools that serve tools.
|
|
354
407
|
|
|
355
408
|
### Security
|
|
356
409
|
|
|
@@ -409,7 +462,7 @@ npx @kryptosai/mcp-observatory run --target ./target.json
|
|
|
409
462
|
{
|
|
410
463
|
"targetId": "my-remote-server",
|
|
411
464
|
"adapter": "http",
|
|
412
|
-
"url": "
|
|
465
|
+
"url": "https://mcp.example.com/mcp",
|
|
413
466
|
"authToken": "${MCP_SERVER_TOKEN}",
|
|
414
467
|
"headers": {
|
|
415
468
|
"X-Api-Key": "$MCP_SERVER_API_KEY"
|
package/TERMS.md
CHANGED
|
@@ -18,8 +18,6 @@ export class HttpAdapter {
|
|
|
18
18
|
throw new Error(`Unsupported protocol "${url.protocol}" — only http: and https: are allowed.`);
|
|
19
19
|
}
|
|
20
20
|
const timeoutMs = target.timeoutMs ?? 15_000;
|
|
21
|
-
// Try streamable-http first, fall back to SSE
|
|
22
|
-
let connected = false;
|
|
23
21
|
let activeTransport;
|
|
24
22
|
try {
|
|
25
23
|
let transport = new StreamableHTTPClientTransport(url, { requestInit: { headers } });
|
|
@@ -27,19 +25,17 @@ export class HttpAdapter {
|
|
|
27
25
|
transport = new RecordingTransport(transport);
|
|
28
26
|
await client.connect(transport, { timeout: timeoutMs });
|
|
29
27
|
activeTransport = transport;
|
|
30
|
-
connected = true;
|
|
31
28
|
}
|
|
32
29
|
catch {
|
|
33
30
|
stderrLines.push("Streamable HTTP failed, falling back to SSE.");
|
|
34
31
|
}
|
|
35
|
-
if (!
|
|
32
|
+
if (!activeTransport) {
|
|
36
33
|
try {
|
|
37
34
|
let transport = new SSEClientTransport(url, { requestInit: { headers } });
|
|
38
35
|
if (options?.record)
|
|
39
36
|
transport = new RecordingTransport(transport);
|
|
40
37
|
await client.connect(transport, { timeout: timeoutMs });
|
|
41
38
|
activeTransport = transport;
|
|
42
|
-
connected = true;
|
|
43
39
|
}
|
|
44
40
|
catch (error) {
|
|
45
41
|
const rawMessage = errorMessage(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/adapters/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAInG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,OAAO,CAAC,MAAwB,EAAE,OAA+B;QACrE,MAAM,OAAO,GAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,SAAS,EAAE,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,EAClD,EAAE,YAAY,EAAE,EAAE,EAAE,CACrB,CAAC;QAEF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,QAAQ,wCAAwC,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;QAE7C,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/adapters/http.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cassette.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { readFile
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { ensureDirectory } from "./storage.js";
|
|
4
|
+
import { writeTextFileAtomic } from "./utils/files.js";
|
|
4
5
|
import { slugify } from "./utils/ids.js";
|
|
5
6
|
// ── I/O ──────────────────────────────────────────────────────────────────────
|
|
6
7
|
export function defaultCassettesDirectory(cwd = process.cwd()) {
|
|
@@ -11,7 +12,7 @@ export async function saveCassette(cassette, outDir) {
|
|
|
11
12
|
const timestamp = new Date().toISOString().replaceAll(":", "-");
|
|
12
13
|
const fileName = `${timestamp}--${slugify(cassette.targetId)}.cassette.json`;
|
|
13
14
|
const filePath = path.join(outDir, fileName);
|
|
14
|
-
await
|
|
15
|
+
await writeTextFileAtomic(filePath, JSON.stringify(cassette, null, 2) + "\n");
|
|
15
16
|
return filePath;
|
|
16
17
|
}
|
|
17
18
|
export async function loadCassette(filePath) {
|
package/dist/src/cassette.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cassette.js","sourceRoot":"","sources":["../../src/cassette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"cassette.js","sourceRoot":"","sources":["../../src/cassette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAqBzC,gFAAgF;AAEhF,MAAM,UAAU,yBAAyB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,MAAc;IAEd,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,GAAG,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE1C,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACZ,IAAgC,CAAC,SAAS,CAAC,KAAK,CAAC;QAClD,CAAC,KAAK,CAAC,OAAO,CAAE,IAAgC,CAAC,SAAS,CAAC,CAAC,EAC5D,CAAC;QACD,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,4CAA4C,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,IAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CheckResult, RunArtifact } from "../types.js";
|
|
2
|
+
import { type CheckContext, type ObservedCheck } from "./base.js";
|
|
3
|
+
export type AttackClass = "tool-poisoning" | "exfiltration-canary" | "permission-boundary" | "contract-drift";
|
|
4
|
+
export type AttackFindingSeverity = "high" | "medium" | "low";
|
|
5
|
+
export interface AttackSimulationFinding {
|
|
6
|
+
ruleId: string;
|
|
7
|
+
attackClass: AttackClass;
|
|
8
|
+
severity: AttackFindingSeverity;
|
|
9
|
+
itemType: "target" | "tool" | "prompt" | "resource" | "schema" | "response";
|
|
10
|
+
itemName: string;
|
|
11
|
+
message: string;
|
|
12
|
+
evidence: Record<string, unknown>;
|
|
13
|
+
recommendation: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AttackSimulationOptions {
|
|
16
|
+
baseline?: RunArtifact;
|
|
17
|
+
}
|
|
18
|
+
export declare function runAttackSimulationCheck(context: CheckContext, previousChecks: CheckResult[], options?: AttackSimulationOptions): Promise<ObservedCheck>;
|