从零开始学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

相关推荐
努力努力再努力FFF5 分钟前
医生对AI辅助诊断感兴趣,作为临床人员该怎么了解和学习?
人工智能·学习
AI医影跨模态组学18 分钟前
如何将纵向MRI深度学习特征与局部晚期直肠癌新辅助放化疗后的免疫微环境建立关联,并解释其对pCR及预后的机制
人工智能·深度学习·论文·医学·医学影像·影像组学
Empty-Filled20 分钟前
AI生成测试用例功能怎么测:一个完整实战案例
网络·人工智能·测试用例
eastyuxiao20 分钟前
设计一个基于 OpenClaw 的 AI 智能体来辅助交易
人工智能
风之所往_25 分钟前
Python 3.0 新特性全面总结
python
2401_8822737227 分钟前
如何在 CSS 中正确加载本地 JPG 背景图片
jvm·数据库·python
波动几何1 小时前
因果动力学架构技能cda
人工智能
Lucas_coding1 小时前
【Claude Code Router】 Claude Code 兼容 OpenAI 格式 API, Claude code 接入本地部署模型
人工智能·python
jinanwuhuaguo1 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
测试员周周1 小时前
【AI测试系统】第5篇:从 Archon 看 AI 工程化落地:为什么"确定性编排+AI 弹性智能"是终局?
人工智能·python·测试