从零开始学MCP(八)- 构建一个MCP server

在本教程中,我们将通过构建一个简单的MCP server,并通过 OpenMCP进行测试。

MCP核心概念

MCP servers可以提供三种主要类型的功能:

  1. Resources: 客户端可以读取的类文件数据(如API响应或文件内容)
  1. Tools: LLM可以调用的函数(经过用户批准)
  1. Prompts: 帮助用户完成特定任务的预编写模板

本教程使用Python进行演示(当然还可使用TypeScript、Java、Rust等其他语言, 参考)。

📝 日志处理指南

在开发 MCP 服务器时,日志记录方式取决于服务器的传输协议。请根据您的实现方式遵循以下准则:

1. STDIO 基础服务器

严禁向标准输出写入任何内容。

  • 🚫 禁止操作: 所有的调试打印语句(如 print() 、 console.log() 、 fmt.Println() 等)。
  • ⚠️ 后果: 任何写入标准输出的内容都会破坏 JSON-RPC 消息流,导致服务器通信中断。

2. HTTP 基础服务器

标准输出日志是安全的。

  • ✅ 允许操作: 可以正常使用标准输出进行日志记录。
  • 💡 原因: 日志输出不会干扰 HTTP 响应数据。

安装 uv

本次将使用 uv 来管理项目

uv是用 Rust 编写的 Python 超快包管理器,可替代 pip 、 venv 和 pip-tools ,极速安装依赖并管理虚拟环境。

如果你还未使用过uv,请先下载安装:

复制代码
pip install uv

查看 uv 的版本:

复制代码
uv version

输出以下内容代表安装成功(版本号取决于你安装的版本)

scss 复制代码
uv 0.8.22 (ade2bdbd2 2025-09-23)

快速开始

创建项目并初始化

bash 复制代码
mkdir -p ~/codes/my_first_mcp

cd ~/codes/my_first_mcp

uv init --no-workspace

添加MCP相关库

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

修改main.py

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

# 初始化 FastMCP 服务器
mcp = FastMCP("我的第一个MCP")

@mcp.tool(name="greet", description="两个数相加")
def add(a: int, b: int) -> int:

    return a + b

@mcp.resource("resource://{name}")
def get_greeting(name: str) -> str:
    """"根据resource中的名字向他问好(资源名建议为英文,否则出现乱码)"""
    return f"Hello, {name}!"

@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    styles = {
        "friendly": "写一个温暖友好的问候语",
        "formal": "写一个正式的问候语",
        "casual": "写一个随意的问候语"
    }
    return f"给{name}{styles.get(style, styles['friendly'])}"

# 以http方式启动服务器
if __name__ == "__main__":
    mcp.run(transport="streamable-http")

测试

安装OpenMCP, 参考,效果如下


欢迎加入我的【ima知识库】 从零开始学MCP

相关推荐
古少侠几秒前
用 DS随心转 把 AI 给的表格导出成能筛选、能统计的 Excel
人工智能·excel
Francek Chen4 分钟前
【HarmonyOS 7】新品发布:华为Mate XT 2携麒麟9050 Pro与鸿蒙7重磅登场
人工智能·华为·harmonyos·鸿蒙·小艺
找方案5 分钟前
AI Agent在金融风控中的实战:从预警到决策的5分钟
人工智能
威联通安全存储5 分钟前
TS-h1887XU-RP 在模具制造行业试模与改模数据场景的部署
python·制造
小白羊丨7 分钟前
为什么微调而不是大模型 + Prompt?正确率如何得到,是否过拟合?
大数据·人工智能·prompt
步行cgn10 分钟前
Spring Environment 详解:Spring Boot 配置管理的核心接口
spring boot·python·spring
MindUp10 分钟前
AI算命背后的技术逻辑:从Prompt设计到排盘引擎的三款产品实测对比
人工智能·架构
Zzj_tju11 分钟前
蒸馏:从教师软概率到 response 监督的最小复现
人工智能·语言模型·自然语言处理
Csvn13 分钟前
🐍 Day 12: 编码与字符集 — 告别乱码噩梦
后端·python
2601_9622838815 分钟前
Python 开发框架:Django、Flask和FastAPI
python·django·flask·fastapi·web开发