mcpField
M
MetaMCP

MetaMCP

本地服务
github.com开发工具184 周前更新

关于 MetaMCP

MetaMCP 是按需网关,让 MCP 客户端通过三个稳定工具发现并调用已配置的子服务,也可运行经过审查的声明式 Method。它面向不常用且分散的能力;常用或敏感服务可继续直接连接。

主要功能

  1. 01发现缓存的服务与工具架构
  2. 02按需调用指定子服务工具
  3. 03运行有界且经架构验证的 Method
  4. 04控制子服务启动与环境变量
  5. 05导出哈希链证据包

适用场景

  1. 01查找分散 MCP 服务中的工具
  2. 02调用子服务而不启动所有服务
  3. 03自动执行重复的多步骤工作流
  4. 04记录并验证操作证据

MCP 相关

作为 MCP 网关,向客户端提供 `mcp_discover`、`mcp_call` 和 `mcp_run`,并将请求路由至已配置的本地或远程子服务。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mentu-ai-metamcp": {
"command": "npx",
"args": [
"-y",
"@mentu/metamcp"
]
}
}
}
启动命令npx -y @mentu/metamcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@mentu/metamcp1.0.0

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
kindenum否结果类型(默认:all)all | server | tool | method
querystring否能力搜索查询
serverstring否将子工具筛选到一个已配置的服务器
refreshboolean否连接到指定服务器并刷新其实时架构

详细介绍

MetaMCP

npm version Node.js License CI

MetaMCP 是面向大量长尾 MCP 服务的安全、按需网关。它为 MCP 客户端提供三个稳定的工具:

  • mcp_discover 可查找已配置的服务、缓存的工具架构和经过审核的 Method,而无需启动所有子服务。
  • mcp_call 可按需调用一个明确指定的子工具。
  • mcp_run 可执行有界、经过架构验证的声明式 Method。

MetaMCP 并非要取代所有直接 MCP 连接。重要、常用、精简或经过强身份验证的 MCP 应保持直连。将不规则的长尾服务接入 MetaMCP,并把反复执行的多步骤流程整理为 Method。

                               ┌─ direct: GitHub / Codex Apps / core runtime
MCP client ────────────────────┤
                               └─ MetaMCP (3 tools)
                                    ├─ discover cached capabilities
                                    ├─ call one lazy child
                                    └─ run reviewed Methods

选择合适的路径

路径最适用场景原因
直接 MCP高频、精简、安全敏感或基础服务保留类型化架构、原生身份验证和显式审批
mcp_discover + mcp_call长尾或不规则功能在不隐藏组装语言的前提下,精简客户端界面
mcp_run重复执行 Acquire → Normalize → Analyze 工作流让有界行为可测试、可进行版本管理并能生成证据

不要仅为减少工具数量,就通过 MetaMCP 路由计费、基础设施变更、身份管理或其他后果严重的服务。正确的边界取决于实际运行需求,而非理念。

快速开始

需要 Node.js 20 或更高版本。

npx @mentu/metamcp@latest --config .mcp.json

在配置客户端之前,检查面向模型的完整界面:

npx @mentu/metamcp@latest tools
npx @mentu/metamcp@latest tools --json

检查器读取与 MCP tools/list 返回结果相同的定义,然后在加载配置、打开存储、启动子服务或绑定传输之前退出。--json 会包含完整的输入架构,便于自动化审核和版本间差异比较。

创建 .mcp.json:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/[email protected]", "/path/to/allowed/files"]
    },
    "internal-api": {
      "command": "node",
      "args": ["./servers/internal-api.js"],
      "env": { "API_TOKEN": "${INTERNAL_API_TOKEN}" },
      "inheritEnv": ["HTTP_PROXY"]
    }
  }
}

子服务只会在显式刷新、调用或由 Method 使用时启动。普通发现会读取配置和缓存的架构,不会启动所有子服务。

服务名称是稳定的缓存标识,必须包含 1-128 个字母、数字、点、下划线或连字符;不允许使用路径分隔符和类似路径遍历的名称。

安全配置客户端

除非提供 --yes,否则 init 仅预览,不会实际执行。未指定客户端名称时,它只会检查现有的客户端配置文件。

metamcp init                         # preview, no writes
metamcp init --client Codex          # preview one client
metamcp init --client Codex --yes    # apply atomically and write a .bak

格式错误的 JSON 会被拒绝并保持不变。可以显式创建指定客户端;MetaMCP 默认不会创建所有受支持的客户端配置。

手动配置客户端时,请使用绝对路径,避免网关依赖客户端的工作目录:

{
  "mcpServers": {
    "metamcp": {
      "command": "npx",
      "args": [
        "-y",
        "@mentu/metamcp@latest",
        "--config",
        "/absolute/path/to/.mcp.json"
      ]
    }
  }
}

@latest 适合用于评估。在受控环境中,请固定为 @mentu/[email protected],以便有计划地升级并进行审核。

三个工具

发现
{ "query": "capture screenshot", "kind": "tool" }

发现只会搜索正在运行或已缓存的架构。如需从某个服务的实时工具列表刷新该服务:

{ "server": "browser", "refresh": true }

不指定服务的 refresh 会被拒绝,以免 Agent 意外地对整个配置进行扇出操作。

调用
{
  "server": "browser",
  "tool": "capture_page",
  "args": { "url": "https://example.com" },
  "timeoutMs": 60000
}

MetaMCP 绝不会在子调用超时或传输失败后自动重放该调用。响应丢失前,子服务可能已经完成了变更操作。之后的 Method 只有在清单明确将该步骤声明为 idempotency: "safe" 时才可以重试。

运行方法

将 JSON 清单放入 .metamcp/methods/,或传入 --methods <directory>。以下子服务和工具名称仅作示例;请在自己的配置中将它们绑定到经过审核的服务:

{
  "apiVersion": "metamcp.io/v1alpha1",
  "kind": "Method",
  "metadata": {
    "name": "content.acquire-and-normalize",
    "version": "1.0.0",
    "description": "Acquire content and normalize it into a stable record"
  },
  "spec": {
    "effects": "read",
    "inputSchema": {
      "type": "object",
      "properties": { "url": { "type": "string" } },
      "required": ["url"],
      "additionalProperties": false
    },
    "steps": [
      {
        "id": "acquire",
        "server": "fetch",
        "tool": "fetch",
        "args": { "url": "${input.url}" }
      },
      {
        "id": "normalize",
        "server": "content",
        "tool": "normalize",
        "dependsOn": ["acquire"],
        "args": { "document": "${steps.acquire.structuredContent}" }
      }
    ],
    "output": "${steps.normalize.structuredContent}"
  }
}

然后调用:

{ "method": "content.acquire-and-normalize", "input": { "url": "https://example.com" } }

方法采用声明式定义,而非任意 JavaScript。它们具有受限的步骤数、截止时间和输出大小;输入/输出 JSON Schema;明确的读/写效果;安全插值;带类型的间隙;以及逐步跟踪记录。除非网关操作员使用 --allow-writes 启动 MetaMCP,否则写入或混合效果的方法将被禁用。

请参阅方法模式、清单架构和示例方法。此设计将 Crawlio 方法模式中记录的一致性层推广应用。

配置和密钥

env 和 HTTP headers 中的 ${NAME} 引用默认从主机环境中解析。无法解析的引用会导致启动失败;不会将其作为字面占位符传递给子进程。

MetaMCP 不会将其环境变量传递给 stdio 子进程。它只继承少量运行时允许列表中的变量(PATH、主目录/临时目录/区域设置变量及平台对应变量)、inheritEnv 中指定的变量,以及子进程 env 块中明确设置的值。嵌入方可以为密钥链或保管库安装自定义 SecretProvider。

默认情况下,发现功能使用本地关键词搜索。若要启用基于 Voyage 的语义搜索,请显式设置 METAMCP_VOYAGE_API_KEY;随后,发现查询将发送到 Voyage,并启用可选的本地 SQLite 向量索引。环境中已有的 ANTHROPIC_API_KEY 或 VOYAGE_API_KEY 变量不会触发网络调用。

远程子服务使用 url、transportType、headers 和现有 OAuth 字段:

{
  "mcpServers": {
    "remote": {
      "url": "https://mcp.example.com/mcp",
      "transportType": "http",
      "headers": { "Authorization": "Bearer ${REMOTE_TOKEN}" }
    }
  }
}

HTTP 网关

HTTP 模式默认绑定到 127.0.0.1:

metamcp --transport http --port 8080 --config .mcp.json

未认证的非环回绑定会默认拒绝。公开监听器之前,请配置 OAuth 资源服务验证或 METAMCP_HTTP_BEARER_TOKEN。除非通过 --allow-origin 或 METAMCP_ALLOWED_ORIGINS 提供完全匹配的来源,否则带有 Origin 标头的浏览器请求将被拒绝。

MetaMCP 通过 stdio 和 Streamable HTTP 为传统 MCP 客户端以及 2026-07-28 无状态请求信封提供服务。有关支持的边界和部署指南,请参阅架构。

证据

已完成的 mcp_call 和 mcp_run 尝试会序列化到 .metamcp/ledger.jsonl。导出可移植的哈希链接包:

metamcp export-evidence \
  --ledger .metamcp/ledger.jsonl \
  --out .metamcp/evidence-bundle.json

metamcp export-evidence --out .metamcp/evidence-bundle.json --verify

运行日志不是远程证明系统。导出可检测包内之后发生的更改,但无法证明受入侵的主机记录了每个事件。

可选应用库

此软件包仍提供由人工操作的服务应用库:

metamcp add --list
metamcp add playwright sentry --config .mcp.json

运行时绝不会响应 MCP 工具调用而安装软件包。安装仍是明确的 CLI/用户操作。

应用库条目可以是本地启动器(command + args),也可以是托管的 Streamable HTTP 端点(url,在 --list 中显示为 🌐)。托管条目会作为原生远程服务写入 .mcp.json;应用库绝不会通过 stdio 桥接软件包路由远程服务。

从 0.x 升级

1.0 版有意移除了面向模型的配置、技能建议和 JavaScript 执行工具。此外,它还更改了 HTTP 绑定、子进程环境继承、重试机制和 init。升级前请阅读迁移到 1.0。

安全

子 MCP 服务是具有自身权限的可信本地或远程代码。MetaMCP 是策略和生命周期边界,并非用于隔离不可信软件包的操作系统沙箱。请检查命令,在适当情况下固定软件包版本,为每个子服务单独设置凭据,并确保危险的直连服务需要客户端人工审批。

请按照 SECURITY.md 中的说明私下报告漏洞。

开发

npm ci
npm run typecheck
npm test
./scripts/smoke-test.sh
npm run check:release
npm pack --dry-run

npm publish 会再次运行完整的 verify:release 检查。该检查会根据已构建的 CLI 确定公开工具的范围,并检查软件包、锁文件、更新日志和官方 MCP Registry 元数据中的版本是否一致。

采用 Apache-2.0 许可证。由 Mentu AI 维护。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。