{"serverId":"mcp-registry/link.cyberelf.whetstone/tools","tools":[{"name":"bank_health","fixed":{"name":"bank_health","description":"Item-lifecycle diagnostics over your grading history: discriminators, saturated and flaky items, frontier gaps. Full example: GET /api/examples key 'health'.","inputSchema":{"type":"object","required":["history"],"properties":{"items":{"type":"array","items":{"type":"object","required":["item_id"],"properties":{"domain":{"type":"string"},"item_id":{"type":"string","minLength":1}},"additionalProperties":true},"maxItems":5000,"minItems":0,"description":"Optional item definitions."},"history":{"type":"array","items":{"type":"object","required":["item_id","system","passed"],"properties":{"domain":{"type":"string"},"passed":{"type":"boolean"},"system":{"type":"string","minLength":1},"item_id":{"type":"string","minLength":1}},"additionalProperties":true},"maxItems":5000,"minItems":1,"description":"Observed item/system outcomes."}},"description":"Diagnose item lifecycle health from one or more grading-history rows.","additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":275,"tokensAfter":275},{"name":"counterexample_hunt","fixed":{"name":"counterexample_hunt","description":"Bounded simulated-annealing search for a graph counterexample inside a DSL predicate class, with an exact certificate when found. CPU-bounded and strictly rate-limited. Full example: GET /api/examples key 'counterexample'.","inputSchema":{"type":"object","required":["expression"],"properties":{"ns":{"type":"array","items":{"type":"integer","maximum":12,"minimum":4},"default":[8,9,10,11],"maxItems":5,"minItems":1,"description":"Graph sizes searched."},"seed":{"type":"integer","default":0},"steps":{"type":"integer","default":800,"maximum":1500,"minimum":50},"restarts":{"type":"integer","default":4,"maximum":6,"minimum":1},"expression":{"type":"string","maxLength":500,"minLength":1,"description":"Graph predicate in the Whetstone DSL, for example: is_connected and is_triangle_free and not is_bipartite"}},"description":"Run a bounded graph search against one Whetstone predicate expression.","additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":271,"tokensAfter":271},{"name":"open_bench_start","fixed":{"name":"open_bench_start","description":"TIER 2: start a one-shot Open Promotion Bench session. Returns six fresh virtual-repository scope-integrity tasks. Run a baseline and candidate independently on the same cohort, then submit both answer maps with open_bench_submit. This is an open, procedural, self-attested track rather than a private-bank credential.","inputSchema":{"type":"object","properties":{"challenge":{"type":"string","maxLength":128,"minLength":8,"description":"Caller nonce bound into the signed receipt for replay detection."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"open_bench_submit","fixed":{"name":"open_bench_submit","description":"TIER 2: grade paired baseline and candidate patches, count gains/regressions/ties, and issue PASS/HOLD/BLOCK. Set publish=true plus attestation=true to append only the safe manifests and sanitized receipt to the public board; tasks and answers are never persisted.","inputSchema":{"type":"object","required":["session_id","baseline_manifest","candidate_manifest","baseline_answers","candidate_answers"],"properties":{"publish":{"type":"boolean"},"session_id":{"type":"string"},"attestation":{"type":"boolean"},"baseline_answers":{"type":"object"},"baseline_manifest":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"model":{"type":"string"},"harness":{"type":"string"},"version":{"type":"string"}},"additionalProperties":false},"candidate_answers":{"type":"object"},"candidate_manifest":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"model":{"type":"string"},"harness":{"type":"string"},"version":{"type":"string"}},"additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":300,"tokensAfter":300},{"name":"report_card_start","fixed":{"name":"report_card_start","description":"TIER 1: start a disposable report-card session. Returns exam items (graph-repair prompts minted from the repository's public frontier) for THIS agent to answer. Answer every item, then call report_card_submit exactly once. Sessions are one-shot, expire in 15 minutes, and are strictly rate-limited. This demonstrates the promotion-gate mechanism on disposable items; it is not a private-bank credential.","inputSchema":{"type":"object","properties":{"challenge":{"type":"string","maxLength":128,"minLength":8,"description":"Caller nonce bound into the signed receipt for replay detection."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":185,"tokensAfter":185},{"name":"report_card_submit","fixed":{"name":"report_card_submit","description":"TIER 1: submit answers for a report-card session and receive the graded report (per-item verdicts, per-domain totals, SHA-256 commitments). Grading is by checker spec: verified strict refinements are reported separately, and promotion grade requires at least 5% clean-support retention. No answer key exists. The session is destroyed by this call.","inputSchema":{"type":"object","required":["session_id","answers"],"properties":{"answers":{"type":"object","description":"item_id -> answer (a DSL predicate, or the JSON reply the prompt asked for)","additionalProperties":{"type":"string"}},"session_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"safe_patch","fixed":{"name":"safe_patch","description":"Apply a section-scoped Markdown patch under conservation checks (untouched sections stay byte-identical; protected tokens preserved). Full example: GET /api/examples key 'safepatch'.","inputSchema":{"type":"object","required":["document","operations"],"properties":{"reason":{"type":"string"},"document":{"type":"string","maxLength":200000,"minLength":1,"description":"Complete Markdown document to patch."},"operations":{"type":"array","items":{"type":"object","required":["target_heading","find","replace"],"properties":{"find":{"type":"string","minLength":1},"replace":{"type":"string"},"target_heading":{"type":"string","minLength":1,"description":"Markdown heading text without the leading # characters."},"allow_token_changes":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Protected literal tokens that this operation may intentionally change."}},"additionalProperties":false},"maxItems":50,"minItems":1}},"description":"Apply deterministic, section-scoped Markdown replacements under conservation checks.","additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":307,"tokensAfter":307}],"toolsChanged":7,"tokensSaved":0,"todo":[{"tool":"audit_leakage","params":["fingerprint_max_n","similarity_threshold","enable_text_similarity","enable_behavioral_fingerprint"]},{"tool":"counterexample_hunt","params":["seed","steps","restarts"]},{"tool":"inspect_promotion","params":["baseline_name","candidate_name","fingerprint_max_n","similarity_threshold","enable_text_similarity","enable_behavioral_fingerprint"]},{"tool":"memory_relevance","params":["objective","current_step","token_budget","question_kind"]},{"tool":"open_bench_submit","params":["publish","session_id","attestation","baseline_answers","baseline_manifest","candidate_answers","candidate_manifest"]},{"tool":"promotion_gate","params":["baseline_name","candidate_name"]},{"tool":"report_card_submit","params":["session_id"]},{"tool":"safe_patch","params":["reason","operations"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}