💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

在这里插入图片描述

💖The Start💖点点关注,收藏不迷路💖


在当今快速发展的技术环境中,自定义工具开发成为提升开发效率和扩展个人技术栈的重要方式。Python作为一门灵活且生态丰富的语言,为开发者提供了从零构建工具并分享到社区的便捷途径。MCP(My Custom Package)作为一种自定义工具包,能够帮助开发者封装常用功能,提升代码复用性。本文将详细介绍如何从零开始开发一个MCP工具,实现加法功能,并最终发布到Test PyPi,为Python开发者提供实用参考。


1. 环境准备与项目初始化

1.1 安装Python与必要工具

首先,确保您的系统已安装Python,建议使用3.8或更高版本。您可以通过以下命令检查Python版本:

python --version

如果尚未安装Python,请访问Python官网下载并安装适合您操作系统的版本。安装完成后,确认pip(Python包管理器)也已安装:

pip --version

接下来,安装虚拟环境工具。虚拟环境能帮助隔离项目依赖,避免版本冲突。推荐使用Python内置的venv模块:

# 创建虚拟环境
python -m venv my-mcp-env

# 激活虚拟环境(Windows)
my-mcp-env\Scripts\activate

# 激活虚拟环境(Linux/Mac)
source my-mcp-env/bin/activate

激活后,命令行提示符前会显示环境名称,表示已进入虚拟环境。

1.2 初始化项目结构

创建一个项目根目录,例如my-mcp-tool,并初始化基本文件结构:

mkdir my-mcp-tool
cd my-mcp-tool

在项目根目录下,创建setup.pyrequirements.txt文件。setup.py用于定义包元数据和打包配置,requirements.txt列出项目依赖。

示例setup.py内容:

from setuptools import setup, find_packages

setup(
    name="my-mcp-tool",
    version="0.1.0",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    install_requires=[
        # 依赖将在这里列出
    ],
    python_requires=">=3.8",
)

创建基础包结构。推荐将源代码放在src目录下:

mkdir -p src/mypackage

此时,项目结构应如下所示:

my-mcp-tool/
├── setup.py
├── requirements.txt
└── src/
    └── mypackage/
        └── __init__.py

2. 集成官方Python SDK与添加MCP依赖

2.1 理解MCP与Python SDK的关系

MCP工具通常基于Python SDK开发,利用SDK提供的框架和工具简化开发流程。Python SDK为MCP提供基础功能,如HTTP服务器、路由管理和请求处理,使开发者能专注于业务逻辑而非底层实现。

2.2 添加MCP依赖到项目

编辑requirements.txt文件,添加MCP相关依赖。假设我们使用Flask作为Web框架来开发MCP服务:

flask>=2.0.0

然后,通过pip安装依赖:

pip install -r requirements.txt

安装完成后,验证依赖是否成功安装且无报错:

python -c "import flask; print('Flask version:', flask.__version__)"

如果输出Flask版本信息,则表示依赖安装成功。


3. 开发核心功能:加法模块

3.1 创建server.py并实现加法功能

在项目根目录下创建server.py文件,用于实现MCP服务器。我们将编写一个简单的加法函数,并添加参数验证和异常处理。

示例代码:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/add', methods=['GET'])
def add_numbers():
    try:
        a = request.args.get('a', type=float)
        b = request.args.get('b', type=float)
        if a is None or b is None:
            return jsonify({"error": "Parameters 'a' and 'b' are required"}), 400
        result = a + b
        return jsonify({"result": result})
    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True, port=5000)

此代码创建了一个Flask应用,定义了一个/add端点,接受GET请求,从查询参数中获取ab,返回它们的和。代码包含了基本的错误处理,确保参数缺失或类型错误时返回适当的错误信息。

3.2 复制提供的代码到server.py

将上述代码完整复制到server.py文件中。解析代码结构:

  • 导入必要的模块(Flask、request、jsonify)。
  • 创建Flask应用实例。
  • 定义路由/add和对应的处理函数add_numbers
  • 在函数中,获取参数并验证,计算加法结果,返回JSON响应。
  • 最后,启动Flask开发服务器。

确保代码逻辑完整,符合PEP8规范(例如,使用4空格缩进,避免过长代码行)。


4. 本地测试与调试

4.1 运行MCP并检查输出

使用以下命令启动MCP服务:

python server.py

如果运行成功,终端将输出类似以下的信息:

 * Serving Flask app 'server'
 * Debug mode: on
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

这表明服务已启动并在本地5000端口监听。观察日志确认无错误信息。

4.2 测试加法功能

通过浏览器或命令行工具(如curl)访问服务端点进行测试。例如,在浏览器中打开:

http://127.0.0.1:5000/add?a=5&b=3

或使用curl命令:

curl "http://127.0.0.1:5000/add?a=5&b=3"

预期返回JSON响应:

{"result": 8}

如果参数缺失或类型错误,应返回相应的错误信息,例如:

http://127.0.0.1:5000/add?a=5

返回:

{"error": "Parameters 'a' and 'b' are required"}

4.3 使用官方Node测试工具

官方提供了一个基于Node.js的MCP测试工具,用于验证本地或已发布的MCP服务。首先,确保已安装Node.js和npm。然后,安装MCP Tester:

npm install -g mcp-tester

运行测试工具,连接本地MCP服务:

mcp-tester --url http://127.0.0.1:5000

工具将自动测试所有端点,并输出测试结果。确保所有测试通过,验证服务的兼容性和稳定性。


5. 打包与发布到Test PyPi

5.1 配置项目元数据

编辑setup.py文件,填写完整的包元数据:

from setuptools import setup, find_packages

setup(
    name="my-mcp-tool",
    version="0.1.0",
    description="A simple MCP tool with addition functionality",
    author="Your Name",
    author_email="your.email@example.com",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    install_requires=[
        "flask>=2.0.0",
    ],
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires=">=3.8",
)

添加必要的分类器和依赖声明,确保包信息完整。

5.2 生成分发包

使用setuptools生成分发包。首先,确保已安装wheel:

pip install wheel

然后,运行打包命令:

python setup.py sdist bdist_wheel

这将在项目目录下生成dist文件夹,包含源码包(.tar.gz)和wheel包(.whl)。

5.3 发布到Test PyPi

首先,注册一个Test PyPi账户(访问test.pypi.org)。然后,获取API Token用于上传。

安装twine,用于上传包:

pip install twine

使用twine上传到Test PyPi:

twine upload --repository testpypi dist/*

输入您的Test PyPi用户名和密码(或API Token)。上传成功后,访问Test PyPi网站(https://test.pypi.org/project/my-mcp-tool/)查看已发布的包。


6. 安装与验证发布的MCP

6.1 从Test PyPi安装MCP

为了测试已发布的包,可以先卸载本地版本(如果已安装),然后从Test PyPi安装:

pip uninstall my-mcp-tool
pip install --index-url https://test.pypi.org/simple/ my-mcp-tool

确认安装成功且无依赖冲突:

python -c "import mypackage; print('Package installed successfully')"

6.2 测试已发布的MCP功能

运行MCP服务:

python -m mypackage.server

使用浏览器或curl测试加法功能,确保与本地开发时一致:

curl "http://127.0.0.1:5000/add?a=10&b=20"

预期返回:

{"result": 30}

使用官方Node测试工具再次验证,确保发布后的包功能完整。


7. 总结

回顾从零开发MCP工具的关键步骤:从环境准备、依赖集成、功能开发到测试与发布。每个环节都至关重要,尤其是测试与调试,能确保工具的稳定性和可靠性。

鼓励进一步探索,例如添加更多功能(如减法、乘法)、优化代码结构、或正式发布到PyPi。推荐参考官方Python打包文档、Test PyPi使用指南以及社区最佳实践,以不断提升开发技能。

通过本文的指导,您已掌握了开发并发布自定义MCP工具的基本流程,希望能为您的Python开发之旅提供帮助。


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The Start💖点点关注,收藏不迷路💖

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐