MCP server for reading, writing, and querying Jiandaoyun form data. Provides 9 tools for application discovery, form management, and data CRUD operations.
The server demonstrates solid fundamentals with 9 well-structured tools accessing a form/database API. All tools have descriptions (Chinese, reasonably detailed) and explicit input schemas with type definitions. Tool names follow verb_noun convention (list_, get_, query_, create_, update_, delete_). However, there are notable gaps: (1) Output schemas are NOT documented, no clear definition of what each tool returns, forcing LLMs to infer structure; (2) Parameter descriptions are minimal (5 - 20 chars on average) and lack context about valid ranges, formats, or dependencies; (3) Error handling is present but generic ('请求失败: {e}'); (4) Tool composition issues: query_records accepts both 'filters' and 'filter' params with undocumented precedence rules, creating potential confusion; (5) Destructive operations (delete_record) have no confirmation pattern or dry-run equivalent; (6) No documentation of API rate limits or batch size constraints (create_records_batch claims 'max 100' but no validation visible). The tools are functional and well-intentioned, but lack the rigor expected of production agent tools.
在表单中新建一条记录。 data 字段格式示例: - 文本字段: {"_widget_1234": {"value": "文本内容"}} - 数字字段: {"_widget_1234": {"value": 123}} - 日期字段: {"_widget_1234": {"value": "2024-01-01"}}
批量新建多条记录(最多 100 条)。
删除表单中的单条记录(不可恢复,请谨慎操作)。
获取表单的字段结构,包括字段名称、类型、label 等信息。 在读写数据之前,建议先调用此接口了解字段结构。
按 data_id 查询表单中的单条记录。
列出当前 API Key 可访问的所有简道云应用。
No output/return schemas documented. LLMs cannot predict response structure, forcing them to infer field names and types. This breaks tool chaining, e.g., list_forms returns form objects but no schema specifies what fields (entry_id, name, type) are included.
Parameter descriptions are too brief (5 - 20 chars average, well below 72-char baseline). 'limit: 每页返回数量,默认 100' lacks guidance on valid range, behavior at boundary, or relationship to 'skip'. 'data: 记录数据, key 为字段 name' is vague about nested structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 62 | - | v1 |
列出指定应用下的所有表单(entry)。
查询表单中的多条记录,支持字段筛选和分页。 筛选方式(二选一): - filters: 简单 key-value 字典,自动转为"等于"条件 - filter: 原生 filter 结构,支持复杂条件(lt/gt/like/range 等) 当 filter 和 filters 同时传入时,filter 优先。
修改表单中的单条记录。只需传入需要修改的字段,不传的字段保持不变。
Undocumented parameter dependency: query_records accepts both 'filters' (simple dict) and 'filter' (complex structure) with note 'filter takes priority if both present.' This is only stated in the description, not in schema constraints. LLMs cannot enforce mutual exclusivity or understand why two params exist.
Destructive operation (delete_record) has no confirmation step, dry-run, or soft-delete alternative. Agents can delete records without warning. No error message guides recovery (e.g., 'Deletion is irreversible; no undo available').
Error messages are generic and unhelpful. 'Error: 请求失败: {e}' or standard JiandaoyunError catch does not classify errors as retryable, user-fixable, or fatal. No suggestions for recovery (e.g., 'API quota exceeded, retry after 60 seconds').
create_records_batch claims '最多 100 条' but no input validation visible. If LLM passes 150 items, server likely fails silently or partially. No per-item success/failure reporting, if 1 record fails in a batch of 100, the entire response is an error.
No pagination guidance. query_records defaults to limit=100 but offers no offset/cursor mechanism visible in schema. 'data_id' parameter suggests cursor-based pagination, but this is not clearly documented.
Tool composition assumes discovery workflow (list_apps → list_forms → get_form_fields) but does not guarantee all fields are present in responses. If list_forms omits entry_id, subsequent get_form_fields calls fail.