MCP Server 项目发布指南

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


MCP Server 项目发布指南

在开发完自己的 MCP Server 后,我们希望其他用户能够方便地通过简单的命令运行你的服务,而不必手动下载代码。常见的方法是将代码打包发布到远程仓库:

  • 对于 Python 项目,通过 PyPI 发布后,用户可以使用 uvxpip 进行安装和运行。
  • 对于 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. 构建与上传

  1. 安装工具

    bash 复制代码
    pip install setuptools wheel twine
  2. 构建包

    arduino 复制代码
    python setup.py sdist bdist_wheel
  3. 上传到 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. 登录与发布

  1. 登录 npm
    在命令行中运行:

    bash 复制代码
    npm login

按提示输入用户名、密码及邮箱地址。

  1. 发布包

    在项目根目录下运行:

    复制代码
    npm publish

发布成功后,其他用户可以通过以下方式运行你的 MCP Server:

  • 直接通过 npx 运行:

    vbscript 复制代码
    npx your-mcp-server
  • 或全局安装后,直接运行命令:

    vbscript 复制代码
    your-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 方案

    1. 构建项目并编写入口脚本和 setup.py
    2. 通过构建工具生成分发包,并用 twine 上传到 PyPI。
    3. 用户可通过 uvx your-mcp-server 运行你的服务,无需本地代码。
  • Node.js 方案

    1. 构建项目并编写入口脚本、配置 package.json
    2. 登录 npm 后发布包到 npm 仓库。
    3. 用户可通过 npx your-mcp-server 或全局安装后直接运行命令来启动你的服务。

这种发布方式大大方便了代码分发和使用,让更多人可以轻松运行和集成你的 MCP Server,实现共享与协作。希望这篇指南对你有所帮助!

相关推荐
小臭希1 小时前
python蓝桥杯备赛常用算法模板
开发语言·python·蓝桥杯
mosaicwang1 小时前
dnf install openssl失败的原因和解决办法
linux·运维·开发语言·python
蹦蹦跳跳真可爱5892 小时前
Python----机器学习(基于PyTorch的乳腺癌逻辑回归)
人工智能·pytorch·python·分类·逻辑回归·学习方法
Bruce_Liuxiaowei2 小时前
基于Flask的Windows事件ID查询系统开发实践
windows·python·flask
carpell2 小时前
二叉树实战篇1
python·二叉树·数据结构与算法
司木源AGI3 小时前
支付宝MCP:国内首个支付MCP,可用AI工具一键调用支付宝!(附详细配置流程)
mcp
HORSE RUNNING WILD3 小时前
为什么我们需要if __name__ == __main__:
linux·python·bash·学习方法
凡人的AI工具箱3 小时前
PyTorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(三)
人工智能·pytorch·python·深度学习·学习·生成对抗网络
码上通天地3 小时前
Python六大数据类型与可变类型
开发语言·python
Tiger_shl3 小时前
【Python语言基础】19、垃圾回收
java·python