An MCP server that exposes RustChain tools for Claude Code and other MCP clients
The server defines 8 tools with explicit registrations in server.py, all with schemas and descriptions. However, multiple critical issues significantly limit quality: (1) Tool names lack action verbs, 'rustchain_health', 'rustchain_epoch', 'rustchain_miners', 'rustchain_bounties', 'bottube_stats' are all noun-heavy and do not start with verbs like 'get_', 'list_', or 'check_'. This violates the core naming pattern and forces LLMs to infer intent rather than reading it from the name. (2) Descriptions are extremely short (23-78 chars), well below the 50-200 char guideline for LLM-optimized descriptions. Example: 'Check RustChain node health status, version, uptime, and database status' (71 chars) lacks context on WHEN to call this vs other tools, what the output structure is, or prerequisites. (3) Parameters are minimally described. 'wallet_id' has a description but lacks format guidance (is 'RTC...' a hard constraint? What's the character range?). 'to_address' and 'query' lack any format or validation hints. (4) No output schemas are documented. Callers do not know what fields to expect from rustchain_health, rustchain_epoch, or the search results. (5) Error handling is generic ('Error: {str(e)}') with no guidance to the LLM on retry strategy, root cause, or recovery. (6) The rustchain_transfer tool explicitly admits it cannot function via MCP ('requires wallet signing'), this is a design flaw that should be either removed or redesigned with proper signing ceremony. (7) No pagination documented for list tools (rustchain_miners, rustchain_bounties), if these return large result sets, context blowup is unmanaged. (8) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present, forcing LLMs to infer which calls are safe to retry. The server is functional but immature for production use.
Search videos on BoTTube by query
Get BoTTube platform statistics (agents, videos, total watch time)
Get RTC balance for a RustChain wallet address
Get information about open and closed RustChain bounties
Get current RustChain epoch, slot, enrolled miners, and reward pot
Check RustChain node health status, version, uptime, and database status
Get list of active miners on RustChain
Tool names do not start with action verbs. Most names (rustchain_health, rustchain_epoch, rustchain_miners, rustchain_bounties, bottube_stats) are noun-heavy and lack the verb_noun pattern (get_, list_, check_) that LLMs rely on to infer intent from the name alone before reading descriptions.
Descriptions are too short (23 - 78 chars, baseline 50 - 200 chars for LLM-optimized). Example: 'Check RustChain node health status, version, uptime, and database status' lacks context on WHEN to use this tool vs similar tools, what output structure to expect, and any prerequisites or dependencies.
No output schemas documented for any tool. Callers do not know what fields, types, or structure to expect from responses. This forces LLMs to guess and makes chaining impossible when downstream tools need IDs returned by upstream tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Transfer RTC tokens (requires wallet signing via SDK)
rustchain_transfer tool explicitly states it cannot function via MCP ('requires wallet signing'). The tool accepts parameters but returns a guidance message rather than executing. This is a design flaw, either remove the tool, redesign it to handle signing within the MCP server, or offer a different interface (e.g., generate_unsigned_transfer + confirm_transfer).
Parameters lack format constraints and validation hints. Examples: 'wallet_id' description says '(RTC...)' but does not specify character length, allowed characters, or validation regex. 'to_address' and 'query' have minimal guidance. Without explicit constraints, LLMs hallucinate invalid values.
Error handling is generic ('Error: {str(e)}') with no actionable recovery guidance. When a tool fails, the LLM has no guidance on whether to retry, ask the user, or abandon the operation. No error categorization (retryable vs fatal) is present.
No pagination or result limits documented. Tools like rustchain_miners and rustchain_bounties may return large unbounded result sets. If results exceed context window, LLMs are blocked. No limit parameter or cursor-based pagination is visible.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present. Without annotations, LLMs cannot infer which calls are safe to retry, which are destructive, or which have side effects. The rustchain_transfer tool should be marked destructiveHint=true, but it is not.