@quantakrypto/mcp 0.3.0 → 0.4.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/README.md +54 -5
- package/dist/index.d.ts +1 -1
- package/dist/resources.d.ts +39 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +75 -0
- package/dist/resources.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +43 -1
- package/dist/server.js.map +1 -1
- package/dist/tools.d.ts +6 -6
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +590 -10
- package/dist/tools.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -142,6 +142,53 @@ tooling. Reads the filesystem, so it is gated like `scan_path` over HTTP.
|
|
|
142
142
|
}
|
|
143
143
|
```
|
|
144
144
|
|
|
145
|
+
## Copilot tools — migrate through the engine
|
|
146
|
+
|
|
147
|
+
These let an AI coding agent do a PQC migration **through the deterministic
|
|
148
|
+
engine** ("the model proposes, the engine disposes"): the agent plans, edits,
|
|
149
|
+
and re-verifies against the same detectors the CLI uses, so nothing is claimed
|
|
150
|
+
fixed that the scanner still flags.
|
|
151
|
+
|
|
152
|
+
- **`plan_migration`** — scan a path and return a prioritized, phased plan
|
|
153
|
+
(harvest-now-decrypt-later first, then signatures, then transport/certs), each
|
|
154
|
+
group with its PQC target and locations. Reads the filesystem, so it is gated
|
|
155
|
+
like `scan_path` over HTTP. `{ path }`.
|
|
156
|
+
- **`get_fix_examples`** — before/after migration code for a classical
|
|
157
|
+
`algorithm` (or a finding's `ruleId`). No filesystem access.
|
|
158
|
+
- **`verify_fix`** — run the detectors over a `code` snippet (plus `language` or
|
|
159
|
+
`filename`) and report any classical crypto that remains. The agent's
|
|
160
|
+
fix-confirmation loop. No filesystem access.
|
|
161
|
+
- **`check_dependency`** — look a package `name` (+ `ecosystem`, default npm) up
|
|
162
|
+
in the vulnerable-dependency database. No filesystem access.
|
|
163
|
+
- **`score_delta`** — readiness-score / HNDL change between two finding sets
|
|
164
|
+
(`before`, `after` from `scan_path --format json`). No filesystem access.
|
|
165
|
+
- **`triage_findings`** — deterministic, offline, key-free. Emits a triage
|
|
166
|
+
REQUEST bundle (rubric + verdict schema + per-finding metadata + fingerprints)
|
|
167
|
+
for the host agent to reason over. It never calls a model. No filesystem access.
|
|
168
|
+
- **`apply_triage`** — deterministically attach the host agent's verdicts to
|
|
169
|
+
their findings (matched by fingerprint) and re-sort by exposure. Never
|
|
170
|
+
suppresses; malformed verdicts are ignored. No filesystem access.
|
|
171
|
+
- **`remediate_findings`** — deterministic, offline, key-free. Emits a fix
|
|
172
|
+
REQUEST bundle (rubric + fix schema + per-finding metadata + fingerprints) for
|
|
173
|
+
the host agent to fix: propose the corrected file, verify with `verify_fix`,
|
|
174
|
+
keep only verified fixes. Never merges. No filesystem access.
|
|
175
|
+
|
|
176
|
+
> Triage on the MCP plane keeps the "engine disposes" guarantee: the server
|
|
177
|
+
> stays offline and never holds an API key — the host agent (which already has
|
|
178
|
+
> the code open) does the reasoning, and `apply_triage` records it
|
|
179
|
+
> deterministically. The BYOK client that calls a provider directly lives only
|
|
180
|
+
> in `qscan --triage` (for CI, where there is no host agent).
|
|
181
|
+
|
|
182
|
+
## Resources & prompts
|
|
183
|
+
|
|
184
|
+
Beyond tools, the server exposes MCP **resources** and a **prompt** (advertised in
|
|
185
|
+
the `initialize` capabilities, all offline/static):
|
|
186
|
+
|
|
187
|
+
- `resources/list` + `resources/read` — `quantakrypto://rules` (the full rule
|
|
188
|
+
catalog as JSON) and `quantakrypto://guide/migration` (a Markdown migration guide).
|
|
189
|
+
- `prompts/list` + `prompts/get` — the `migrate` prompt (optional `path` arg): a
|
|
190
|
+
ready-made "scan → triage → remediate → verify, draft PR only" workflow.
|
|
191
|
+
|
|
145
192
|
## Hosted HTTP server (safe-by-default)
|
|
146
193
|
|
|
147
194
|
The same `McpServer` can be served over HTTP (a Streamable-HTTP-style JSON-RPC
|
|
@@ -155,11 +202,13 @@ is reachable by untrusted peers:
|
|
|
155
202
|
- **Bearer-token auth.** Set `QUANTAKRYPTO_MCP_TOKEN` and every `/mcp` request must
|
|
156
203
|
send `Authorization: Bearer <token>`, else `401`. With no token set, only the
|
|
157
204
|
loopback bind is allowed.
|
|
158
|
-
- **Filesystem tools are disabled by default.** `scan_path`, `inventory_crypto
|
|
159
|
-
and `
|
|
160
|
-
only when `QUANTAKRYPTO_MCP_ALLOW_FS=1`. The knowledge
|
|
161
|
-
|
|
162
|
-
`
|
|
205
|
+
- **Filesystem tools are disabled by default.** `scan_path`, `inventory_crypto`,
|
|
206
|
+
`generate_cbom` and `plan_migration` read arbitrary server paths, so over HTTP
|
|
207
|
+
they are exposed only when `QUANTAKRYPTO_MCP_ALLOW_FS=1`. The knowledge /
|
|
208
|
+
copilot tools that take no path (`explain_finding`, `suggest_hybrid`,
|
|
209
|
+
`list_rules`, `get_fix_examples`, `verify_fix`, `check_dependency`,
|
|
210
|
+
`score_delta`, `triage_findings`, `apply_triage`, `remediate_findings`) are
|
|
211
|
+
always available. `tools/list` and `tools/call` both reflect the gating.
|
|
163
212
|
- **Filesystem tools are root-confined.** Even with `QUANTAKRYPTO_MCP_ALLOW_FS=1`,
|
|
164
213
|
every scanned path must resolve inside the `QUANTAKRYPTO_MCP_ROOT` allow-list
|
|
165
214
|
(`:`-separated; the process CWD by default). `..` traversal and out-of-root
|
package/dist/index.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export type { JsonRpcRequest, JsonRpcResponse, JsonRpcSuccess, JsonRpcFailure, T
|
|
|
16
16
|
/** The MCP server name advertised to clients. */
|
|
17
17
|
export declare const SERVER_NAME = "quantakrypto";
|
|
18
18
|
/** The version reported by the server (kept in sync with @quantakrypto/core). */
|
|
19
|
-
export declare const SERVER_VERSION = "0.
|
|
19
|
+
export declare const SERVER_VERSION = "0.4.0";
|
|
20
20
|
export interface CreateServerOptions {
|
|
21
21
|
/** Override the advertised server version (defaults to @quantakrypto/core VERSION). */
|
|
22
22
|
version?: string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** A resource descriptor for `resources/list`. */
|
|
2
|
+
export interface ResourceDescriptor {
|
|
3
|
+
uri: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
mimeType: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const RESOURCES: ResourceDescriptor[];
|
|
9
|
+
/** Read a resource body by URI, or null when the URI is unknown. */
|
|
10
|
+
export declare function readResource(uri: string): {
|
|
11
|
+
uri: string;
|
|
12
|
+
mimeType: string;
|
|
13
|
+
text: string;
|
|
14
|
+
} | null;
|
|
15
|
+
/** A prompt descriptor for `prompts/list`. */
|
|
16
|
+
export interface PromptDescriptor {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
arguments?: {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
}[];
|
|
24
|
+
}
|
|
25
|
+
export declare const PROMPTS: PromptDescriptor[];
|
|
26
|
+
/** A prompt message (MCP `prompts/get` shape). */
|
|
27
|
+
export interface PromptMessage {
|
|
28
|
+
role: "user";
|
|
29
|
+
content: {
|
|
30
|
+
type: "text";
|
|
31
|
+
text: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** Materialize a prompt by name, or null when unknown. */
|
|
35
|
+
export declare function getPrompt(name: string, args: Record<string, unknown>): {
|
|
36
|
+
description: string;
|
|
37
|
+
messages: PromptMessage[];
|
|
38
|
+
} | null;
|
|
39
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAQA,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,SAAS,EAAE,kBAAkB,EAczC,CAAC;AAmBF,oEAAoE;AACpE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYhG;AAED,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACzE;AAED,eAAO,MAAM,OAAO,EAAE,gBAAgB,EAOrC,CAAC;AAEF,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAAG,IAAI,CAc3D"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP resources + prompts. Resources expose read-only reference data (the full
|
|
3
|
+
* rule catalog + a migration guide); the prompt gives a client a one-call
|
|
4
|
+
* "migrate this path" workflow that drives the deterministic tools. All offline
|
|
5
|
+
* and static — no filesystem, no network, no key.
|
|
6
|
+
*/
|
|
7
|
+
import { defaultRegistry, REMEDIATE_RUBRIC } from "@quantakrypto/core";
|
|
8
|
+
export const RESOURCES = [
|
|
9
|
+
{
|
|
10
|
+
uri: "quantakrypto://rules",
|
|
11
|
+
name: "Quantakrypto rule catalog",
|
|
12
|
+
description: "Every detection rule quantakrypto can emit (id, title, severity, category, HNDL, remediation).",
|
|
13
|
+
mimeType: "application/json",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
uri: "quantakrypto://guide/migration",
|
|
17
|
+
name: "PQC migration guide",
|
|
18
|
+
description: "How to migrate quantum-vulnerable cryptography using the quantakrypto MCP tools.",
|
|
19
|
+
mimeType: "text/markdown",
|
|
20
|
+
},
|
|
21
|
+
];
|
|
22
|
+
const MIGRATION_GUIDE = `# Post-Quantum Migration with quantakrypto
|
|
23
|
+
|
|
24
|
+
A safe, deterministic loop ("the model proposes, the engine disposes"):
|
|
25
|
+
|
|
26
|
+
1. **Inventory** — call \`scan_path\` on the target to list quantum-vulnerable findings.
|
|
27
|
+
2. **Triage** — call \`triage_findings\` for the bundle, decide an exposure verdict per
|
|
28
|
+
finding, then \`apply_triage\` to rank them (harvest-now-decrypt-later first).
|
|
29
|
+
3. **Remediate** — call \`remediate_findings\`; for each finding propose the corrected
|
|
30
|
+
full file, then \`verify_fix\` on your result. Keep ONLY fixes that clear the finding
|
|
31
|
+
and introduce no new one. Skip any file containing secrets.
|
|
32
|
+
4. Open a **draft** PR for review. Never auto-merge.
|
|
33
|
+
|
|
34
|
+
## Remediation rubric
|
|
35
|
+
|
|
36
|
+
${REMEDIATE_RUBRIC}
|
|
37
|
+
`;
|
|
38
|
+
/** Read a resource body by URI, or null when the URI is unknown. */
|
|
39
|
+
export function readResource(uri) {
|
|
40
|
+
if (uri === "quantakrypto://rules") {
|
|
41
|
+
return {
|
|
42
|
+
uri,
|
|
43
|
+
mimeType: "application/json",
|
|
44
|
+
text: JSON.stringify(defaultRegistry.ruleCatalog(), null, 2),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (uri === "quantakrypto://guide/migration") {
|
|
48
|
+
return { uri, mimeType: "text/markdown", text: MIGRATION_GUIDE };
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
export const PROMPTS = [
|
|
53
|
+
{
|
|
54
|
+
name: "migrate",
|
|
55
|
+
description: "Plan and apply a post-quantum migration for a path using the deterministic tools.",
|
|
56
|
+
arguments: [{ name: "path", description: "Path to scan (default: .)", required: false }],
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
/** Materialize a prompt by name, or null when unknown. */
|
|
60
|
+
export function getPrompt(name, args) {
|
|
61
|
+
if (name !== "migrate")
|
|
62
|
+
return null;
|
|
63
|
+
const path = typeof args.path === "string" && args.path ? args.path : ".";
|
|
64
|
+
const text = `Migrate ${path} off quantum-vulnerable cryptography using the quantakrypto tools.\n` +
|
|
65
|
+
`1) Call scan_path on "${path}".\n` +
|
|
66
|
+
`2) Call triage_findings, decide exposure verdicts, then apply_triage to rank them.\n` +
|
|
67
|
+
`3) For each finding: call remediate_findings, propose the corrected full file, then\n` +
|
|
68
|
+
` verify_fix on your result — keep only fixes that clear the finding.\n` +
|
|
69
|
+
`Never touch files containing secrets; never auto-merge — open a draft PR for review.`;
|
|
70
|
+
return {
|
|
71
|
+
description: "Plan and apply a post-quantum migration.",
|
|
72
|
+
messages: [{ role: "user", content: { type: "text", text } }],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAUvE,MAAM,CAAC,MAAM,SAAS,GAAyB;IAC7C;QACE,GAAG,EAAE,sBAAsB;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,gGAAgG;QAClG,QAAQ,EAAE,kBAAkB;KAC7B;IACD;QACE,GAAG,EAAE,gCAAgC;QACrC,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,kFAAkF;QAC/F,QAAQ,EAAE,eAAe;KAC1B;CACF,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;;;;;;;;EActB,gBAAgB;CACjB,CAAC;AAEF,oEAAoE;AACpE,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;QACnC,OAAO;YACL,GAAG;YACH,QAAQ,EAAE,kBAAkB;YAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7D,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,KAAK,gCAAgC,EAAE,CAAC;QAC7C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD,MAAM,CAAC,MAAM,OAAO,GAAuB;IACzC;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EACT,mFAAmF;QACrF,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KACzF;CACF,CAAC;AAQF,0DAA0D;AAC1D,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,IAA6B;IAE7B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1E,MAAM,IAAI,GACR,WAAW,IAAI,sEAAsE;QACrF,yBAAyB,IAAI,MAAM;QACnC,sFAAsF;QACtF,uFAAuF;QACvF,0EAA0E;QAC1E,sFAAsF,CAAC;IACzF,OAAO;QACL,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC"}
|
package/dist/server.d.ts
CHANGED
|
@@ -55,6 +55,10 @@ export declare class McpServer {
|
|
|
55
55
|
handle(message: unknown, context?: ToolContext): Promise<JsonRpcResponse | null>;
|
|
56
56
|
/** Route a request to the right handler. Throws {@link RpcError} on failure. */
|
|
57
57
|
private dispatch;
|
|
58
|
+
/** `resources/read`: return the body for a known resource URI. */
|
|
59
|
+
private onResourcesRead;
|
|
60
|
+
/** `prompts/get`: materialize a named prompt with optional arguments. */
|
|
61
|
+
private onPromptsGet;
|
|
58
62
|
/** Build the `initialize` result. */
|
|
59
63
|
private onInitialize;
|
|
60
64
|
/** Validate params and execute a tool for `tools/call`. */
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAEV,eAAe,EACf,WAAW,EACX,cAAc,EACd,cAAc,EAEf,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,OAAO,KAAK,EAEV,eAAe,EACf,WAAW,EACX,cAAc,EACd,cAAc,EAEf,MAAM,eAAe,CAAC;AAGvB,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,IAAI,EAAE,UAAU,CAAC;IACjB,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,mEAAmE;IACnE,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,gBAAgB;IAKrC,2EAA2E;IAC3E,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQxC,uEAAuE;IACvE,SAAS,IAAI,cAAc,EAAE;IAM7B,wDAAwD;IACxD,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;;;;;;;;OASG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA8BtF,gFAAgF;YAClE,QAAQ;IA0BtB,kEAAkE;IAClE,OAAO,CAAC,eAAe;IAavB,yEAAyE;IACzE,OAAO,CAAC,YAAY;IAiBpB,qCAAqC;IACrC,OAAO,CAAC,YAAY;IAgBpB,2DAA2D;YAC7C,WAAW;CAuB1B"}
|
package/dist/server.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import process from "node:process";
|
|
17
17
|
import { ErrorCode, MCP_PROTOCOL_VERSION, RpcError, isJsonRpcRequestLike, isNotification, makeFailure, makeSuccess, } from "./protocol.js";
|
|
18
|
+
import { RESOURCES, PROMPTS, readResource, getPrompt } from "./resources.js";
|
|
18
19
|
/**
|
|
19
20
|
* A minimal, spec-faithful MCP server. Register tools with {@link registerTool}
|
|
20
21
|
* and drive it one message at a time with {@link handle}.
|
|
@@ -101,18 +102,59 @@ export class McpServer {
|
|
|
101
102
|
return { tools: this.listTools() };
|
|
102
103
|
case "tools/call":
|
|
103
104
|
return this.onToolsCall(req.params, context);
|
|
105
|
+
case "resources/list":
|
|
106
|
+
return { resources: RESOURCES };
|
|
107
|
+
case "resources/read":
|
|
108
|
+
return this.onResourcesRead(req.params);
|
|
109
|
+
case "prompts/list":
|
|
110
|
+
return { prompts: PROMPTS };
|
|
111
|
+
case "prompts/get":
|
|
112
|
+
return this.onPromptsGet(req.params);
|
|
104
113
|
default:
|
|
105
114
|
throw new RpcError(ErrorCode.MethodNotFound, `method not found: ${req.method}`);
|
|
106
115
|
}
|
|
107
116
|
}
|
|
117
|
+
/** `resources/read`: return the body for a known resource URI. */
|
|
118
|
+
onResourcesRead(params) {
|
|
119
|
+
if (typeof params !== "object" || params === null || Array.isArray(params)) {
|
|
120
|
+
throw new RpcError(ErrorCode.InvalidParams, "resources/read requires an object params");
|
|
121
|
+
}
|
|
122
|
+
const uri = params.uri;
|
|
123
|
+
if (typeof uri !== "string" || uri.length === 0) {
|
|
124
|
+
throw new RpcError(ErrorCode.InvalidParams, "resources/read requires a 'uri' string");
|
|
125
|
+
}
|
|
126
|
+
const contents = readResource(uri);
|
|
127
|
+
if (!contents)
|
|
128
|
+
throw new RpcError(ErrorCode.InvalidParams, `unknown resource: ${uri}`);
|
|
129
|
+
return { contents: [contents] };
|
|
130
|
+
}
|
|
131
|
+
/** `prompts/get`: materialize a named prompt with optional arguments. */
|
|
132
|
+
onPromptsGet(params) {
|
|
133
|
+
if (typeof params !== "object" || params === null || Array.isArray(params)) {
|
|
134
|
+
throw new RpcError(ErrorCode.InvalidParams, "prompts/get requires an object params");
|
|
135
|
+
}
|
|
136
|
+
const { name, arguments: args } = params;
|
|
137
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
138
|
+
throw new RpcError(ErrorCode.InvalidParams, "prompts/get requires a 'name' string");
|
|
139
|
+
}
|
|
140
|
+
const promptArgs = args && typeof args === "object" && !Array.isArray(args)
|
|
141
|
+
? args
|
|
142
|
+
: {};
|
|
143
|
+
const prompt = getPrompt(name, promptArgs);
|
|
144
|
+
if (!prompt)
|
|
145
|
+
throw new RpcError(ErrorCode.InvalidParams, `unknown prompt: ${name}`);
|
|
146
|
+
return prompt;
|
|
147
|
+
}
|
|
108
148
|
/** Build the `initialize` result. */
|
|
109
149
|
onInitialize() {
|
|
110
150
|
this.initialized = true;
|
|
111
151
|
const result = {
|
|
112
152
|
protocolVersion: MCP_PROTOCOL_VERSION,
|
|
113
153
|
capabilities: {
|
|
114
|
-
//
|
|
154
|
+
// Everything we expose is static, so listChanged is false throughout.
|
|
115
155
|
tools: { listChanged: false },
|
|
156
|
+
resources: { listChanged: false },
|
|
157
|
+
prompts: { listChanged: false },
|
|
116
158
|
},
|
|
117
159
|
serverInfo: { name: this.info.name, version: this.info.version },
|
|
118
160
|
};
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,WAAW,GACZ,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* quantakrypto MCP tools, backed by {@link @quantakrypto/core}.
|
|
3
3
|
*
|
|
4
|
-
* Every tool returns an MCP {@link ToolResult} ({ content, isError? }).
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Every tool returns an MCP {@link ToolResult} ({ content, isError? }). Each
|
|
5
|
+
* handler runs core calls through {@link safe} so any runtime failure (a bad
|
|
6
|
+
* path, a work-budget overflow, an unexpected error) surfaces as a readable
|
|
7
|
+
* `isError` tool result with host details stripped, rather than a protocol-level
|
|
8
|
+
* crash.
|
|
9
9
|
*/
|
|
10
10
|
import type { AlgorithmFamily, ScanOptions, ScanResult } from "@quantakrypto/core";
|
|
11
11
|
import type { JsonSchema, ToolContext, ToolDefinition, ToolResult } from "./protocol.js";
|
|
@@ -50,7 +50,7 @@ export declare const FS_TOOL_NAMES: readonly string[];
|
|
|
50
50
|
/** All quantakrypto MCP tools, in a stable order. */
|
|
51
51
|
export declare const quantakryptoTools: ToolDefinition[];
|
|
52
52
|
/** The core version these tools are built against (re-exported for diagnostics). */
|
|
53
|
-
export declare const CORE_VERSION = "0.
|
|
53
|
+
export declare const CORE_VERSION = "0.4.0";
|
|
54
54
|
/** Exposed for tests and advanced callers. */
|
|
55
55
|
export declare const __test: {
|
|
56
56
|
normalizeAlgorithm: typeof normalizeAlgorithm;
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAsBH,OAAO,KAAK,EACV,eAAe,EAIf,WAAW,EACX,UAAU,EAGX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAkBzF;;;;;;GAMG;AACH,iBAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAS1D;AAkBD;;;;;;;;;GASG;AACH,iBAAS,gBAAgB,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,WAAW,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAexE;AAED,6EAA6E;AAC7E,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAmB1D;AAED,gEAAgE;AAChE,iBAAS,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAmCjD;AAwPD,+EAA+E;AAC/E,iBAAS,kBAAkB,CAAC,SAAS,EAAE,eAAe,GAAG,MAAM,EAAE,CA4BhE;AAusBD;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAK1C,CAAC;AAEF,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAiB7C,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,8CAA8C;AAC9C,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC"}
|
package/dist/tools.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* quantakrypto MCP tools, backed by {@link @quantakrypto/core}.
|
|
3
3
|
*
|
|
4
|
-
* Every tool returns an MCP {@link ToolResult} ({ content, isError? }).
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Every tool returns an MCP {@link ToolResult} ({ content, isError? }). Each
|
|
5
|
+
* handler runs core calls through {@link safe} so any runtime failure (a bad
|
|
6
|
+
* path, a work-budget overflow, an unexpected error) surfaces as a readable
|
|
7
|
+
* `isError` tool result with host details stripped, rather than a protocol-level
|
|
8
|
+
* crash.
|
|
9
9
|
*/
|
|
10
10
|
import process from "node:process";
|
|
11
|
-
import { VERSION, AbortError, BudgetExceededError, buildInventory, detectors, remediationFor, scan, toCbom, } from "@quantakrypto/core";
|
|
11
|
+
import { VERSION, AbortError, BudgetExceededError, buildInventory, buildRemediateRequest, buildTriageRequest, compareFindings, detectors, fingerprintFinding, languageToExtension, remediationFor, scan, SEVERITY_ORDER, toCbom, verifyFix, vulnerableDependencies, } from "@quantakrypto/core";
|
|
12
12
|
import { errorResult, textResult } from "./protocol.js";
|
|
13
13
|
import { resolveRule } from "./rules.js";
|
|
14
14
|
import { resolveFsConfig, resolveScanPath } from "./fsconfig.js";
|
|
15
|
-
/** Severity order for stable, human-friendly summaries. */
|
|
16
|
-
const SEVERITY_ORDER = ["critical", "high", "medium", "low", "info"];
|
|
17
15
|
/** All classical algorithm families we can advise on, used for validation/help. */
|
|
18
16
|
const ALGORITHM_FAMILIES = [
|
|
19
17
|
"RSA",
|
|
@@ -23,6 +21,7 @@ const ALGORITHM_FAMILIES = [
|
|
|
23
21
|
"DH",
|
|
24
22
|
"DSA",
|
|
25
23
|
"X25519",
|
|
24
|
+
"X448",
|
|
26
25
|
"ECIES",
|
|
27
26
|
"unknown",
|
|
28
27
|
];
|
|
@@ -100,6 +99,8 @@ function normalizeAlgorithm(input) {
|
|
|
100
99
|
return "ECDSA";
|
|
101
100
|
if (cleaned.includes("ED25519") || cleaned.includes("EDDSA"))
|
|
102
101
|
return "EdDSA";
|
|
102
|
+
if (cleaned.includes("X448") || cleaned.includes("CURVE448"))
|
|
103
|
+
return "X448";
|
|
103
104
|
if (cleaned.includes("X25519") || cleaned.includes("CURVE25519"))
|
|
104
105
|
return "X25519";
|
|
105
106
|
if (cleaned.includes("ECDH"))
|
|
@@ -361,7 +362,8 @@ const suggestHybridTool = {
|
|
|
361
362
|
lines.push(`Rationale: ${rem.value.detail}`);
|
|
362
363
|
}
|
|
363
364
|
else {
|
|
364
|
-
//
|
|
365
|
+
// Defensive fallback: core has a remediation for every known family, so
|
|
366
|
+
// this only triggers if the lookup throws or the algorithm is unrecognised.
|
|
365
367
|
lines.push(...staticHybridAdvice(algorithm));
|
|
366
368
|
}
|
|
367
369
|
lines.push("");
|
|
@@ -462,13 +464,581 @@ const generateCbomTool = {
|
|
|
462
464
|
return textResult(JSON.stringify(cbom.value, null, 2));
|
|
463
465
|
},
|
|
464
466
|
};
|
|
467
|
+
// ---------------------------------------------------------------------------
|
|
468
|
+
// Copilot tools — let an AI coding agent migrate *through* the deterministic
|
|
469
|
+
// engine ("the model proposes, the engine disposes"). plan_migration scans and
|
|
470
|
+
// orders the work; get_fix_examples shows the code change; verify_fix re-runs
|
|
471
|
+
// the detectors on the agent's edited code to confirm the classical crypto is
|
|
472
|
+
// actually gone; check_dependency and score_delta quantify the work.
|
|
473
|
+
// ---------------------------------------------------------------------------
|
|
474
|
+
// `languageToExtension` + `verifyFix` now live in @quantakrypto/core so this tool and
|
|
475
|
+
// the remediation pipeline share one definition of "the fix is verified".
|
|
476
|
+
/** Before/after migration snippets per classical family. Static + deterministic. */
|
|
477
|
+
const FIX_EXAMPLES = {
|
|
478
|
+
RSA: {
|
|
479
|
+
note: "RSA key establishment → ML-KEM-768 (hybrid X25519MLKEM768). RSA signatures → ML-DSA-65.",
|
|
480
|
+
before: "// key establishment\nconst { publicKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 3072 });\nconst enc = crypto.publicEncrypt(publicKey, data);",
|
|
481
|
+
after: "// hybrid KEM (e.g. @noble/post-quantum or a TLS 1.3 hybrid group)\nimport { MlKem768 } from 'mlkem';\nconst kem = new MlKem768();\nconst [encapsulated, sharedSecret] = await kem.encap(peerPublicKey); // pair with X25519 for hybrid",
|
|
482
|
+
},
|
|
483
|
+
ECDH: {
|
|
484
|
+
note: "ECDH / DH key agreement → hybrid X25519MLKEM768 (ML-KEM-768 + X25519).",
|
|
485
|
+
before: "const ecdh = crypto.createECDH('prime256v1');\nconst shared = ecdh.computeSecret(peerKey);",
|
|
486
|
+
after: "// TLS: negotiate the X25519MLKEM768 named group. In app code, combine ML-KEM-768\n// with X25519 and KDF the concatenated secrets so security holds if either survives.",
|
|
487
|
+
},
|
|
488
|
+
DH: {
|
|
489
|
+
note: "Finite-field DH → hybrid X25519MLKEM768.",
|
|
490
|
+
before: "const dh = crypto.createDiffieHellman(2048);",
|
|
491
|
+
after: "// Replace with ML-KEM-768 encapsulation, deployed as a hybrid with X25519.",
|
|
492
|
+
},
|
|
493
|
+
X25519: {
|
|
494
|
+
note: "X25519 is modern but classical; wrap it in a hybrid X25519MLKEM768 rather than dropping it.",
|
|
495
|
+
before: "const alice = crypto.generateKeyPairSync('x25519');",
|
|
496
|
+
after: "// Keep X25519 AND add ML-KEM-768; derive the session key from both (hybrid).",
|
|
497
|
+
},
|
|
498
|
+
ECDSA: {
|
|
499
|
+
note: "ECDSA signatures → ML-DSA-65 (Dilithium), or SLH-DSA where statelessness matters.",
|
|
500
|
+
before: "const sig = crypto.sign('sha256', msg, ecPrivateKey);",
|
|
501
|
+
after: "import { ml_dsa65 } from '@noble/post-quantum/ml-dsa';\nconst sig = ml_dsa65.sign(mlDsaSecretKey, msg);",
|
|
502
|
+
},
|
|
503
|
+
EdDSA: {
|
|
504
|
+
note: "Ed25519/Ed448 signatures → ML-DSA-65 (or a hybrid Ed25519+ML-DSA during transition).",
|
|
505
|
+
before: "const sig = crypto.sign(null, msg, ed25519PrivateKey);",
|
|
506
|
+
after: "import { ml_dsa65 } from '@noble/post-quantum/ml-dsa';\nconst sig = ml_dsa65.sign(mlDsaSecretKey, msg);",
|
|
507
|
+
},
|
|
508
|
+
DSA: {
|
|
509
|
+
note: "DSA is deprecated; rotate keys and migrate to ML-DSA-65.",
|
|
510
|
+
before: "crypto.generateKeyPairSync('dsa', { modulusLength: 2048 });",
|
|
511
|
+
after: "import { ml_dsa65 } from '@noble/post-quantum/ml-dsa';\nconst keys = ml_dsa65.keygen();",
|
|
512
|
+
},
|
|
513
|
+
};
|
|
514
|
+
const planMigrationTool = {
|
|
515
|
+
name: "plan_migration",
|
|
516
|
+
description: "Scan a path and return a deterministic, prioritized post-quantum migration " +
|
|
517
|
+
"plan: findings grouped by algorithm, ordered harvest-now-decrypt-later first, " +
|
|
518
|
+
"each with its PQC target and the readiness-score impact. Reads the filesystem, " +
|
|
519
|
+
"so it is gated like scan_path over HTTP.",
|
|
520
|
+
inputSchema: {
|
|
521
|
+
type: "object",
|
|
522
|
+
properties: {
|
|
523
|
+
path: {
|
|
524
|
+
type: "string",
|
|
525
|
+
description: "Absolute or relative path to a file or directory to plan a migration for.",
|
|
526
|
+
},
|
|
527
|
+
},
|
|
528
|
+
required: ["path"],
|
|
529
|
+
additionalProperties: false,
|
|
530
|
+
},
|
|
531
|
+
async handler(args, context) {
|
|
532
|
+
const path = args.path;
|
|
533
|
+
if (typeof path !== "string" || path.length === 0) {
|
|
534
|
+
return errorResult("plan_migration requires a non-empty 'path' string.");
|
|
535
|
+
}
|
|
536
|
+
const opts = buildScanOptions(path, context);
|
|
537
|
+
if (!opts.ok)
|
|
538
|
+
return opts.result;
|
|
539
|
+
const scanned = await safe("scan", () => scan(opts.options));
|
|
540
|
+
if (!scanned.ok)
|
|
541
|
+
return scanned.result;
|
|
542
|
+
const plan = await buildMigrationPlan(scanned.value);
|
|
543
|
+
return {
|
|
544
|
+
content: [
|
|
545
|
+
{ type: "text", text: plan.human },
|
|
546
|
+
{ type: "text", text: JSON.stringify(plan.structured, null, 2) },
|
|
547
|
+
],
|
|
548
|
+
};
|
|
549
|
+
},
|
|
550
|
+
};
|
|
551
|
+
/** Build a deterministic, prioritized migration plan from a scan result. */
|
|
552
|
+
async function buildMigrationPlan(result) {
|
|
553
|
+
const findings = result.findings;
|
|
554
|
+
const byPhase = { 1: [], 2: [], 3: [] };
|
|
555
|
+
for (const f of findings) {
|
|
556
|
+
// Phase 1: HNDL-exposed confidentiality (harvest now, decrypt later) — most urgent.
|
|
557
|
+
// Phase 2: forgeable signatures. Phase 3: transport / certificate config.
|
|
558
|
+
if (f.hndl)
|
|
559
|
+
byPhase[1].push(f);
|
|
560
|
+
else if (f.category === "tls" || f.category === "certificate")
|
|
561
|
+
byPhase[3].push(f);
|
|
562
|
+
else
|
|
563
|
+
byPhase[2].push(f);
|
|
564
|
+
}
|
|
565
|
+
const phaseMeta = {
|
|
566
|
+
1: {
|
|
567
|
+
title: "Harvest-now-decrypt-later (do first)",
|
|
568
|
+
rationale: "Key exchange / public-key encryption. Traffic captured today is decryptable once a quantum computer exists — migrate these first.",
|
|
569
|
+
},
|
|
570
|
+
2: {
|
|
571
|
+
title: "Quantum-forgeable signatures",
|
|
572
|
+
rationale: "Signatures are not retroactively broken, but become forgeable post-Q-day. Migrate before Q-day, prioritising long-lived keys.",
|
|
573
|
+
},
|
|
574
|
+
3: {
|
|
575
|
+
title: "Transport & certificate configuration",
|
|
576
|
+
rationale: "TLS versions, cipher suites, and certificate signature algorithms. Adopt hybrid PQC named groups and plan PQC-capable CA re-issuance.",
|
|
577
|
+
},
|
|
578
|
+
};
|
|
579
|
+
async function groupsFor(list) {
|
|
580
|
+
const byAlgo = new Map();
|
|
581
|
+
for (const f of list) {
|
|
582
|
+
const a = (f.algorithm ?? "unknown");
|
|
583
|
+
const arr = byAlgo.get(a) ?? [];
|
|
584
|
+
arr.push(f);
|
|
585
|
+
byAlgo.set(a, arr);
|
|
586
|
+
}
|
|
587
|
+
const groups = [];
|
|
588
|
+
for (const [algorithm, fs] of byAlgo) {
|
|
589
|
+
const rem = await safe("remediationFor", () => remediationFor(algorithm));
|
|
590
|
+
groups.push({
|
|
591
|
+
algorithm,
|
|
592
|
+
count: fs.length,
|
|
593
|
+
hndlCount: fs.filter((f) => f.hndl).length,
|
|
594
|
+
remediation: rem.ok && rem.value ? rem.value.recommendation : "Adopt NIST PQC (ML-KEM / ML-DSA).",
|
|
595
|
+
locations: fs.slice(0, 8).map((f) => `${f.location.file}:${f.location.line}`),
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
// Largest groups first within a phase.
|
|
599
|
+
groups.sort((a, b) => b.count - a.count);
|
|
600
|
+
return groups;
|
|
601
|
+
}
|
|
602
|
+
const phases = [];
|
|
603
|
+
for (const p of [1, 2, 3]) {
|
|
604
|
+
if (byPhase[p].length === 0)
|
|
605
|
+
continue;
|
|
606
|
+
phases.push({
|
|
607
|
+
phase: p,
|
|
608
|
+
title: phaseMeta[p].title,
|
|
609
|
+
rationale: phaseMeta[p].rationale,
|
|
610
|
+
groups: await groupsFor(byPhase[p]),
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
const lines = [];
|
|
614
|
+
lines.push(`Post-quantum migration plan for ${result.root}`);
|
|
615
|
+
lines.push(`Readiness score: ${result.inventory.readinessScore}/100 · ${findings.length} finding(s) · ${result.inventory.hndlCount} HNDL-exposed`);
|
|
616
|
+
if (findings.length === 0) {
|
|
617
|
+
lines.push("");
|
|
618
|
+
lines.push(result.analyzedFiles === 0
|
|
619
|
+
? "No analyzable source was scanned — this plan does NOT cover unsupported languages."
|
|
620
|
+
: "No classical asymmetric cryptography found. Keep scanning in CI to hold the line.");
|
|
621
|
+
return { human: lines.join("\n"), structured: { root: result.root, phases: [] } };
|
|
622
|
+
}
|
|
623
|
+
for (const ph of phases) {
|
|
624
|
+
lines.push("");
|
|
625
|
+
lines.push(`Phase ${ph.phase}: ${ph.title}`);
|
|
626
|
+
lines.push(` ${ph.rationale}`);
|
|
627
|
+
for (const g of ph.groups) {
|
|
628
|
+
lines.push(` - ${g.algorithm} × ${g.count}${g.hndlCount ? ` (${g.hndlCount} HNDL)` : ""} → ${g.remediation}`);
|
|
629
|
+
lines.push(` e.g. ${g.locations.join(", ")}${g.count > g.locations.length ? ", …" : ""}`);
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
lines.push("");
|
|
633
|
+
lines.push("Use get_fix_examples for per-algorithm code changes, then verify_fix to confirm each edit.");
|
|
634
|
+
return {
|
|
635
|
+
human: lines.join("\n"),
|
|
636
|
+
structured: {
|
|
637
|
+
root: result.root,
|
|
638
|
+
readinessScore: result.inventory.readinessScore,
|
|
639
|
+
totalFindings: findings.length,
|
|
640
|
+
hndlExposed: result.inventory.hndlCount,
|
|
641
|
+
phases,
|
|
642
|
+
},
|
|
643
|
+
};
|
|
644
|
+
}
|
|
645
|
+
const getFixExamplesTool = {
|
|
646
|
+
name: "get_fix_examples",
|
|
647
|
+
description: "Return before/after code examples for migrating a classical algorithm to a " +
|
|
648
|
+
"post-quantum / hybrid replacement. Provide an 'algorithm' (RSA, ECDH, ECDSA, …) " +
|
|
649
|
+
"or a 'ruleId' from a finding.",
|
|
650
|
+
inputSchema: {
|
|
651
|
+
type: "object",
|
|
652
|
+
properties: {
|
|
653
|
+
algorithm: {
|
|
654
|
+
type: "string",
|
|
655
|
+
description: "Classical algorithm family to migrate away from.",
|
|
656
|
+
},
|
|
657
|
+
ruleId: { type: "string", description: "A finding's ruleId (resolved to its algorithm)." },
|
|
658
|
+
},
|
|
659
|
+
additionalProperties: false,
|
|
660
|
+
},
|
|
661
|
+
async handler(args) {
|
|
662
|
+
const algoInput = typeof args.algorithm === "string" ? args.algorithm.trim() : "";
|
|
663
|
+
const ruleId = typeof args.ruleId === "string" ? args.ruleId.trim() : "";
|
|
664
|
+
if (!algoInput && !ruleId) {
|
|
665
|
+
return errorResult("get_fix_examples requires 'algorithm' or 'ruleId'.");
|
|
666
|
+
}
|
|
667
|
+
let family;
|
|
668
|
+
if (algoInput) {
|
|
669
|
+
family = normalizeAlgorithm(algoInput);
|
|
670
|
+
}
|
|
671
|
+
else {
|
|
672
|
+
const resolved = resolveRule(ruleId);
|
|
673
|
+
family = resolved.meta?.algorithm ?? resolved.algorithm ?? "unknown";
|
|
674
|
+
}
|
|
675
|
+
// Fold families that share a fix onto the example we have.
|
|
676
|
+
const key = family === "ECIES" ? "RSA" : family;
|
|
677
|
+
const ex = FIX_EXAMPLES[key];
|
|
678
|
+
if (!ex) {
|
|
679
|
+
const rem = await safe("remediationFor", () => remediationFor(family));
|
|
680
|
+
return textResult(`No canned example for ${family}. ${rem.ok && rem.value
|
|
681
|
+
? rem.value.recommendation
|
|
682
|
+
: "Adopt NIST PQC (ML-KEM / ML-DSA), deployed as hybrids."}`);
|
|
683
|
+
}
|
|
684
|
+
const text = [
|
|
685
|
+
`Migration example — ${family}`,
|
|
686
|
+
ex.note,
|
|
687
|
+
"",
|
|
688
|
+
"BEFORE (classical):",
|
|
689
|
+
ex.before,
|
|
690
|
+
"",
|
|
691
|
+
"AFTER (post-quantum / hybrid):",
|
|
692
|
+
ex.after,
|
|
693
|
+
"",
|
|
694
|
+
"Deploy as a hybrid (classical + PQC) first; drop the classical half once the PQC side is proven.",
|
|
695
|
+
].join("\n");
|
|
696
|
+
return {
|
|
697
|
+
content: [
|
|
698
|
+
{ type: "text", text },
|
|
699
|
+
{ type: "text", text: JSON.stringify({ algorithm: family, ...ex }, null, 2) },
|
|
700
|
+
],
|
|
701
|
+
};
|
|
702
|
+
},
|
|
703
|
+
};
|
|
704
|
+
const verifyFixTool = {
|
|
705
|
+
name: "verify_fix",
|
|
706
|
+
description: "Run the quantakrypto detectors over a code snippet (NOT the filesystem) and " +
|
|
707
|
+
"report any classical crypto that remains. Use this to confirm an edit actually " +
|
|
708
|
+
"removed the quantum-vulnerable usage. Provide 'code' plus a 'language' or 'filename'.",
|
|
709
|
+
inputSchema: {
|
|
710
|
+
type: "object",
|
|
711
|
+
properties: {
|
|
712
|
+
code: { type: "string", description: "The source code to check." },
|
|
713
|
+
language: {
|
|
714
|
+
type: "string",
|
|
715
|
+
description: "Language of the code (js, ts, python, go, java, csharp, rust, ruby, c, …).",
|
|
716
|
+
},
|
|
717
|
+
filename: {
|
|
718
|
+
type: "string",
|
|
719
|
+
description: "Optional filename; its extension selects the detectors (overrides 'language').",
|
|
720
|
+
},
|
|
721
|
+
},
|
|
722
|
+
required: ["code"],
|
|
723
|
+
additionalProperties: false,
|
|
724
|
+
},
|
|
725
|
+
async handler(args) {
|
|
726
|
+
const code = typeof args.code === "string" ? args.code : "";
|
|
727
|
+
if (!code)
|
|
728
|
+
return errorResult("verify_fix requires a non-empty 'code' string.");
|
|
729
|
+
const filename = typeof args.filename === "string" ? args.filename.trim() : "";
|
|
730
|
+
const language = typeof args.language === "string" ? args.language.trim() : "";
|
|
731
|
+
if (!filename && !language) {
|
|
732
|
+
return errorResult("verify_fix requires a 'language' or a 'filename' to know which detectors to run.");
|
|
733
|
+
}
|
|
734
|
+
if (!filename && languageToExtension(language) === null) {
|
|
735
|
+
return errorResult(`verify_fix: unknown language "${language}". Supported: js/ts, python, go, java, kotlin, csharp, rust, ruby, c/c++ — or pass a 'filename'.`);
|
|
736
|
+
}
|
|
737
|
+
const res = await safe("verifyFix", () => verifyFix(code, { filename, language }));
|
|
738
|
+
if (!res.ok)
|
|
739
|
+
return res.result;
|
|
740
|
+
const { supported, findings } = res.value;
|
|
741
|
+
if (findings.length === 0) {
|
|
742
|
+
const caveat = supported
|
|
743
|
+
? "Fix verified: no classical asymmetric cryptography detected in this snippet."
|
|
744
|
+
: "No classical crypto detected — but this language is NOT one the scanner analyzes, so this is not a verification. Use a supported language.";
|
|
745
|
+
return textResult(caveat);
|
|
746
|
+
}
|
|
747
|
+
const lines = [`Still ${findings.length} classical finding(s) — fix NOT complete:`];
|
|
748
|
+
for (const f of findings) {
|
|
749
|
+
lines.push(`- [${f.severity}] ${f.ruleId} (line ${f.location.line})${f.hndl ? " (HNDL)" : ""} — ${f.message}`);
|
|
750
|
+
}
|
|
751
|
+
return {
|
|
752
|
+
content: [
|
|
753
|
+
{ type: "text", text: lines.join("\n") },
|
|
754
|
+
{ type: "text", text: JSON.stringify(findings, null, 2) },
|
|
755
|
+
],
|
|
756
|
+
};
|
|
757
|
+
},
|
|
758
|
+
};
|
|
759
|
+
const checkDependencyTool = {
|
|
760
|
+
name: "check_dependency",
|
|
761
|
+
description: "Check whether a package is in quantakrypto's known quantum-vulnerable dependency " +
|
|
762
|
+
"database (the classical crypto it exposes). Provide 'name' and optional 'ecosystem' (default npm).",
|
|
763
|
+
inputSchema: {
|
|
764
|
+
type: "object",
|
|
765
|
+
properties: {
|
|
766
|
+
name: {
|
|
767
|
+
type: "string",
|
|
768
|
+
description: "Package name to look up (e.g. 'node-forge', 'jsonwebtoken').",
|
|
769
|
+
},
|
|
770
|
+
ecosystem: { type: "string", description: "Package ecosystem. Default: npm." },
|
|
771
|
+
},
|
|
772
|
+
required: ["name"],
|
|
773
|
+
additionalProperties: false,
|
|
774
|
+
},
|
|
775
|
+
async handler(args) {
|
|
776
|
+
const name = typeof args.name === "string" ? args.name.trim().toLowerCase() : "";
|
|
777
|
+
if (!name)
|
|
778
|
+
return errorResult("check_dependency requires a non-empty 'name'.");
|
|
779
|
+
const ecosystem = typeof args.ecosystem === "string" ? args.ecosystem.trim().toLowerCase() : "npm";
|
|
780
|
+
const db = await safe("vulnerableDependencies", () => vulnerableDependencies);
|
|
781
|
+
if (!db.ok)
|
|
782
|
+
return db.result;
|
|
783
|
+
const hit = db.value.find((d) => d.name.toLowerCase() === name && d.ecosystem.toLowerCase() === ecosystem);
|
|
784
|
+
if (!hit) {
|
|
785
|
+
return textResult(`"${name}" (${ecosystem}) is NOT in the known quantum-vulnerable dependency database. ` +
|
|
786
|
+
"That is not proof it's safe — it may simply not be catalogued, or its crypto may be in your own code. Scan the source too.");
|
|
787
|
+
}
|
|
788
|
+
const rem = await safe("remediationFor", () => remediationFor(hit.algorithms[0] ?? "unknown"));
|
|
789
|
+
const text = [
|
|
790
|
+
`${hit.name} (${hit.ecosystem}) — quantum-vulnerable [${hit.severity}]`,
|
|
791
|
+
`Exposes: ${hit.algorithms.join(", ")}`,
|
|
792
|
+
`Why: ${hit.reason}`,
|
|
793
|
+
rem.ok && rem.value
|
|
794
|
+
? `Migrate toward: ${rem.value.recommendation}`
|
|
795
|
+
: "Migrate toward NIST PQC (ML-KEM / ML-DSA).",
|
|
796
|
+
].join("\n");
|
|
797
|
+
return {
|
|
798
|
+
content: [
|
|
799
|
+
{ type: "text", text },
|
|
800
|
+
{ type: "text", text: JSON.stringify(hit, null, 2) },
|
|
801
|
+
],
|
|
802
|
+
};
|
|
803
|
+
},
|
|
804
|
+
};
|
|
805
|
+
const scoreDeltaTool = {
|
|
806
|
+
name: "score_delta",
|
|
807
|
+
description: "Compute the readiness-score and HNDL change between two finding sets (e.g. before " +
|
|
808
|
+
"and after a migration). Pass 'before' and 'after' as arrays of findings from " +
|
|
809
|
+
"scan_path --format json.",
|
|
810
|
+
inputSchema: {
|
|
811
|
+
type: "object",
|
|
812
|
+
properties: {
|
|
813
|
+
before: {
|
|
814
|
+
type: "array",
|
|
815
|
+
description: "Findings before the change (from a scan's JSON findings).",
|
|
816
|
+
},
|
|
817
|
+
after: { type: "array", description: "Findings after the change." },
|
|
818
|
+
},
|
|
819
|
+
required: ["before", "after"],
|
|
820
|
+
additionalProperties: false,
|
|
821
|
+
},
|
|
822
|
+
async handler(args) {
|
|
823
|
+
if (!Array.isArray(args.before) || !Array.isArray(args.after)) {
|
|
824
|
+
return errorResult("score_delta requires 'before' and 'after' arrays of findings.");
|
|
825
|
+
}
|
|
826
|
+
const before = args.before;
|
|
827
|
+
const after = args.after;
|
|
828
|
+
const invBefore = await safe("buildInventory", () => buildInventory(before));
|
|
829
|
+
if (!invBefore.ok)
|
|
830
|
+
return invBefore.result;
|
|
831
|
+
const invAfter = await safe("buildInventory", () => buildInventory(after));
|
|
832
|
+
if (!invAfter.ok)
|
|
833
|
+
return invAfter.result;
|
|
834
|
+
const dScore = invAfter.value.readinessScore - invBefore.value.readinessScore;
|
|
835
|
+
const dHndl = invAfter.value.hndlCount - invBefore.value.hndlCount;
|
|
836
|
+
const dCount = after.length - before.length;
|
|
837
|
+
const sign = (n) => (n > 0 ? `+${n}` : `${n}`);
|
|
838
|
+
const text = [
|
|
839
|
+
"Readiness delta",
|
|
840
|
+
`Score: ${invBefore.value.readinessScore} → ${invAfter.value.readinessScore} (${sign(dScore)})`,
|
|
841
|
+
`Findings: ${before.length} → ${after.length} (${sign(dCount)})`,
|
|
842
|
+
`HNDL: ${invBefore.value.hndlCount} → ${invAfter.value.hndlCount} (${sign(dHndl)})`,
|
|
843
|
+
dScore > 0
|
|
844
|
+
? "Progress: readiness improved."
|
|
845
|
+
: dScore < 0
|
|
846
|
+
? "Regression: readiness dropped — new classical crypto was introduced."
|
|
847
|
+
: "No net change in readiness.",
|
|
848
|
+
].join("\n");
|
|
849
|
+
return {
|
|
850
|
+
content: [
|
|
851
|
+
{ type: "text", text },
|
|
852
|
+
{
|
|
853
|
+
type: "text",
|
|
854
|
+
text: JSON.stringify({
|
|
855
|
+
before: {
|
|
856
|
+
score: invBefore.value.readinessScore,
|
|
857
|
+
findings: before.length,
|
|
858
|
+
hndl: invBefore.value.hndlCount,
|
|
859
|
+
},
|
|
860
|
+
after: {
|
|
861
|
+
score: invAfter.value.readinessScore,
|
|
862
|
+
findings: after.length,
|
|
863
|
+
hndl: invAfter.value.hndlCount,
|
|
864
|
+
},
|
|
865
|
+
delta: { score: dScore, findings: dCount, hndl: dHndl },
|
|
866
|
+
}, null, 2),
|
|
867
|
+
},
|
|
868
|
+
],
|
|
869
|
+
};
|
|
870
|
+
},
|
|
871
|
+
};
|
|
872
|
+
const triageFindingsTool = {
|
|
873
|
+
name: "triage_findings",
|
|
874
|
+
description: "Produce a deterministic triage REQUEST bundle (rubric + verdict schema + " +
|
|
875
|
+
"per-finding metadata) for YOU (the host agent) to reason over. This tool does " +
|
|
876
|
+
"NOT call any model and needs no API key. Assess each finding's real-world " +
|
|
877
|
+
"exposure, then call apply_triage with your verdicts. Pass 'findings' as an " +
|
|
878
|
+
"array from scan_path --format json.",
|
|
879
|
+
inputSchema: {
|
|
880
|
+
type: "object",
|
|
881
|
+
properties: {
|
|
882
|
+
findings: { type: "array", description: "Findings from a scan's JSON output." },
|
|
883
|
+
},
|
|
884
|
+
required: ["findings"],
|
|
885
|
+
additionalProperties: false,
|
|
886
|
+
},
|
|
887
|
+
async handler(args) {
|
|
888
|
+
if (!Array.isArray(args.findings)) {
|
|
889
|
+
return errorResult("triage_findings requires a 'findings' array.");
|
|
890
|
+
}
|
|
891
|
+
const findings = args.findings;
|
|
892
|
+
const request = buildTriageRequest(findings, "metadata");
|
|
893
|
+
// Pair each context with the finding fingerprint the verdict must echo back.
|
|
894
|
+
const items = findings.map((f, i) => ({
|
|
895
|
+
fingerprint: fingerprintFinding(f),
|
|
896
|
+
context: request.contexts[i],
|
|
897
|
+
}));
|
|
898
|
+
const bundle = { rubric: request.rubric, schema: request.schema, items };
|
|
899
|
+
return {
|
|
900
|
+
content: [
|
|
901
|
+
{
|
|
902
|
+
type: "text",
|
|
903
|
+
text: "Triage request. For each item, decide {exposureScore 0-100, priority, rationale} " +
|
|
904
|
+
"per the rubric, then call apply_triage with the same 'findings' and a 'verdicts' " +
|
|
905
|
+
"array (each carrying the item's 'fingerprint'). You never suppress a finding.",
|
|
906
|
+
},
|
|
907
|
+
{ type: "text", text: JSON.stringify(bundle, null, 2) },
|
|
908
|
+
],
|
|
909
|
+
};
|
|
910
|
+
},
|
|
911
|
+
};
|
|
912
|
+
/** Validate one caller-supplied triage verdict. Returns null when malformed. */
|
|
913
|
+
function parseVerdict(v) {
|
|
914
|
+
if (typeof v !== "object" || v === null)
|
|
915
|
+
return null;
|
|
916
|
+
const o = v;
|
|
917
|
+
const fingerprint = o.fingerprint;
|
|
918
|
+
const exposureScore = o.exposureScore;
|
|
919
|
+
const priority = o.priority;
|
|
920
|
+
const rationale = o.rationale;
|
|
921
|
+
if (typeof fingerprint !== "string")
|
|
922
|
+
return null;
|
|
923
|
+
if (typeof exposureScore !== "number" || exposureScore < 0 || exposureScore > 100)
|
|
924
|
+
return null;
|
|
925
|
+
if (priority !== "now" && priority !== "soon" && priority !== "later")
|
|
926
|
+
return null;
|
|
927
|
+
if (typeof rationale !== "string")
|
|
928
|
+
return null;
|
|
929
|
+
return { fingerprint, exposureScore, priority, rationale };
|
|
930
|
+
}
|
|
931
|
+
const applyTriageTool = {
|
|
932
|
+
name: "apply_triage",
|
|
933
|
+
description: "Deterministically attach your triage verdicts to their findings and re-sort by " +
|
|
934
|
+
"exposure (highest first). Never suppresses. Pass the same 'findings' array you " +
|
|
935
|
+
"triaged plus a 'verdicts' array of { fingerprint, exposureScore, priority, rationale }.",
|
|
936
|
+
inputSchema: {
|
|
937
|
+
type: "object",
|
|
938
|
+
properties: {
|
|
939
|
+
findings: { type: "array", description: "The findings that were triaged." },
|
|
940
|
+
verdicts: { type: "array", description: "One verdict per finding, keyed by fingerprint." },
|
|
941
|
+
},
|
|
942
|
+
required: ["findings", "verdicts"],
|
|
943
|
+
additionalProperties: false,
|
|
944
|
+
},
|
|
945
|
+
async handler(args) {
|
|
946
|
+
if (!Array.isArray(args.findings) || !Array.isArray(args.verdicts)) {
|
|
947
|
+
return errorResult("apply_triage requires 'findings' and 'verdicts' arrays.");
|
|
948
|
+
}
|
|
949
|
+
const findings = args.findings;
|
|
950
|
+
const byFingerprint = new Map();
|
|
951
|
+
let skipped = 0;
|
|
952
|
+
for (const raw of args.verdicts) {
|
|
953
|
+
const v = parseVerdict(raw);
|
|
954
|
+
if (v)
|
|
955
|
+
byFingerprint.set(v.fingerprint, v);
|
|
956
|
+
else
|
|
957
|
+
skipped++;
|
|
958
|
+
}
|
|
959
|
+
const annotated = findings.map((f) => {
|
|
960
|
+
const v = byFingerprint.get(fingerprintFinding(f));
|
|
961
|
+
return v
|
|
962
|
+
? {
|
|
963
|
+
...f,
|
|
964
|
+
triage: {
|
|
965
|
+
exposureScore: v.exposureScore,
|
|
966
|
+
priority: v.priority,
|
|
967
|
+
rationale: v.rationale,
|
|
968
|
+
},
|
|
969
|
+
}
|
|
970
|
+
: f;
|
|
971
|
+
});
|
|
972
|
+
annotated.sort((a, b) => {
|
|
973
|
+
const ea = a.triage?.exposureScore ?? -1;
|
|
974
|
+
const eb = b.triage?.exposureScore ?? -1;
|
|
975
|
+
if (eb !== ea)
|
|
976
|
+
return eb - ea;
|
|
977
|
+
return compareFindings(a, b);
|
|
978
|
+
});
|
|
979
|
+
const applied = annotated.filter((f) => f.triage).length;
|
|
980
|
+
const head = `Triaged ${applied}/${findings.length} finding(s), re-sorted by exposure.` +
|
|
981
|
+
(skipped ? ` ${skipped} malformed verdict(s) ignored.` : "");
|
|
982
|
+
return {
|
|
983
|
+
content: [
|
|
984
|
+
{ type: "text", text: head },
|
|
985
|
+
{ type: "text", text: JSON.stringify(annotated, null, 2) },
|
|
986
|
+
],
|
|
987
|
+
};
|
|
988
|
+
},
|
|
989
|
+
};
|
|
990
|
+
const remediateFindingsTool = {
|
|
991
|
+
name: "remediate_findings",
|
|
992
|
+
description: "Produce a deterministic remediation REQUEST bundle (rubric + fix schema + " +
|
|
993
|
+
"per-finding metadata + fingerprints) for YOU (the host agent) to fix. This " +
|
|
994
|
+
"tool calls no model and needs no key. For each finding, propose the corrected " +
|
|
995
|
+
"FULL file content, then VERIFY with verify_fix and keep only fixes that clear " +
|
|
996
|
+
"the finding. Never touch files with secrets; never auto-merge. Pass 'findings' " +
|
|
997
|
+
"from scan_path --format json.",
|
|
998
|
+
inputSchema: {
|
|
999
|
+
type: "object",
|
|
1000
|
+
properties: {
|
|
1001
|
+
findings: { type: "array", description: "Findings from a scan's JSON output." },
|
|
1002
|
+
},
|
|
1003
|
+
required: ["findings"],
|
|
1004
|
+
additionalProperties: false,
|
|
1005
|
+
},
|
|
1006
|
+
async handler(args) {
|
|
1007
|
+
if (!Array.isArray(args.findings)) {
|
|
1008
|
+
return errorResult("remediate_findings requires a 'findings' array.");
|
|
1009
|
+
}
|
|
1010
|
+
const findings = args.findings;
|
|
1011
|
+
const request = buildRemediateRequest(findings, "metadata");
|
|
1012
|
+
const items = findings.map((f, i) => ({
|
|
1013
|
+
fingerprint: fingerprintFinding(f),
|
|
1014
|
+
context: request.contexts[i],
|
|
1015
|
+
}));
|
|
1016
|
+
const bundle = { instructions: request.instructions, schema: request.schema, items };
|
|
1017
|
+
return {
|
|
1018
|
+
content: [
|
|
1019
|
+
{
|
|
1020
|
+
type: "text",
|
|
1021
|
+
text: "Remediation request. For each item, propose {path, newContent, explanation} " +
|
|
1022
|
+
"(the FULL corrected file), call verify_fix on your newContent, and keep only " +
|
|
1023
|
+
"verified fixes. Skip any file containing secrets. This never merges anything.",
|
|
1024
|
+
},
|
|
1025
|
+
{ type: "text", text: JSON.stringify(bundle, null, 2) },
|
|
1026
|
+
],
|
|
1027
|
+
};
|
|
1028
|
+
},
|
|
1029
|
+
};
|
|
465
1030
|
/**
|
|
466
1031
|
* Tools that read arbitrary filesystem paths. Disabled by default on the HTTP
|
|
467
1032
|
* transport (see {@link ./http.ts}) because a hosted endpoint must not be an
|
|
468
1033
|
* arbitrary-file-read oracle (security audit Q-01). The stdio transport, which
|
|
469
1034
|
* trusts the local user, always exposes them.
|
|
470
1035
|
*/
|
|
471
|
-
export const FS_TOOL_NAMES = [
|
|
1036
|
+
export const FS_TOOL_NAMES = [
|
|
1037
|
+
"scan_path",
|
|
1038
|
+
"inventory_crypto",
|
|
1039
|
+
"generate_cbom",
|
|
1040
|
+
"plan_migration",
|
|
1041
|
+
];
|
|
472
1042
|
/** All quantakrypto MCP tools, in a stable order. */
|
|
473
1043
|
export const quantakryptoTools = [
|
|
474
1044
|
scanPathTool,
|
|
@@ -477,6 +1047,16 @@ export const quantakryptoTools = [
|
|
|
477
1047
|
suggestHybridTool,
|
|
478
1048
|
listRulesTool,
|
|
479
1049
|
generateCbomTool,
|
|
1050
|
+
// Copilot tools — migrate through the engine.
|
|
1051
|
+
planMigrationTool,
|
|
1052
|
+
getFixExamplesTool,
|
|
1053
|
+
verifyFixTool,
|
|
1054
|
+
checkDependencyTool,
|
|
1055
|
+
scoreDeltaTool,
|
|
1056
|
+
// BYOK triage + remediation — deterministic request/apply (host agent reasons; offline).
|
|
1057
|
+
triageFindingsTool,
|
|
1058
|
+
applyTriageTool,
|
|
1059
|
+
remediateFindingsTool,
|
|
480
1060
|
];
|
|
481
1061
|
/** The core version these tools are built against (re-exported for diagnostics). */
|
|
482
1062
|
export const CORE_VERSION = VERSION;
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quantakrypto/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "quantakrypto MCP — post-quantum readiness for AI coding agents via the Model Context Protocol. Zero runtime dependencies (stdio JSON-RPC implemented in-house).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Dandelion Labs <hello@dandelionlabs.io> (https://dandelionlabs.io)",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@quantakrypto/core": "0.
|
|
41
|
+
"@quantakrypto/core": "0.4.0"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
44
|
"build": "tsc -b",
|