FunClaw MCP Server
funclaw-mcp-server 是 FunClaw 对外暴露 MCP 工具的产品化开放能力。外部 MCP 客户端使用 FunClaw API Key 访问 MCP JSON-RPC 入口。
MCP Server 本身只是入口门票。进入 MCP 后,funclaw.list_open_capabilities、funclaw.get_open_capability、funclaw.execute_open_capability 和 funclaw.get_open_capability_task 只处理当前 API Key 已授权的业务开放能力,不会绕过应用授权。
能力信息
| 字段 | 值 |
|---|---|
| 能力 Key | funclaw-mcp-server |
| 能力名称 | FunClaw MCP Server |
| 分类 | MCP |
| 能力层级 | 开放能力层 |
| 能力类型 | mcp_server |
| 协议 | MCP Streamable HTTP 风格 JSON-RPC |
| 入口 | /api/open/v1/mcp |
调用入口
POST /api/open/v1/mcp
Authorization: Bearer <sk-funclaw-api-key>
Content-Type: application/json团队应用 Key 必须授权 funclaw-mcp-server。外部数字员工 Key 由数字员工授权和 Key 自身资源域共同决定可用能力。ORG_ADMIN_KEY 的有效能力与所属组织当前授权保持一致,不依赖 Key 创建时写入的静态 scope。
客户端接入要求
外部 Agent 或 MCP 客户端需要支持:
- Remote MCP / Streamable HTTP 风格 endpoint。
- 通过 HTTP
POST发送 JSON-RPC 2.0 请求。 - 配置
Authorization: Bearer <sk-funclaw-api-key>请求头。 - 接收
application/json响应。 - 在
initialize成功后发送notifications/initializednotification。
当前服务端不提供 SSE 下行流。客户端如对同一入口发起 GET SSE stream,会收到:
HTTP/1.1 405 Method Not Allowed
Allow: POST初始化
{
"jsonrpc": "2.0",
"id": "init-1",
"method": "initialize",
"params": {}
}成功响应:
{
"jsonrpc": "2.0",
"id": "init-1",
"result": {
"protocolVersion": "2025-03-26",
"serverInfo": {
"name": "funclaw",
"version": "0.1.0"
},
"capabilities": {
"tools": {}
}
}
}初始化成功后,标准 MCP 客户端需要继续发送 initialized notification。这个 notification 不包含 id,服务端成功接收后返回 202 Accepted,响应体为空。
{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}工具列表
{
"jsonrpc": "2.0",
"id": "tools-1",
"method": "tools/list",
"params": {}
}当前内置 MCP 工具:
| 工具名 | 说明 |
|---|---|
funclaw.list_open_capabilities | 返回当前 API Key 可见的开放能力列表。 |
funclaw.get_open_capability | 按 capabilityKey 返回单个开放能力详情。 |
funclaw.execute_open_capability | 按 capabilityKey 执行当前 API Key 已授权的开放能力,入参放在 input。 |
funclaw.get_open_capability_task | 按 capabilityKey 和 taskId 查询异步开放能力任务状态和结果。 |
funclaw.create_asset | 创建应用资产;小型本地文件可通过 contentBase64 传入,视频或大文件应走 application-asset-service multipart 原始文件上传。 |
funclaw.list_assets | 查询当前 API Key 资源域下的资产列表。 |
funclaw.get_asset | 读取当前 API Key 资源域下的单个资产。 |
查询可见开放能力
{
"jsonrpc": "2.0",
"id": "call-1",
"method": "tools/call",
"params": {
"name": "funclaw.list_open_capabilities",
"arguments": {}
}
}响应中的 content[0].text 是 JSON 字符串:
{
"capabilities": [
{
"capabilityKey": "douyin-top10-batch",
"displayName": "抖音 Top10 批量",
"categoryCode": "open-platform",
"categoryName": "开放平台",
"status": "ACTIVE",
"description": "面向团队应用和 API Key 的抖音 Top10 批量开放能力。",
"docsUrl": "/docs/platform-capabilities/douyin-top10-batch"
}
]
}funclaw-mcp-server 不会出现在这个工具返回的开放能力列表里,避免 MCP 入口能力和业务能力混在一起。
查询单个开放能力
{
"jsonrpc": "2.0",
"id": "call-2",
"method": "tools/call",
"params": {
"name": "funclaw.get_open_capability",
"arguments": {
"capabilityKey": "douyin-top10-batch"
}
}
}如果当前应用没有获得目标业务能力授权,会返回 JSON-RPC error:
{
"jsonrpc": "2.0",
"id": "call-2",
"error": {
"code": -32003,
"message": "open capability not granted: douyin-top10-batch"
}
}执行业务开放能力
执行前先用 funclaw.get_open_capability 获取目标能力的 inputSchema。业务开放能力不需要每个能力单独注册一个 MCP 工具,统一通过 funclaw.execute_open_capability 执行。如果返回结果中包含 taskId,继续用 funclaw.get_open_capability_task 查询任务状态和结果。
例如执行梦工厂创作歌词:
{
"jsonrpc": "2.0",
"id": "call-3",
"method": "tools/call",
"params": {
"name": "funclaw.execute_open_capability",
"arguments": {
"capabilityKey": "lyrics-generate",
"input": {
"style": "流行",
"text": "写一段 FunClaw 外部 Agent 测试歌词",
"emotion": "快乐"
}
}
}
}如果当前 API Key 没有获得 lyrics-generate 授权,会返回 JSON-RPC error:
{
"jsonrpc": "2.0",
"id": "call-3",
"error": {
"code": -32003,
"message": "open capability not granted: lyrics-generate"
}
}创建资产
URL 资产和小型本地文件可以通过 funclaw.create_asset 创建。本地小文件场景先由 MCP 客户端读取文件内容并编码为 Base64,然后传 contentBase64、fileName 和 mimeType。
视频或其他大文件不要通过 contentBase64 上传;Base64 会放大请求体并让 MCP/JSON 请求更容易触发请求大小限制或连接重置。大文件应使用 application-asset-service 的 REST multipart 原始文件上传接口,字段名为 file,metadata 如需传入必须是 JSON object 序列化后的字符串。
{
"jsonrpc": "2.0",
"id": "call-4",
"method": "tools/call",
"params": {
"name": "funclaw.create_asset",
"arguments": {
"type": "IMAGE",
"title": "测试图片",
"fileName": "cover.png",
"mimeType": "image/png",
"contentBase64": "<base64-file-content>",
"metadata": {
"source": "codex"
}
}
}
}授权模型
应用授权需要分成两层理解:
| 授权项 | 作用 |
|---|---|
funclaw-mcp-server | 允许团队应用 Key 访问 MCP JSON-RPC 入口。 |
| 业务开放能力 Key | 决定 MCP 工具能看见、读取和执行哪些开放能力。 |
例如应用授权了 funclaw-mcp-server 和 douyin-top10-batch,那么 MCP 客户端可以连接服务器,并且只能通过 MCP 工具看到和执行 douyin-top10-batch。
ORG_ADMIN_KEY 不按自身静态 scope 判断业务能力;它继承所属组织当前开放能力授权。组织已授权 application-data-service 时,ORG_ADMIN_KEY 可通过 MCP 使用对应的组织数据工具,包括团队公共数据写入和组织数据 owner 汇总/明细。
错误响应
| HTTP 状态 | 场景 |
|---|---|
401 | API Key 缺失或无效。 |
403 | API Key 所属主体不可访问 MCP;团队应用 grant 失效;团队应用未授权 funclaw-mcp-server;所属组织或目标业务能力未授权。 |
405 | 使用 GET 请求 MCP endpoint;当前只支持 POST JSON-RPC。 |
200 + JSON-RPC error | JSON-RPC 请求格式错误、未知 method、未知 tool、查询未授权能力。 |