Model Context Protocol server for RaportAgent — generate sourced market & compliance research from any MCP client (Claude Desktop, Claude Code, Cursor).
RaportAgent MCP demonstrates solid tool design with complete schemas, clear descriptions, and proper error handling. All 8 tools have explicit Zod schemas with type definitions and parameter descriptions. Tool names follow verb_noun convention (generate_report, get_report, cancel_report). Descriptions are substantive (100-250 chars), explaining WHAT the tool does and WHEN to use it. Error responses use jsonBlock/errBlock pattern with HTTP status codes. However, some descriptions could be more LLM-optimized (e.g., generate_report description is 280 chars, slightly verbose). Output schemas are implicit (JSON responses) rather than explicitly documented. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Parameter descriptions are good but could include more constraint details (e.g., report_id format 'rep_…' mentioned in description but not validated).
Cancel a report that is still queued or in progress and refund its credit. Fails if the report has already completed or failed (nothing to cancel at that point).
Start a RaportAgent market/compliance research report. Typically takes ~15 min, occasionally longer under load (hard timeout: 45 min), so this returns a report_id immediately (status: queued) unless you set wait_seconds. Use get_report_status to poll, then get_report to fetch the finished markdown. Costs 1 credit (2 credits for the 'battlecard' template).
Show your RaportAgent account: remaining credits and plan.
Fetch a completed report's full markdown content and section list.
Get a report's audit trail / provenance: AI models, agents, source counts, and a SHA-256 of the exact content. Useful for compliance review and verifying a report has not been altered.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk classifications. Tools marked READ_ONLY, WRITE, REVERSIBLE in metadata but not exposed to LLM via schema annotations.
Output schemas are implicit (JSON responses returned via jsonBlock) rather than explicitly documented in tool definitions. LLMs cannot predict response structure without seeing schema.
generate_report description (280 chars) exceeds LLM-optimized range (50-200 chars). Verbose explanation of polling behavior and credit costs dilutes key intent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 78 | 2026-07-28+ | v2 |
List every source cited in a report with link-health counts (working / uncertain / dead) and how many are actually cited inline. Use this to decide whether a report is trustworthy enough to act on, or whether to regenerate it.
Check whether a report is queued, in_progress, completed, failed, or cancelled.
List your recent reports (most recent first).
get_account description is minimal (70 chars) and lacks context on when to call it. Should explain it's useful for checking credit balance before expensive operations.
Error handling returns HTTP status codes but lacks recovery guidance. 'RaportAgent API error (401): ...' tells LLM nothing about next steps (retry? check API key? ask user?).