MCP server for ztrade quantitative trading platform. Provides tools for strategy development, backtesting, K-line data management, and Python research execution.
The server exposes 3 task management tools with basic naming and descriptions, but suffers from significant gaps in schema definition, parameter documentation, and error handling. All three tools follow a simple verb_noun pattern (get_*, list_*) which is good, but descriptions lack depth about when to use each tool and what they return. Input schemas are present but parameters are minimally described, no enums, ranges, or constraints despite optional/required flags. Output schemas are not documented. The tools operate on async task state (backtest, download) but lack guidance on task lifecycle, result structure, or error recovery. No explicit tool annotations (readOnlyHint is present in metadata but not visible in formal schema). This is a below-average server with functional but incomplete definitions.
Get the final result of a completed async task (backtest or download). Returns the full result data if the task is completed, or current status if still running.
Get the current status and progress of an async task (backtest or download). Returns task status (pending/running/completed/failed), progress description and completion percentage.
List all async tasks. Optionally filter by type (backtest/download) and status (pending/running/completed/failed).
Output schemas completely undocumented. No visibility into what fields get_task_status, get_task_result, and list_tasks return. LLM cannot plan chained operations or validate data structure.
Enum constraints stated only in natural language descriptions, not formalized in JSON Schema. Parameter 'status' accepts 'pending|running|completed|failed' but no enum[] in schema, LLM will hallucinate invalid values.
Parameter descriptions are minimal (10-20 chars, below rubric baseline of 72). 'The task ID returned by an async backtest or download call' is repeated verbatim for all three tools; no context on format, length, or structure.
No pagination or result size limits documented for list_tasks. No indication of how many tasks are returned; if unbounded, this can blow context windows.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
No error handling or recovery guidance. Tool descriptions do not explain what to do if task_id is invalid, task does not exist, or task failed. No guidance for LLM on retries, alternatives, or self-correction.
Unclear tool composition and lifecycle guidance. get_task_status, get_task_result, and list_tasks have overlapping concerns, documentation does not explain when to call each or in what sequence.
Tool descriptions do not state state-mutating intent or idempotency. All three are READ_ONLY, but only metadata hints this, formal description should say 'This tool does not modify state' or include destructiveHint: false annotation.