{"name":"io.github.quantakrypto/pqc-tools","slug":"quantakrypto-pqc-tools","title":"quantakrypto pqc-tools","description":"Scan code for quantum-vulnerable cryptography and get NIST post-quantum migration guidance.","url":"https://mcp.market/server/quantakrypto-pqc-tools","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"security","tags":["security"],"presence":{"score":38,"stars":12,"forks":0,"downloads_week":24,"last_push_at":"2026-09-22T18:48:13.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":25,"ok":25,"last_checked_at":"2026-09-25T16:11:05.133Z","last_ok_at":"2026-09-25T16:11:05.133Z","latency_ms":619},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/quantakrypto/pqc-tools","website":null,"version":"0.5.2","remotes":[{"type":"streamable-http","url":"https://mcp.quantakrypto.com/mcp"}],"packages":[{"registryType":"npm","identifier":"@quantakrypto/mcp","version":"0.5.2","transport":{"type":"stdio"}}],"tools":[{"name":"apply_triage","description":"Deterministically attach your triage verdicts to their findings and re-sort by exposure (highest first). Never suppresses. Pass the same 'findings' array you triaged plus a 'verdicts' array of { fingerprint, exposureScore, priority, rationale }.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"findings":{"type":"array","items":{"type":"object","description":"A single finding from `scan_path --format json`.","properties":{"ruleId":{"type":"string","description":"Stable rule id, e.g. \"rsa-keygen\"."},"title":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string","description":"critical | high | medium | low | info."},"confidence":{"type":"string"},"algorithm":{"type":"string","description":"Classical algorithm family, when applicable."},"hndl":{"type":"boolean","description":"Exposed to harvest-now-decrypt-later."},"message":{"type":"string"},"remediation":{"type":"string"},"cwe":{"type":"string","description":"e.g. \"CWE-327\"."},"location":{"type":"object","description":"Where the finding is.","properties":{"file":{"type":"string"},"line":{"type":"number"}},"required":["file"]}},"required":["ruleId","location"]},"description":"The findings that were triaged."},"verdicts":{"type":"array","items":{"type":"object","description":"A triage verdict for one finding.","properties":{"fingerprint":{"type":"string","description":"Fingerprint of the finding this verdict applies to."},"exposureScore":{"type":"number","description":"Real-world exposure (higher = more exposed)."},"priority":{"type":"string","enum":["now","soon","later"]},"rationale":{"type":"string","description":"Why this exposure score / priority."}},"required":["fingerprint","exposureScore","priority","rationale"]},"description":"One verdict per finding, keyed by fingerprint."}},"required":["findings","verdicts"],"additionalProperties":false}},{"name":"apply_verified_patch","description":"Deterministically VERIFY a proposed fix before writing it — runs the same patch-policy + verify_fix + blast-radius gates as `qremediate` (offline, no key, no network). Give the finding, the file's current content, and your proposed FULL corrected content; returns approved:true only if the patch is in-policy, clears the finding, adds no new finding, introduces no network/exec sink, and is bounded in size. This does NOT write the file — you write it, only when approved, and never auto-merge.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"finding":{"type":"object","description":"The scan finding being fixed (needs a string ruleId and location.file)."},"originalContent":{"type":"string","description":"The file's current full content."},"newContent":{"type":"string","description":"Your proposed full corrected file content."}},"required":["finding","originalContent","newContent"],"additionalProperties":false}},{"name":"check_dependency","description":"Check whether a package is in quantakrypto's known quantum-vulnerable dependency database (the classical crypto it exposes). Provide 'name' and optional 'ecosystem' (default npm).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Package name to look up (e.g. 'node-forge', 'jsonwebtoken')."},"ecosystem":{"type":"string","description":"Package ecosystem. Default: npm."}},"required":["name"],"additionalProperties":false}},{"name":"explain_finding","description":"Explain a quantakrypto finding and its post-quantum remediation. Provide a ruleId (e.g. 'forge-rsa-keygen', 'elliptic-ec', 'node-rsa', 'pem-ec-private-key') and/or an algorithm (e.g. 'RSA', 'ECDSA'). The ruleId is resolved against the core detector set, so library and config rules explain correctly.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ruleId":{"type":"string","description":"The finding's rule id, matching a detector id prefix."},"algorithm":{"type":"string","description":"The classical algorithm family involved (e.g. RSA, ECDH, ECDSA)."}},"additionalProperties":false}},{"name":"get_fix_examples","description":"Return before/after code examples for migrating a classical algorithm to a post-quantum / hybrid replacement. Provide an 'algorithm' (RSA, ECDH, ECDSA, …) or a 'ruleId' from a finding.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"algorithm":{"type":"string","description":"Classical algorithm family to migrate away from."},"ruleId":{"type":"string","description":"A finding's ruleId (resolved to its algorithm)."}},"additionalProperties":false}},{"name":"list_rules","description":"List the quantakrypto detector catalog: every detector id and what it looks for.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"remediate_findings","description":"Produce a deterministic remediation REQUEST bundle (rubric + fix schema + per-finding metadata + fingerprints) for YOU (the host agent) to fix. This tool calls no model and needs no key. For each finding, propose the corrected FULL file content, then VERIFY with verify_fix and keep only fixes that clear the finding. Never touch files with secrets; never auto-merge. Pass 'findings' from scan_path --format json.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"findings":{"type":"array","items":{"type":"object","description":"A single finding from `scan_path --format json`.","properties":{"ruleId":{"type":"string","description":"Stable rule id, e.g. \"rsa-keygen\"."},"title":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string","description":"critical | high | medium | low | info."},"confidence":{"type":"string"},"algorithm":{"type":"string","description":"Classical algorithm family, when applicable."},"hndl":{"type":"boolean","description":"Exposed to harvest-now-decrypt-later."},"message":{"type":"string"},"remediation":{"type":"string"},"cwe":{"type":"string","description":"e.g. \"CWE-327\"."},"location":{"type":"object","description":"Where the finding is.","properties":{"file":{"type":"string"},"line":{"type":"number"}},"required":["file"]}},"required":["ruleId","location"]},"description":"Findings from a scan's JSON output."}},"required":["findings"],"additionalProperties":false}},{"name":"score_delta","description":"Compute the readiness-score and HNDL change between two finding sets (e.g. before and after a migration). Pass 'before' and 'after' as arrays of findings from scan_path --format json.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","description":"A single finding from `scan_path --format json`.","properties":{"ruleId":{"type":"string","description":"Stable rule id, e.g. \"rsa-keygen\"."},"title":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string","description":"critical | high | medium | low | info."},"confidence":{"type":"string"},"algorithm":{"type":"string","description":"Classical algorithm family, when applicable."},"hndl":{"type":"boolean","description":"Exposed to harvest-now-decrypt-later."},"message":{"type":"string"},"remediation":{"type":"string"},"cwe":{"type":"string","description":"e.g. \"CWE-327\"."},"location":{"type":"object","description":"Where the finding is.","properties":{"file":{"type":"string"},"line":{"type":"number"}},"required":["file"]}},"required":["ruleId","location"]},"description":"Findings before the change (from a scan's JSON findings)."},"after":{"type":"array","items":{"type":"object","description":"A single finding from `scan_path --format json`.","properties":{"ruleId":{"type":"string","description":"Stable rule id, e.g. \"rsa-keygen\"."},"title":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string","description":"critical | high | medium | low | info."},"confidence":{"type":"string"},"algorithm":{"type":"string","description":"Classical algorithm family, when applicable."},"hndl":{"type":"boolean","description":"Exposed to harvest-now-decrypt-later."},"message":{"type":"string"},"remediation":{"type":"string"},"cwe":{"type":"string","description":"e.g. \"CWE-327\"."},"location":{"type":"object","description":"Where the finding is.","properties":{"file":{"type":"string"},"line":{"type":"number"}},"required":["file"]}},"required":["ruleId","location"]},"description":"Findings after the change."}},"required":["before","after"],"additionalProperties":false}},{"name":"suggest_hybrid","description":"Recommend a post-quantum / hybrid migration. Provide an 'algorithm' (e.g. RSA, ECDH, ECDSA) or free-text 'context' describing the usage. Set 'tier' to 'category-5' for CNSA 2.0 / national-security systems.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"algorithm":{"type":"string","description":"Classical algorithm family to migrate away from."},"context":{"type":"string","description":"Free-text description of the cryptographic usage (used when no algorithm is given)."},"tier":{"type":"string","enum":["category-3","category-5"],"description":"Security tier: 'category-3' (default, commercial — ML-KEM-768 / ML-DSA-65) or 'category-5' (CNSA 2.0 / NSS, long-lived secrets — ML-KEM-1024 / ML-DSA-87)."}},"additionalProperties":false}},{"name":"triage_findings","description":"Produce a deterministic triage REQUEST bundle (rubric + verdict schema + per-finding metadata) for YOU (the host agent) to reason over. This tool does NOT call any model and needs no API key. Assess each finding's real-world exposure, then call apply_triage with your verdicts. Pass 'findings' as an array from scan_path --format json.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"findings":{"type":"array","items":{"type":"object","description":"A single finding from `scan_path --format json`.","properties":{"ruleId":{"type":"string","description":"Stable rule id, e.g. \"rsa-keygen\"."},"title":{"type":"string"},"category":{"type":"string"},"severity":{"type":"string","description":"critical | high | medium | low | info."},"confidence":{"type":"string"},"algorithm":{"type":"string","description":"Classical algorithm family, when applicable."},"hndl":{"type":"boolean","description":"Exposed to harvest-now-decrypt-later."},"message":{"type":"string"},"remediation":{"type":"string"},"cwe":{"type":"string","description":"e.g. \"CWE-327\"."},"location":{"type":"object","description":"Where the finding is.","properties":{"file":{"type":"string"},"line":{"type":"number"}},"required":["file"]}},"required":["ruleId","location"]},"description":"Findings from a scan's JSON output."}},"required":["findings"],"additionalProperties":false}},{"name":"verify_fix","description":"Run the quantakrypto detectors over a code snippet (NOT the filesystem) and report any classical crypto that remains. Use this to confirm an edit actually removed the quantum-vulnerable usage. Provide 'code' plus a 'language' or 'filename'.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"code":{"type":"string","description":"The source code to check."},"language":{"type":"string","description":"Language of the code (js, ts, python, go, java, csharp, rust, ruby, c, …)."},"filename":{"type":"string","description":"Optional filename; its extension selects the detectors (overrides 'language')."}},"required":["code"],"additionalProperties":false}}],"scan":{"score":82,"grade":"B","scanned_at":"2026-09-25T12:09:37.934Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-25T12:09:37.740Z","components":{"code":{"score":25,"max":25,"notes":["19 source files scanned"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2329ms"]},"poisoning":{"score":15,"max":15,"notes":["11 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 2 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 3 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://mcp.quantakrypto.com/mcp","reachable":true,"authRequired":false,"latencyMs":2329,"serverInfo":{"name":"quantakrypto","version":"0.5.0"}}],"packages":[{"registryType":"npm","identifier":"@quantakrypto/mcp","version":"0.5.2","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-07-23T03:34:07.172Z","repositoryUrl":"git+https://github.com/quantakrypto/pqc-tools.git","weeklyDownloads":24}],"repo":{"found":true,"owner":"quantakrypto","repo":"pqc-tools","archived":false,"pushedAt":"2026-09-22T18:48:13Z","stars":12,"forks":0,"openIssues":11,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/295786989?v=4","ownerCreatedAt":"2026-06-22T08:34:25Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/295786989?v=4&s=128","source":"github"},"presence":{"stars":12,"forks":0,"downloadsWeek":24,"license":"Apache-2.0","lastPushAt":"2026-09-22T18:48:13.000Z","score":38}}}},"grade_history":[],"reviews":[]}