jiandaoyun-mcp

jiandaoyun-mcp

MCP server that wraps Jiandaoyun (简道云) form operations, providing 9 tools for app discovery, form exploration, and data CRUD via SSE transport.

Category
访问服务器

README

简道云 MCP 服务

基于 FastMCP 3.x,通过 SSE 协议将简道云表单操作封装为 9 个 MCP Tools,供 Claude Code 或其他 MCP 客户端调用。

特性

  • API Key 一次配置,处处生效 — 在客户端连接时通过 Authorization header 传入,后续调用自动携带,无需每次传参
  • 9 个 Tools — 覆盖应用发现 → 表单探索 → 数据读写全流程
  • Docker 一键部署 — 开箱即用,易于自托管
  • HTTPS 支持 — 提供 Nginx 反向代理配置示例

目录结构

jiandaoyun-mcp/
├── server.py              # MCP 主服务(含 ApiKeyMiddleware)
├── client.py              # 简道云 HTTP 客户端封装
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── nginx/
│   └── jiandaoyun-mcp.conf    # Nginx 反向代理示例配置
└── README.md

快速开始

前置条件

  • Docker(推荐)或 Python 3.12+
  • 简道云账号及 API Key(在简道云后台「设置」→「API 管理」获取)

1. 克隆仓库

git clone https://github.com/your-username/jiandaoyun-mcp.git
cd jiandaoyun-mcp

2. 启动服务

方式一:Docker(推荐)

docker compose up -d --build

服务默认绑定在 127.0.0.1:8765,仅本机可访问。

方式二:直接运行(Python 3.12+)

pip install -r requirements.txt
python server.py

3. 验证服务

curl -i http://localhost:8765/sse
# 期望响应:HTTP/1.1 200 OK,Content-Type: text/event-stream

4. 配置 MCP 客户端

Claude Code CLI:

claude mcp add --transport sse jiandaoyun http://localhost:8765/sse \
  --header "Authorization: Bearer <your_api_key>"

手动编辑 ~/.claude.json

{
  "mcpServers": {
    "jiandaoyun": {
      "type": "sse",
      "url": "http://localhost:8765/sse",
      "headers": {
        "Authorization": "Bearer <your_api_key>"
      }
    }
  }
}

配置完成后重启 Claude Code 即可使用。


远程部署(公网 / 局域网)

如需将服务部署在远程服务器供多端共用,推荐用 Nginx

开放端口绑定(跳过 Nginx 时)

docker-compose.yml 中的端口绑定改为监听所有网卡:

ports:
  - "0.0.0.0:8765:8765"

然后客户端使用 http://<server-ip>:8765/sse 连接(明文,仅内网推荐)。

配置 Nginx HTTPS(推荐用于公网)

  1. nginx/jiandaoyun-mcp.conf 复制到 /etc/nginx/conf.d/

  2. 按注释修改以下三项:

    占位符 说明
    your.domain.com 你的域名
    /path/to/your/cert.crt SSL 证书路径
    /path/to/your/cert.key SSL 私钥路径
  3. 重载 Nginx:

    nginx -t && nginx -s reload
    
  4. 客户端连接地址改为:

    claude mcp add --transport sse jiandaoyun https://your.domain.com:9444/sse \
      --header "Authorization: Bearer <your_api_key>"
    

SSE 关键配置说明(已写入模板,勿删):

配置项 说明
proxy_buffering off 禁用响应缓冲,保证事件实时推送
proxy_cache off 禁用缓存
proxy_read_timeout 86400 超时设为 24h,维持长连接
proxy_set_header Connection "" 关闭 keep-alive 改写

测试用自签名证书

openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout cert.key -out cert.crt \
  -subj "/CN=localhost"

API Key 传递方式

服务端支持以下三种方式(优先级从高到低):

优先级 方式
1 Authorization: Bearer <key> header(推荐)
2 X-Api-Key: <key> header
3 ?api_key=<key> query 参数(仅 SSE 握手请求有效)

可用 Tools(共 9 个)

推荐使用流程

list_apps → list_forms → get_form_fields → 读写操作

先了解有哪些应用和表单,再获取字段结构(字段 namelabeltype),最后进行数据操作。


应用 / 表单发现

list_apps — 列出所有应用

limit:  100    # 可选,每页返回数量,默认 100
skip:   0      # 可选,跳过条数,用于分页

返回:apps[],每项包含 app_idname


list_forms — 列出应用下所有表单

app_id: "5e3b1234abcd5678ef901234"

返回:forms[],每项包含 entry_idname


get_form_fields — 获取表单字段结构

app_id:   "5e3b1234abcd5678ef901234"
entry_id: "5e3b5678abcd1234ef901234"

返回:widgets[],每项包含 name(字段 ID,如 _widget_1234)、label(显示名)、type

常见字段类型: text(单行文本)、textarea(多行文本)、number(数字)、datetime(日期时间)、combo(下拉框)、radio(单选)、checkbox(多选)


数据读取

get_record — 查询单条记录

app_id:   "5e3b..."
entry_id: "5e3b..."
data_id:  "66a1234567890abc12345678"    # 记录的 _id 字段

query_records — 查询多条记录

基础用法:

app_id:   "5e3b..."
entry_id: "5e3b..."
limit:    100
fields:   ["_widget_xxx", "_widget_yyy"]    # 可选,指定返回字段

简单筛选(filters)— 精确匹配:

filters: {"_widget_xxx": "张三", "_widget_yyy": "已完成"}

复杂筛选(filter)— 支持 gt/lt/like/range 等:

filter: {
  "rel": "and",
  "cond": [
    {"field": "_widget_xxx", "type": "gt",   "value": ["100"]},
    {"field": "_widget_yyy", "type": "like", "value": ["张"]}
  ]
}

filterfilters 同时传入时,filter 优先生效。

翻页(游标分页):

# 第一页
query_records(app_id=..., entry_id=..., limit=100)

# 取最后一条记录的 _id,作为下一页的 data_id
query_records(app_id=..., entry_id=..., limit=100, data_id="上一页最后一条的_id")

数据写入

data 字段格式

data = {
    "_widget_1234567890ab": {"value": "文本内容"},    # 文本字段
    "_widget_abcdef123456": {"value": 123},            # 数字字段
    "_widget_fedcba654321": {"value": "2024-06-01"},   # 日期字段
}

字段的 name(如 _widget_1234)通过 get_form_fields 获取。


create_record — 新建单条记录

app_id:       "5e3b..."
entry_id:     "5e3b..."
data:         {...}
data_creator: "username"    # 可选,指定创建者用户名

返回:{"data": {"_id": "新记录ID", ...}}


create_records_batch — 批量新建(≤ 100 条)

app_id:    "5e3b..."
entry_id:  "5e3b..."
data_list: [
  {"_widget_xxx": {"value": "第一条"}},
  {"_widget_xxx": {"value": "第二条"}}
]

返回:{"status": "success", "success_count": 2, "success_ids": ["id1", "id2"]}


update_record — 修改单条记录

只需传入需要修改的字段,未传字段保持原值。

app_id:   "5e3b..."
entry_id: "5e3b..."
data_id:  "66a1234567890abc12345678"
data:     {"_widget_xxx": {"value": "修改后的值"}}

delete_record — 删除单条记录

⚠️ 删除不可恢复,请谨慎操作。

app_id:   "5e3b..."
entry_id: "5e3b..."
data_id:  "66a1234567890abc12345678"

返回:{"status": "success"}


修改默认端口

服务默认使用 8765。如需修改:

  1. docker-compose.yml — 修改 ports 中的宿主机端口映射
  2. server.py 末尾 — 修改 mcp.run(port=8765) 中的值

运维命令

# 查看服务状态
docker compose ps

# 实时查看日志
docker compose logs -f

# 重启服务
docker compose restart

# 更新代码后重新部署
docker compose up -d --build

# 停止并移除容器
docker compose down

技术架构

MCP 客户端(Claude Code 等)
      ↓  SSE(HTTP 或 HTTPS)
  [可选] Nginx 反向代理(SSL 终止)
      ↓  HTTP 127.0.0.1:8765
Docker 容器(python:3.12-slim)
      ↓
FastMCP 3.x + Uvicorn
      ↓  HTTPS
简道云 API (www.jiandaoyun.com/api/v5/...)
组件 版本
FastMCP ≥ 2.0.0(已测试 3.x)
Python 3.12
传输协议 SSE (Server-Sent Events)
简道云 API v5

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选