@josephyan/qingflow-mcp
v0.1.0-beta.8
Published
Local-agent installer wrapper for the Qingflow MCP server
Downloads
61
Maintainers
Readme
Qingflow MCP Server
基于用户态 token 与 wsId 的 Qingflow MCP 适配层,覆盖表单数据、文件、应用、流程、视图、报表、门户、导航,以及高层解决方案搭建能力。
特性
- 用户账号登录,复用现有 Qingflow 权限模型
- 支持直接注入用户
token建立 MCP 会话 - 显式工作区选择,避免误用默认工作区
- 覆盖表单数据增查改删
- 覆盖内部成员 / 内部部门 / 外部联系人查询
- 覆盖应用 CRUD、表单结构读写、应用发布
- 覆盖应用包(Tag)CRUD
- 覆盖顶层 Navigation 导航配置
- 覆盖评论、通过、拒绝、回退、转交、改派、加签
- 覆盖门户 CRUD、门户发布
- 覆盖文件上传凭证获取与本地文件上传
- 覆盖流程设计与流程调试
- 覆盖视图设计与视图子类型配置
- 覆盖报表设计与图表排序/配置
- 覆盖
solution_design_session任务级设计会话,支持分阶段 DSL 设计与 finalize - 覆盖 staged 高层搭建工具与统一入口:
solution_schema_example、solution_build_app、solution_build_flow、solution_build_all、solution_build_views、solution_build_analytics_portal、solution_build_navigation
不支持
- 外部部门查询
- 应用包分组管理
- 应用包内导航项配置
- 签名图片、eSign
- 外部成员候选查询(转交/加签)
- 短信验证码、多因素登录挑战
- OpenAPI
accessToken/serviceToken
安装
cd <repo_root>/qingflow-support/mcp-server
python3 -m venv .venv
./.venv/bin/pip install -e '.[dev]'本地智能体安装(npm)
如果你要给本地 agent / gateway 安装这套 MCP,而不是手动管理 Python 环境,可以直接用 npm:
cd <repo_root>/qingflow-support/mcp-server
npm install -g .或只在当前目录安装:
cd <repo_root>/qingflow-support/mcp-server
npm install如果你想把当前版本封装成可分发的 npm 安装包:
cd <repo_root>/qingflow-support/mcp-server
npm run pack:npm产物会输出到:
dist/npm/josephyan-qingflow-mcp-<version>.tgz另一台机器可直接安装这个 tgz:
npm install /absolute/path/to/dist/npm/josephyan-qingflow-mcp-<version>.tgz安装时会自动创建 .npm-python/,并在里面执行 pip install .。
如果你是全局安装,完成后本机可直接使用这两个入口:
qingflow-app-user-mcp
qingflow-app-builder-mcp如果你只是对当前源码 checkout 执行了 npm install,请直接运行:
node ./npm/bin/qingflow-app-user-mcp.mjs
node ./npm/bin/qingflow-app-builder-mcp.mjs适合这类本地 stdio MCP 客户端:
- Claude Desktop
- Cline / Cursor
- OpenClaw 风格的本地 agent / gateway
- 其它支持
command + args + env的本地智能体
详细说明见:
docs/local-agent-install.md
运行
cd <repo_root>/qingflow-support/mcp-server
./qingflow-app-user-mcp或:
qingflow-app-user-mcp
qingflow-app-builder-mcp配置
QINGFLOW_MCP_DEFAULT_BASE_URL:默认 Qingflow 后端地址QINGFLOW_MCP_DEFAULT_QF_VERSION:默认qfVersion路由值QINGFLOW_MCP_HOME:本地会话目录,默认~/.qingflow-mcpQINGFLOW_MCP_DESIGN_HOME:solution_design_session本地设计会话目录,默认~/.qingflow-mcp/design-sessionsQINGFLOW_MCP_BUILD_HOME:分阶段 build assembly 目录,默认~/.qingflow-mcp/build-assembliesQINGFLOW_MCP_BOOTSTRAP_HOME:solution_bootstrap运行记录目录,默认~/.qingflow-mcp/bootstrap-runsQINGFLOW_MCP_TIMEOUT_SECONDS:HTTP 超时秒数,默认30
会话元数据写入 ~/.qingflow-mcp/profiles.json。
配置文件会按下面的顺序查找第一个存在的文件:
QINGFLOW_MCP_CONFIG_PATH- 当前工作目录
qingflow-mcp.config.json ~/.qingflow-mcp/config.json/etc/qingflow-mcp/config.json
auth_login / auth_use_token 的路由优先级是:
- 工具参数里显式传入的
base_url/qf_version - 全局默认
QINGFLOW_MCP_DEFAULT_BASE_URL/QINGFLOW_MCP_DEFAULT_QF_VERSION或配置文件里的default_base_url/default_qf_version(同层里环境变量优先)
敏感 token 优先写入系统 keychain;如果当前环境没有可用 keychain,会自动退回仅内存会话。
示例配置文件:
{
"default_base_url": "https://qingflow.com/api",
"default_qf_version": "canary"
}会话模型
- 调用
auth_login或auth_use_token - 调用
workspace_list - 调用
workspace_select - 再调用业务工具
未选择工作区前,除 auth_* 和 workspace_* 外的工具都会报错。
说明:
auth_use_token是 MCP 工具,不是额外的 HTTP 请求头。业务请求真正发送的是token、wsId,以及必要时的Cookie: qfVersion=...- 生产环境如果
/user响应里没有返回版本路由,workspace_select会用工作区的systemVersion兜底到当前会话;因此不要跳过workspace_select
工具清单
认证与工作区
auth_loginauth_use_tokenauth_whoamiauth_logoutworkspace_listworkspace_selectworkspace_set_plugin_status
表单数据
record_field_resolverecord_query_planrecord_write_planrecord_queryrecord_aggregaterecord_createrecord_getrecord_updaterecord_delete
说明:
record_query是推荐的统一读入口,按query_mode路由到列表、单条详情或汇总分析record_query(list)默认返回扁平宽表行,适合浏览、导出和分析;当选列超过后端单次字段上限时,工具会自动分批查询并按apply_id合并;单条完整详情请用record_getrecord_write_plan用于复杂写入前的静态预检,支持fields这种更友好的写法;每个字段都会返回write_format.support_level,区分full、restricted、unsupportedrecord_create和record_update都支持verify_write=true,会在写入后读回记录并检测字段是否被静默丢弃、清空或数量不足- 子表字段现在支持行对象写法,例如
{"明细": [{"产品名称": "企业版", "数量": 2}]};更新既有子表行时可额外传rowId/row_id/__row_id__ record_get/record_create/record_update继续保留,用于精确详情读取和明确写入
文件
file_get_upload_infofile_upload_local
应用
package_listpackage_getpackage_get_basepackage_createpackage_updatepackage_deletenavigation_list_publishednavigation_list_draft_pagenavigation_list_draft_allnavigation_get_detailnavigation_get_statusnavigation_set_visiblenavigation_createnavigation_updatenavigation_deletenavigation_publishnavigation_reorder
说明:
workspace_set_plugin_status会调用工作区插件安装接口,可用于安装或卸载指定插件。staged 高层 build 在创建导航时如果遇到
50004 插件未安装,会先尝试自动安装导航插件,再重试一次导航创建。record_comment_addrecord_comment_listrecord_comment_mention_candidatesrecord_comment_mark_readrecord_comment_statstask_statisticstask_listtask_list_groupedtask_urgetask_approvetask_rejecttask_rollback_candidatestask_rollbacktask_transfertask_transfer_candidatesapp_listapp_get_baseapp_update_baseapp_get_form_schemaapp_createapp_deleteapp_publish
说明:
app_get_base和app_get_form_schema默认返回紧凑摘要,适合智能体消费;如果需要完整原始baseInfo/form schema,显式传include_raw=true- 原始表单 schema 写入接口
app_update_form_schema已不再对外暴露;对外应优先使用solution_*或更高层的 builder 流程,而不是直接拼接原生 schema
流程
workflow_list_nodesworkflow_get_node_detailworkflow_get_global_settingsworkflow_get_future_nodesworkflow_get_future_nodes_appworkflow_get_qsource_activeworkflow_get_qsource_passiveworkflow_get_editable_question_idsworkflow_get_print_nodes
说明:
workflow_*的低层写接口已不再对外暴露;对外应优先使用solution_build_flow
视图
view_listview_list_flatview_get_configview_get_base_infoview_list_questionsview_list_associationsview_board_get_lane_base_infoview_get_future_nodesview_get_workflow_status
说明:
view_*的低层写接口已不再对外暴露;对外应优先使用solution_build_views
报表
qingbi_report_listqingbi_report_get_baseqingbi_report_get_configqingbi_report_get_dataqingbi_report_deleteqingbi_report_reorderqingbi_report_list_fieldsqingbi_report_list_field_options
说明:
qingbi_report_*的原始创建和配置写入接口已不再对外暴露;对外应优先使用solution_build_analytics_portal
门户
portal_listportal_getportal_createportal_updateportal_deleteportal_publish
通讯录
directory_searchdirectory_list_internal_usersdirectory_list_all_internal_usersdirectory_list_internal_departmentsdirectory_list_all_departmentsdirectory_list_sub_departmentsdirectory_list_external_members
解决方案编排
solution_design_sessionsolution_schema_examplesolution_build_allsolution_build_appsolution_build_flowsolution_build_viewssolution_build_analytics_portalsolution_build_navigationsolution_build_status
solution_design_session 用来承接上层 AI 的分阶段设计过程:
start:创建或读取一个 task-scoped 设计会话;未传session_id时会自动生成并返回submit_stage:提交discover/design/experience阶段 patch,返回当前 gate 状态和缺失项get:读取当前设计会话快照finalize:把分阶段 patch 合并成完整SolutionSpec,并返回可执行execution_plan- 这是纯本地设计会话工具,不调用 Qingflow 后端,也不会影响智能体处理其他任务
公开高层搭建入口已经改成 staged build:
solution_schema_example- 返回指定 stage 的精确 DSL 示例、必填字段、常见错误和建议的下一次调用
- 复杂 payload 生成前应先调用
solution_build_all- 负责把完整
SolutionSpec自动拆分到app_flow/views/analytics_portal/navigation - 支持
preflight/plan/apply/repair preflight/plan未传build_id时会自动生成,并返回build_id与suggested_next_callverify=true时会在成功后自动做回读校验repair时如果未传solution_spec,会优先复用build_id已落盘的 manifest
- 负责把完整
solution_build_app- 负责应用包、应用、字段、表单布局、角色、模拟数据
- 支持
preflight/plan/apply/repair preflight/plan未传build_id时会自动生成,并返回build_id与suggested_next_calltarget.package_tag_id可选;传入后会复用已有应用包
solution_build_flow- 负责流程、生命周期阶段与相关角色
- 支持
preflight/plan/apply/repair preflight/plan未传build_id时会自动生成,并返回build_id与suggested_next_call
solution_build_views- 负责视图创建、排序、子类型配置、应用发布
- 支持
preflight/plan/apply/repair preflight/plan未传build_id时会自动生成,并返回build_id与suggested_next_call
solution_build_analytics_portal- 负责 Qingbi 报表、门户布局、筛选器、宫格入口、发布
- 支持
preflight/plan/apply/repair preflight/plan未传build_id时会自动生成,并返回build_id与suggested_next_call
solution_build_navigation- 负责导航创建、排序与发布
- 支持
preflight/plan/apply/repair preflight/plan未传build_id时会自动生成,并返回build_id与suggested_next_call
solution_build_status- 纯本地读取
build_id对应的 assembly 状态 - 返回
stage_statuses、ready_stages、next_recommended_stage、missing_prerequisites
- 纯本地读取
设计边界:
- AI 负责生成每个阶段的显式 DSL
- MCP 只做校验、归一化、原生接口转译和执行
- 支持 staged DSL,也支持通过
solution_build_all直接提交完整SolutionSpec
示例 MCP client 配置
见 examples/claude_desktop_config.json。
如果通过 npm 安装到本机,也可以直接配成:
{
"mcpServers": {
"qingflow": {
"command": "qingflow-app-user-mcp",
"args": [],
"env": {
"QINGFLOW_MCP_DEFAULT_BASE_URL": "https://qingflow.com/api"
}
}
}
}示例调用顺序
见 examples/transcript.md。
设计文档
- 工具矩阵与后续扩展方案:
docs/tool-matrix.md
典型用法
1. 登录
{
"profile": "default",
"base_url": "https://qingflow.example.com",
"email": "[email protected]",
"password": "******",
"persist": true
}1b. 直接注入 token
{
"profile": "default",
"base_url": "https://qingflow.example.com/api",
"token": "<user-token>",
"ws_id": 10001,
"persist": false
}2. 查询工作区
{
"profile": "default",
"page_num": 1,
"page_size": 20,
"include_external": false
}3. 选择工作区
{
"profile": "default",
"ws_id": 10001
}4. 新增记录
{
"profile": "default",
"app_key": "APP_xxx",
"submit_type": 1,
"answers": [
{
"queId": 1001,
"queType": 2,
"values": [{ "value": "hello" }],
"tableValues": []
}
]
}5. 搜索内部成员
{
"profile": "default",
"keyword": "张",
"page_num": 1,
"page_size": 20,
"contain_disable": false
}6. 拉取全部内部成员
{
"profile": "default",
"page_size": 200,
"max_pages": 100,
"contain_disable": false
}7. 拉取全部部门树
{
"profile": "default",
"parent_dept_id": null,
"max_depth": 20,
"max_items": 2000
}返回约定
- 成功时返回结构化 JSON
- Qingflow 后端报错会原样透出主要错误信息
- token 失效时会自动清除当前 profile 的本地会话,并提示重新登录
