下面是一篇在研究怎么创建MCPserver并且发布时根据学习整合后的文章,详细介绍如何将 MCP Server 项目发布到远程仓库,并让其他用户通过 uvx 或 npx 运行你的服务。文章中分别包含了针对 Python(发布到 PyPI,供 uvx 运行)和 Node.js(发布到 npm,供 npx 运行)的项目结构、示例代码以及注意要点。
MCP Server 项目发布指南

在开发完自己的 MCP Server 后,我们希望其他用户能够方便地通过简单的命令运行你的服务,而不必手动下载代码。常见的方法是将代码打包发布到远程仓库:
- 对于 Python 项目,通过 PyPI 发布后,用户可以使用
uvx
或pip
进行安装和运行。 - 对于 Node.js 项目,通过 npm 发布后,用户可以使用
npx
或全局安装来运行命令行工具。
在MCP client 中就是对应用client调用时配置的command和arg的配置,调用不同情况的MCP server。
下面分别介绍两个流程以及示例代码和关键注意点。
一、Python 包发布到 PyPI(供 uvx 运行)
1. 项目结构
确保项目目录结构合理,建议如下:
bash
your_mcp_server/
├── your_mcp_server/
│ ├── __init__.py
│ └── main.py # MCP Server 主逻辑
├── README.md # 使用说明
├── LICENSE # 开源许可证(如 MIT)
└── setup.py # 包的配置信息
2. 关键文件内容
(1) your_mcp_server/main.py
python
# your_mcp_server/main.py
import sys
import json
def main():
"""
作为命令行入口,循环读取标准输入,并处理请求后返回响应
"""
for line in sys.stdin:
try:
request = json.loads(line)
# 处理请求逻辑,例如简单响应
response = {"result": "Hello, MCP from PyPI!"}
except Exception as e:
response = {"error": str(e)}
print(json.dumps(response))
sys.stdout.flush()
if __name__ == "__main__":
main()
(2) setup.py
ini
# setup.py
from setuptools import setup, find_packages
setup(
name='your-mcp-server', # 包名称,在 PyPI 上的名称
version='0.1.0', # 版本号
packages=find_packages(), # 自动查找包目录
entry_points={
'console_scripts': [
# 定义命令行工具,用户运行 uvx your-mcp-server 时会执行 your_mcp_server.main:main
'your-mcp-server=your_mcp_server.main:main',
],
},
install_requires=[], # 如有依赖可以在这里添加
author='Your Name',
author_email='[email protected]',
description='A custom MCP Server example for PyPI.',
long_description=open('README.md', encoding='utf-8').read(),
long_description_content_type='text/markdown',
license='MIT',
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
],
)
(3) README.md
perl
# Your MCP Server
这是一个简单的 MCP Server 示例,通过标准输入输出与 MCP 客户端进行通信。
## 安装
```bash
pip install your-mcp-server
```
## 使用
通过 uvx 运行:
```
uvx your-mcp-server
```
(4) LICENSE
选择合适的开源许可证,例如 MIT License,其文本可参照MIT License。
3. 构建与上传
-
安装工具
bashpip install setuptools wheel twine
-
构建包
arduinopython setup.py sdist bdist_wheel
-
上传到 PyPI
twine upload dist/*
上传成功后,其他用户就可以通过以下命令运行你的 MCP Server(uvx 会自动下载并运行你在 PyPI 上发布的包):
vbscript
uvx your-mcp-server
4. 注意要点
- 入口函数 :确保在
setup.py
中配置了entry_points
,这样用户才能直接通过命令行调用你的服务。 - 依赖管理 :在
install_requires
中列出项目依赖,保证用户安装时依赖自动安装。 - 编码问题:读取 README 文件时建议指定编码为 UTF-8。
- 版本管理:发布新版本时请更新版本号,避免与已有版本冲突。
二、Node.js 包发布到 npm(供 npx 运行)
1. 项目结构
建议的项目目录结构如下:
python
your-mcp-server/
├── bin/
│ └── index.js # MCP Server 主逻辑
├── package.json # 包配置信息
├── README.md # 使用说明
└── LICENSE # 开源许可证(如 MIT)
2. 关键文件内容
(1) bin/index.js
javascript
#!/usr/bin/env node
// bin/index.js
const readline = require('readline');
// 创建 readline 接口,监听标准输入
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
try {
const request = JSON.parse(line);
// 简单响应示例
const response = { result: 'Hello, MCP from npm!' };
console.log(JSON.stringify(response));
} catch (error) {
const response = { error: error.toString() };
console.log(JSON.stringify(response));
}
});
注意:文件第一行的 shebang (#!/usr/bin/env node
) 必须存在,以便系统识别并正确执行该脚本。
(2) package.json
perl
{
"name": "your-mcp-server",
"version": "0.1.0",
"description": "A custom MCP Server example for npm.",
"main": "bin/index.js",
"bin": {
"your-mcp-server": "bin/index.js"
},
"scripts": {
"start": "node bin/index.js"
},
"author": "Your Name <[email protected]>",
"license": "MIT",
"dependencies": {}
}
(3) README.md
shell
# Your MCP Server
这是一个基于 Node.js 的 MCP Server 示例,通过标准输入输出与 MCP 客户端通信。
## 安装
全局安装:
```bash
npm install -g your-mcp-server
或者直接使用 npx 运行:
npx your-mcp-server
## 使用
该服务会监听标准输入,处理 JSON 格式的请求,并返回响应。
(4) LICENSE
选择合适的开源许可证,例如 MIT License。
3. 登录与发布
-
登录 npm
在命令行中运行:bashnpm login
按提示输入用户名、密码及邮箱地址。
-
发布包
在项目根目录下运行:
npm publish
发布成功后,其他用户可以通过以下方式运行你的 MCP Server:
-
直接通过 npx 运行:
vbscriptnpx your-mcp-server
-
或全局安装后,直接运行命令:
vbscriptyour-mcp-server
4. 注意要点
- Shebang 行 :确保
bin/index.js
文件的第一行包含#!/usr/bin/env node
,保证脚本可以在命令行中直接运行。 - bin 配置 :在
package.json
中通过bin
字段指定命令名称,发布后用户可以直接使用该命令。 - 文件权限 :在 Unix 系统下,确保
bin/index.js
拥有可执行权限(如执行chmod +x bin/index.js
)。 - 依赖管理 :如有需要使用第三方模块,在
dependencies
中添加相应依赖。
三、总结
通过以上两个流程示例,你可以了解到:

-
Python 方案:
- 构建项目并编写入口脚本和
setup.py
。 - 通过构建工具生成分发包,并用 twine 上传到 PyPI。
- 用户可通过
uvx your-mcp-server
运行你的服务,无需本地代码。
- 构建项目并编写入口脚本和
-
Node.js 方案:
- 构建项目并编写入口脚本、配置
package.json
。 - 登录 npm 后发布包到 npm 仓库。
- 用户可通过
npx your-mcp-server
或全局安装后直接运行命令来启动你的服务。
- 构建项目并编写入口脚本、配置
这种发布方式大大方便了代码分发和使用,让更多人可以轻松运行和集成你的 MCP Server,实现共享与协作。希望这篇指南对你有所帮助!