JianDaoYun MCP Server
Loads environment variables from a .env file for configuration, particularly for storing API keys for JianDaoYun authentication.
Provides examples in JavaScript syntax for interacting with the JianDaoYun API through the MCP server.
Built on Node.js runtime, supporting direct execution of the server using Node.js commands.
Distributed through npm, supporting installation and execution via npm commands and npx.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JianDaoYun MCP Serversubmit a new customer feedback entry with name John Doe, rating 5, and comment 'Excellent service!'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JianDaoYun MCP Server
一个用于简道云表单数据管理的 MCP (Model Context Protocol) 服务,支持完整的CRUD操作和高级查询功能。
功能特性
🔍 表单字段查询: 获取表单的字段定义,包括字段类型、必填状态等
📝 智能数据提交: 自动匹配字段类型并转换数据格式
🔄 批量操作支持: 支持单条或批量提交/删除(最多100条)
🎯 字段智能匹配: 支持通过字段key、字段名称等多种方式匹配
🔐 安全认证: 使用Bearer Token认证机制
📊 高级查询: 支持数据筛选器、分页查询
📁 文件上传: 获取文件上传凭证
Related MCP server: MCP Feishu Project Manager
安装
cd jiandaoyun-mcp-server
npm install
npm run build配置
在使用前,只需要设置简道云的API Key作为环境变量:
export JIANDAOYUN_APP_KEY="your_app_key"
export JIANDAOYUN_BASE_URL="https://api.jiandaoyun.com/api" # 可选或者在 .env 文件中设置:
JIANDAOYUN_APP_KEY=your_app_key
JIANDAOYUN_BASE_URL=https://api.jiandaoyun.com/api注意: 从v2.0开始,APP_ID不再作为环境变量配置,而是在每次调用MCP工具时作为参数传入。这样可以让一个MCP服务器实例支持多个简道云应用,用户可以动态指定要操作的应用。
MCP 工具说明
1. get_form_fields
获取表单的字段定义信息。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)
返回: 表单字段列表,包含字段key、名称、类型等信息
2. submit_form_data
提交数据到表单,支持自动字段类型匹配。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)data(object|array): 要提交的数据(单个对象或数组)autoMatch(boolean): 是否自动匹配字段类型(默认: true)transactionId(string): 可选的事务ID,用于幂等提交
返回: 提交结果
3. get_form_data
获取表单中的特定数据记录。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)dataId(string): 数据记录ID
返回: 数据记录详情
4. query_form_data
查询多条数据,支持筛选和分页。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)dataId(string): 可选,用于分页的最后一条数据IDfields(array): 可选,要返回的字段列表(widget IDs)filter(object): 可选,数据筛选条件limit(number): 可选,返回记录数(1-100,默认10)
筛选器示例:
{
"rel": "and",
"cond": [
{
"field": "_widget_1508400000001",
"type": "text",
"method": "eq",
"value": "张三"
},
{
"field": "_widget_1508400000002",
"type": "number",
"method": "range",
"value": [20, 30]
}
]
}5. update_form_data
更新已有数据记录。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)dataId(string): 要更新的数据IDdata(object): 更新的数据内容transactionId(string): 可选的事务IDisStartTrigger(boolean): 是否触发自动化流程
返回: 更新结果
6. delete_form_data
删除一条或多条数据记录。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)dataIds(string|array): 要删除的数据ID(单个字符串或数组)isStartTrigger(boolean): 是否触发自动化流程
返回: 删除结果
7. get_upload_token
获取文件上传凭证。
参数:
appId(string): 简道云应用IDappKey(string): 简道云API密钥formId(string): 表单ID(支持应用ID或完整表单ID)transactionId(string): 事务ID,上传的文件将绑定到此事务
返回: 文件上传凭证和上传地址(最多100个)
8. list_apps_and_forms
列出所有可访问的应用,或获取指定应用下的表单列表
参数:
appKey(string): 简道云API密钥appId(string): 可选,如果提供则返回该应用下的表单列表
返回: 应用列表或表单列表
字段类型支持
支持的字段类型及自动转换规则:
文本 (text): 自动转换为字符串
数字 (number): 自动解析为数字
日期/日期时间 (date/datetime): 支持多种日期格式,自动转换为ISO格式
单选/多选 (select/multi_select): 自动处理数组格式
复选框 (checkbox): 自动转换为布尔值
用户/部门 (user/dept): 支持单个或多个ID
文件/图片 (file/image): 支持URL或文件对象格式
地理位置 (location): 支持对象或字符串格式
地址 (address): 支持省市区详细地址格式
手机号 (phone): 支持对象格式 {phone: "15812345678"}
子表单 (subform): 递归处理子表单数据
流水号 (sn): 只读字段,自动生成
使用示例
在 Claude Desktop 中配置
方法一:使用 npx(推荐)
在 claude_desktop_config.json 中添加:
{
"mcpServers": {
"jiandaoyun": {
"command": "npx",
"args": ["jiandaoyun-mcp-server"],
"env": {
"JIANDAOYUN_APP_KEY": "your_app_key"
}
}
}
}方法二:使用本地安装
# 全局安装
npm install -g jiandaoyun-mcp-server
# 或本地安装
npm install jiandaoyun-mcp-server配置文件:
{
"mcpServers": {
"jiandaoyun": {
"command": "jiandaoyun-mcp",
"env": {
"JIANDAOYUN_APP_KEY": "your_app_key"
}
}
}
}方法三:使用 Node.js 直接运行
{
"mcpServers": {
"jiandaoyun": {
"command": "node",
"args": ["/path/to/jiandaoyun-mcp-server/build/index.js"],
"env": {
"JIANDAOYUN_APP_KEY": "your_app_key"
}
}
}
}配置说明:
将
your_app_key替换为你的简道云API密钥从v2.0开始,
APP_ID作为工具参数传入,无需在环境变量中配置推荐使用npx方式,无需手动安装和维护本地文件
获取表单字段
// 获取表单字段定义
const fields = await get_form_fields({
appId: "your_app_id",
appKey: "your_app_key",
formId: "your_form_id"
});提交数据
// 提交单条数据
const result = await submit_form_data({
appId: "your_app_id",
appKey: "your_app_key",
formId: "your_form_id",
data: {
"姓名": "张三",
"年龄": 25,
"邮箱": "zhangsan@example.com"
}
});
// 批量提交数据
const batchResult = await submit_form_data({
appId: "your_app_id",
appKey: "your_app_key",
formId: "your_form_id",
data: [
{ "姓名": "张三", "年龄": 25 },
{ "姓名": "李四", "年龄": 30 }
]
});查询数据
// 查询所有数据
const allData = await query_form_data({
appId: "your_app_id",
appKey: "your_app_key",
formId: "your_form_id"
});
// 带条件查询
const filteredData = await query_form_data({
appId: "your_app_id",
appKey: "your_app_key",
formId: "your_form_id",
filter: {
rel: "and",
cond: [
{
field: "age_field_id",
method: "gte",
value: 18
}
]
},
limit: 10
});列出应用和表单
// 列出所有应用
const apps = await list_apps_and_forms({
appKey: "your_app_key"
});
// 获取特定应用下的表单列表
const forms = await list_apps_and_forms({
appKey: "your_app_key",
appId: "your_app_id"
});数据提交示例
// 单条数据提交(使用字段别名)
{
"formId": "5f3e4d2c1b0a9",
"data": {
"姓名": "张三",
"年龄": 25,
"入职日期": "2024-01-15",
"部门": ["dept_001"],
"技能": ["JavaScript", "Python"],
"手机号": { "phone": "15812345678" },
"地址": {
"province": "江苏省",
"city": "无锡市",
"district": "滨湖区",
"detail": "太湖大道1000号"
},
"简历": { "url": "https://example.com/resume.pdf" }
}
}
// 使用widget ID提交(推荐)
{
"formId": "5f3e4d2c1b0a9",
"data": {
"_widget_1432728651402": "张三",
"_widget_1432728651403": 25,
"_widget_1432728651407": "2024-01-15T00:00:00.000Z",
"_widget_1432728651413": {
"province": "江苏省",
"city": "无锡市",
"district": "滨湖区",
"detail": "太湖大道1000号",
"lnglatXY": [120.31237, 31.49099]
}
}
}
// 批量数据提交
{
"formId": "5f3e4d2c1b0a9",
"data": [
{ "姓名": "张三", "年龄": 25 },
{ "姓名": "李四", "年龄": 30 }
]
}
// 数据查询示例
{
"formId": "5f3e4d2c1b0a9",
"filter": {
"rel": "and",
"cond": [
{
"field": "_widget_1508400000001",
"type": "text",
"method": "eq",
"value": "张三"
},
{
"field": "createTime",
"method": "range",
"value": ["2024-01-01", null]
}
]
},
"limit": 50
}开发
# 开发模式
npm run dev
# 构建
npm run build
# 启动服务
npm start错误处理
服务会自动处理以下情况:
API认证失败
网络错误
字段不匹配警告
数据格式转换错误
许可证
MIT
Available Tools
8 toolsdelete_form_dataC
Delete one or more form data entries
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| formId | Yes | The form ID (can be form ID or app ID) | |
| dataIds | Yes | Data ID(s) to delete | |
| isStartTrigger | No | Whether to trigger automation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the destructive action ('Delete') but lacks critical details: authentication requirements (appId/appKey), whether deletions are permanent/reversible, rate limits, error handling, or what happens with 'isStartTrigger'. This is inadequate for a mutation tool with 5 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It front-loads the core action and resource, making it immediately understandable. No extraneous information or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It lacks authentication context, behavioral traits (permanence, side-effects), error handling, and output expectations. Sibling tools suggest a rich form-data ecosystem, but the description doesn't situate this tool within it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional meaning beyond implying 'dataIds' can be singular or plural. It doesn't explain parameter interactions, dependencies, or provide examples. Baseline 3 is appropriate given schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('form data entries'), and specifies scope ('one or more'). It distinguishes from siblings like 'get_form_data', 'update_form_data', and 'submit_form_data' by indicating a destructive operation. However, it doesn't explicitly mention the JianDaoYun platform context, which is implied by the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing existing form data), exclusions, or comparisons to siblings like 'update_form_data' or 'query_form_data'. Usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_dataC
Get a specific data entry from a JianDaoYun form
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| formId | Yes | The form ID (can be form ID or app ID) | |
| dataId | Yes | The data entry ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action without disclosing behavioral traits. It doesn't mention whether this is a read-only operation (implied by 'Get'), error conditions (e.g., invalid IDs), authentication needs (though parameters hint at API keys), or response format. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of interacting with a form system, no annotations, and no output schema, the description is incomplete. It doesn't explain what a 'data entry' entails, the return format, or error handling, leaving the agent with insufficient context for reliable use despite the clear schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter semantics beyond what the schema provides, as schema description coverage is 100% with clear documentation for all parameters. The baseline score of 3 reflects adequate coverage from the schema alone, with the description not compensating but also not detracting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'a specific data entry from a JianDaoYun form', making the purpose understandable. It distinguishes from siblings like 'query_form_data' (which likely retrieves multiple entries) by specifying 'a specific data entry', but could be more explicit about how it differs from 'get_form_fields' (which retrieves form structure rather than data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'query_form_data' (for multiple entries) or 'get_form_fields' (for form structure). It lacks context about prerequisites (e.g., needing form and data IDs) or exclusions, leaving the agent to infer usage from the name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_form_fieldsC
Get field definitions for a JianDaoYun form
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (can be provided via JIANDAOYUN_APP_KEY environment variable) | |
| formId | Yes | The form ID to query fields for (can be form ID or app ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves field definitions, implying a read-only operation, but doesn't cover aspects like authentication requirements (though hinted in the schema), rate limits, error handling, or return format. This leaves significant gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that efficiently conveys the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'field definitions' entail (e.g., structure, data types), how results are returned, or any behavioral traits like pagination or errors. For a tool with no structured output information, this leaves the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with all parameters clearly documented in the input schema. The description adds no additional meaning beyond what the schema provides, such as explaining relationships between parameters or usage nuances. This meets the baseline score of 3 when the schema handles parameter documentation effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get field definitions') and target resource ('for a JianDaoYun form'), which is specific and unambiguous. However, it doesn't explicitly differentiate this tool from sibling tools like 'get_form_data' or 'query_form_data', which might also retrieve form-related information but with different scopes or purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as 'get_form_data' or 'query_form_data'. There's no mention of prerequisites, context, or exclusions, leaving the agent to infer usage based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upload_tokenC
Get file upload tokens for file/image fields
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| formId | Yes | The form ID (can be form ID or app ID) | |
| transactionId | Yes | Transaction ID to bind uploads to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but lacks behavioral details. It doesn't disclose whether this is a read-only operation (implied by 'Get'), authentication requirements (though hinted in schema), rate limits, or what the tokens are used for (e.g., temporary upload permissions). The description is too vague for a mutation-sensitive context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what the upload tokens are, how they're used, or what the output looks like (e.g., token strings, URLs). For a tool that likely returns critical data for subsequent operations, this leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema itself. The description adds no additional meaning beyond implying tokens are for 'file/image fields', which doesn't clarify parameter usage. This meets the baseline for high schema coverage but doesn't enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('file upload tokens for file/image fields'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings (like get_form_data or get_form_fields), which all involve retrieving information but for different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an appId or transactionId), use cases (e.g., preparing for file uploads in forms), or exclusions (e.g., not for other field types). This leaves the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_apps_and_formsC
List all available applications and their forms that the current API key can access
| Name | Required | Description | Default |
|---|---|---|---|
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| appId | No | Optional: specific app ID to get forms for. If not provided, lists all apps. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists accessible items but does not cover key aspects like pagination, rate limits, error handling, or response format. This leaves significant gaps in understanding how the tool behaves operationally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that efficiently conveys the core action. It is front-loaded and wastes no words, though it could be slightly more structured by explicitly mentioning optional parameters or output details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (listing resources with optional filtering), no annotations, and no output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavior, output, or integration with siblings, making it incomplete for full contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so parameters are well-documented there. The description adds no additional meaning beyond implying filtering by appId, which is already covered in the schema. Thus, it meets the baseline for high schema coverage without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resources 'applications and their forms', making the purpose evident. However, it does not explicitly differentiate from sibling tools like 'get_form_fields' or 'query_form_data', which might also involve listing forms or data, so it lacks sibling distinction for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_form_fields' or 'query_form_data'. It mentions access based on the API key but does not specify scenarios, prerequisites, or exclusions, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_form_dataC
Query multiple form data entries with filtering support
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| formId | Yes | The form ID (can be form ID or app ID) | |
| dataId | No | Last data ID for pagination | |
| fields | No | Fields to return (widget IDs) | |
| filter | No | Data filter conditions | |
| limit | No | Number of records to return (1-100, default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'query' and 'filtering support' but doesn't specify whether this is a read-only operation, what permissions are required, how pagination works (beyond the 'dataId' parameter), or error handling. For a tool with 7 parameters and no annotations, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose ('query multiple form data entries') and adds a useful qualifier ('with filtering support'). Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, nested objects, no output schema, and no annotations), the description is inadequate. It doesn't explain the return format, error conditions, authentication requirements (implied by appId/appKey but not stated), or how filtering interacts with pagination. For a query tool with rich input schema but no output schema, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond implying filtering capabilities, which are already detailed in the schema's 'filter' property. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('query multiple form data entries') and resource ('form data'), making the purpose understandable. It distinguishes itself from siblings like 'get_form_data' by specifying 'multiple entries with filtering support', though it doesn't explicitly contrast with all alternatives like 'list_apps_and_forms'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_form_data' (for single entries) or 'list_apps_and_forms' (for metadata). It mentions filtering support but doesn't specify scenarios where filtering is needed or when other tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_form_dataC
Submit data to a JianDaoYun form with automatic field type matching
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| formId | Yes | The form ID to submit data to (can be form ID or app ID) | |
| data | Yes | The data to submit (single object or array for batch) | |
| autoMatch | No | Whether to automatically match field types (default: true) | |
| transactionId | No | Optional transaction ID for idempotent submissions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only mentions automatic field type matching. It fails to disclose critical behavioral aspects such as authentication requirements (implied by appKey but not explained), whether submissions are idempotent (hinted by transactionId but not clarified), error handling, rate limits, or what happens on success/failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose without unnecessary details. Every word contributes to understanding the tool's function, making it appropriately concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no annotations, and no output schema, the description is inadequate. It lacks information on authentication, idempotency, error handling, return values, and how it differs from sibling tools, leaving significant gaps for an AI agent to understand and use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds minimal value beyond the schema by mentioning 'automatic field type matching,' which loosely relates to the 'autoMatch' parameter but doesn't elaborate on its implications or how it affects data submission.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('submit data') and target resource ('JianDaoYun form'), with the specific capability of 'automatic field type matching' distinguishing it from basic submission. However, it doesn't explicitly differentiate from sibling tools like 'update_form_data' or 'delete_form_data' in terms of when to use each.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_form_data' for modifications or 'query_form_data' for retrieval. It mentions automatic field matching but doesn't specify scenarios where this is beneficial or when manual handling might be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_form_dataC
Update an existing form data entry
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The JianDaoYun application ID | |
| appKey | No | The JianDaoYun application key (API key) (optional, will use JIANDAOYUN_APP_KEY from environment if not provided) | |
| formId | Yes | The form ID (can be form ID or app ID) | |
| dataId | Yes | The data entry ID to update | |
| data | Yes | The data to update | |
| transactionId | No | Optional transaction ID | |
| isStartTrigger | No | Whether to trigger automation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an update operation (implying mutation) but doesn't mention permissions required, whether changes are reversible, rate limits, error handling, or what happens to existing data not included in the update. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 7 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after the update, what the response looks like, error conditions, or how this differs from similar tools. The agent would need to guess about important behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description adds no additional parameter information beyond what's already in the schema (e.g., it doesn't explain the relationship between appId and formId, or what format 'data' should be in). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('an existing form data entry'), making the purpose understandable. However, it doesn't differentiate this tool from its sibling 'submit_form_data' which might also involve form data modification, leaving some ambiguity about when to use one versus the other.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'submit_form_data' or 'delete_form_data'. It mentions no prerequisites, constraints, or typical use cases, leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- First observed
delete_form_data - First observed
get_form_data - First observed
get_form_fields - First observed
get_upload_token - First observed
list_apps_and_forms - First observed
query_form_data - First observed
submit_form_data - First observed
update_form_data
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose targeting specific operations in the JianDaoYun form data lifecycle. The tools cover different aspects like retrieval (get_form_data, query_form_data), submission (submit_form_data), modification (update_form_data), deletion (delete_form_data), metadata access (get_form_fields, list_apps_and_forms), and file handling (get_upload_token) with no overlap in functionality.
All tools follow a consistent verb_noun naming pattern with clear action prefixes (get_, list_, query_, submit_, update_, delete_) and descriptive nouns. The naming is uniformly snake_case throughout the entire toolset, making them predictable and easy to understand.
With 8 tools, this server is well-scoped for managing JianDaoYun form data operations. Each tool serves a distinct and necessary function, covering the full CRUD lifecycle along with metadata and file handling, without being overly sparse or bloated.
The toolset provides complete coverage for form data management, including create (submit_form_data), read (get_form_data, query_form_data), update (update_form_data), delete (delete_form_data), and metadata access (get_form_fields, list_apps_and_forms). The inclusion of get_upload_token for file handling ensures no obvious gaps in the domain's workflows.
Maintenance
Related MCP Connectors
Hosted MCP server for AI-driven data ops. Create apps, manage schemas, and CRUD structured data.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Model Context Protocol server for Studex tools, notifications, and profile integrations
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that allows creation and management of multiple Fireproof JSON databases with CRUD operations, querying capabilities, and cloud synchronization for sharing databases with others.99MIT
- AlicenseBqualityFmaintenanceA Model Context Protocol server that enables AI assistants to interact with Feishu project management systems, allowing retrieval of project views and work items.612MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides LLMs with read and write access to Feishu Base (飞书多维表格) databases, enabling them to inspect schemas and manipulate records through natural language.339-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides seamless integration with Mingdao platform APIs, enabling AI applications to perform operations like worksheet management, record manipulation, and role management through natural language.12MIT