從零構建 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.pswp.cn/diannao/81082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81082.shtml
英文地址,請注明出處:http://en.pswp.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代碼審查的理解。 馬架…