关于 mcp-server-shipping
用于将个人 MCP 服务打包并安装到多个项目中的工作流技能。它介绍通过 uv tool 进行本地开发和分发,以及在 Claude Code 中注册已安装的命令。
主要功能
- 01添加项目脚本入口
- 02从工作树或 GitHub 安装
- 03在 Claude Code 中注册命令
- 04选择用户或项目注册范围
- 05直接从 Git 远程仓库分发
适用场景
- 01让个人 MCP 服务可用于多个项目
- 02通过可编辑的本地安装开发服务
- 03从 GitHub 安装服务而无需发布到 PyPI
MCP 相关
介绍个人 MCP 服务的打包方式,以及如何使用 `claude mcp add` 在 Claude Code 中注册其命令。说明如何通过 `uv tool install` 从本地工作树或 GitHub 安装。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ theodoread/ agent-skills --skill mcp-server-shipping安装后在 Claude Code 中输入/mcp-server-shipping确认已加载。
附带文件README.mdreferences/rationale.md
详细介绍
发布个人 MCP 服务
适用于此类仓库的工作流:仓库的全部用途是生成供个人跨项目使用的 MCP 服务,而不是供其他代码导入的库。介绍如何从一个可正常工作的仓库,做到“可在任何项目中加载”,以及开发机器与其他环境之间有何不同。示例使用作者自己的服务名称——一组 *-polite-mcp 仓库——因为具体名称比占位符更易读;请在所有地方替换为你自己的名称。
发布 Agent Skill 是另一项工作,机制也不同——请参阅 skill-authoring-taudelta 技能,其中还介绍了如何部署对现有技能的修改。
此技能读取、运行和写入的内容
此技能不提供脚本;它通过指示你运行的命令来完成所有操作。
- 运行:
uv tool install、claude mcp add、claude mcp list。 - 写入:
uv tool install会在 uv 的工具目录下创建工具环境,并在PATH中放置一个 shim(默认位于~/.local/bin/);claude mcp add --scope user会将服务注册信息写入 Claude Code 的用户级配置,--scope project则写入仓库的.mcp.json。两者都可以通过相应工具的uninstall/remove撤销。除此之外不会写入任何内容,也不会改动服务所在仓库中的任何内容,只有你手动添加的[project.scripts]条目除外。 - 网络:
uv tool install git+…会克隆你指定的仓库。
每个仓库的开发循环
这里有两点具有普遍性,另一点则是作者自己的技术栈。 普遍适用的两点是:这类仓库需要一个一条命令即可完成的设置流程,从已提交的锁文件同步环境,而不是重新解析依赖;还需要一个一条命令即可完成的检查关卡,自动修复后运行与 CI 相同的检查。你的仓库已经在用什么,就继续用什么——重点在于两者都存在,且都能通过一条命令完成,而不是由哪个运行器提供。
本节其余内容描述的是作者的配置,仅作为实例,而非操作说明。在作者的机器上,这一系列仓库都会将 repo-tasks 作为开发依赖(将 git 用作制品存储,无需 PyPI),而不是手写 tasks.py 逻辑;因此仓库自己的 tasks.py 只有 from repo_tasks import ns;inv dev-env.setup 是设置命令,inv quality.precommit 是检查关卡;AGENTS.md/CLAUDE.md/skills 脚手架则在创建仓库时由 scaffoldapy 生成。请在所有地方替换为你自己的同类工具。
无论你使用什么运行器,都值得遵循这一条规则: 任务运行器是每个项目各自的依赖,绝不能假定它位于 PATH 中。任何从未激活的 shell 外部调用它的操作——CI 步骤、项目生成钩子、任何自动化——都必须通过项目自身的环境执行(对于由 uv 管理的项目,使用 uv run <runner> <task>),因为没有任何保证能确保单独使用运行器名称时,解析到的是此项目的版本,而不是其他版本,甚至不是什么都找不到。这正是本节旨在避免的错误,与使用哪个运行器无关。
一个入口点:通过 uv tool install 安装稳定的 PATH 二进制文件
在编写 server.py 之前,先在 MCP 仓库的 pyproject.toml 中添加 [project.scripts] 入口点(例如
olx-polite-mcp = "olx_polite_mcp.server:main"),而不是事后补上。然后通过 uv tool 将其作为真正的工具安装(已在
olx-polite-mcp/README.md 中端到端验证),而不是让 claude mcp add 指向 uv run/uvx 调用。uv tool install 会构建隔离环境,并在 PATH 上放置一个 shim(默认位于 ~/.local/bin/),因此注册时只需使用裸二进制名称,无需维护路径或标志:
主动开发期间,对本地工作树进行安装(可编辑模式——无需重新安装即可获取本地修改,因此仓库必须一直位于该路径):
uv tool install -e <path-to-your-checkout>
不再主动迭代后,从 GitHub 安装(为确保可复现性,可固定为 @<tag>/@<sha>;省略则使用默认分支):
uv tool install git+https://github.com/TheodoreAD/olx-polite-mcp
无论采用哪种方式,注册时都是同一条命令,与安装来源无关:
claude mcp add --scope user olx-polite-mcp olx-polite-mcp
切换来源时,再次使用 uv tool install 指定另一来源即可(uv 会替换现有工具)——无需运行 claude mcp remove/重新执行 add,因为注册的命令名称始终不变。
--scope user(而不是 local/project)与技能已采用的全局安装方式一致,因此该服务可在这台机器上的每个项目中使用,而不只是某一个项目。只有当某个_使用方_仓库希望任何克隆该仓库的人都能自动使用此服务时,才改用 --scope project(参见
olx-polite-mcp/README.md 中的项目范围示例)——这与个人跨项目使用是不同的情况。
可编辑安装不能与 GitHub 安装结合使用(可编辑安装需要 uv 能够指向的真实工作目录;从 git 来源安装时不会暴露这样的目录)。若要“在本地编辑,但从 GitHub 获取”,请自行执行 git clone,然后对该克隆运行 uv tool install -e;这仍然属于从磁盘进行可编辑安装的情况。
项目范围和用户范围的服务都需要在 claude 启动时进行一次性批准,之后才能启动_新_会话(claude mcp list 会显示待批准的服务)——已获批准且正在运行的会话会继续使用该服务。
分发:跳过 PyPI
对于这种规模的项目(个人用途、非商业用途),uv tool install 直接从 git 远程解析(见上文),就能让 GitHub 仓库本身充当制品存储库——无需版本递增、发布或配置凭据等流程。仓库有了值得固定的稳定版本后,可固定为 @<tag>/@<sha>;迭代期间不指定引用(跟踪默认分支)即可。
完整理由
references/rationale.md — 说明为何选择 git+uv 而非 PyPI(以及为何放弃最初采用的 uvx/uv run 方案)、为何使用 --scope user,以及为何一个注册命令即可涵盖两种安装来源。