Distributed compute MCP server — pool idle LAN machines into a compute cluster for AI agents
Hive-MCP has well-structured tool definitions with consistent naming (verb_noun pattern) and comprehensive descriptions (avg 180 chars). All 12 tools have input schemas with typed parameters and descriptions. However, output schemas are not formally documented, responses are inferred from code. Error handling is minimal (generic error dicts with no recovery guidance). No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Parameter descriptions lack format constraints (e.g., priority ranges stated in prose, not enums). No batch operation variants despite agents calling submit_task in loops.
Cancel a pending or running task. Returns the task status after cancellation.
Close a batch after all tasks have been submitted. Call this once you've submitted all tasks to the batch. A closed batch rejects new task submissions. You can still pull tasks and report results for a closed batch. Returns the final batch status with task counts.
Create a new batch for grouping related tasks. Each batch represents a unit of work managed by one subagent. Workers prioritize tasks from higher-priority (lower number) batches. Priority: 1 (highest) to 10 (lowest). Returns batch_id, name, priority, and status.
Get results for all completed and failed tasks in a batch. Returns a list of task results (same format as get_task_result) along with batch summary counts.
Get the status of a batch including task counts. Returns total, completed, failed, and pending task counts. Status is ACTIVE until close_batch() is called.
Output schemas not formally documented. Tool descriptions state what is returned (e.g., 'Returns batch_id, name, priority, and status') but no JSON Schema or structured type definitions are visible. LLMs cannot reliably extract fields or plan downstream calls.
Error handling lacks recovery guidance. Tools return generic {'error': 'message'} dicts with no actionable next steps. E.g., close_batch returns {'error': 'Batch not found'} instead of 'Batch not found. Try get_batch_status() to verify the batch_id.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get an overview of the entire hive cluster. Returns worker count, total cores, and task counts by status.
Retrieve the result of a completed task. Returns return_value, stdout, stderr, and duration for completed tasks. Returns error and stderr for failed tasks.
Check the current status of a submitted task. Returns task_id, status, worker name, and timing info.
List all workers currently connected to the hive. Returns name, cores, memory, active tasks, CPU%, and status for each worker.
Pull a queued task back for local execution. If task_id is provided, pulls that specific task (must be QUEUED). If batch_id is provided, pulls the next queued task from that batch. If neither is provided, pulls the highest-priority queued task. Returns the task code and args so the caller can execute locally. Use report_local_result() when done.
Report the result of a locally-executed pulled task. Call this after executing a task retrieved via pull_task().
Submit a compute task to the hive cluster. For task_type="python": code is Python source code to execute. For task_type="shell": code is a shell command string. Priority: 1 (highest) to 10 (lowest). input_files: list of absolute file paths on this machine to send to the worker. collect_files: list of glob patterns for output files to retrieve from the worker. batch_id: optional batch to associate this task with (from create_batch). Returns task_id, status, and queued_at timestamp.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes without parsing descriptions. submit_task, close_batch, cancel_task, and report_local_result are destructive but unmarked.
Priority and timeout parameters use prose constraints ('Priority: 1 (highest) to 10 (lowest)', 'timeout in seconds') instead of JSON Schema enums, min/max, or pattern. LLMs may pass invalid values (priority=15, timeout=-1) without validation.
No batch submission variant. Agents submitting 100 tasks must call submit_task 100 times, wasting tokens and latency. A submit_batch_tasks(tasks: list) variant would enable efficient multi-task submission.