mcp-scorecard 0.1.1 → 0.1.3
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/AGENTS.md +32 -0
- package/CHANGELOG.md +17 -0
- package/README.md +44 -0
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/llms.txt +13 -0
- package/package.json +5 -2
package/AGENTS.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Agent Development Notes
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
|
|
5
|
+
This repo is an agent-readiness scorecard for MCP servers. It launches a target over stdio, inspects the MCP contract, and emits a scored report without persisting private tool payloads.
|
|
6
|
+
|
|
7
|
+
## Commands
|
|
8
|
+
|
|
9
|
+
- Install: `npm ci`
|
|
10
|
+
- Typecheck: `npm run typecheck`
|
|
11
|
+
- Build: `npm run build`
|
|
12
|
+
- Self smoke: `npm run test:self`
|
|
13
|
+
- Full gate: `npm test`
|
|
14
|
+
- Package preview: `npm pack --dry-run`
|
|
15
|
+
|
|
16
|
+
## Rules
|
|
17
|
+
|
|
18
|
+
- Do not persist raw MCP responses from probed servers. Keep reports limited to scores, counts, labels, and redacted findings.
|
|
19
|
+
- Preserve `MCP_PROBE=1` behavior so auth-heavy MCPs can expose contracts without live credentials.
|
|
20
|
+
- New checks must be deterministic and explain the exact remediation in `fixes`.
|
|
21
|
+
- Keep the score stable enough for CI gates; avoid changing weights casually.
|
|
22
|
+
- Any new network behavior must be explicit in docs and disabled for local-path targets unless required.
|
|
23
|
+
|
|
24
|
+
## Agent-readiness checklist
|
|
25
|
+
|
|
26
|
+
Before publishing a new version:
|
|
27
|
+
|
|
28
|
+
1. `npm test`
|
|
29
|
+
2. `npm pack --dry-run`
|
|
30
|
+
3. Run the built CLI against at least one known local-first MCP package
|
|
31
|
+
4. Confirm markdown and JSON outputs both include actionable fixes
|
|
32
|
+
5. Update `CHANGELOG.md` for score or output-shape changes
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.3 — 2026-05-29
|
|
4
|
+
|
|
5
|
+
### Docs
|
|
6
|
+
|
|
7
|
+
- **README now shows a real captured run.** Added a `## Demo` section with the
|
|
8
|
+
verbatim output of `npx mcp-scorecard @modelcontextprotocol/server-everything`
|
|
9
|
+
— the official MCP reference server scores 44/100, demonstrating the
|
|
10
|
+
conventions checks against a real, well-known public server (no hand-edited
|
|
11
|
+
output).
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- **`SERVER_VERSION` constant synced to the published version.** It had drifted
|
|
16
|
+
to `0.1.1` while package.json shipped `0.1.2`, so the report footer
|
|
17
|
+
(`_Generated by mcp-scorecard vX_`) printed a stale version. All four sources
|
|
18
|
+
(package.json, server.json ×2, `src/constants.ts`) are now `0.1.3`.
|
|
19
|
+
|
|
3
20
|
## 0.1.1 — 2026-05-23
|
|
4
21
|
|
|
5
22
|
### Fixed
|
package/README.md
CHANGED
|
@@ -34,6 +34,50 @@ npx -y mcp-scorecard my-mcp --min-score 80
|
|
|
34
34
|
npx -y mcp-scorecard my-mcp --json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
## Demo
|
|
38
|
+
|
|
39
|
+
Real captured run auditing the official MCP reference server
|
|
40
|
+
[`@modelcontextprotocol/server-everything`](https://www.npmjs.com/package/@modelcontextprotocol/server-everything)
|
|
41
|
+
— nothing here is hand-edited, this is exactly what the CLI printed:
|
|
42
|
+
|
|
43
|
+
```console
|
|
44
|
+
$ npx -y mcp-scorecard @modelcontextprotocol/server-everything
|
|
45
|
+
|
|
46
|
+
# mcp-scorecard - @modelcontextprotocol/server-everything @2026.1.26
|
|
47
|
+
|
|
48
|
+
**Agent-readiness score:** 44/100
|
|
49
|
+
|
|
50
|
+
- [PASS] Schema validity (13/13 tools have valid input schema)
|
|
51
|
+
- [FAIL] Tool naming convention (12/13 tools violate snake_case)
|
|
52
|
+
- [FAIL] Privacy modes documented (only 1 tool(s) mention privacy modes)
|
|
53
|
+
- [PASS] Mutation gating (no write tools — n/a)
|
|
54
|
+
- [FAIL] Agent manifest (no agent_manifest tool)
|
|
55
|
+
- [FAIL] Smoke test (no smoke script and no test script)
|
|
56
|
+
- [PASS] Resources advertised (7 resources registered)
|
|
57
|
+
- [PASS] Tool descriptions (avg 88 chars across 13 tools)
|
|
58
|
+
- [FAIL] Annotations (0/13 read tools annotated)
|
|
59
|
+
- [FAIL] Manifest discoverability (no discovery tools)
|
|
60
|
+
|
|
61
|
+
## Details
|
|
62
|
+
### Tool naming convention
|
|
63
|
+
- Non-snake_case names: get-annotated-message, get-env, get-resource-links, get-resource-reference, get-structured-content, get-sum, get-tiny-image, gzip-file-as-resource, toggle-simulated-logging, toggle-subscriber-updates
|
|
64
|
+
### Annotations
|
|
65
|
+
- Missing readOnlyHint: echo, get-annotated-message, get-env, get-resource-links, get-resource-reference, get-structured-content, get-sum, get-tiny-image, gzip-file-as-resource, toggle-simulated-logging
|
|
66
|
+
|
|
67
|
+
## Suggested fixes
|
|
68
|
+
- Rename tools to lowercase snake_case (a-z, 0-9, _).
|
|
69
|
+
- Add a `privacy_mode` parameter (summary | structured | raw) on read tools so agents can request only what they need.
|
|
70
|
+
- Expose a `<prefix>_agent_manifest` tool that returns { recommended_first_calls, standard_tools, ... } so agents can self-onboard.
|
|
71
|
+
- Add `scripts/smoke-tools.mjs` that boots the server via StdioClientTransport and asserts the tool list.
|
|
72
|
+
- Add `annotations: { readOnlyHint: true, openWorldHint: false }` to every read tool definition.
|
|
73
|
+
- Expose discovery tools so agents can self-onboard: `*_agent_manifest`, `*_data_inventory`, `*_capabilities`, `*_connection_status`.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The reference server is a feature showcase, not a production integration — a 44 is
|
|
77
|
+
expected and is exactly why the conventions checks exist. Agent-oriented servers
|
|
78
|
+
that adopt snake_case naming, a manifest tool, and read-only annotations land in
|
|
79
|
+
the 80s and 90s.
|
|
80
|
+
|
|
37
81
|
## What it checks
|
|
38
82
|
|
|
39
83
|
Ten quality dimensions, each scored 0-10. Final score is the sum, capped at 100.
|
package/dist/constants.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* same string. Bumping this without updating package.json is intentional during
|
|
4
4
|
* dev (keep src as source of truth); a release script can sync them.
|
|
5
5
|
*/
|
|
6
|
-
export declare const SERVER_VERSION = "0.1.
|
|
6
|
+
export declare const SERVER_VERSION = "0.1.3";
|
|
7
7
|
/** Identifier used when the probe connects to a target MCP server. */
|
|
8
8
|
export declare const PROBE_CLIENT_NAME = "mcp-scorecard";
|
|
9
9
|
/** Env var set on the spawned target so MCP authors can detect we are probing
|
package/dist/constants.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* same string. Bumping this without updating package.json is intentional during
|
|
4
4
|
* dev (keep src as source of truth); a release script can sync them.
|
|
5
5
|
*/
|
|
6
|
-
export const SERVER_VERSION = '0.1.
|
|
6
|
+
export const SERVER_VERSION = '0.1.3';
|
|
7
7
|
/** Identifier used when the probe connects to a target MCP server. */
|
|
8
8
|
export const PROBE_CLIENT_NAME = 'mcp-scorecard';
|
|
9
9
|
/** Env var set on the spawned target so MCP authors can detect we are probing
|
package/llms.txt
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# mcp-scorecard
|
|
2
|
+
Agent-readiness scorecard for MCP servers. Probes a target over stdio, runs 10 quality checks, and returns a 0-100 score with actionable fixes.
|
|
3
|
+
|
|
4
|
+
Repository: https://github.com/davidmosiah/mcp-scorecard
|
|
5
|
+
NPM: https://www.npmjs.com/package/mcp-scorecard
|
|
6
|
+
Primary command: npm exec --yes --package=mcp-scorecard -- mcp-scorecard <package-or-repo>
|
|
7
|
+
MCP command: none; this is a CLI auditor for MCP servers.
|
|
8
|
+
|
|
9
|
+
- Use `mcp-scorecard <target> --json` when another agent or CI job needs structured output.
|
|
10
|
+
- Use `mcp-scorecard <target> --min-score 80` as a release gate.
|
|
11
|
+
- The probe launches targets with `MCP_PROBE=1`; MCP authors can use that env var to expose manifests without requiring live credentials.
|
|
12
|
+
- The report is not a security audit. It checks contract shape, privacy affordances, mutation gating, resources, descriptions, annotations, and manifest discoverability.
|
|
13
|
+
- Raw probed payloads should not be persisted. Reports should contain counts, labels, and redacted findings only.
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-scorecard",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"mcpName": "io.github.davidmosiah/mcp-scorecard",
|
|
4
5
|
"description": "Agent-readiness scorecard for any MCP server. Probes a target, runs 10 checks, outputs a 0-100 score with actionable findings.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"bin": {
|
|
@@ -10,7 +11,9 @@
|
|
|
10
11
|
"dist",
|
|
11
12
|
"README.md",
|
|
12
13
|
"LICENSE",
|
|
13
|
-
"CHANGELOG.md"
|
|
14
|
+
"CHANGELOG.md",
|
|
15
|
+
"AGENTS.md",
|
|
16
|
+
"llms.txt"
|
|
14
17
|
],
|
|
15
18
|
"scripts": {
|
|
16
19
|
"build": "tsc -p tsconfig.json",
|