MCP Server for processing large datasets record by record
This server has 8 tools with explicit schemas and descriptions visible in src/index.ts. Naming follows verb_noun convention (load_dataset, get_next_record, save_result, export_results, get_status, reset_to_start, jump_to_record) which is strong. However, descriptions are uniformly brief (20-80 chars), lacking depth about when to use each tool, prerequisites, or consequences. Parameters are typed but lack constraint details (ranges, examples, format guidance). Output schemas are NOT documented, the code returns text responses but never shows what fields agents should expect for structured planning. Error handling is minimal, there is a try/catch in CallToolRequestSchema but no recovery guidance, categorization of error types, or actionable error messages. No pagination support despite tools handling datasets. The server is stateful (maintains current record in DatasetProcessor) but the MCP spec now requires stateless handling per request. Overall, this reads as a working prototype but lacks the depth and rigor of production-grade agent tooling.
Export all processing results to a file
Get the next record from the dataset for processing
Get current processing status and progress
Jump to a specific record number in the dataset
Load a dataset file for processing (supports JSON Lines format)
Load a JSON dataset using a jq expression that returns an array of records
Reset the iterator to the beginning of the dataset
Descriptions are uniformly brief (20-80 chars) and lack context about when to use each tool, prerequisites, or state-modifying consequences. Pattern:tool-description requires 10-1024 chars with explicit WHAT/WHEN/WHY guidance.
Output schemas are not documented anywhere in the code. Agents cannot see what fields to expect from tool results. Pattern:tool requires documented return types so LLMs can plan downstream calls and extract relevant data.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Save the processing result for the current record
Error handling is minimal. The code catches exceptions but does not return actionable error messages. Pattern:recovery-guide requires errors to tell the LLM what to do next (e.g., 'File not found. Check the file_path parameter.'). Raw exceptions give agents nothing to act on.
Parameter constraints are missing. 'file_path' has no format or length guidance. 'jq_expression' has no examples of valid syntax. 'record_number' has no min/max bounds. Pattern:constrained-input requires enums or range specifications to prevent invalid LLM input.
Server maintains stateful iterator in DatasetProcessor (current record index). MCP spec (2026-07-28) requires stateless request handling. Each request should be self-contained; state should not leak between calls. This violates pattern:stateless-request.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Current spec (2026-07-28) supports tool annotations. This server marks tools as READ_ONLY or WRITE in the evaluation metadata but does not emit them in the tool definition. Agents cannot infer safety without these hints.
No pagination support. Tools that process datasets (load_dataset, export_results) should support limit and offset/cursor parameters. Pattern:paginated-result requires pagination to prevent context window overflow.
No confirmation step for destructive operations. 'export_results' and 'save_result' modify state but do not offer a dry-run or confirmation pattern. Pattern:confirmation-request recommends confirmation for irreversible operations.
Parameter descriptions are generic or missing examples. 'jq_expression' shows examples ('e.g., .data[], .items, .[].records') in the description text, which pattern:constrained-input discourages, examples should be in enums or pattern constraints, not narrative text. LLMs latch onto example values and reuse them literally.