01.前言

如何开发自己的一个MCP server?

如何贡献自己的MCP到魔搭?

这篇文章教你玩转魔搭MCP广场

 

继魔搭社区上线了MCP广场后,非常多开发者找到我们,希望分享自己的MCP 服务供大家使用。就在今天,魔搭MCP广场开放了自主创建MCP的入口,支持开发者自己上传MCP server。

在MCP广场创建自己的MCP有两种状态,可托管部署和仅分发展示。如您的MCP不需要依赖本地环境,可以选择用“可托管部署”的方式创建,这将使您拥有一个用魔搭免费资源托管的云端MCP服务器。

 

MCP广场地址:modelscope.cn/mcp

 

 

下面小编用一个案例带大家实现自己的MCP,并将它部署到魔搭 MCP 广场。

02.如何使用 FastMCP 框架构建您自己的 MCP 服务器

FastMCP简介

FastMCP 是构建 MCP 服务器和客户端的标准框架,使用简洁的 Python 代码即可创建工具、公开资源、定义提示词等:

from fastmcp import FastMCP
mcp = FastMCP("Demo 🚀")
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b
if __name__ == "__main__":
    mcp.run()

FastMCP 实现了所有复杂的协议细节和服务器管理,开发者可以专注于MCP服务本身的工具实现。FastMCP 提供高级接口,且是python风格的,在大多数情况下,您只需装饰一个函数即可将您的项目封装为MCP Server。

准备环境,并初始化项目目录

Python版本的MCP servers开发过程用uv管理是最连贯的,本文全程以uv命令演示。

# 1、安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 初始化项目目录
uv init mcp-calculator && cd mcp-calculator

# 创建隔离环境并激活
uv venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate

# 安装核心依赖
uv add "mcp[cli]"

另外,您需要一个支持使用 MCP 协议调用工具的 LLM 应用程序,即“MCP 客户端”,例如 Cherry Studio、Claude Desktop、Cursor 或 Cline。
 

开发您的MCP server

本本文以一个简单的计算器实现,演示如何用FastMCP开发一个MCP服务。

在上一步创建的项目中,创建server.py文件,放在src/mcp_calculator_kel目录下,server.py里的内容如下:

from fastmcp import FastMCP
import math

mcp = FastMCP("CalculatorService")

# 算术工具组
@mcp.tool()
def add(a: float, b: float) -> float:
    """执行浮点数加法运算"""
    return a + b

@mcp.tool()
def subtract(a: float, b: float) -> float:
    """执行浮点数减法运算"""
    return a - b

@mcp.tool()
def multiply(a: float, b: float) -> float:
    """执行浮点数乘法运算"""
    return a * b

@mcp.tool() 
def divide(a: float, b: float) -> float:
    """执行浮点数除法运算
    Args:
        b: 除数(必须非零)
    """
    if b == 0:
        raise ValueError("除数不能为零")
    return a / b

# 高级数学工具
@mcp.tool()
def power(base: float, exponent: float) -> float:
    """计算幂运算"""
    return base ** exponent

@mcp.tool()
def sqrt(number: float) -> float:
    """计算平方根"""
    return math.sqrt(number)

@mcp.tool()
def factorial(n: int) -> int:
    """计算整数阶乘"""
    return math.factorial(n)


if __name__ == "__main__":
    mcp.run(transport="stdio")

调试您的MCP server

调试服务最快的方式是使用 MCP Inspector,用开发模式启动您的服务,非常方便debug,极力推荐。

# 使用MCP检查器调试
mcp dev server.py

 

命令运行后,访问 http://localhost:5173 可进行交互测试

 

客户端测试您的MCP server(可选)

一旦您的服务调试通过后,可用python命令在本地客户端中使用了,例如在Cherry Studio的MCP 服务器页面配置您的MCP服务器:

回到对话界面,打开自己的MCP服务器,即可进行测试

03.打包发布Python库到PyPI

为了后续可以在魔搭MCP广场托管部署您的服务,您需要将您的本地脚本打包,并发布到PyPI官网。如果您的服务需要依赖本地环境,是一个local的MCP Server,则不需要上传到PyPI,可直接去魔搭MCP广场创建MCP。

如何打包发布到PyPI?到目前为止,我们已经有了一个可以运行的MCP server脚本server.py

代码开发

打包本地脚本后,可以将这个mcp server作为模块来运行,而不是直接通过脚本运行。

打包本地脚本需要新建两个文件__init__.py 和 __main__.py,还是放在src/mcp_calculator_kel目录下。

新建__init__.py:需要有一个main()函数来运行mcp

import argparse
from .server import mcp

def main():
    """MCP Wiki kel: Read Wikipedia articles and convert them to Markdown."""
    parser = argparse.ArgumentParser(
        description="Gives you the ability to read Wikipedia articles and convert them to Markdown."
    )
    parser.parse_args()
    mcp.run()

if __name__ == "__main__":
    main()

新建__main__.py:脚本调用main()函数,在python包运行的时候作为入口点

from mcp_calculator_kel import main

main()

本地测试

# 以模块运行
uv run -m mcp_calculator_kel

或者也可以在MCP 客户端比如Cherry Studio上配置config测试

"mcp_calculator_kel": {
  "isActive": true,
  "name": "calculator",
  "type": "stdio",
  "command": "uv",
  "args": [
    "--directory",
    "/Users/xxx/mcp_calculator_kel/src",  # 替换为自己的路径
    "run",
    "-m",
    "mcp_calculator_kel"
  ]
}

作为一个包发布到PyPI

1、您需要确保在您的项目根目录,存在一个完整的pyproject.toml文件

该.toml文件在前面的步骤中应该已经自动生成,内容包括:

  • 包的元信息:名字、版本、描述、作者
  • 依赖项
  • 构建系统配置
  • MCP入口

小编的pyproject.toml文件如下:(可以复制后改成自己的版本)

[project]
name = "mcp-calculator"
version = "0.1.2"
description = "a mcp calculator"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "build>=1.2.2.post1",
    "mcp[cli]>=1.9.2",
    "twine>=6.1.0",
]

[project.scripts]
mcp_calculator_kel = "mcp_calculator_kel:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

2、为您的Python包创建一个README.md

3、构建您Python包

cd mcp_calculator_kel

# 安装构建工具
uv add build twine

# 构建您的Python包
uv run -m build

构建完成后,您将在dist/目录下看见.whl和.tar.gz的两个文件

4、准备PyPI账户,复制token

PyPI官网:

5、上传您的Python包

uv run -m twine upload dist/***.whl

这一步会提示您输入PyPI的token

6、通过inspector快速测试

npx @modelcontextprotocol/inspector uvx mcp_calculator_kel

提示:如果测试不通过,或者后续有更新,需要在pyproject.toml中更新版本号,重复以上3-5步

7、MCP客户端测试

一旦发布完成, 用户就可以通过uvx安装和使用您的 MCP server。uvx会创建一个临时环境,安装依赖并执行这个包,非常的简洁优雅。

{
  "mcpServers": {
    "mcp_calculator_kel": {
        "command": "uvx",
        "args": [
          "mcp-calculator"
        ]
      }
  }
}

托管部署您的MCP服务到魔搭MCP广场

在MCP广场创建自己的MCP,选择“自定义创建”。魔搭也支持从GitHub仓库快速创建,如果您已经将自己的代码托管到GitHub仓库,可以用默认方式快速创建。

接下来进入魔搭MCP广场创建MCP

MCP广场地址:modelscope.cn/mcp

或者直接点击创建链接:https://modelscope.cn/mcp/servers/create?template=customize

创建第一步需要填写中英文名称、来源地址等基础信息,托管类型选择“可托管部署”。

创建第二步填写配置,填写您的MCP服务配置config和环境变量。

创建第三步写一个清晰完整的README。

点击创建之后,后台会自动根据这些信息进行自动托管部署。

Tips:

如果您创建服务的时候选择用“可托管部署”的方式创建,但是您的MCP服务不满足托管部署的条件,或由于服务配置错误的问题导致自动托管部署的流程失败,您的服务会退化至“仅可本地使用”的方式托管到魔搭。

如果您的服务需要依赖本地环境,是一个local的MCP Server,去魔搭MCP广场创建MCP的时候,托管类型选择“仅本地可用”即可。

以下是小编创建的Hosted MCP示例

https://modelscope.cn/mcp/servers/kelseye/mcp_calculator_kel_test

点击链接阅读全文

https://modelscope.cn/mcp/servers/kelseye/mcp_calculator_kel_test

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐