MCP協(xié)議解析:JSON-RPC 2.0驅(qū)動(dòng)LLM連接工具與數(shù)據(jù),賦能AI Agent開發(fā)

MCP協(xié)議:用JSON-RPC 2.0給LLM裝上“神經(jīng)突觸”,Agent開發(fā)就靠它了
想讓你的AI Agent真正“動(dòng)起來”,而不是只會(huì)聊天?關(guān)鍵在于連接。MCP(Model Context Protocol)協(xié)議,就是那個(gè)能讓LLM像人腦一樣,通過“神經(jīng)突觸”連接各種工具、數(shù)據(jù)和服務(wù)的底層框架。它基于JSON-RPC 2.0,輕量、高效,是構(gòu)建下一代AI自動(dòng)化系統(tǒng)的核心。
一、MCP的四大核心能力:不止是API調(diào)用
很多人把MCP簡(jiǎn)單理解為“給模型調(diào)API的協(xié)議”,這太小看它了。它的四大能力,構(gòu)成了一個(gè)完整的Agent執(zhí)行閉環(huán):
- 工具發(fā)現(xiàn)與調(diào)用:Agent能動(dòng)態(tài)發(fā)現(xiàn)Server提供了哪些工具(比如“發(fā)送郵件”、“查詢數(shù)據(jù)庫(kù)”),并像調(diào)用函數(shù)一樣調(diào)用它們。這解決了“模型不知道自己能干什么”的問題。
- 資源訪問與訂閱:Agent可以讀取Server提供的文件、數(shù)據(jù)庫(kù)記錄等資源,甚至訂閱其變化。比如,一個(gè)監(jiān)控Agent可以訂閱服務(wù)器日志資源,一有錯(cuò)誤就自動(dòng)處理。
- 提示詞模板管理:Server可以提供預(yù)置的、高質(zhì)量的提示詞模板。Agent調(diào)用工具時(shí),自動(dòng)套用最佳實(shí)踐模板,極大提升輸出質(zhì)量的穩(wěn)定性。
- 采樣控制與人機(jī)協(xié)同:這是安全關(guān)鍵。Agent在執(zhí)行敏感操作(如刪除文件、大額支付)前,可以通過MCP協(xié)議將決策“采樣”回給人類用戶確認(rèn),實(shí)現(xiàn)可控的自動(dòng)化。
商業(yè)價(jià)值點(diǎn):這四大能力意味著,你可以將任何現(xiàn)有軟件服務(wù)(CRM、ERP、內(nèi)部工具)快速封裝成MCP Server,瞬間讓成千上萬的AI Agent具備操作該服務(wù)的能力,實(shí)現(xiàn)服務(wù)的“AI化”分發(fā)。
二、四層架構(gòu):清晰分工,易于擴(kuò)展
MCP的架構(gòu)設(shè)計(jì)非常清晰,分為四層,開發(fā)者可以按需介入:
| 層級(jí) | 名稱 | 職責(zé) | 類比 |
|---|---|---|---|
| L1 | 傳輸層 | 負(fù)責(zé)客戶端與服務(wù)端之間的原始通信。支持stdio(本地進(jìn)程通信)和HTTP + SSE(遠(yuǎn)程流式通信)。 | 神經(jīng)網(wǎng)絡(luò)的“軸突”,傳遞電信號(hào)。 |
| L2 | 協(xié)議層 | 定義消息格式。核心是JSON-RPC 2.0,規(guī)定了請(qǐng)求、響應(yīng)、通知的結(jié)構(gòu)。 | 神經(jīng)信號(hào)的“編碼規(guī)則”。 |
| L3 | 能力層 | 實(shí)現(xiàn)四大核心能力(工具、資源、提示詞、采樣)的具體邏輯。 | 不同腦區(qū)的“功能分區(qū)”(視覺區(qū)、語言區(qū))。 |
| L4 | 應(yīng)用層 | 開發(fā)者編寫的業(yè)務(wù)邏輯,比如“查詢天氣工具”、“數(shù)據(jù)庫(kù)連接器”。 | 具體的“思維活動(dòng)”或“行為”。 |
工程價(jià)值:這種分層讓調(diào)試變得簡(jiǎn)單。通信問題查L(zhǎng)1/L2,工具調(diào)用失敗查L(zhǎng)3/L4,邏輯清晰,不會(huì)一團(tuán)亂麻。
三、實(shí)戰(zhàn):開發(fā)一個(gè)生產(chǎn)級(jí)“數(shù)據(jù)庫(kù)查詢”MCP Server
理論說再多,不如寫個(gè)例子。我們來構(gòu)建一個(gè)能讓AI Agent查詢MySQL數(shù)據(jù)庫(kù)的MCP Server。這里用Python和官方的mcp庫(kù)。
1. 安裝與基礎(chǔ)結(jié)構(gòu)
pip install mcp mysql-connector-python2. 核心代碼實(shí)現(xiàn) (db_server.py)
import json
from typing import Any
import mysql.connector
from mcp.server import Server
from mcp.types import Tool, TextContent
import mcp.server.stdio
# 初始化MCP Server,給它一個(gè)名字
server = Server("mysql-query-server")
# 定義“工具”:這里是一個(gè)執(zhí)行SQL查詢的工具
@server.tool("query_database")
async def query_database(sql: str) -> list[TextContent]:
"""執(zhí)行只讀SQL查詢并返回JSON格式結(jié)果。"""
try:
# 安全警告:生產(chǎn)環(huán)境務(wù)必使用參數(shù)化查詢防止SQL注入!
conn = mysql.connector.connect(

host="localhost",
user="your_user",
password="your_password",
database="your_db"
)
cursor = conn.cursor(dictionary=True)
cursor.execute(sql)
results = cursor.fetchall()
cursor.close()
conn.close()
# 將結(jié)果轉(zhuǎn)為JSON字符串返回
return [TextContent(type="text", text=json.dumps(results, ensure_ascii=False))]
except Exception as e:
return [TextContent(type="text", text=f"查詢出錯(cuò): {str(e)}")]
# 定義“資源”:這里提供數(shù)據(jù)庫(kù)表結(jié)構(gòu)作為資源,讓Agent了解數(shù)據(jù)庫(kù)
@server.resource("schema://tables")
async def get_schema() -> str:
"""返回?cái)?shù)據(jù)庫(kù)所有表的結(jié)構(gòu)信息。"""
# ... (連接數(shù)據(jù)庫(kù),查詢information_schema的代碼,此處簡(jiǎn)化)
schema_info = {"users": ["id", "name", "email"], "orders": ["id", "user_id", "amount"]}
return json.dumps(schema_info)
# 主函數(shù):以stdio模式啟動(dòng)Server
if __name__ == "__main__":
mcp.server.stdio.run_server(server)3. 部署與集成步驟
- 啟動(dòng)Server:在終端運(yùn)行
python db_server.py。它會(huì)通過stdin/stdout等待MCP客戶端的連接。 在AI客戶端(如Claude Desktop)中配置:在Claude的設(shè)置文件中添加:
{ "mcpServers": { "mysql-db": { "command": "python", "args": ["/path/to/db_server.py"] } } }- 測(cè)試:現(xiàn)在你可以對(duì)Claude說:“幫我查一下用戶表里有多少條記錄?!?Claude會(huì)發(fā)現(xiàn)
query_database工具,生成SQLSELECT COUNT(*) FROM users,通過MCP調(diào)用你的Server,最終把結(jié)果告訴你。
可復(fù)制路徑:將這個(gè)Server部署在一臺(tái)固定服務(wù)器上,改用HTTP + SSE傳輸模式(修改run_server方式),你就能將這個(gè)數(shù)據(jù)庫(kù)查詢能力通過一個(gè)URL提供給所有支持MCP的AI客戶端和Agent框架,實(shí)現(xiàn)一次開發(fā),多處調(diào)用。
四、下一步行動(dòng)清單
- 動(dòng)手跑通:復(fù)制上面的代碼,用你自己的一個(gè)簡(jiǎn)單數(shù)據(jù)庫(kù)(甚至SQLite)跑通整個(gè)流程。感受一下Agent自動(dòng)調(diào)用工具的神奇。
- 封裝你的服務(wù):想想你手頭有什么重復(fù)性工作(比如整理報(bào)表、回復(fù)固定格式郵件),把它封裝成一個(gè)MCP Server的工具。
- 探索高級(jí)模式:試試“資源訂閱”功能。寫一個(gè)監(jiān)控本地某個(gè)文件變化的Server,讓Agent在文件更新時(shí)自動(dòng)觸發(fā)分析任務(wù)。
- 發(fā)布與商業(yè)化:將你開發(fā)的通用MCP Server(比如“PDF解析器”、“社交媒體發(fā)布器”)打包,在龍蝦官網(wǎng)(m.gsdl.org.cn)或類似平臺(tái)上作為插件發(fā)布。這是將你的技術(shù)能力直接產(chǎn)品化、貨幣化的最短路徑。
MCP不是未來,它已經(jīng)是現(xiàn)在。掌握它,你就掌握了構(gòu)建下一代智能自動(dòng)化系統(tǒng)的“連接器”密碼。