Machine-facing documentation
This service is built to be used by agents.
Everything on the human workbench is callable programmatically: eight stateless verifier tools over MCP or REST, plus a disposable report card where the exam grades you. No account, no key, no cookies, nothing stored.
Connect
MCP — preferred
Stateless Streamable HTTP. One JSON-RPC 2.0 message per POST; responses are
single JSON bodies (no SSE stream, no session header, no batching).
# endpoint
POST https://whetstone.cyberelf.link/mcp
# Claude Code
claude mcp add --transport http whetstone https://whetstone.cyberelf.link/mcp
# claude.ai
Settings → Connectors → Add custom connector → https://whetstone.cyberelf.link/mcp
# raw handshake
curl -s https://whetstone.cyberelf.link/mcp -H 'Content-Type: application/json' -d '{
"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-06-18","capabilities":{},
"clientInfo":{"name":"you","version":"0"}}}'
REST — equivalent
Every Tier 0 tool is also POST /api/<name> with the same JSON body.
Before composing a request, fetch GET /api/examples — it returns one
complete, valid payload per tool. GET /api/catalog lists endpoints;
GET /api/health reports version and report-card readiness.
Install as a skill
An Anthropic-format skill file documenting all of this lives at
/skill.md. Save it into your skills directory
(e.g. .claude/skills/whetstone-tools/SKILL.md) and your agent knows the
whole surface. /llms.txt is the condensed index.
Tier 0 — stateless verifier tools
You bring the data; the service returns a deterministic receipt with SHA-256 hashes. Use disposable or sanitized inputs — this is a public demo surface.
| MCP tool | REST | Does |
|---|---|---|
inspect_promotion | /api/inspect | Quarantine declared exposure, pair baseline vs candidate on the clean remainder, issue a promotion receipt. |
audit_leakage | /api/leakage | Exact exposure audit: row identity, behavioral fingerprints for graph-DSL rows, similarity flags, clean-exam export. |
promotion_gate | /api/gate | PASS / HOLD / BLOCK from paired item results: gains, regressions, exact McNemar p-value, per-domain breakdown. |
bank_health | /api/health-report | Item lifecycle: discriminators, saturated items, flaky items, frontier gaps. |
safe_patch | /api/safepatch | Section-scoped Markdown patch under conservation checks; untouched sections stay byte-identical. |
counterexample_hunt | /api/counterexample | Bounded annealing search for a graph counterexample in a DSL predicate class; exact certificate when found. |
memory_relevance | /api/memory | Query-free salience vs objective-conditioned relevance for memories under a token budget. |
replay_trace | /api/replay | Reasoning-emulator events → checkpoints, rewinds, notes, timeline. |
about_whetstone | /api/catalog | Orientation: catalog, tiers, links. |
Tier 1 — the report card (the exam grades you)
Live demonstration of the promotion-gate mechanism. Items are minted from the repository’s public frontier, so a session is a demonstration, not a credential — and no private bank is involved anywhere.
report_card_start(no arguments) →session_id+ 6 items. Sessions are one-shot and expire in 15 minutes.- Each prompt asks you to repair a rejected graph conjecture: reply
{"repair_expression": "<DSL predicate>"}. report_card_submitwith{"session_id": …, "answers": {"<item_id>": "<reply>"}}→ graded report. Unanswered items fail. The session is destroyed by this call.
The DSL
features: n, m, density, max_degree, min_degree, is_connected, is_complete,
is_forest, is_tree, is_bipartite, is_triangle_free, max_degree_le_2,
has_universal_vertex, has_isolated_vertex, is_regular, num_components,
clique_number, girth
syntax: and, or, not, (<= < >= > == !=), integer/float literals, parentheses
example: (is_bipartite and has_isolated_vertex) and (max_degree_le_2)
The checker spec — no answer key exists
Your expression passes iff it parses; matches at least one graph at n ≤ 6; every matching graph satisfies the claim (exhaustively verified); it is a strict refinement of the item’s original predicate; and it survives a stress pool of structured and random graphs at n ∈ {7, 8}.
Passing items report support_retention — your match count over the
original’s claim-satisfying match count. Retention below 5% is flagged
degenerate_narrowing: a trivially narrow refinement passes the checker, and the
report says exactly that. The gate does not flatter anyone, including its own operators.
Limits
- Budgets are shared across REST and MCP: ~60 requests/min general; 4 report-card sessions and 8 submits per hour per address; counterexample hunts 4 per 10 minutes behind a single global worker.
- After a restart the report card warms up (~2 min):
report_card_startanswers “warming up” andGET /api/healthshowsreport_card.ready. Retry in a minute. - Grading holds a single CPU slot; if it is busy your session is spent by design — start a fresh one.