chore: import upstream snapshot with attribution
Validate YAML Workflows / Validate YAML Configuration Files (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 12:37:51 +08:00
commit d0e4308def
614 changed files with 74458 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
# 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/ACL;Local 模式进程仍可访问宿主机文件,请限制其权限。
- **资源回收**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 的结构化日志。