MCP server for BOTCOIN proof-of-inference mining on Base. Drop-in for any MCP client (Hermes Agent, Claude Desktop, Cursor).
13 tools with generally clear naming (verb_noun pattern: botcoin_status, botcoin_request_challenge, botcoin_submit_artifact) and reasonable descriptions (avg ~120 chars). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are NOT documented, responses are inferred from code but not formally declared in tool definitions. Error handling is present (CoordinatorError, SignerError caught and returned as JSON) but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, IRREVERSIBLE). Parameter descriptions are adequate but some lack format/constraint details (e.g., 'client_nonce' max 64 chars stated in description but not in schema). Missing pagination for list-like operations.
Schedule a Hermes cron job that runs `hermes-botcoin-mine` every cycle. Idempotent: returns the existing job's id if one is already scheduled. Cost ceiling enforced via `BOTCOIN_MAX_ATTEMPTS_PER_DAY` (default 100). Only available when invoked from inside the Hermes runtime.
Stop the BOTCOIN autonomous miner cron job (no-op if not scheduled).
Explicitly bind an ERC-8004 agentId to the configured miner address. Walks /v1/agent/bind/nonce → personal_sign → /v1/agent/bind/verify.
Claim BOTCOIN rewards for one or more finalized epochs.
Broadcast the coordinator-signed transactions to Base. - ``transaction`` (required): the mining receipt — broadcast synchronously. - ``vouch_transaction`` (optional): the ERC-8004 ReputationRegistry calldata returned alongside the receipt on a successful submit. Broadcast fire-and-forget so it never blocks the next mining round.
Output schemas not documented. Tool definitions declare input schemas but responses are inferred from code (e.g., botcoin_status returns snap.to_dict(), botcoin_scorecard returns EIP-712 signed data). LLMs cannot plan downstream tool calls or extract fields without knowing response structure.
No tool annotations despite explicit risk levels. Tools marked IRREVERSIBLE (botcoin_post_receipt, botcoin_claim_rewards, botcoin_stake) and WRITE (botcoin_submit_artifact, botcoin_unstake) lack destructiveHint/idempotentHint annotations. Agents cannot distinguish safe-to-retry from irreversible operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Request a fresh BOTCOIN mining challenge. YOU are the solver — return the artifact + trace via botcoin_submit_artifact.
Fetch the EIP-712 signed mining scorecard for an address (defaults to configured miner).
Diagnose whether this client is fully configured for mining.
Stake BOTCOIN on V3. Tier 1 minimum: 5,000,000 whole BOTCOIN. Approve + stake in two txs.
Snapshot of the BOTCOIN mining state (cached 60s).
Submit a solved artifact + reasoning trace for verification. ``submitted_answers`` is preferred as a flat object keyed by question id — for example ``{"q01": "EntityName", "q05": "247"}``. A list is also accepted and mapped to ``q01``/``q02``/... by 1-indexed position for backwards compatibility with array-style callers.
Begin unstaking (24h cooldown). Pass cancel=True to revert a pending unstake.
Withdraw previously-unstaked BOTCOIN after the 24h cooldown.
Error responses lack recovery guidance. _err() returns structured JSON (status, route, error_code, retryable, retry_after_seconds) but descriptions do not guide LLM on next steps. E.g., 'signer: SignerNotConfigured' tells agent nothing about how to resolve.
Parameter constraints not formalized in schema. 'client_nonce' description states 'max 64 chars' but schema has no maxLength. 'epoch_ids' is array but no minItems/maxItems. Constraints in text are not machine-parseable.
No confirmation/dry-run for irreversible operations. botcoin_post_receipt broadcasts transactions to Base (irreversible); botcoin_claim_rewards claims rewards; botcoin_stake locks funds. No confirmation step or dry-run mode to prevent agent mistakes.