2026-01-07 16:24:01 +08:00

93 lines
3.8 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MCP Tooling 指南
MCP 工具被明确拆分为 **Remote (HTTP)****Local (stdio)** 两种模式,对应 `tooling.type: mcp_remote``tooling.type: mcp_local`。旧的 `type: mcp` schema 已下线,请在 YAML 与文档中全部迁移。
## 1. 配置模式概览
| 模式 | Tooling type | 适用场景 | 关键字段 |
| --- | --- | --- | --- |
| Remote | `mcp_remote` | 已部署的 HTTP(S) MCP 服务器(如 FastMCP、Claude Desktop Connector、自建代理 | `server``headers``timeout` |
| Local | `mcp_local` | 通过 stdio 握手的本地可执行脚本Blender MCP、CLI 工具等) | `command``args``cwd``env` 等进程字段 |
## 2. `McpRemoteConfig` 字段
| 字段 | 说明 |
| --- | --- |
| `server` | 必填MCP HTTP(S) 端点,例如 `https://api.example.com/mcp`。 |
| `headers` | 可选,附加 HTTP 头(如 `Authorization`)。 |
| `timeout` | 可选,单次工具调用超时时间(秒)。 |
**YAML 示例:**
```yaml
nodes:
- id: remote_mcp
type: agent
config:
tooling:
type: mcp_remote
config:
server: https://mcp.mycompany.com/mcp
headers:
Authorization: Bearer ${MY_MCP_TOKEN}
timeout: 15
```
DevAll 会在列举/调用工具时连接该 URL并携带 `headers`。若服务器不可达,将直接抛出错误,不再尝试本地回退。
## 3. `McpLocalConfig` 字段
`mcp_local` 直接在 `config` 下声明进程参数:
- `command` / `args`:可执行文件与参数(如 `uvx blender-mcp`)。
- `cwd`:可选工作目录。
- `env` / `inherit_env`:定制子进程环境;默认继承父进程后再覆盖。
- `startup_timeout`:等待 `wait_for_log` 命中的最长秒数。
- `wait_for_log`stdout 正则,用于判定“就绪”。
**YAML 示例:**
```yaml
nodes:
- id: local_mcp
type: agent
config:
tooling:
type: mcp_local
config:
command: uvx
args:
- blender-mcp
cwd: ${REPO_ROOT}
wait_for_log: "MCP ready"
startup_timeout: 8
```
运行期间 DevAll 会保持该进程常驻,并通过 stdio 传输 MCP 数据帧。
## 4. FastMCP 示例服务器
`mcp_example/mcp_server.py`
```python
from fastmcp import FastMCP
import random
mcp = FastMCP("Company Simple MCP Server", debug=True)
@mcp.tool
def rand_num(a: int, b: int) -> int:
return random.randint(a, b)
if __name__ == "__main__":
mcp.run()
```
启动:
```bash
uv run fastmcp run mcp_example/mcp_server.py --transport streamable-http --port 8010
```
- 若以 Remote 模式使用,只需将 `server` 指向 `http://127.0.0.1:8010/mcp`
- 若以 Local 模式使用,可将 `command` 设置为 `uv run fastmcp run ...` 并保持 `transport=stdio`
## 5. 安全与运维
- **网络暴露**Remote 模式建议置于 HTTPS 反向代理之后,并结合 API Key/ACLLocal 模式进程仍可访问宿主机文件,请限制其权限。
- **资源回收**Local 模式由 DevAll 负责终止子进程,确保脚本可以正确处理 SIGTERM/SIGKILL。
- **日志定位**:为 `wait_for_log` 输出清晰的“ready”日志便于在超时时排查。
- **鉴权**Remote 模式通过 `headers` 传递 TokenLocal 模式可在 `env` 中注入密钥,注意不要写入仓库。
- **多会话**MCP 服务若不支持多客户端,可在模型或工具层设置 `max_concurrency=1` 并在 YAML 中复用同一配置。
## 6. 调试步骤
1. Remote使用 curl 或 `fastmcp client` 测试 HTTP 端点Local先单独运行并确认 stdout 中有 `wait_for_log` 匹配的文本。
2. 启动 DevAll可加 `--reload`),观察后端日志是否打印工具清单。
3. 若调用失败,查看 Web UI 中的工具请求/响应,或在 `logs/` 中搜索对应 session 的结构化日志。