当前系统中每个 MCP(如 crm-mcp、wechat-mcp、yingdao-mcp)有各自 manifest.json 与运行逻辑,但“在 App 内可点击查看与管理”的体验仍偏工程化,通常需要改前端代码 + 后端接口 + MCP 元数据三方联动。
设计一个**配置驱动(low-code)**机制,让每个 MCP 都可通过配置文件声明:
- 在 App 中是否展示、展示位置、图标、标签;
- 可查看哪些信息(状态、版本、文档、连接信息);
- 可执行哪些管理动作(启停、重载、参数更新、健康检查、日志查看);
- 动作参数校验与权限控制;
- UI 组件类型与交互(表单、表格、状态卡片)可配置。
实现目标是新增 MCP 时尽量不改代码或只做极小适配。
- 不做“任意 DSL 脚本执行”(避免安全风险);
- 不做复杂流程编排(如多 MCP 事务);
- 不做细粒度租户级可视化布局编辑器(先用 JSON/YAML 配置)。
┌──────────────────── App Frontend ────────────────────┐
│ MCP 列表页 / MCP 详情页 / 动作面板 / 动态表单渲染器 │
└───────────────────────▲──────────────────────────────┘
│ (schema + data + action APIs)
┌───────────────────────┴──────────────────────────────┐
│ MCP Low-Code Gateway(后端) │
│ 1) 配置加载器 Config Loader │
│ 2) Schema 编译器 Schema Compiler │
│ 3) 运行时执行器 Action Executor │
│ 4) 权限拦截器 AuthZ Guard │
│ 5) 审计日志 Audit Logger │
└───────────────▲───────────────────────▲──────────────┘
│ │
┌───────┴───────┐ ┌──────┴──────────┐
│ MCP 注册信息源 │ │ MCP Runtime/Agent│
│ manifest.json │ │ start/stop/check │
└───────────────┘ └──────────────────┘
核心思路:
- 每个 MCP 的管理面板由配置定义;
- 后端将配置编译为统一 Schema;
- 前端基于 Schema 自动渲染页面和动作;
- 动作执行通过执行器路由(内置 + 通用回退)保证可用性。
建议新增目录:
mcp/<mcp-name>/lowcode.config.yaml(每个 MCP 一份)- 或集中式
config/mcp-lowcode/<mcp-name>.yaml(统一管理)
推荐先用 YAML(可读性高),运行时转为 JSON Schema。
apiVersion: clawos/v1
kind: MCPPanel
metadata:
name: crm-mcp
title: CRM Connector
icon: plug
category: business
order: 20
tags: [crm, production]
spec:
visibility:
enabled: true
environments: [dev, staging, prod]
status:
source: health_endpoint
endpoint: /internal/mcp/crm/health
fields:
- key: status
label: 运行状态
type: badge
- key: version
label: 版本
type: text
- key: lastHeartbeatAt
label: 最近心跳
type: datetime
views:
- id: overview
title: 概览
blocks:
- type: key_value
source: status
- type: markdown
source: static
content: |
CRM MCP 提供客户查询、线索更新等能力。
- id: config
title: 配置
blocks:
- type: form
submitAction: update_config
fields:
- name: baseUrl
label: CRM 地址
component: input
required: true
rules:
- type: url
- name: timeoutMs
label: 超时时间
component: number
default: 5000
rules:
- type: min
value: 100
- type: max
value: 30000
actions:
- id: start
label: 启动
type: lifecycle
executor: mcp_runtime.start
confirm: true
- id: stop
label: 停止
type: lifecycle
executor: mcp_runtime.stop
confirm: true
- id: reload
label: 重载配置
type: lifecycle
executor: mcp_runtime.reload
- id: update_config
label: 保存配置
type: config
executor: mcp_config.update
payloadSchemaRef: '#/components/schemas/ConfigUpdate'
components:
schemas:
ConfigUpdate:
type: object
properties:
baseUrl:
type: string
format: uri
timeoutMs:
type: integer
minimum: 100
maximum: 30000
required: [baseUrl]metadata:决定列表展示(图标、排序、分组、标签)。spec.status:定义“查看”信息来源与展示方式。spec.views:定义详情页 tab 与区块类型。spec.actions:定义“管理”动作、权限、执行器映射。components.schemas:动作入参结构,供前端表单与后端校验共享。
- MCP 列表页:从
/api/mcps/panels获取元数据,自动渲染卡片。 - MCP 详情页:读取
/api/mcps/{name}/panel-schema,动态渲染 tabs + blocks。 - 动作区:基于
actions渲染按钮、弹窗、表单。
限制可用组件,避免配置无限制膨胀:
- 展示类:
key_value,table,badge,markdown,logs - 输入类:
input,number,select,switch,textarea,json_editor - 交互类:
confirm_dialog,drawer_form
- 使用统一字段协议(name/label/component/rules/default/visibleWhen)。
- 提交时由后端按
payloadSchemaRef进行二次校验(前端校验仅提升体验)。
- 启动时扫描
lowcode.config.yaml; - 使用
ajv或zod校验配置本身格式; - 编译为内部结构
CompiledMCPPanel,缓存至内存; - 支持文件变更热更新(可选:chokidar watch + debounce)。
禁止配置直接写 shell 命令,采用执行器映射:
const ACTION_EXECUTORS = {
"mcp_runtime.start": runtimeService.start,
"mcp_runtime.stop": runtimeService.stop,
"mcp_runtime.reload": runtimeService.reload,
"mcp_config.update": configService.update,
"mcp_observe.healthcheck": observeService.healthcheck,
};执行流程:
- 参数 schema 校验;
- 执行器路由匹配(内置 + 通用回退);
- 执行动作并记录审计日志(操作者、参数摘要、结果、耗时)。
- 当前阶段默认全开放,不做动作级权限控制;
- 审计:所有管理操作可追踪;
- 限流:对 restart/reload 等高频动作加限流;
- 幂等:start/stop/reload 提供状态判定与幂等响应;
- 敏感字段脱敏:token/secret 在查看态默认掩码。
GET /api/mcps/panels- 返回 MCP 卡片元数据 + 当前状态摘要。
GET /api/mcps/:name/panel-schema- 返回该 MCP 编译后的可渲染 schema。
GET /api/mcps/:name/panel-data- 返回 schema 中各 block 所需数据。
POST /api/mcps/:name/actions/:actionId- body:
{ payload: any } - 返回执行结果、错误码、traceId。
- body:
MCP_PANEL_NOT_FOUNDMCP_ACTION_PAYLOAD_INVALIDMCP_RUNTIME_UNAVAILABLE
结合当前目录(mcp/*/manifest.json)建议:
- 每个 MCP 下新增
lowcode.config.yaml; - 网关服务读取 manifest + lowcode 合并成“展示+管理模型”;
- 在
docs/增补《MCP 低代码配置规范》; - 在
test/增加配置校验与动作鉴权测试。
可选演进:
- 将 manifest 内部分字段(标题、描述、版本)透传到 lowcode;
- 对无
lowcode.config.yaml的 MCP 使用默认只读模板(至少可查看状态)。
- 定义
lowcode.config.yamlJSON Schema; - 建立
ConfigLoader/SchemaCompiler基础代码; - 输出 1 个示例 MCP(如
crm-mcp)配置。
里程碑:可以读取并校验配置,返回静态 panel schema。
schemas/mcp-lowcode.schema.json:提供可执行校验的 JSON Schema,约束顶层结构、视图 block、动作定义与参数模型。examples/mcp/crm-mcp.lowcode.yaml:提供可直接用于联调的示例配置(含 overview/config/logs 三个视图、5 个动作)。- 配置接入建议:
- 后端启动扫描
mcp/*/lowcode.config.yaml+examples/mcp/*.lowcode.yaml(开发态); - 用 AJV 在启动期一次性校验,失败即阻止服务启动;
- 编译成
CompiledMCPPanel缓存,供/api/mcps/panels和/api/mcps/:name/panel-schema直接读取。
- 后端启动扫描
- 至少 1 个 MCP 的 low-code 配置可通过 schema 校验。
- App 列表页可拉取并展示
metadata(name/title/icon/category/order/tags)。 - 详情页可渲染静态 schema(可先不接真实 runtime 数据)。
POST /api/mcps/:name/actions/:actionId可完成鉴权 + payload 校验 + executor 路由(可先 mock 执行)。
- 完成 MCP 列表与详情页面动态渲染;
- 打通
status与panel-data聚合接口; - 支持基础展示组件(key-value/table/badge/markdown)。
里程碑:App 内可点击查看每个 MCP 详情。
- 已提供读取侧 API:
GET /api/mcps/panelsGET /api/mcps/:mcpId/panel-schemaGET /api/mcps/:mcpId/panel-data
- 已支持从
mcp/<mcp-id>/lowcode.config.json读取面板定义,保证配置变更可直接生效到读取接口。 - 已实现 Phase-1 回退机制:当某 MCP 暂无 low-code 面板定义时,自动基于
manifest.json生成只读 overview 面板,保证“可查看”能力不缺口。 - 已定义统一错误码:缺失面板返回
MCP_PANEL_NOT_FOUND。
- 实现动作执行 API 与执行器路由;
- 支持确认弹窗、动态表单、参数校验;
- 接入审计日志(阶段内默认全开放)。
里程碑:通过配置即可新增“启停/重载/更新配置”等管理动作。
- 已提供动作执行 API:
POST /api/mcps/:mcpId/actions/:actionId。 - 当前阶段默认全开放(不做 RBAC 与权限拦截),本地 MCP 服务可直接执行管理动作。
- 已支持配置型动作 payload 校验(基于
payloadSchemaRef -> components.schemas的最小可用校验:required/type/uri/minimum/maximum)。 - 已支持内置执行器 + 通用执行器回退,避免因 executor 未注册导致动作不可用。
- 已定义阶段性错误码:
MCP_ACTION_NOT_FOUND、MCP_ACTION_PAYLOAD_INVALID。
- 热更新配置、缓存失效策略;
- 限流、幂等、超时与重试策略;
- 增加端到端测试与回归用例。
里程碑:可在生产环境灰度上线。
- 可视化配置编辑器(可选);
- 组件市场(logs chart、metrics chart);
- 多环境差异配置(dev/staging/prod 覆写)。
- 配置解析合法/非法用例;
- schema 编译一致性;
- action payload 校验与错误码。
- 从 MCP 配置到 API 输出的端到端链路;
- 动作参数校验失败/成功分支;
- 动作执行失败回滚与日志记录。
- 动态渲染快照测试;
- 表单可见性条件(
visibleWhen)测试; - 操作确认流程(弹窗 -> 提交 -> 成功/失败反馈)。
- 配置过于灵活导致复杂度爆炸
- 规避:组件集合和动作配置版本化,避免失控扩张。
- 安全风险(命令注入、越权)
- 规避:禁止 shell executor,动作执行全量审计。
- 不同 MCP 能力差异大
- 规避:提供默认模板 + 可选扩展块,不强求一致。
- 前端渲染性能问题
- 规避:schema 编译缓存、按需加载 block 数据。
mcp-lowcode.md(本文档)schemas/mcp-lowcode.schema.jsonexamples/mcp/crm-mcp.lowcode.yaml- 后端模块:
ConfigLoader、SchemaCompiler、ActionExecutor - 前端模块:
PanelRenderer、DynamicFormRenderer、ActionBar - 测试:配置校验、鉴权、动作执行、前端渲染
通过“配置定义 UI + 配置定义动作 + 后端执行器路由”的方式,可以把 MCP 的查看与管理能力低代码化,并在可用优先前提下,实现“新增 MCP 即可在 App 点击管理”的目标。