@kryptosai/mcp-observatory 1.28.2 → 1.28.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/CONTRIBUTORS.md +4 -1
- package/README.md +109 -14
- package/README.zh-CN.md +654 -0
- package/dist/src/adapters/http.js +13 -4
- package/dist/src/adapters/http.js.map +1 -1
- package/dist/src/checks/runtime-profile.d.ts +5 -0
- package/dist/src/checks/runtime-profile.js +214 -0
- package/dist/src/checks/runtime-profile.js.map +1 -0
- package/dist/src/checks/security-rules.js +18 -0
- package/dist/src/checks/security-rules.js.map +1 -1
- package/dist/src/checks/security.js +33 -65
- package/dist/src/checks/security.js.map +1 -1
- package/dist/src/checks/skill-scan.d.ts +46 -0
- package/dist/src/checks/skill-scan.js +665 -0
- package/dist/src/checks/skill-scan.js.map +1 -0
- package/dist/src/cli.js +15 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/enforce.d.ts +12 -0
- package/dist/src/commands/enforce.js +187 -0
- package/dist/src/commands/enforce.js.map +1 -0
- package/dist/src/commands/helpers.d.ts +2 -1
- package/dist/src/commands/helpers.js +9 -1
- package/dist/src/commands/helpers.js.map +1 -1
- package/dist/src/commands/legacy.js +3 -0
- package/dist/src/commands/legacy.js.map +1 -1
- package/dist/src/commands/risk-graph.d.ts +2 -0
- package/dist/src/commands/risk-graph.js +64 -0
- package/dist/src/commands/risk-graph.js.map +1 -0
- package/dist/src/commands/scan.js +36 -9
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/skill-scan.d.ts +6 -0
- package/dist/src/commands/skill-scan.js +62 -0
- package/dist/src/commands/skill-scan.js.map +1 -0
- package/dist/src/commands/test.js +13 -0
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/commands/watch.js +13 -8
- package/dist/src/commands/watch.js.map +1 -1
- package/dist/src/discovery.d.ts +15 -1
- package/dist/src/discovery.js +251 -35
- package/dist/src/discovery.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/receipt.d.ts +4 -1
- package/dist/src/receipt.js +85 -0
- package/dist/src/receipt.js.map +1 -1
- package/dist/src/reporters/markdown.js +39 -0
- package/dist/src/reporters/markdown.js.map +1 -1
- package/dist/src/reporters/terminal.d.ts +2 -0
- package/dist/src/reporters/terminal.js +55 -2
- package/dist/src/reporters/terminal.js.map +1 -1
- package/dist/src/risk-graph.d.ts +64 -0
- package/dist/src/risk-graph.js +452 -0
- package/dist/src/risk-graph.js.map +1 -0
- package/dist/src/runner.js +6 -0
- package/dist/src/runner.js.map +1 -1
- package/dist/src/server.d.ts +1 -3
- package/dist/src/server.js +29 -645
- package/dist/src/server.js.map +1 -1
- package/dist/src/storage.js +13 -9
- package/dist/src/storage.js.map +1 -1
- package/dist/src/telemetry.d.ts +7 -0
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/tools/check-server.d.ts +27 -0
- package/dist/src/tools/check-server.js +46 -0
- package/dist/src/tools/check-server.js.map +1 -0
- package/dist/src/tools/ci-report.d.ts +21 -0
- package/dist/src/tools/ci-report.js +38 -0
- package/dist/src/tools/ci-report.js.map +1 -0
- package/dist/src/tools/diff-runs.d.ts +28 -0
- package/dist/src/tools/diff-runs.js +39 -0
- package/dist/src/tools/diff-runs.js.map +1 -0
- package/dist/src/tools/get-history.d.ts +21 -0
- package/dist/src/tools/get-history.js +37 -0
- package/dist/src/tools/get-history.js.map +1 -0
- package/dist/src/tools/get-last-run.d.ts +21 -0
- package/dist/src/tools/get-last-run.js +47 -0
- package/dist/src/tools/get-last-run.js.map +1 -0
- package/dist/src/tools/helpers.d.ts +8 -0
- package/dist/src/tools/helpers.js +32 -0
- package/dist/src/tools/helpers.js.map +1 -0
- package/dist/src/tools/lock-verify.d.ts +21 -0
- package/dist/src/tools/lock-verify.js +47 -0
- package/dist/src/tools/lock-verify.js.map +1 -0
- package/dist/src/tools/record.d.ts +23 -0
- package/dist/src/tools/record.js +48 -0
- package/dist/src/tools/record.js.map +1 -0
- package/dist/src/tools/replay.d.ts +21 -0
- package/dist/src/tools/replay.js +54 -0
- package/dist/src/tools/replay.js.map +1 -0
- package/dist/src/tools/scan.d.ts +18 -0
- package/dist/src/tools/scan.js +43 -0
- package/dist/src/tools/scan.js.map +1 -0
- package/dist/src/tools/score-server.d.ts +23 -0
- package/dist/src/tools/score-server.js +53 -0
- package/dist/src/tools/score-server.js.map +1 -0
- package/dist/src/tools/suggest-servers.d.ts +21 -0
- package/dist/src/tools/suggest-servers.js +114 -0
- package/dist/src/tools/suggest-servers.js.map +1 -0
- package/dist/src/tools/verify-tool.d.ts +25 -0
- package/dist/src/tools/verify-tool.js +48 -0
- package/dist/src/tools/verify-tool.js.map +1 -0
- package/dist/src/tools/watch.d.ts +23 -0
- package/dist/src/tools/watch.js +67 -0
- package/dist/src/tools/watch.js.map +1 -0
- package/dist/src/types.d.ts +26 -1
- package/dist/src/utils/security.d.ts +3 -0
- package/dist/src/utils/security.js +37 -0
- package/dist/src/utils/security.js.map +1 -0
- package/dist/src/validate.d.ts +1 -0
- package/dist/src/validate.js +119 -35
- package/dist/src/validate.js.map +1 -1
- package/docs/agent-tasks.md +1 -1
- package/docs/commercial-boundary.md +9 -1
- package/docs/contributor-recognition.md +2 -0
- package/docs/demo.svg +1 -59
- package/docs/mcp-receipts.md +9 -0
- package/docs/mcp-server-safety-index.md +21 -16
- package/docs/metrics-dashboard.md +17 -1
- package/docs/private-mcp-fleet-risk-graph.md +69 -0
- package/docs/receipt-graph.md +118 -31
- package/docs/safety-index/artifacts/chrome-devtools-mcp-server.json +1745 -0
- package/docs/safety-index/artifacts/chrome-devtools-mcp-server.md +169 -0
- package/docs/safety-index/artifacts/filesystem-mcp-server.json +786 -0
- package/docs/safety-index/artifacts/filesystem-mcp-server.md +169 -0
- package/docs/safety-index/artifacts/github-mcp-server.json +1707 -0
- package/docs/safety-index/artifacts/github-mcp-server.md +169 -0
- package/docs/safety-index/mcp-risk-graph.html +167 -0
- package/docs/safety-index/mcp-risk-graph.json +669 -0
- package/docs/safety-index/mcp-risk-graph.md +47 -0
- package/docs/safety-index/targets.json +57 -0
- package/docs/sample-private-fleet-risk-graph.md +90 -0
- package/package.json +21 -11
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const name = "watch";
|
|
3
|
+
export declare const description = "Use this to check a server and see what changed since the last check. Runs all checks, saves the result, and diffs against the previous run for the same target. Shows regressions, recoveries, and schema drift in one call.";
|
|
4
|
+
export declare const schema: {
|
|
5
|
+
command: z.ZodString;
|
|
6
|
+
args: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
7
|
+
};
|
|
8
|
+
export declare function handler({ command, args }: {
|
|
9
|
+
command: string;
|
|
10
|
+
args?: string[];
|
|
11
|
+
}): Promise<{
|
|
12
|
+
content: {
|
|
13
|
+
type: "text";
|
|
14
|
+
text: string;
|
|
15
|
+
}[];
|
|
16
|
+
isError?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
content: {
|
|
19
|
+
type: "text";
|
|
20
|
+
text: string;
|
|
21
|
+
}[];
|
|
22
|
+
isError: boolean;
|
|
23
|
+
}>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { readdir } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { diffArtifacts } from "../diff.js";
|
|
5
|
+
import { renderMarkdown } from "../reporters/markdown.js";
|
|
6
|
+
import { runTarget } from "../runner.js";
|
|
7
|
+
import { defaultRunsDirectory, writeRunArtifact, readArtifact } from "../storage.js";
|
|
8
|
+
import { errorMessage } from "../utils/errors.js";
|
|
9
|
+
import { validateArgs, validateCommand } from "../utils/security.js";
|
|
10
|
+
import { formatRun, logRequest } from "./helpers.js";
|
|
11
|
+
export const name = "watch";
|
|
12
|
+
export const description = "Use this to check a server and see what changed since the last check. Runs all checks, saves the result, and diffs against the previous run for the same target. Shows regressions, recoveries, and schema drift in one call.";
|
|
13
|
+
export const schema = {
|
|
14
|
+
command: z.string().describe("The command to launch the MCP server."),
|
|
15
|
+
args: z.array(z.string()).optional().describe("Additional arguments for the command."),
|
|
16
|
+
};
|
|
17
|
+
export async function handler({ command, args }) {
|
|
18
|
+
const startMs = Date.now();
|
|
19
|
+
try {
|
|
20
|
+
validateCommand(command);
|
|
21
|
+
validateArgs(args ?? []);
|
|
22
|
+
const target = {
|
|
23
|
+
targetId: command,
|
|
24
|
+
adapter: "local-process",
|
|
25
|
+
command,
|
|
26
|
+
args: args ?? [],
|
|
27
|
+
timeoutMs: 15_000,
|
|
28
|
+
};
|
|
29
|
+
const artifact = await runTarget(target);
|
|
30
|
+
const outDir = defaultRunsDirectory();
|
|
31
|
+
const outPath = await writeRunArtifact(artifact, outDir);
|
|
32
|
+
let diffText = "";
|
|
33
|
+
try {
|
|
34
|
+
const files = await readdir(outDir);
|
|
35
|
+
const needle = target.targetId.toLowerCase();
|
|
36
|
+
const matching = files
|
|
37
|
+
.filter((f) => f.endsWith(".json") && f.toLowerCase().includes(needle) && path.join(outDir, f) !== outPath)
|
|
38
|
+
.sort()
|
|
39
|
+
.reverse();
|
|
40
|
+
if (matching.length > 0) {
|
|
41
|
+
const prevArtifact = await readArtifact(path.join(outDir, matching[0]));
|
|
42
|
+
if (prevArtifact.artifactType === "run") {
|
|
43
|
+
const diff = diffArtifacts(prevArtifact, artifact);
|
|
44
|
+
if (diff.summary.regressions > 0 || diff.summary.recoveries > 0 || diff.summary.added > 0 || diff.summary.removed > 0) {
|
|
45
|
+
diffText = `\n\nChanges since last run:\n${renderMarkdown(diff)}`;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
diffText = "\n\nNo changes since last run.";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// No previous run — that's fine
|
|
55
|
+
}
|
|
56
|
+
logRequest("watch", startMs);
|
|
57
|
+
return {
|
|
58
|
+
content: [{ type: "text", text: `${formatRun(artifact)}\n\nArtifact saved: ${outPath}${diffText}` }],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const msg = errorMessage(error);
|
|
63
|
+
logRequest("watch", startMs, true);
|
|
64
|
+
return { content: [{ type: "text", text: `Error watching: ${msg}` }], isError: true };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/tools/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,+NAA+N,CAAC;AAC3P,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACrE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAwC;IACnF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,eAAe,CAAC,OAAO,CAAC,CAAC;QACzB,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,eAAwB;YACjC,OAAO;YACP,IAAI,EAAE,IAAI,IAAI,EAAE;YAChB,SAAS,EAAE,MAAM;SAClB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,KAAK;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC;iBAC1G,IAAI,EAAE;iBACN,OAAO,EAAE,CAAC;YAEb,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;gBACzE,IAAI,YAAY,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;oBACxC,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBACnD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;wBACtH,QAAQ,GAAG,gCAAgC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACN,QAAQ,GAAG,gCAAgC,CAAC;oBAC9C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;QAED,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,uBAAuB,OAAO,GAAG,QAAQ,EAAE,EAAE,CAAC;SAC9G,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAChC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjG,CAAC;AACH,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export declare const SCHEMA_VERSION = "1.0.0";
|
|
|
2
2
|
export type ArtifactType = "run" | "diff";
|
|
3
3
|
export type Gate = "pass" | "fail";
|
|
4
4
|
export type CheckStatus = "pass" | "fail" | "partial" | "unsupported" | "flaky" | "skipped";
|
|
5
|
-
export type CheckId = "tools" | "prompts" | "resources" | "tools-invoke" | "security" | "security-lite" | "attack-sim" | "conformance" | "schema-quality";
|
|
5
|
+
export type CheckId = "tools" | "prompts" | "resources" | "tools-invoke" | "security" | "security-lite" | "attack-sim" | "conformance" | "schema-quality" | "runtime-profile";
|
|
6
6
|
export declare const STATUS_RANK: Record<CheckStatus, number>;
|
|
7
7
|
export interface LocalProcessTargetConfig {
|
|
8
8
|
targetId: string;
|
|
@@ -92,7 +92,9 @@ export interface RunArtifact {
|
|
|
92
92
|
checks: CheckResult[];
|
|
93
93
|
healthScore?: HealthScore;
|
|
94
94
|
performanceMetrics?: PerformanceMetrics;
|
|
95
|
+
runtimeProfile?: RuntimeProfile;
|
|
95
96
|
fatalError?: string;
|
|
97
|
+
notObserved?: NotObserved[];
|
|
96
98
|
}
|
|
97
99
|
export type HealthGrade = "A" | "B" | "C" | "D" | "F";
|
|
98
100
|
export interface ScoreDimension {
|
|
@@ -106,6 +108,29 @@ export interface HealthScore {
|
|
|
106
108
|
grade: HealthGrade;
|
|
107
109
|
dimensions: ScoreDimension[];
|
|
108
110
|
}
|
|
111
|
+
export interface NotObserved {
|
|
112
|
+
category: string;
|
|
113
|
+
detail: string;
|
|
114
|
+
severity: "info" | "warning";
|
|
115
|
+
}
|
|
116
|
+
export interface EgressEntry {
|
|
117
|
+
target: string;
|
|
118
|
+
protocol: string;
|
|
119
|
+
source: string;
|
|
120
|
+
confidence: "high" | "medium" | "low";
|
|
121
|
+
}
|
|
122
|
+
export interface StateMutation {
|
|
123
|
+
resource: string;
|
|
124
|
+
operation: string;
|
|
125
|
+
scope: string;
|
|
126
|
+
source: string;
|
|
127
|
+
}
|
|
128
|
+
export interface RuntimeProfile {
|
|
129
|
+
egress?: EgressEntry[];
|
|
130
|
+
stateMutations?: StateMutation[];
|
|
131
|
+
analyzedAt: string;
|
|
132
|
+
confidence: "high" | "medium" | "low";
|
|
133
|
+
}
|
|
109
134
|
export interface PerformanceMetrics {
|
|
110
135
|
connectMs: number;
|
|
111
136
|
toolsListMs?: number;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
const ALLOWED_COMMANDS = new Set([
|
|
3
|
+
"npx",
|
|
4
|
+
"node",
|
|
5
|
+
"python",
|
|
6
|
+
"python3",
|
|
7
|
+
"uvx",
|
|
8
|
+
"docker",
|
|
9
|
+
"deno",
|
|
10
|
+
"bun",
|
|
11
|
+
]);
|
|
12
|
+
const DANGEROUS_ARG_PATTERN = /[;|`]|\$\(|&&|\|\|/;
|
|
13
|
+
export function validateArgs(args) {
|
|
14
|
+
for (const arg of args) {
|
|
15
|
+
if (DANGEROUS_ARG_PATTERN.test(arg)) {
|
|
16
|
+
throw new Error(`Argument "${arg}" contains shell metacharacters and was rejected. ` +
|
|
17
|
+
`Remove characters like ; | && || $() or backticks.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function validateCommand(command) {
|
|
22
|
+
const base = path.basename(command.split(/\s+/)[0] ?? "");
|
|
23
|
+
if (!ALLOWED_COMMANDS.has(base)) {
|
|
24
|
+
throw new Error(`Command "${base}" is not in the MCP server allowlist. ` +
|
|
25
|
+
`Allowed executables: ${[...ALLOWED_COMMANDS].join(", ")}. ` +
|
|
26
|
+
`Use the CLI for arbitrary commands.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function validatePath(filePath, allowedRoot) {
|
|
30
|
+
const resolved = path.resolve(filePath);
|
|
31
|
+
const root = path.resolve(allowedRoot);
|
|
32
|
+
if (!resolved.startsWith(root + path.sep) && resolved !== root) {
|
|
33
|
+
throw new Error(`Path "${filePath}" resolves outside allowed directory "${allowedRoot}".`);
|
|
34
|
+
}
|
|
35
|
+
return resolved;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/utils/security.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,KAAK;IACL,MAAM;IACN,QAAQ;IACR,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,aAAa,GAAG,oDAAoD;gBACpE,oDAAoD,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,wCAAwC;YACxD,wBAAwB,CAAC,GAAG,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC5D,qCAAqC,CACtC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,WAAmB;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,yCAAyC,WAAW,IAAI,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/src/validate.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DiffArtifact, RunArtifact, TargetConfig } from "./types.js";
|
|
2
|
+
export declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
2
3
|
export declare function validateTargetConfig(data: unknown): TargetConfig;
|
|
3
4
|
export declare function validateRunArtifact(data: unknown): RunArtifact;
|
|
4
5
|
export declare function validateDiffArtifact(data: unknown): DiffArtifact;
|
package/dist/src/validate.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
function isObject(value) {
|
|
1
|
+
export function isObject(value) {
|
|
2
2
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3
3
|
}
|
|
4
|
+
function isStringArray(value) {
|
|
5
|
+
return Array.isArray(value) && value.every((v) => typeof v === "string");
|
|
6
|
+
}
|
|
4
7
|
function requireString(obj, field, label) {
|
|
5
8
|
const value = obj[field];
|
|
6
9
|
if (typeof value !== "string" || value.length === 0) {
|
|
@@ -31,39 +34,57 @@ function requireNumber(obj, field, label) {
|
|
|
31
34
|
}
|
|
32
35
|
return value;
|
|
33
36
|
}
|
|
37
|
+
function requireGate(value, label) {
|
|
38
|
+
if (value !== "pass" && value !== "fail") {
|
|
39
|
+
throw new Error(`${label} has invalid gate '${String(value)}'.`);
|
|
40
|
+
}
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
34
43
|
function requireStatus(value, label) {
|
|
35
44
|
const statuses = new Set(["pass", "fail", "partial", "unsupported", "flaky", "skipped"]);
|
|
36
45
|
if (typeof value !== "string" || !statuses.has(value)) {
|
|
37
46
|
throw new Error(`${label} has invalid status '${String(value)}'.`);
|
|
38
47
|
}
|
|
48
|
+
return value;
|
|
39
49
|
}
|
|
40
50
|
function requireCheckId(value, label) {
|
|
41
51
|
const ids = new Set(["tools", "prompts", "resources", "tools-invoke", "security", "security-lite", "attack-sim", "conformance", "schema-quality"]);
|
|
42
52
|
if (typeof value !== "string" || !ids.has(value)) {
|
|
43
53
|
throw new Error(`${label} has invalid check id '${String(value)}'.`);
|
|
44
54
|
}
|
|
55
|
+
return value;
|
|
45
56
|
}
|
|
46
57
|
function validateRunSummary(value) {
|
|
47
58
|
if (!isObject(value)) {
|
|
48
59
|
throw new Error("Run artifact is missing required field 'summary'.");
|
|
49
60
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
requireNumber(value,
|
|
55
|
-
|
|
61
|
+
const gate = requireGate(value["gate"], "Run artifact summary");
|
|
62
|
+
return {
|
|
63
|
+
gate,
|
|
64
|
+
total: requireNumber(value, "total", "Run artifact summary"),
|
|
65
|
+
pass: requireNumber(value, "pass", "Run artifact summary"),
|
|
66
|
+
fail: requireNumber(value, "fail", "Run artifact summary"),
|
|
67
|
+
partial: requireNumber(value, "partial", "Run artifact summary"),
|
|
68
|
+
unsupported: requireNumber(value, "unsupported", "Run artifact summary"),
|
|
69
|
+
flaky: requireNumber(value, "flaky", "Run artifact summary"),
|
|
70
|
+
skipped: requireNumber(value, "skipped", "Run artifact summary"),
|
|
71
|
+
};
|
|
56
72
|
}
|
|
57
73
|
function validateCheck(value, index) {
|
|
58
74
|
if (!isObject(value)) {
|
|
59
75
|
throw new Error(`Run artifact checks[${index}] must be an object.`);
|
|
60
76
|
}
|
|
61
|
-
requireCheckId(value["id"], `Run artifact checks[${index}]`);
|
|
62
|
-
requireCheckId(value["capability"], `Run artifact checks[${index}] capability`);
|
|
63
|
-
requireStatus(value["status"], `Run artifact checks[${index}]`);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
77
|
+
const id = requireCheckId(value["id"], `Run artifact checks[${index}]`);
|
|
78
|
+
const capability = requireCheckId(value["capability"], `Run artifact checks[${index}] capability`);
|
|
79
|
+
const status = requireStatus(value["status"], `Run artifact checks[${index}]`);
|
|
80
|
+
return {
|
|
81
|
+
id: id,
|
|
82
|
+
capability: capability,
|
|
83
|
+
status,
|
|
84
|
+
durationMs: requireNumber(value, "durationMs", `Run artifact checks[${index}]`),
|
|
85
|
+
message: requireString(value, "message", `Run artifact checks[${index}]`),
|
|
86
|
+
evidence: (Array.isArray(value["evidence"]) ? value["evidence"].filter(isObject) : []),
|
|
87
|
+
};
|
|
67
88
|
}
|
|
68
89
|
function expandEnvValue(value, label) {
|
|
69
90
|
const match = value.match(/^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/) ??
|
|
@@ -157,28 +178,57 @@ export function validateRunArtifact(data) {
|
|
|
157
178
|
if (data["artifactType"] !== "run") {
|
|
158
179
|
throw new Error(`Expected a run artifact but got artifactType='${String(data["artifactType"])}'.`);
|
|
159
180
|
}
|
|
160
|
-
requireString(data, "runId", "Run artifact");
|
|
161
|
-
requireString(data, "createdAt", "Run artifact");
|
|
162
|
-
requireString(data, "schemaVersion", "Run artifact");
|
|
163
|
-
requireString(data, "toolVersion", "Run artifact");
|
|
164
|
-
const
|
|
181
|
+
const runId = requireString(data, "runId", "Run artifact");
|
|
182
|
+
const createdAt = requireString(data, "createdAt", "Run artifact");
|
|
183
|
+
const schemaVersion = requireString(data, "schemaVersion", "Run artifact");
|
|
184
|
+
const toolVersion = requireString(data, "toolVersion", "Run artifact");
|
|
185
|
+
const gate = requireGate(data["gate"], "Run artifact");
|
|
165
186
|
if (!isObject(data["target"])) {
|
|
166
187
|
throw new Error("Run artifact is missing required field 'target'.");
|
|
167
188
|
}
|
|
168
|
-
|
|
169
|
-
|
|
189
|
+
const target = {
|
|
190
|
+
targetId: requireString(data["target"], "targetId", "Run artifact target"),
|
|
191
|
+
adapter: requireString(data["target"], "adapter", "Run artifact target"),
|
|
192
|
+
command: typeof data["target"]["command"] === "string" ? data["target"]["command"] : "",
|
|
193
|
+
args: isStringArray(data["target"]["args"]) ? data["target"]["args"].filter((a) => typeof a === "string") : [],
|
|
194
|
+
url: typeof data["target"]["url"] === "string" ? data["target"]["url"] : undefined,
|
|
195
|
+
cwd: typeof data["target"]["cwd"] === "string" ? data["target"]["cwd"] : undefined,
|
|
196
|
+
metadata: optionalStringRecord(data["target"]["metadata"], "Run artifact target metadata"),
|
|
197
|
+
serverVersion: typeof data["target"]["serverVersion"] === "string" ? data["target"]["serverVersion"] : undefined,
|
|
198
|
+
serverName: typeof data["target"]["serverName"] === "string" ? data["target"]["serverName"] : undefined,
|
|
199
|
+
};
|
|
170
200
|
if (!isObject(data["environment"])) {
|
|
171
201
|
throw new Error("Run artifact is missing required field 'environment'.");
|
|
172
202
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
203
|
+
const environment = {
|
|
204
|
+
platform: requireString(data["environment"], "platform", "Run artifact environment"),
|
|
205
|
+
nodeVersion: requireString(data["environment"], "nodeVersion", "Run artifact environment"),
|
|
206
|
+
};
|
|
207
|
+
const summary = validateRunSummary(data["summary"]);
|
|
208
|
+
const checksRaw = requireArray(data, "checks", "Run artifact");
|
|
209
|
+
const checks = checksRaw.map((c, i) => validateCheck(c, i));
|
|
210
|
+
const healthScore = isObject(data["healthScore"])
|
|
211
|
+
? data["healthScore"]
|
|
212
|
+
: undefined;
|
|
213
|
+
const performanceMetrics = isObject(data["performanceMetrics"])
|
|
214
|
+
? data["performanceMetrics"]
|
|
215
|
+
: undefined;
|
|
216
|
+
const fatalError = typeof data["fatalError"] === "string" ? data["fatalError"] : undefined;
|
|
217
|
+
return {
|
|
218
|
+
artifactType: "run",
|
|
219
|
+
schemaVersion: schemaVersion,
|
|
220
|
+
gate,
|
|
221
|
+
runId,
|
|
222
|
+
createdAt,
|
|
223
|
+
toolVersion,
|
|
224
|
+
target,
|
|
225
|
+
environment,
|
|
226
|
+
summary,
|
|
227
|
+
checks,
|
|
228
|
+
healthScore,
|
|
229
|
+
performanceMetrics,
|
|
230
|
+
fatalError,
|
|
231
|
+
};
|
|
182
232
|
}
|
|
183
233
|
export function validateDiffArtifact(data) {
|
|
184
234
|
if (!isObject(data)) {
|
|
@@ -187,13 +237,47 @@ export function validateDiffArtifact(data) {
|
|
|
187
237
|
if (data["artifactType"] !== "diff") {
|
|
188
238
|
throw new Error(`Expected a diff artifact but got artifactType='${String(data["artifactType"])}'.`);
|
|
189
239
|
}
|
|
190
|
-
requireString(data, "baseRunId", "Diff artifact");
|
|
191
|
-
requireString(data, "headRunId", "Diff artifact");
|
|
192
|
-
requireString(data, "createdAt", "Diff artifact");
|
|
193
|
-
requireString(data, "schemaVersion", "Diff artifact");
|
|
194
|
-
|
|
240
|
+
const baseRunId = requireString(data, "baseRunId", "Diff artifact");
|
|
241
|
+
const headRunId = requireString(data, "headRunId", "Diff artifact");
|
|
242
|
+
const createdAt = requireString(data, "createdAt", "Diff artifact");
|
|
243
|
+
const schemaVersion = requireString(data, "schemaVersion", "Diff artifact");
|
|
244
|
+
const gate = requireGate(data["gate"], "Diff artifact");
|
|
245
|
+
const summaryObj = data["summary"];
|
|
246
|
+
if (!isObject(summaryObj)) {
|
|
195
247
|
throw new Error("Diff artifact is missing required field 'summary'.");
|
|
196
248
|
}
|
|
197
|
-
|
|
249
|
+
const summary = {
|
|
250
|
+
regressions: requireNumber(summaryObj, "regressions", "Diff artifact summary"),
|
|
251
|
+
recoveries: requireNumber(summaryObj, "recoveries", "Diff artifact summary"),
|
|
252
|
+
unchanged: requireNumber(summaryObj, "unchanged", "Diff artifact summary"),
|
|
253
|
+
added: requireNumber(summaryObj, "added", "Diff artifact summary"),
|
|
254
|
+
removed: requireNumber(summaryObj, "removed", "Diff artifact summary"),
|
|
255
|
+
schemaDriftCount: optionalNumber(summaryObj, "schemaDriftCount", "Diff artifact summary"),
|
|
256
|
+
responseChangeCount: optionalNumber(summaryObj, "responseChangeCount", "Diff artifact summary"),
|
|
257
|
+
gate: requireGate(summaryObj["gate"], "Diff artifact summary"),
|
|
258
|
+
};
|
|
259
|
+
const regressions = Array.isArray(data["regressions"]) ? data["regressions"] : [];
|
|
260
|
+
const recoveries = Array.isArray(data["recoveries"]) ? data["recoveries"] : [];
|
|
261
|
+
const unchanged = Array.isArray(data["unchanged"]) ? data["unchanged"] : [];
|
|
262
|
+
const added = Array.isArray(data["added"]) ? data["added"] : [];
|
|
263
|
+
const removed = Array.isArray(data["removed"]) ? data["removed"] : [];
|
|
264
|
+
const schemaDrift = Array.isArray(data["schemaDrift"]) ? data["schemaDrift"] : undefined;
|
|
265
|
+
const responseChanges = Array.isArray(data["responseChanges"]) ? data["responseChanges"] : undefined;
|
|
266
|
+
return {
|
|
267
|
+
artifactType: "diff",
|
|
268
|
+
schemaVersion: schemaVersion,
|
|
269
|
+
gate,
|
|
270
|
+
baseRunId,
|
|
271
|
+
headRunId,
|
|
272
|
+
createdAt,
|
|
273
|
+
summary,
|
|
274
|
+
regressions,
|
|
275
|
+
recoveries,
|
|
276
|
+
unchanged,
|
|
277
|
+
added,
|
|
278
|
+
removed,
|
|
279
|
+
schemaDrift,
|
|
280
|
+
responseChanges,
|
|
281
|
+
};
|
|
198
282
|
}
|
|
199
283
|
//# sourceMappingURL=validate.js.map
|
package/dist/src/validate.js.map
CHANGED
|
@@ -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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"}
|
package/docs/agent-tasks.md
CHANGED
|
@@ -6,7 +6,7 @@ Useful merged work can receive public credit through [MCP Observatory Contributo
|
|
|
6
6
|
|
|
7
7
|
Rough agentic contribution ideas are welcome too. Use the [Agentic Contributor Outreach](./agentic-contributor-outreach.md) playbook or open an `Agentic contribution idea` issue when a task is promising but not ready for a focused PR.
|
|
8
8
|
|
|
9
|
-
The core standard is a [tool-call receipt](./tool-call-receipts.md): public source, safe startup command, run artifact, attack-sim evidence, SARIF when useful, and a clear capability envelope showing what the run could not access. The public map is the [MCP
|
|
9
|
+
The core standard is a [tool-call receipt](./tool-call-receipts.md): public source, safe startup command, run artifact, attack-sim evidence, SARIF when useful, and a clear capability envelope showing what the run could not access. The public map is the [MCP Risk Graph](./receipt-graph.md).
|
|
10
10
|
|
|
11
11
|
## Task 1: Add MCP Observatory CI To A Repo
|
|
12
12
|
|
|
@@ -12,6 +12,7 @@ These surfaces are intentionally public because they increase trust, integration
|
|
|
12
12
|
- safe `attack-sim` checks
|
|
13
13
|
- `audit --profile nsa-mcp`
|
|
14
14
|
- public artifact schemas
|
|
15
|
+
- public MCP risk graph JSON/Markdown/HTML generation
|
|
15
16
|
- JSON, Markdown, HTML, JUnit, and SARIF reporters
|
|
16
17
|
- GitHub Actions setup and generated CI workflows
|
|
17
18
|
- public health scores and badges
|
|
@@ -27,6 +28,7 @@ These surfaces should remain private unless there is a deliberate licensing or c
|
|
|
27
28
|
- private telemetry exports, raw events, emails, hostnames, and account identifiers
|
|
28
29
|
- company/account intelligence derived from telemetry or usage patterns
|
|
29
30
|
- proprietary Safety Index ranking weights, confidence models, and lead prioritization
|
|
31
|
+
- private fleet graph workflows, commercial scoring weights, and buyer-specific prioritization
|
|
30
32
|
- commercial report templates beyond sanitized public samples
|
|
31
33
|
- buyer-specific evidence packs, remediation notes, and procurement packets
|
|
32
34
|
- hosted dashboard workflows, retention logic, and fleet visibility
|
|
@@ -60,6 +62,7 @@ Keep private:
|
|
|
60
62
|
The paid product should package the same evidence into decisions a buyer can act on:
|
|
61
63
|
|
|
62
64
|
- private MCP dependency inventory
|
|
65
|
+
- private MCP fleet risk graph
|
|
63
66
|
- safe-mode attack simulation evidence pack
|
|
64
67
|
- CI/SARIF gate rollout
|
|
65
68
|
- drift and schema-change review
|
|
@@ -67,6 +70,12 @@ The paid product should package the same evidence into decisions a buyer can act
|
|
|
67
70
|
- executive summary and procurement-friendly due diligence packet
|
|
68
71
|
- recurring review cadence for production MCP fleets
|
|
69
72
|
|
|
73
|
+
Pricing anchors:
|
|
74
|
+
|
|
75
|
+
- `$2,500+` narrow readiness review
|
|
76
|
+
- `$15,000+` attack simulation evidence pack
|
|
77
|
+
- `$50,000+` private fleet risk graph pilot
|
|
78
|
+
|
|
70
79
|
The open source project proves the method. The commercial product saves a team time, reduces review risk, and gives leadership a defensible record.
|
|
71
80
|
|
|
72
81
|
## Handling Clones
|
|
@@ -80,4 +89,3 @@ Assume visible CLI features can be copied. The moat should come from:
|
|
|
80
89
|
- building trust with security teams through careful privacy and non-destructive defaults
|
|
81
90
|
|
|
82
91
|
Do not respond to clones by hiding the core OSS loop. Respond by making the public evidence standard more useful and keeping the commercial intelligence layer private.
|
|
83
|
-
|
|
@@ -70,6 +70,8 @@ Replace the link target with the merged proof card or PR for your contribution.
|
|
|
70
70
|
| Contributor | Role | Public Proof |
|
|
71
71
|
| --- | --- | --- |
|
|
72
72
|
| [William Weishuhn](https://github.com/KryptosAI) | Founding maintainer, CI Integrator, SARIF Fixer, Docs/Agent Prompt Contributor | [All Contributors entry](../CONTRIBUTORS.md), [Code Scanning demo](./code-scanning-demo.md), [Agent Task Pack](./agent-tasks.md) |
|
|
73
|
+
| [Lee Sang Hoon](https://github.com/leemeo3) | Target Verifier, Safety Index Contributor, Infrastructure Contributor | [PR #144](https://github.com/KryptosAI/mcp-observatory/pull/144), [PR #159](https://github.com/KryptosAI/mcp-observatory/pull/159), [PR #188](https://github.com/KryptosAI/mcp-observatory/pull/188) |
|
|
74
|
+
| [Tanish Kumar](https://github.com/tanishxdev) | Code Contributor (Legacy CLI deprecation warnings) | [PR #187](https://github.com/KryptosAI/mcp-observatory/pull/187) |
|
|
73
75
|
|
|
74
76
|
External contributors are added after a merged PR, an accepted target artifact, or maintainer-confirmed upstream adoption.
|
|
75
77
|
|