从零构建 MCP Server 与 Client:打造你的第一个 AI 工具集成应用

目录

🚀 从零构建 MCP Server 与 Client:打造你的第一个 AI 工具集成应用

🧱 1. 准备工作

🛠️ 2. 构建 MCP Server(服务端)

2.1 初始化服务器

🧩 3. 添加自定义工具(Tools)

3.1 创建工具文件

3.2 修改 server.py 注册工具

🖥️ 4. 构建 MCP Client(客户端)

🧪 5. 联调测试(Server + Client)

🧠 总结与下一步



🚀 从零构建 MCP Server 与 Client:打造你的第一个 AI 工具集成应用

随着大型语言模型(LLM)能力的飞速发展,如何让 AI 模型灵活调用外部工具、实时访问外部数据,成为开发者面临的重要挑战。
模型上下文协议(Model Context Protocol,简称 MCP)作为一种开放标准,为 LLM 提供了类似“USB-C”统一接口,使模型能够以标准方式调用资源与服务。

本篇博客将带你一步步从零搭建:

  • ✅ MCP 服务器(Server)

  • ✅ MCP 客户端(Client)

  • ✅ 自定义工具(Tool)

  • ✅ 实现 Server-Client 联调

  • ✅ 与 Claude、ChatGPT 等大模型无缝集成!


🧱 1. 准备工作

开发环境建议:

  • Python 3.10+

  • MCP Python SDK(安装方法见下文)

  • 支持 MCP 协议的 AI 应用(如 Claude Desktop、ChatGPT 插件版)

安装基础依赖:

pip install mcp-sdk

创建项目基本目录:

mcp_demo/
├── server.py
├── client.py
├── tools/
│   └── file_reader.py
├── requirements.txt

🛠️ 2. 构建 MCP Server(服务端)

MCP Server 负责注册并提供工具,供 AI 模型调用。

2.1 初始化服务器

server.py 中创建 MCP Server 实例,并运行。

from mcp.server.fastmcp import FastMCP# 创建 MCP Server 实例
mcp = FastMCP("Demo MCP Server")if __name__ == "__main__":mcp.run()

运行:

python server.py

此时 Server 会以本地模式(stdio)监听连接。


🧩 3. 添加自定义工具(Tools)

工具是 MCP 中模型可以调用的能力模块。比如读取文件、调用 API、发起数据库查询等。

我们先添加一个简单工具:列出本地目录下所有 .txt 文件。

3.1 创建工具文件

tools/file_reader.py 中定义工具:

import os
from mcp.server.fastmcp import tool@tool()
def list_txt_files(directory: str = ".") -> list[str]:"""列出指定目录下所有 .txt 文件"""try:return [f for f in os.listdir(directory) if f.endswith(".txt")]except Exception as e:return [str(e)]

这里用 @tool() 装饰器标记函数,MCP Server 会自动注册它为可调用工具。

3.2 修改 server.py 注册工具

tools.file_reader 导入到 server.py

from mcp.server.fastmcp import FastMCP
import tools.file_reader  # 导入工具模块,自动注册mcp = FastMCP("Demo MCP Server")if __name__ == "__main__":mcp.run()

现在 MCP Server 已提供了一个 "list_txt_files" 工具,供后续客户端调用。


🖥️ 4. 构建 MCP Client(客户端)

MCP Client 作为中介,负责与 Server 通信,协调 AI 应用请求与工具调用。

client.py 中创建 MCP Client 实例:

from mcp.client import MCPClientdef main():# 连接到 Server(本地也可以用 stdio 通信)client = MCPClient(server_address="http://localhost:8000")client.connect()# 列出可用工具tools = client.list_tools()print("当前可用工具列表:", tools)# 调用 list_txt_files 工具params = {"directory": "."}result = client.call_tool("list_txt_files", params)print("目录下的 .txt 文件:", result)client.disconnect()if __name__ == "__main__":main()

运行:

python client.py

如果一切顺利,你将看到 MCP Client 成功调用 MCP Server 提供的 list_txt_files 工具,并返回本地目录下的所有 .txt 文件。


🧪 5. 联调测试(Server + Client)

完整流程如下:

  1. 启动 server.py

  2. 再运行 client.py

  3. Client 通过标准输入输出(stdio)或 HTTP 与 Server 通信

  4. Server 提供工具,Client 调用工具返回结果

  5. AI 应用可以无感知调用这些工具,执行复杂任务

可以在支持 MCP 的 AI 应用中,如 Claude Desktop,配置 MCP Client,体验完整联动!

示例提问:

请帮我列出我电脑上当前目录的所有 txt 文件。

→ AI 调用 MCP → MCP Client 转发请求 → MCP Server 执行 list_txt_files → 返回结果!


🧠 总结与下一步

通过本篇教程,你已经掌握了:

  • 什么是 MCP 协议

  • 如何搭建 MCP Server

  • 如何定义并注册自定义工具

  • 如何搭建 MCP Client

  • 如何实现 Client-Server 联调

  • 如何与 AI 应用对接调用工具

这为你后续开发多工具协同、多资源访问、智能体智能扩展打下了坚实基础!


在下一篇内容中,我们将探索:

  • 如何将 MCP 与 LangChain、Semantic Kernel 等框架集成

  • 如何扩展 MCP 实现多模型、多资源、多场景的动态调度!

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

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

相关文章

Django 自定义celery-beat调度器,查询自定义表的Cron表达式进行任务调度

学习目标: 通过自定义的CronScheduler调度器在兼容标准的调度器的情况下,查询自定义任务表去生成调度任务并分配给celery worker进行执行 不了解Celery框架的小伙伴可以先看一下我的上一篇文章:Celery框架组件分析及使用 学习内容&#xff…

蓝桥杯 1. 确定字符串是否包含唯一字符

确定字符串是否包含唯一字符 原题目链接 题目描述 实现一个算法来识别一个字符串的字符是否是唯一的(忽略字母大小写)。 若唯一,则输出 YES,否则输出 NO。 输入描述 输入一行字符串,长度不超过 100。 输出描述 输…

a-upload组件实现文件的上传——.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt

实现下面的上传/下载/删除功能&#xff1a;要求支持&#xff1a;【.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt】 分析上面的效果图&#xff0c;分为【上传】按钮和【文件列表】功能&#xff1a; 解决步骤1&#xff1a;上传按钮 直接上代码&#xff1a; <a-uploadmultip…

.NET Core 数据库ORM框架用法简述

.NET Core ORM框架用法简述 一、主流.NET Core ORM框架概述 在.NET Core生态系统中&#xff0c;主流的ORM(Object-Relational Mapping)框架包括&#xff1a; ​​Entity Framework Core (EF Core)​​ - 微软官方推出的ORM框架​​Dapper​​ - 轻量级微ORM​​Npgsql.Entit…

halcon打开图形窗口

1、dev_open_window 参数如下&#xff1a; 1&#xff09;Row(输入参数) y方向上&#xff0c;图形窗口距离左上角顶端的像素个数 2&#xff09;Column(输入参数) x方向上&#xff0c;距离左上角左边的像素个数 3&#xff09;Width(输入参数) 图形窗口宽度 4&#xff09;He…

2025东三省D题深圳杯D题数学建模挑战赛数模思路代码文章教学

完整内容请看文章最下面的推广群 一、问题一&#xff1a;混合STR图谱中贡献者人数判定 问题解析 给定混合STR图谱&#xff0c;识别其中的真实贡献者人数是后续基因型分离与个体识别的前提。图谱中每个位点最多应出现2n个峰&#xff08;n为人数&#xff09;&#xff0c;但由…

iView Table 组件跨页选择功能实现文档

iView Table 组件跨页选择功能实现文档 功能概述 实现基于 iView Table 组件的多选功能&#xff0c;支持以下特性&#xff1a; ✅ 跨页数据持久化选择✅ 当前页全选/取消全选✅ 自动同步选中状态显示✅ 分页切换状态保持✅ 高性能大数据量支持 实现方案 技术栈 iView UI 4…

家庭服务器IPV6搭建无限邮箱系统指南

qq邮箱操作 // 邮箱配置信息 // 注意&#xff1a;使用QQ邮箱需要先开启IMAP服务并获取授权码 // 设置方法&#xff1a;登录QQ邮箱 -> 设置 -> 账户 -> 开启IMAP/SMTP服务 -> 生成授权码 服务器操作 fetchmail 同步QQ邮箱 nginx搭建web显示本地同步过来的邮箱 ssh…

Tauri v1 与 v2 配置对比

本文档对比 Tauri v1 和 v2 版本的配置结构和内容差异&#xff0c;帮助开发者了解版本变更并进行迁移。 配置结构变化 v1 配置结构 {"package": { ... },"tauri": { "allowlist": { ... },"bundle": { ... },"security":…

对js的Date二次封装,继承了原Date的所有方法,增加了自己扩展的方法,可以实现任意时间往前往后推算多少小时、多少天、多少周、多少月;

封装js时间工具 概述 该方法继承了 js 中 Date的所有方法&#xff1b;同时扩展了一部分自用方法&#xff1a; 1、任意时间 往前推多少小时&#xff0c;天&#xff0c;月&#xff0c;周&#xff1b;参数1、2必填&#xff0c;参数3可选beforeDate(num,formatter,dateVal); befo…

TimeDistill:通过跨架构蒸馏的MLP高效长期时间序列预测

原文地址&#xff1a;https://arxiv.org/abs/2502.15016 发表会议&#xff1a;暂定&#xff08;但是Star很高&#xff09; 代码地址&#xff1a;无 作者&#xff1a;Juntong Ni &#xff08;倪浚桐&#xff09;, Zewen Liu &#xff08;刘泽文&#xff09;, Shiyu Wang&…

DeepSeek最新大模型发布-DeepSeek-Prover-V2-671B

2025 年 4 月 30 日&#xff0c;DeepSeek 开源了新模型 DeepSeek-Prover-V2-671B&#xff0c;该模型聚焦数学定理证明任务&#xff0c;基于混合专家架构&#xff0c;使用 Lean 4 框架进行形式化推理训练&#xff0c;参数规模达 6710 亿&#xff0c;结合强化学习与大规模合成数据…

如何用AI生成假期旅行照?

以下是2025年最新AI生成假期旅行照片的实用工具推荐及使用指南&#xff0c;结合工具特点、研发背景和适用场景进行综合解析&#xff1a; 一、主流AI旅行照片生成工具推荐与对比 1. 搜狐简单AI&#xff08;国内工具&#xff09; • 特点&#xff1a; • 一键优化与背景替换&…

ElaticSearch

ElaticSearch: 全文搜索 超级强&#xff0c;比如模糊查询、关键词高亮等 海量数据 高效查询&#xff0c;比传统关系数据库快得多&#xff08;尤其是搜索&#xff09; 灵活的数据结构&#xff08;Schema灵活&#xff0c;可以动态字段&#xff09; 分布式高可用&#xff0c;天…

Android开发,实现一个简约又好看的登录页

文章目录 1. 编写布局文件2.设计要点说明3. 效果图4. 关于作者其它项目视频教程介绍 1. 编写布局文件 编写activity.login.xml 布局文件 <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android…

机器学习:【抛掷硬币的贝叶斯后验概率】

首先,抛硬币的问题通常涉及先验概率、似然函数和后验概率。假设用户可能想通过观察一系列的正面(H)和反面(T)来更新硬币的偏差概率。例如,先验可能假设硬币是均匀的,但随着观察到更多数据,用贝叶斯定理计算后验分布。 通常,硬币的偏差可以用Beta分布作为先验,因为它…

Echarts 问题:自定义的 legend 点击后消失,格式化 legend 的隐藏文本样式

文章目录 问题分析实现步骤代码解释问题 如下图所示,在自定义的 legend 点击后会消失 分析 我把隐藏的图例字体颜色设为灰色,可以借助 legend.formatter 和 legend.textStyle 结合 option.series 的 show 属性来达成。以下是具体的实现步骤和示例代码: <!DOCTYPE ht…

光谱相机如何提升目标检测与识别精度

光谱相机&#xff08;多光谱/高光谱&#xff09;通过捕捉目标在多个波段的光谱特征&#xff0c;能够揭示传统RGB相机无法感知的材质、化学成分及物理特性差异。以下是提升其目标检测与识别精度的核心方法&#xff1a; ‌1. 硬件优化&#xff1a;提升数据质量‌ ‌(1) 光谱分辨…

springboot项目配置nacos,指定使用环境

遇到这样一个问题&#xff0c;在开发、测试、生成环境之间切换的问题。 大多数的操作是通过修改spring.profiles.active来确定指向使用的环境配置文件&#xff0c;对应项目中需要增加对应的配置文件。 但是现在几乎所有公司都会有代码管理不管是SVN、git&#xff0c;这样就会涉…

AI代码审查的落地实施方案 - Java架构师面试实战

AI代码审查的落地实施方案 - Java架构师面试实战 本文通过模拟一位拥有十年Java研发经验的资深架构师马架构与面试官之间的对话&#xff0c;深入探讨了AI代码审查的落地实施方案。 第一轮提问 面试官&#xff1a; 马架构&#xff0c;请介绍一下您对AI代码审查的理解。 马架…