MCP server for RentAHuman (workman.rent) — let an AI agent hire an identity-verified person for a short real-world task. Non-custodial payment, no escrow.
Strong foundation with well-structured schemas, clear descriptions, and thoughtful safety constraints. All 5 tools have explicit Zod schemas with type definitions and parameter descriptions. Tool names follow verb_noun convention (search_tasks, create_task, etc.). Descriptions are detailed and explain WHAT, WHEN, and WHY. However, output schemas are documented only in descriptions (not as formal JSON Schema), and error handling lacks structured recovery guidance. Tool annotations present (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) demonstrate spec awareness. Rate limiting and audit logging show production maturity. Main gaps: no formal output schema definitions, limited error recovery hints, and STDIO transport caps protocol readiness.
MOCK: simulates an executor accepting the task. Dispatch to a real person is gated; until that gate opens a synthetic executor is used. Moves the task open -> assigned. Returns: { assignment_id, task_id, status, synthetic_executor }
The agent confirms completion, which produces a SIMULATED non-custodial split instruction (executor + platform fee). There is NO real transaction yet (testnet/gate). The task moves to done. Returns: { task_id, status, payment_id, split: { network, amount_usdc, executor_usdc, fee_usdc, simulated:true } }
Create a task for a human to perform. A stated PURPOSE is REQUIRED — anonymous or unmotivated tasks are rejected. Moderation is MANDATORY (the purpose is moderated too): banned or unsafe tasks are refused with 422 and never published. The precise point stays private until the task is accepted. Returns: { id, status, coarse_h3, moderation } Error: "Task rejected by moderation: ..." when the task is refused.
Current task status (coarse zone only, never precise coordinates). Read-only. Returns: { id, title, status, coarse_h3, budget_usdc }
Find open tasks near a point. Returns ONLY a coarse zone (coarse_h3, about 5 km) and a distance — precise coordinates are never exposed before a task is accepted (privacy). Read-only. Returns: { count, tasks: [{ id, title, description, coarse_h3, budget_usdc, status, kind, distance_m }] }
Output schemas documented only in descriptions, not as formal JSON Schema. LLMs cannot parse unstructured text to infer response structure for downstream tool chaining.
Error handling returns generic fail() messages without structured recovery guidance. 'Task rejected by moderation' lacks actionable next steps (e.g., 'Revise purpose field and retry').
STDIO-only transport. Not remotely accessible; cannot be used by hosted MCP clients or cloud-based agents. Limits deployment to local/containerized environments.
assign_task and confirm_task descriptions note 'MOCK' and 'SIMULATED' but lack clarity on when real execution gates open. Agents may misunderstand production readiness.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
No batch variants for multi-task operations. Agents iterating over multiple tasks must call search_tasks → create_task → assign_task → confirm_task sequentially, wasting tokens and latency.