从零到一:打包并发布你的第一个MCP AI工具服务

探索MCP:模型上下文协议

概述

MCP (Model Context Protocol) 是一种专为大型语言模型 (LLM) 设计的协议,旨在打通模型与外部数据源、工具及服务之间的壁垒,实现无缝集成。

传输方式

MCP主要支持以下几种传输方式:

  1. stdio (标准输入/输出)

    这是最基础和通用的传输方式。它通过标准输入流读取数据,并向标准输出流写入结果,非常适合本地开发、命令行工具 (CLI) 和代理插件的集成。

  2. sse (服务器发送事件)

    SSE 基于标准的 HTTP 协议,用于解决远程服务的访问问题。在此模式下,MCP 服务作为一个独立的 Web 服务器运行,能够处理来自多个客户端的并发连接。

  3. streamable-http (可流式传输的HTTP)

    这是MCP协议在新版本中引入的新传输机制,作为 SSE 的强大替代方案。它同样基于 HTTP POST/GET 请求,并利用服务器发送事件 (SSE) 的能力来高效地流式传输多条服务器消息。

构建一个简单的MCP服务

MCP服务示例

使用 FastMCP 可以轻松创建一个MCP服务。

python 复制代码
from mcp.server.fastmcp import FastMCP

# 初始化MCP服务实例
mcp = FastMCP("My_Mcp_Server")

@mcp.tool()
def sum(a: int,b: int) -> int:
    """ 两个数相加求和
    
    Args:
        a (int): 整数a
        b (int): 整数b
        
    Returns:
        int: 两个数的和
    """
    return a+b

if __name__ == '__main__':
    # 启动MCP服务,使用标准输入输出作为传输方式
    mcp.settings.host = "0.0.0.0"
    mcp.settings.port = 8000
    mcp.run(transport='stdio')
    print("MCP服务已启动,等待工具调用...")

在本地使用MCP服务

在支持MCP的 AI工具(如 trae)中,可以通过简单的JSON配置来注册和使用本地服务。

配置 mcp.json 文件:

python 复制代码
{
  "mcpServers": {
    "My_Mcp_Server": {
      "command": "python",
          "args": [
            "D:\\WorkSpace\\AI\\demo\\main.py"
          ]
    }
  }
}

配置完成后,可以在工具中看到服务状态。 现在,向 AI 提问,验证服务是否被成功调用。

部署并远程调用MCP服务

本地 stdio 模式非常适合开发和调试,但若要让服务被公开访问,则需要将其部署为网络服务。这可以通过 sse 或 streamable-http 协议实现。

切换传输协议

只需在服务入口文件中修改一行代码,即可切换传输协议。

bash 复制代码
if __name__ == '__main__':
    # 启动 MCP 服务,使用 sse 或 streamable-http 协议
    # mcp.run(transport='stdio')
    mcp.settings.host = "0.0.0.0"
    mcp.settings.port = 8000
    mcp.run(transport='sse')
    # mcp.run(transport='streamable-http')

在AI客户端中配置远程服务

以 Cherry Studio 为例,添加一个新的MCP服务,并根据选择的协议进行配置。

  • 使用 sse 协议 : 选择 sse 类型,并输入服务地址,格式为 http://<IP>:<端口>/sse。
  • 使用 streamable-http 协议 : 选择 streamableHttp 类型,URL 地址格式为 http://<IP>:<端口>/mcp。

在AI开发工具中配置远程服务

可以将 Cherry Studio 中的图形化配置导出为 JSON,以便在其他开发工具(如 Cursor、VSCode)中使用。

将导出的 JSON 粘贴到开发工具的配置文件中。请注意 :某些工具(如 Cursor)要求将 baseUrl 字段名修改为 url 才能正确识别。

bash 复制代码
{
  "mcpServers": {
    "A_N9cktV9xBWJfUv4w3Ug": {
      "name": "我的MCP服务器",
      "type": "streamableHttp",
      "description": "",
      "isActive": true,
      "tags": [],
      "url": "http://localhost:8000/mcp"
    }
  }
}

配置完成后,即可在开发工具中看到服务已成功连接。

将MCP服务打包为Python包

将开发好后的工具封装成一个 Python 包并发布到 PyPI,是与社区共享成果的最佳方式。其他用户只需一条命令即可安装和使用所开发的MCP服务。

初始化项目

使用 uv 可以快速创建一个结构规范的Python项目。

bash 复制代码
# 创建并进入项目目录
mkdir ccyy_mcp
cd ccyy_mcp

# 当前目录下初始化 创建一个结构化的、可以打包分发的Python项目
uv init . --package

uv会创建一个src目录,并在里面建立一个与项目同名的子目录,里面还包含一个 __init__.py文件。这种结构是Python打包的推荐做法。

添加依赖

bash 复制代码
uv add "mcp[cli]"

编写服务与入口脚本

将之前的服务代码放入 src/ccyy_mcp/main.py。然后,在 src/ccyy_mcp/__init__.py 中创建一个 main 函数作为命令行入口。

在 __init__.py同级目录创建main.py文件编写MCP服务代码

bash 复制代码
from mcp.server.fastmcp import FastMCP

# 初始化MCP服务实例
mcp = FastMCP("My_Mcp_Server")

@mcp.tool()
def sum(a: int,b: int) -> int:
    """ 两个数相加求和
    
    Args:
        a (int): 整数a
        b (int): 整数b
        
    Returns:
        int: 两个数的和
    """
    return a+b

if __name__ == '__main__':
    # 启动MCP服务,使用标准输入输出作为传输方式
    mcp.run(transport='stdio')

在 __init__.py文件中配置启动MCP服务

python 复制代码
from ccyy_mcp.main import mcp

def main() -> None:
    mcp.settings.host = "0.0.0.0"
    mcp.settings.port = 8000
    mcp.run(transport='stdio')
    print("MCP服务已启动,等待工具调用...")

打包构建

默认情况下,执行uv build后,所有生成的打包文件(.whl 和 .tar.gz)都会被放置在项目根目录下的一个名为dist的文件夹里

bash 复制代码
uv build

获取Token

首先,访问Pypi官网,在Account settings菜单栏下找到API tokens并执行Add API token进行添加一个Token

发布到Pypi

在项目根目录执行以下命令将构建的Python包发布到Pypi网站

bash 复制代码
uv publish --token Token

发布成功后,就可以在PyPI网站的 Your projects页面看到包信息。

使用发布的包

现在,任何用户都可以通过 uvx(或 pipx)直接运行发布的MCP服务,无需手动下载代码。

  • 在 Cherry Studio 中使用 : command 填 uvx,args 填写包名 ccyy-mcp。

  • 在AI开发工具中配置:

python 复制代码
{
  "mcpServers": {
    "My_Mcp_Server": {
      "command": "uvx",
          "args": [
            "ccyy-mcp"
          ]
    }
  }
}
相关推荐
正在走向自律12 小时前
AI Agent 落地这一年:从“能跑起来”到“敢放出去”
大数据·人工智能·ai agent·智能体·mcp·a2a
VIP_CQCRE14 小时前
视频任务显示‘已提交’之后:别让异步生成变成黑盒
异步任务·工作流·ai视频·mcp
xrlfreedom17 小时前
MCP 面试高频考点:为团队沉淀可复用 Prompts 工作流,Tools、Resources、RAG 怎么分工?
tools·resources·mcp·rag 知识库
vjmap1 天前
MCP 实战:在 WorkBuddy 里一句话让 AI 生成红军长征地图动画(唯杰 AI 地图动画 MCP 接入教程)
aigc·gis·mcp
Bayze2 天前
让两个模型吵一架,再用第三个裁决——我把多 AI 协作磨成了五种模式,六轮真实测试修出七个 Bug
mcp
得帆低代码PaaS2 天前
企业级 Agent 架构:MCP、Integration、数据与治理能力
大数据·人工智能·架构·ai agent·企业数字化·mcp
jerrywus3 天前
让 AI 帮你部署 Vercel,报错了也不用手动搬日志
前端·agent·mcp
艺杯羹3 天前
MCP本地服务集成避坑:从Stdio管道僵死到双向JSON-RPC稳健通信
人工智能·python·ai·系统架构·大语言模型·ai编程·mcp
用户8813034824073 天前
MCP 不只是 Tool:Resource 和 Prompt 怎么写、何时用,附 3 个实测踩坑(Python SDK v2)
mcp
vjmap3 天前
AI 智能体调用绘图工具画矢量地图:唯杰 AI 地图绘制上线,支持 MCP 接入 Cursor、Claude Code
gis·agent·mcp