【MCP Tool Calling Agent 开发实战】从零构建高效 AI 代理

文章目录

  • 目录
    • 引言
    • MCP 概述:为什么选择 MCP 构建 Tool Calling Agent?
    • 环境安装与项目设置
      • Prerequisites
    • 构建 MCP Server 和 Tool
      • 实战:集成数据库查询工具
      • 文件系统资源集成
    • 集成 LLM 与 Agent 开发
      • 代码执行优化:Anthropic风格
    • 实战示例:构建 GitHub + Database Agent
    • 最佳实践与注意事项

目录

引言

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com

在2026年的AI开发领域,Model Context Protocol(MCP)已成为构建工具调用代理(Tool Calling Agent)的核心协议。
作为一个开放标准,MCP 标准化了LLM与外部工具的交互方式,让AI代理能够安全、高效地访问数据源、API和服务,而无需每次加载海量上下文。根据Anthropic和Composio的最新报告,MCP 已帮助开发者将代理的token消耗降低98%以上,同时提升了代理的自主性和可扩展性。

本文基于2026年最新的MCP SDK和框架(如FastMCP、OpenAI Agents SDK),从实战角度带你一步步构建一个支持工具调用的AI代理。我们将覆盖从环境搭建到真实场景应用的全过程,包括代码执行优化、文件系统集成和数据库查询。无论你是初学者还是资深工程师,这篇指南都能让你快速上手。

MCP 概述:为什么选择 MCP 构建 Tool Calling Agent?

MCP(Model Context Protocol)是一个客户端-服务器架构的协议,专为LLM提供上下文和工具访问。它通过JSON-RPC接口标准化工具执行,支持工具发现、认证和错误处理。相比传统工具调用,MCP的优势在于:

  • 高效性:代理只需按需加载工具定义,避免上下文爆炸。
  • 安全性:内置沙箱和路径验证,防止越权访问。
  • 可扩展性:支持文件系统、数据库、API等资源,支持动态资源(如file://logs/{date})。
  • 兼容性:集成OpenAI、Anthropic、Google ADK等主流LLM和框架。

在Agent开发中,MCP扮演“神经系统”角色:LLM(大脑)决策,MCP执行工具调用(肌肉)。典型架构包括:

  • MCP Server:暴露工具和资源(如Composio托管的GitHub工具)。
  • MCP Client:连接服务器,代理LLM调用。
  • Agent:结合LLM,处理任务如“创建GitHub Issue”。

2026年,MCP已演进到v2.1,支持进度报告和多模态工具。

环境安装与项目设置

Prerequisites

  • Python 3.10+
  • OpenAI/Anthropic API Key
  • pip安装:pip install fastmcp openai-agents python-dotenv

创建项目目录:

mcp-agent-demo/ ├── agent.py ├── server.py ├── run.py ├── .env └── requirements.txt

.env中配置:

OPENAI_API_KEY=sk-xxx MCP_TOOL_URL=https://mcp.composio.dev/github/sse?customerId=your_id

生成requirements.txt:

pip freeze>requirements.txt

构建 MCP Server 和 Tool

首先,创建一个简单的MCP Server,使用FastMCP框架。这是一个10行代码的起点:

fromfastmcpimportFastMCP mcp=FastMCP("Simple Calculator Server")@mcp.tool()defadd_numbers(a:int,b:int)->int:"""Add two numbers together"""returna+bif__name__=="__main__":mcp.run()

运行后,Server监听本地端口,暴露add_numbers工具。LLM可以通过MCP Client调用它。

实战:集成数据库查询工具

扩展到真实场景:构建一个安全的SQL查询工具。只允许SELECT查询,防止注入。

fromfastmcpimportFastMCP,ToolErrorfrompydanticimportBaseModelimportsqlite3# 假设使用SQLitemcp=FastMCP("Database Query Server")classQueryResult(BaseModel):rows:list[dict]count:int@mcp.tool()defquery_db(sql:str,limit:int=100)->QueryResult:"""Execute safe SQL query"""ifany(kwinsql.upper()forkwin["DROP","DELETE","UPDATE"]):raiseToolError("Only SELECT queries allowed")conn=sqlite3.connect('example.db')cursor=conn.cursor()cursor.execute(sql)rows=cursor.fetchall()conn.close()returnQueryResult(rows=rows[:limit],count=len(rows))if__name__=="__main__":mcp.run()

这个工具使用Pydantic验证输出,确保结构化返回。运行Server后,代理可查询如“SELECT * FROM users”。

文件系统资源集成

MCP支持资源路径,如动态日志读取:

importosfrompathlibimportPathfromfastmcpimportFastMCP,ToolError mcp=FastMCP("File System Server")BASE_DIR=Path("/safe/workspace")defvalidate_path(path:str)->Path:full_path=(BASE_DIR/path).resolve()ifnotstr(full_path).startswith(str(BASE_DIR)):raiseToolError("Access denied")returnfull_path@mcp.resource("file://{path}")defget_file(path:str)->str:file_path=validate_path(path)ifnotfile_path.exists():raiseToolError("File not found")returnfile_path.read_text()if__name__=="__main__":mcp.run()

代理可请求file://logs/2026-01-10获取日志,内置验证防止目录穿越。

集成 LLM 与 Agent 开发

使用OpenAI Agents SDK构建Agent,连接MCP Server。

agent.py中:

importosfromdotenvimportload_dotenvfromagentsimportAgentfromagents.mcpimportMCPServerSse load_dotenv()TOOL_URL=os.getenv("MCP_TOOL_URL")defbuild_agent():mcp_server=MCPServerSse({"url":TOOL_URL})agent=Agent(name="GitHub Manager",instructions="Manage GitHub repos: create issues, update PRs using MCP tools.",mcp_servers=[mcp_server],model="gpt-4o"# 或 claude-4.5)returnagent,mcp_server

run.py中异步运行:

importasynciofromagentimportbuild_agentfromagentsimportRunner TASK="Create an issue in repo 'user/repo' with title 'Bug Fix' and body 'Details here'."asyncdefmain():agent,mcp_server=build_agent()try:awaitmcp_server.connect()result=awaitRunner.run(agent,TASK)print("Result:",result.final_output)finally:awaitmcp_server.cleanup()if__name__=="__main__":asyncio.run(main())

首次运行会提示OAuth认证。Agent会自动推理、调用工具(如GitHub API),并返回结果。

代码执行优化:Anthropic风格

根据Anthropic的工程实践,使用MCP进行代码执行以减少token:

# 在Agent中添加代码执行工具@mcp.tool()asyncdefexecute_code(code:str)->str:"""Run Python code in sandbox"""# 使用restrictedpython或类似沙箱执行fromrestrictedpythonimportcompile_restricted_exec globs={"__builtins__":{}}compile_restricted_exec(code,globs)returnstr(globs.get('result','No result'))

这允许Agent编写循环/过滤代码,如处理大CSV文件而无需全传上下文。

实战示例:构建 GitHub + Database Agent

结合以上,构建一个端到端Agent:查询数据库,生成报告,创建GitHub Issue。

  1. 查询DB获取数据。
  2. 处理/过滤数据。
  3. 通过MCP GitHub工具创建Issue。

完整代码片段:

# 在Agent instructions中添加逻辑instructions=""" 1. Query DB for sales data. 2. Filter pending orders. 3. Create GitHub issue with summary. """# 运行结果示例result=awaitRunner.run(agent,"Generate sales report and log to GitHub.")

在生产中,使用进度报告:

fromfastmcpimportProgress@mcp.tool()asyncdefprocess_data(data:list,progress:Progress)->dict:total=len(data)processed=0foritemindata:# 处理processed+=1ifprocessed%10==0:awaitprogress.update(processed=processed,total=total)return{"done":True}

最佳实践与注意事项

  • 安全:始终验证输入,使用ToolError处理异常。限制率(如10 calls/min)。
  • 测试:用MCPTestClient写单元测试。
importpytestfromfastmcp.testingimportMCPTestClient@pytest.mark.asyncioasyncdeftest_query():asyncwithMCPTestClient(mcp)asclient:result=awaitclient.call_tool("query_db",{"sql":"SELECT 1"})assertresult.count>0
  • 性能:使用异步工具,避免阻塞。2026年推荐MoE模型如Claude 4.5以提升推理。
  • 常见坑:认证失败?检查OAuth。上下文溢出?用代码执行过滤数据。
  • 框架对比
框架优势适用场景
FastMCP轻量、快速开发自定义工具
OpenAI SDK集成LLM无缝生产代理
Google ADK云原生支持企业级部署

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1141291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从GDPR到CCPA:全球数据合规法规在大数据中的应用

从GDPR到CCPA:全球数据合规法规在大数据中的应用 关键词:GDPR、CCPA、数据合规、隐私保护、大数据应用、用户权利、数据控制者 摘要:本文以全球最具影响力的两大数据隐私法规——欧盟《通用数据保护条例》(GDPR)与美国《加州消费者隐私法案》(CCPA)为核心,通过生活案例…

OceanBase的嵌入式数据库:vscode+python+seekdb

通过动手实验体会vibe coding 在实验前需要具备的前提条件是: 1要安装好vscode 2 要安装好Python环境 3 需要seekdb 4 需要powermem 5 Jupyter插件(非必须,但是实际用过以后还是装吧) 这里的1和2做开发的人都知道。 3和4其…

Spark与Hadoop对比:大数据技术选型必看指南

Spark与Hadoop对比:大数据技术选型必看指南 副标题:从原理、性能到场景,彻底理清两大框架的差异 摘要/引言 你是否遇到过这样的困惑? 要处理1TB的用户日志,该用Hadoop还是Spark?实时推荐系统需要秒级延…

Linux设备驱动之gpio-keys(3)

接前一篇文章:Linux设备驱动之gpio-keys(2) 本文内容参考: Linux设备驱动之gpio-keys_linux gpio-keys-CSDN博客 Linux gpio-keys驱动解析-CSDN博客 GPIO-KEY的实现原理及使用方法_gpio-keys-CSDN博客 linux gpio key 实现方式…

实现AI Agent的动态任务优先级调度

实现AI Agent的动态任务优先级调度 关键词:AI Agent、动态任务优先级调度、任务管理、算法原理、实际应用 摘要:本文围绕实现AI Agent的动态任务优先级调度展开。首先介绍了该主题的背景信息,包括目的、预期读者、文档结构和相关术语。接着阐述了核心概念及它们之间的联系,…

一、Mujoco-开始篇

一、介绍 MuJoCo 是 Multi-Joint dynamics with Contact 的缩写,字面意思可拆解为带接触的多关节动力学。是DeepMind(谷歌旗下)维护的高精度多体动力学物理仿真引擎,专为机器人、机械控制、强化学习(RL)、生…

AI与人类开发者的协作模式

AI与人类开发者的协作模式关键词:AI、人类开发者、协作模式、软件开发、代码生成、智能辅助摘要:本文深入探讨了AI与人类开发者的协作模式,旨在分析这种协作在软件开发领域的应用、原理和实际效果。首先介绍了研究的背景、目的、预期读者等信…

提升论文原创性的有效方法:六款AI工具改写文本的实用操作指南

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

论文查重与改写一体化方案:六款AI工具提升文本原创性的实用方法

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

学术论文降重必备工具:六种AI改写技术的高效应用与优化建议

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

通信原理篇---数字信号基带码型

第一部分:为什么选择HDB3码?——从数字基带信号码型设计原则分析在设计数字基带传输码型时,工程师需要平衡多个相互矛盾的要求。HDB3码(High Density Bipolar 3 zeros,三阶高密度双极性码)是针对PCM E1系统…

基于MLflow的推荐系统模型生命周期管理

基于MLflow的推荐系统模型生命周期管理:从实验到生产的全流程护航 关键词:MLflow、推荐系统、模型生命周期管理、实验跟踪、模型部署、模型注册、机器学习工程化 摘要:推荐系统是互联网产品的“流量引擎”,但从实验室的一个想法到线上稳定运行的模型,需要跨越数据准备、实…

计算机网络:物理层

目录 数据通信基础知识 信道的极限容量 编码与调制 传输介质 物理层设备 数据通信基础知识 码元(Symbol)是数字通信中承载信息的基本信号单元。 比特(bit)是信息的最小单位 (0/1 逻辑概念) 码元&…

优化论文查重结果的智能方案:六款AI改写工具的详细使用教程

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

通信原理篇---AMI码

想象一下,你和朋友隔着一条嘈杂的马路,要用一个手电筒来传递一串由“有”和“无”组成的秘密暗号(比如“有有无无有有无…”)。一、最笨的方法(单极性不归零码)最初级规则:亮灯 ➔ 代表 “有”&…

学术写作中的AI改写工具:六种高效优化论文查重结果的详细指南

排名 工具/方法 核心优势 适用场景 1 aibiye 智能降重学术语言优化 初稿完成后深度润色 2 aicheck 多维度查重选题辅助 全程论文质量监控 3 秒篇 一键生成逻辑结构优化 紧急补论文初稿 4 AskPaper 文献解析重点提炼 文献综述与理论支撑 5 知网人工降重 专…

UG NX 光顺曲线串合并G1相切线

在 UG NX 中,将多条曲线光顺地合并成一条满足 G1 连续性(切线连续)的曲线,是进行高质量曲面建模的基础。核心概念:G1 连续性 G1 连续性意味着在两条曲线的连接点处,不仅位置重合,且切线方向相同…

中望3D2026 光顺曲线串合并G1相切线(把多条曲线合并成一条曲线)

在 中望3D 中,将多条曲线光顺地合并成一条满足 G1 连续性(切线连续)的曲线,是进行高质量曲面建模的基础。G1 连续性意味着在两条曲线的连接点处,不仅位置重合,且切线方向相同(一阶导数连续&…

提示系统弹性伸缩架构选型:如何根据业务需求选择合适的方案?

系统弹性伸缩架构选型:从业务需求到方案落地的全链路指南 一、引入:为什么弹性伸缩是当代系统的“生存技能”? 凌晨12点,电商大促的钟声响起—— 某美妆品牌的商品页流量瞬间从1万QPS暴涨至10万QPS;某直播平台的头部主…

如何快速配置DOL汉化包:新手完整教程

如何快速配置DOL汉化包:新手完整教程 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 想要获得完美的Degrees of Lewdity中文游戏体验吗?DOL-CHS-MODS整合包为您提供一站式解决…