MCP开发-01.从0开发一个MCP

参考资料:
https://blog.csdn.net/2401_84204207/article/details/149294973
https://juejin.cn/post/7538733004224774186

如何开发一个MCP

我们从0开始开发一个MCP,需要做的工作本身并不复杂。

  1. 创建一个MCP项目
  2. 在服务器端运行我们的MCP服务项目
  3. 在LLM中配置MCP信息,实现功能的调用。

只要有变成基础,我一直把所有的变成过程,都拆解成2个部分,

  1. 如何和外界交互,包括如何读取解析外部数据,以及保存和写入结果文件。
  2. 一个是使用语言内部的逻辑进行数据的处理。当然复杂的项目,需要考虑项目结构,模块划分,功能服用,结构优化,以及基于项目逻辑的并行串行和效率提升,但这都是跨越具体语言的编码思维,不是要给初学者需要考虑到,随着任何一门语言的深入应用,你都会一点点发现这些工作的意义和价值,并建立自己的逻辑,而且这些逻辑往往是可以通用的。

一步步实现自己的第一个MCP

创建一个MCP项目代码

在这里我们提供一个简单的模块功能,计算两个数的和。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from mcp.server.fastmcp import FastMCP

# 初始化MCP服务实例
mcp = FastMCP("sum_int_tool")

@mcp.tool()
def sum(a: int,b: int) -> int:
"""
两个数相加求和
Args:
a (int): 整数a
b (int): 整数b
Returns:
int: 两个数的和
"""
return a+b

if __name__ == '__main__':
# 启动MCP服务,使用标准输入输出作为传输方式
mcp.settings.host = "0.0.0.0"
mcp.settings.port = 8000
mcp.run(transport='stdio')
print("MCP服务已启动,等待工具调用...")

本地调用MCP

配置MCP服务

在支持MCP的 AI工具(如 trae)中,可以通过简单的JSON配置来注册和使用本地服务。

1
2
3
4
5
6
7
8
9
10
11
{
"mcpServers": {
"sum_int_tool": {
"command": "python",
"args": [
"D:\\gitlab_sync\\MCP\\0.demo.py"
],
"autoApprove": []
}
}
}

配置完成后,可以在工具中看到服务状态。
alt text

试MCP服务

这时候,我们就可以提交一个任务,来看看能否成功的调用我们开发的MCP服务。
alt text
可以看到大模型识别到了我们新创建的MCP服务,并使用MCP协议进行了调用,完成了我们需要的功能。

远程调用MCP服务

MCP 支持三种数据传输方式:stdio、sse、streamable-http。

  • stdio (标准输入/输出)
    这是最基础和通用的传输方式。它通过标准输入流读取数据,并向标准输出流写入结果,非常适合本地开发、命令行工具 (CLI) 和代理插件的集成。

  • sse (服务器发送事件)
    SSE 基于标准的 HTTP 协议,用于解决远程服务的访问问题。在此模式下,MCP 服务作为一个独立的 Web 服务器运行,能够处理来自多个客户端的并发连接。

  • streamable-http (可流式传输的HTTP)
    这是MCP协议在新版本中引入的新传输机制,作为 SSE 的强大替代方案。它同样基于 HTTP POST/GET 请求,并利用服务器发送事件 (SSE) 的能力来高效地流式传输多条服务器消息。
    在我们测试阶段,使用的是stdio模式,更适合开发和访问,但是在需要远程启用MCP服务时,我们可以切换到sse 或者streamable-http模式。

切换传输方式

只需在服务入口文件中修改一行代码,即可切换传输协议。

1
2
3
# 启动MCP服务,使用HTTP作为传输方式
mcp.run(transport='http')
mcp.run(transport='sse')

-------------本文结束感谢您的阅读-------------