关于MCP构建的简单代码实现

MCP代码的简单构建实验

基于mcp框架内容,的简单实验内容与代码层分析。

参考地址:面向服务器开发者 - MCP 中文文档

一、MCP原理

1.1 什么是MCP

Model Context Protocol (MCP) 是一个开放协议,旨在实现 LLM 应用与外部数据源和工具之间的无缝集成。无论您是构建 AI 驱动的 IDE、增强聊天界面,还是创建自定义 AI 工作流,MCP 都提供了一种标准化的方式来连接 LLM 与外部世界。

简单来说,MCP 是一种客户端-服务器架构的协议,允许 LLM 应用程序(如 Claude、各种 IDE 等)通过标准化的接口访问外部数据和功能。这解决了 LLM 在实际应用中常见的一些痛点:

  • LLM 无法直接访问实时数据(如天气、股票行情等)
  • LLM 无法执行外部操作(如发送邮件、控制设备等)
  • LLM 无法访问用户的本地文件或其他私有数据

通过 MCP,这些限制得到了优雅的解决,同时保持了安全性和可扩展性。

1.2 MCP核心概念

MCP 服务器可以提供三种主要类型的功能:

  1. **资源(Resources):**客户端可以读取的文件类数据(如 API 响应或文件内容)
  2. **工具(Tools):**LLM 可以调用的函数(需要用户批准)
  3. **提示(Prompts):**帮助用户完成特定任务的预写模板

请添加图片描述

个人理解:

1、MCP是一种Agent调用远程工具的方法,主要打破了在Agent与Tool不再设置到同一位置的局限性

2、MCP的server 主要部署着大量注册的Tool,这些Tool可以被注册到MCP的对象中。

3、MCP的client是一个调用者,可以在MCP存储的session中取出关于tools中的所有信息。将该信息封装为一个function_calling 的结构数据,通过Agent的tool信息传入,让Agent自我判断该调用何种工具,并得到最终处理的方案(该调用哪个tool)

4、MCP的client 中使用call_tool 调用远程工具执行内容

二、实现代码

2.1 服务端设计

# 最小化服务端
import asyncio

"""
mcp 安装
pip install "mcp[cli]"
"""

from mcp.server import FastMCP
from mcp.types import TextContent

mcp = FastMCP("TestServer")


@mcp.tool(description="ping")
async def ping() -> str: return "pong"


@mcp.tool(description="文本反转工具")
async def reverse_text(text: str) -> TextContent:
    return TextContent(type="text", text=text[::-1])


@mcp.tool(description="平方计算器")
async def square(num: int) -> int:
    return num ** 2


asyncio.run(mcp.run('stdio'))
mcp.run("stdio")

2.2 客户端设计

import asyncio

from mcp.client.stdio import stdio_client, StdioServerParameters
from mcp import ClientSession


async def run_client():
    server_params = StdioServerParameters(
        command="python",  # Executable
        args=["server.py"],  # Optional command line arguments

        env=None,  # Optional environment variables
    )

    async with stdio_client(server_params) as (reader, writer):
        async with ClientSession(reader, writer) as session:
            # 必须等待初始化完成
            await session.initialize() # function_calling
			
            # TODO 此处可以使用远程方式调用大语言模型
            # 将tools信息绑定到 prompt中,然后让Agent分析该调用哪个tool
            # 最终用 call_tool 进行调用执行。
            
            response = await session.list_tools()
            tools = response.tools
            print("\n已连接到服务器,工具包括:", [tool.name for tool in tools])

            # 调用文本反转工具
            reversed_text = await session.call_tool(
                "reverse_text",
                {"text": "Hello MCP"}
            )
            print(f"反转结果: {reversed_text.content[0].text}")

            # 调用数学计算工具
            squared = await session.call_tool("square", {"num": 5})
            print(f"平方结果: {squared.content[0].text}")


if __name__ == "__main__":
    asyncio.run(run_client())



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值