MCP实战篇-构建一个MCP服务
前篇已经介绍了MCP+n8n构建工作流,在里面可以体现出MCP服务的重要性,以及能看到MCP的可能性,在我们真正的实战过程中可能会有各种各样的需求,开放的MCP服务有极大可能实现不了我们的需求,这个时候如果你懂如何开发一个自己的MCP服务,如虎添翼,助力业务。
前言
前篇已经介绍了MCP+n8n构建工作流,在里面可以体现出MCP服务的重要性,以及能看到MCP的可能性,在我们真正的实战过程中可能会有各种各样的需求,开放的MCP服务有极大可能实现不了我们的需求,这个时候如果你懂如何开发一个自己的MCP服务,如虎添翼,助力业务。 完事开头难,我详细大部分人所有的行动都止于开头,不知道如何开发?不知道从哪里入手?不知道怎么使用? 看文章百遍,不如自己专心走一遍🚀🚀🚀
什么是MCP服务端
MCP Server(MCP服务端),在前面文章介绍MCP的时候说过,MCP其实是一个CS(Client Server)架构,本文提到的MCP Server就是这个CS架构中的S。 MCP协议在交互过程中如下图所示
在途中可以看出MCP Server扮演着很重要的角色,核心逻辑都在这个Server中。
那Server能干什么呢? 显而易见,能实现很多很多功能比如:从远程的服务获取数据、从本地的文件系统获取数据甚至可以操作我们的网盘、硬件等; 这些所有的操作都由LLM(大模型)驱动,由大模型来决定我们到底要使用MCP Server的哪个动作、哪个功能。
如何开发?
现在MCP协议其实比较成熟了,对于开发一个新的MCP Server官方已经提供了各种语言的SDK供我们使用,我们不需要从0开始写MCP协议,直接用轮子,我们不需要关心它的传输、交互协议,直接实现SDK提供的API即可。
在发过程中,对于MCP Server有几个比较重要的概念,它能提供的标准能力:Resources、Tools、Prompts,知道这些标准能力你就知道SDK里面的API到底是什么意思
- Resources:资源,类似于文件数据读取,可以是文件资源或是API响应返回的内容。
- Tools:工具,第三方服务、功能函数,通过此可控制LLM可调用哪些函数。
- Prompts 提示词(们):是指一类用户可控的、可重用的提示模板或工作流,用于标准化和简化与大型语言模型(LLM)的交互。简单来说,Prompts 是预定义的指令或消息结构,允许用户通过提供特定参数来触发与 AI 的某种一致性交互,而无需每次都手动编写完整的提示内容
铺垫了这么多该进入正题了ʕ•͡-•ʔ
Let's do it
在官方提供的众多SDK中,笔者学识浅薄选择了最擅长的Python SDK 作为demo的开发。如果对Python不了解的、或者想学习Python的可以私信我,我来给你规划下Python学习计划,一起成长 (●’◡’●)ノ MCP Server的Python SDK地址:https://github.com/modelcontextprotocol/python-sdk?tab=readme-ov-file
我们按照文档依葫芦画瓢开始一步一步操作 在实践之前希望你准备下Python环境,其中包括
- Python 3.10 +
- uv - Python的包管理工具(传送门:https://github.com/astral-sh/uv)
敌方还有5秒到达战场
创建项目
uv init mcp-server-demo
cd mcp-server-demo
添加依赖
uv add "mcp[cli]"
写代码
你打开项目会看到如下目录 xxx 其中main.py就是我们的开发目标文件,将它编辑成如下:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("mcp-server-demo", "MCP Server Example")
@mcp.tool()
def add(a: int, b: int) -> int:
"""
Adds two numbers.
"""
return a + b
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""
Returns a greeting message.
"""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run(transport='stdio')
逐行解释代码
from mcp.server.fastmcp import FastMCP
从 mcp.server.fastmcp 模块中导入 FastMCP 类。这是 MCP(Model Context Protocol)服务器实现的一部分,FastMCP 是一个用于快速构建 MCP 服务器的类。
mcp = FastMCP("mcp-server-demo", "MCP Server Example")
创建一个 FastMCP 类的实例 mcp。
- "mcp-server-demo": 第一个参数是服务器的标识符或名称,用于区分不同的 MCP 服务器。
- "MCP Server Example": 第二个参数是服务器的描述,可能用于日志、文档或客户端显示。
- 这行初始化了一个 MCP 服务器对象,后续的功能将基于这个对象注册和运行。
@mcp.tool()
def add(a: int, b: int) -> int:
使用装饰器 @mcp.tool() 定义一个工具函数 add。
- @mcp.tool(): 表示将 add 函数注册为 MCP 服务器的一个“工具”(Tool)。工具是模型可以调用的功能,由服务器暴露给客户端或语言模型。
- def add(a: int, b: int): 定义函数 add,接受两个整数参数 a 和 b。
- a: int 和 b: int: 类型注解,表明参数应该是整数。 -> int: 返回值类型注解,表示函数返回一个整数。
"""
Adds two numbers.
"""
这是一个文档字符串(docstring),用三引号括起来。 描述了 add 函数的作用:“将两个数字相加”。 在 MCP 上下文中,这个描述可能会被客户端或模型用来理解工具的功能。
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""
Returns a greeting message.
"""
return f"Hello, {name}!"
- 使用装饰器 @mcp.resource() 定义一个资源函数 get_greeting。
- @mcp.resource("greeting://{name}"): 将 get_greeting 注册为 MCP 服务器的一个“资源”(Resource)。
- "greeting://{name}": 资源标识符,类似于 URL 模式,{name} 是一个占位符,表示需要传入一个参数 name。
- 资源通常提供数据,而不是执行动作,与工具不同。
- def getgreeting(name: str): 定义函数 getgreeting,接受一个字符串参数 name。
- name: str: 类型注解,表明 name 是一个字符串。
- -> str: 返回值类型注解,表示函数返回一个字符串。
if __name__ == "__main__":
mcp.run(transport='stdio')
启动 MCP 服务器。
- mcp.run(): 调用 FastMCP 实例的 run 方法,开始运行服务器。
- transport='stdio': 指定通信方式为标准输入输出(stdio)。
- 这意味着服务器通过命令行(终端)的输入和输出与客户端通信,而不是通过网络(如 HTTP 或 WebSocket)。 运行后,服务器会监听请求,处理注册的工具(如 add)和资源(如 get_greeting)。
MCP客户端配置
通过上面代码编写你的第一个MCP服务器已经完成,它的主要功能是计算a+b,功能很简单,笔者只是想通过这个简单的例子讲明白到底要怎么开发?如果你有其他复杂需求,可以私信笔者进行交流。 笔者这里用的客户端是Claude,当然你也可以用Cline ChatMCP等工具进行使用。 打开Caulde开发者配置
将配置改为如下
{
"mcpServers": {
"mcp-server-demo": {
"command": "你的项目地址/mcp-server-demo/.venv/bin/python",
"args": [
"你的项目地址/mcp-server-demo/main.py"
]
}
}
}
重启Claude即可生效,效果如下
测试:
从Claude的调用来看已经能成功调用到我们定义的add工具,您在实践的时候也可以尝试改成其他内容,看Claude如何反应?欢迎评论区交流
其它的内容
其实在调用之前你也可以先在本地调试你的MCP服务,可以用如下命令启动开发模式
mcp dev main.py
效果如下:
除了上面开发的在本地部署,你也可以将这个MCP服务部署到远端,供更多人使用。如果感兴趣请留言,我在后续的文章中更新。
总结
MCP(Model Context Protocol)是一种灵活的协议,用于构建与大型语言模型交互的服务。通过 FastMCP,开发者可以快速搭建服务器,定义工具(如 add 函数实现加法)和资源(如 get_greeting 返回问候语)。本文通过代码示例展示了如何使用 Python 实现一个简单的 MCP 服务:从导入 FastMCP、初始化服务器,到注册工具和资源,最后通过 stdio 运行服务。工具适合执行操作,资源则提供数据,两者结合为模型和客户端提供了强大的功能扩展能力。MCP 的设计强调模块化和可控性,开发者只需几行代码即可实现复杂交互,适用于 AI 驱动的命令行工具、自动化脚本等场景。无论是初学者还是资深开发者,MCP 都提供了一个高效的起点,让 AI 集成变得更简单。
如何系统的去学习大模型LLM ?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业
?”“谁的饭碗又将不保了?
”等问题热议不断。
事实上,抢你饭碗的不是AI,而是会利用AI的人。
继科大讯飞、阿里、华为
等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?
与其焦虑……
不如成为「掌握AI工具的技术人
」,毕竟AI时代,谁先尝试,谁就能占得先机!
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。
基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近70次后,终于把整个AI大模型的学习门槛,降到了最低!
在这个版本当中:
第一您不需要具备任何算法和数学的基础
第二不要求准备高配置的电脑
第三不必懂Python等任何编程语言
您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料
分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
一、LLM大模型经典书籍
AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。
二、640套LLM大模型报告合集
这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
三、LLM大模型系列视频教程
四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)
五、AI产品经理大模型教程
LLM大模型学习路线 ↓
阶段1:AI大模型时代的基础理解
-
目标:了解AI大模型的基本概念、发展历程和核心原理。
-
内容:
- L1.1 人工智能简述与大模型起源
- L1.2 大模型与通用人工智能
- L1.3 GPT模型的发展历程
- L1.4 模型工程
- L1.4.1 知识大模型
- L1.4.2 生产大模型
- L1.4.3 模型工程方法论
- L1.4.4 模型工程实践
- L1.5 GPT应用案例
阶段2:AI大模型API应用开发工程
-
目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
-
内容:
- L2.1 API接口
- L2.1.1 OpenAI API接口
- L2.1.2 Python接口接入
- L2.1.3 BOT工具类框架
- L2.1.4 代码示例
- L2.2 Prompt框架
- L2.3 流水线工程
- L2.4 总结与展望
阶段3:AI大模型应用架构实践
-
目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
-
内容:
- L3.1 Agent模型框架
- L3.2 MetaGPT
- L3.3 ChatGLM
- L3.4 LLAMA
- L3.5 其他大模型介绍
阶段4:AI大模型私有化部署
-
目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
-
内容:
- L4.1 模型私有化部署概述
- L4.2 模型私有化部署的关键技术
- L4.3 模型私有化部署的实施步骤
- L4.4 模型私有化部署的应用场景
这份 LLM大模型资料
包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程
等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓
更多推荐
所有评论(0)