mcpField
M
mcp-multi-poc-alpha

mcp-multi-poc-alpha

本地服务
github.com/nithishr开发工具013 周前更新

关于 mcp-multi-poc-alpha

mcp-multi-poc-alpha 是用于验证单个 PyPI 包如何通过子命令提供多个服务器的 MCP 服务条目,面向测试注册表打包和客户端启动行为的开发者。

主要功能

  1. 01通过子命令选择服务器
  2. 02多个服务条目共用 PyPI 包
  3. 03测试基础安装启动方式

适用场景

  1. 01检查注册表是否支持一个包对应多个条目
  2. 02测试客户端依据注册表元数据启动

MCP 相关

这是验证多服务器打包方式的 MCP 服务条目。README 将 alpha 关联到 operational 服务,并提及 `echo` 工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"nithishr-mcp-multi-poc-alpha": {
"command": "uvx",
"args": [
"mcp-multi-poc"
]
}
}
}
启动命令uvx mcp-multi-poc

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

安装包
pypimcp-multi-poc0.1.0

工具

1

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

参数类型必填说明
textstring是

详细介绍

mcp-multi-poc

用于验证如何通过单个 PyPI 包提供多个 MCP 服务的概念验证项目(PoC),通过子命令选择服务,并使用可选 extras 按需安装依赖。 该项目旨在回答 Couchbase MCP 单体仓库相关问题(alpha = operational,beta = analytics,tabulate = analytics SDK — 之所以选择它,是因为它不在 fastmcp 的传递依赖树中;httpx 和 pyyaml 则在其中,会悄然绕过 extras 防护)。

此 PoC 必须回答的问题

#问题测试位置
1两个 MCP 注册表条目能否指向同一个 PyPI 包?发布 server.alpha.json 和 server.beta.json
2注册表所有权验证是否接受同一个包 README 中的多个 mcp-name 注释?上方的两个 HTML 注释
3注册表架构/验证器是否接受 identifier 中的 extras 语法(mcp-multi-poc[beta])?server.beta.json — 如果被拒绝,则改用纯 identifier,并记录无法表达 extras
4客户端能否根据注册表元数据正确运行子命令形式(uvx mcp-multi-poc alpha)?从客户端安装两个服务(Claude Desktop / MCP Inspector)
5是否存在符合架构的方式,运行名称不同于包名的控制台脚本(mcp-multi-poc-beta)?server.beta-script.json。5a(失败):identifier = 脚本名 → 404,identifier 必须是实际的 PyPI 包。5b(当前文件):identifier = 实际包名,将脚本名作为位置参数 runtimeArgument 混入 → uvx --from 'mcp-multi-poc[beta]' mcp-multi-poc-beta mcp-multi-poc;追加的 identifier 会变成多余参数,服务必须忽略它。如果 5b 也失败,备用方案是为每个脚本使用一个垫片包

目前的发现(2026-07-31)

  • Q1 — 每个 PyPI 包对应多个条目:是。 mcp-multi-poc-alpha 已针对共享包发布。
  • Q2 — 一个 README 中有多个 mcp-name 注释:是(存在三个注释时,alpha 验证通过)。
  • Q3 — identifier 中使用 extras:不行,但可以通过 runtimeArguments 表达。 identifier 中的 extras 会导致字面 PyPI 查询失败 — PyPI package 'mcp-multi-poc[beta]' not found (status: 404)。备用方案可行:mcp-multi-poc-beta 已成功发布,使用纯 identifier: mcp-multi-poc + runtimeArguments: --from "mcp-multi-poc[beta]" (已在注册表上线,并通过 /v0/servers API 验证)。
  • Q5a — 将名称不同的控制台脚本用作 identifier:不行(发布时已确认)。 同样会触发 404('mcp-multi-poc-beta' not found)——注册表会先验证 identifier 是否为实际的 PyPI 包。
  • Q5b — 将脚本名作为位置参数 runtimeArgument:可以,已发布。 io.github.nithishr/mcp-multi-poc-beta-script 已上线(发布于 2026-07-31;将 description 缩短至 100 字符上限后发布成功,这是唯一的验证问题)。在本地,uvx --from 'mcp-multi-poc[beta]' mcp-multi-poc-beta mcp-multi-poc 能完成 MCP 初始化握手——末尾的 identifier 会被静默忽略,因为 main() 从不解析 argv。注意事项:仅当入口点能够容忍多余 argv 时才安全(click 需要 ignore_unknown_options + allow_extra_args,或一个虚设的可选参数);依赖客户端保留 runtimeArguments 的顺序——这是使用最少的元数据路径;注册表 UI 会将 identifier 显示为可运行项。生产环境中,若每个服务使用独立脚本,优先为每个脚本使用一个垫片包(identifier == 脚本名,完全不使用 runtimeArguments)。
  • 发现的注册表验证限制: description ≤ 100 字符;identifier 必须是一个字面存在的 PyPI 包(不接受 extras);不验证 runtimeArguments/packageArguments 的内容。

本地冒烟测试(发布任何内容之前)

cd mcp-registry-poc
uv venv && uv pip install -e .
mcp-multi-poc alpha          # starts alpha on stdio (Ctrl+C to exit)
mcp-multi-poc beta           # must FAIL with the friendly extras message
uv pip install -e ".[beta]"
mcp-multi-poc beta           # now starts
mcp-multi-poc                # bare command runs alpha (backward-compat check)
mcp-multi-poc-beta           # Option 1 script works locally once extra installed

发布到 PyPI 后的 uvx 行为:

uvx mcp-multi-poc alpha                  # base only
uvx "mcp-multi-poc[beta]" beta           # extras via uvx — key UX under test
uvx --from "mcp-multi-poc[beta]" mcp-multi-poc-beta   # Option 1 fallback form

发布步骤(手动,按顺序)

  1. 如果 PyPI 上已有人使用 mcp-multi-poc,请选择其他名称并统一重命名 (pyproject 中的 name、[project.scripts],以及两个 server.json 标识符)。
  2. 构建并发布到正式 PyPI(注册表验证会从 pypi.org 获取;TestPyPI 不可用):uv build && uv publish。
  3. 安装 mcp-publisher 并登录: mcp-publisher login github(交互式)——必须与 io.github.<username> 命名空间匹配。
  4. 发布条目: mcp-publisher publish server.alpha.json、... server.beta.json 和 ... server.beta-script.json——最后一个预期会验证失败; 记录准确的错误信息(如果 CLI 要求文件位于 ./server.json,请先依次将每个文件复制到该位置)。
  5. 通过注册表 API 验证: curl "https://registry.modelcontextprotocol.io/v0/servers?search=mcp-multi-poc"
  6. 根据注册表元数据在客户端中配置这两个服务,并调用 echo(alpha)和 make_table(beta)。
  7. 记录上方各问题的结果,然后弃用或删除 PoC 条目。

Q4 — 从客户端测试已发布的条目

大多数客户端尚不能直接从官方注册表安装,因此 Q4 分为两部分:(a)规范要求的命令构造方式 (uvx <runtimeArguments> <identifier> <packageArguments>)能否生成可正常运行的 服务;(b)使用注册表的客户端是否会以相同方式构造命令。

  1. 获取实际发布的内容并检查 packages 区块: curl "https://registry.modelcontextprotocol.io/v0/servers?search=mcp-multi-poc"
  2. MCP Inspector——针对手动组装的命令进行交互式工具调用:
    npx @modelcontextprotocol/inspector uvx mcp-multi-poc alpha
    npx @modelcontextprotocol/inspector uvx --from "mcp-multi-poc[beta]" mcp-multi-poc beta
    
  3. Claude Code——使用与 stdio 服务相同的命令,然后调用 echo / make_table:
    claude mcp add poc-alpha -- uvx mcp-multi-poc alpha
    claude mcp add poc-beta -- uvx --from "mcp-multi-poc[beta]" mcp-multi-poc beta
    
    (对于 Claude Desktop,对应的 claude_desktop_config.json 条目如下:)
    {
      "mcpServers": {
        "poc-alpha": { "command": "uvx", "args": ["mcp-multi-poc", "alpha"] },
        "poc-beta":  { "command": "uvx", "args": ["--from", "mcp-multi-poc[beta]", "mcp-multi-poc", "beta"] }
      }
    }
    
  4. 通过注册表原生安装(真正的(b)测试):VS Code 的 MCP 服务 库由官方注册表提供支持——在那里搜索 mcp-multi-poc 并安装;这将测试客户端是否会自行组装 runtimeArguments + identifier + packageArguments。条目可能会延迟显示,或在显示前经过筛选。

步骤 2–3 只能证明(a);只有步骤 4(或其他使用注册表的客户端) 才能证明(b),而 beta/beta-script 条目实际上依赖的正是这一点。

评论

支持 Markdown

第一次接触 MCP?

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

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