MCP或?qū)⒊蔀锳I界的HTTP? 原創(chuàng)
本文將向你詳細(xì)介紹什么是MCP(模型上下文協(xié)議),如何構(gòu)建一個基礎(chǔ)的MCP服務(wù)器,及其工作原理。?
由Claude 人工智能(AI)模型家族背后的公司--Anthropic推出的通信協(xié)議MCP(模型上下文協(xié)議,Model Context Protocol)可謂2025年的流行協(xié)議。目前,包括Google和OpenAI在內(nèi)的幾乎所有主要AI公司都接受了MCP,并使之正在成為AI模型的標(biāo)準(zhǔn)化通信方式。
下面,我將向你詳細(xì)介紹什么是MCP,如何構(gòu)建一個基礎(chǔ)的MCP服務(wù)器,及其工作原理。
什么是MCP?
MCP,又名AI模型上下文協(xié)議,是AI模型與外部工具和應(yīng)用通信的標(biāo)準(zhǔn)化方式。和HTTP、以及TCP等其他協(xié)議類似,它是一種協(xié)議、一種通信方式、也是一套規(guī)則。
由于MCP遵循客戶端-服務(wù)器的架構(gòu),因此我們通常需要兩個構(gòu)建塊,來實現(xiàn)MCP客戶端和MCP服務(wù)器的通信,即:
- MCP客戶端:主要使用模型上下文協(xié)議與MCP服務(wù)器對話。你可以將其視為一種工具,可用來啟動與MCP服務(wù)器的連接,與支持MCP的AI模型進行交互。?
- MCP服務(wù)器:主要處理來自AI模型(即MCP客戶端)的請求,并將其映射到服務(wù)器中預(yù)定義的適當(dāng)任務(wù)中。也就是說,MCP服務(wù)器定義了AI模型在服務(wù)器與工具上執(zhí)行哪些操作,以及它可以訪問哪些資源。你可以把它想象成一個映射器,將各種請求映射為適當(dāng)?shù)牟僮?。具體而言,當(dāng)我向支持MCP的AI工具(例如Claude Desktop)發(fā)送提示詞時,MCP客戶端會將其轉(zhuǎn)到AI模型(例如Claude),AI模型據(jù)此思考如何繼續(xù)處理請求,并探索所有可用的工具和資源,然后它將決定使用哪些工具與資源,并告訴MCP客戶端如何與外部MCP服務(wù)器交流,以獲取并執(zhí)行這些工具與資源。一旦MCP客戶端從MCP服務(wù)器處獲得了響應(yīng),它會將該數(shù)據(jù)發(fā)送給AI模型,而AI模型將以人類可讀的方式重組并呈現(xiàn)數(shù)據(jù)。具體流程請參見下圖。
圖片來源:https://syntackle.com/blog/model-context-protocol/
為何需要MCP?
你也許會問,MCP與我們常用的API有何區(qū)別呢?其實,作為一個AI模型,如果我想連接到外部工具或應(yīng)用的話,只需為其構(gòu)建一個API,以便AI模型與對應(yīng)的工具或應(yīng)用通信即可。不過,請注意,這類API往往特定于某些工具或應(yīng)用。如果我想讓AI模型使用其他的工具,就必須額外再構(gòu)建一個自定義的API。顯然,到頭來,我需要構(gòu)建的API數(shù)量將與AI模型使用的工具及應(yīng)用的數(shù)量成比上升。而對于AI公司而言,這將增加大量的構(gòu)建和管理成本。而這恰恰是Anthropic發(fā)揮作用的地方。
Anthropic創(chuàng)建了一個與AI模型和工具無關(guān)的通用協(xié)議。這意味著,任何支持該協(xié)議的AI模型都可以與任何支持該協(xié)議的外部工具/應(yīng)用進行通信。據(jù)此,AI模型提供商只需要支持MCP,便可與任何也支持MCP的外部工具進行通信。實際上,他們所做的是將構(gòu)建API的任務(wù)轉(zhuǎn)移到了開發(fā)者社區(qū)(例如各種外部工具和應(yīng)用),讓MCP與應(yīng)用集成的任務(wù)成為應(yīng)用開發(fā)人員的工作,而不是AI模型提供商的工作。這對于雙方來說都是雙贏的,畢竟他們只需要維護一個接口,即MCP。
圖片來源:https://syntackle.com/blog/model-context-protocol/
不僅如此,第三方MCP服務(wù)器也可以為給定的應(yīng)用進行構(gòu)建。這鼓勵了開發(fā)者社區(qū)使用AI在現(xiàn)有應(yīng)用的基礎(chǔ)上構(gòu)建新的方案,而無需了解AI模型或平臺的具體內(nèi)容;且反之亦然。
如何構(gòu)建 MCP 服務(wù)器
MCP服務(wù)器包括三個組件:
- 工具:用于執(zhí)行各項功能性操作,實現(xiàn)類似于HTTP的PUT/PATCH/DELETE請求。?
- 資源:提供MCP 客戶端可讀取的數(shù)據(jù)。實現(xiàn)類似于HTTP的GET請求。?
- 預(yù)定義的提示:各種可供LLM使用的提示模板。MCP服務(wù)器通常可以由Python、Node、Java、Kotlin和C#來構(gòu)建。在下文中,我將使用Node(TypeScript)來構(gòu)建一個基本的MCP服務(wù)器。
安裝MCP SDK和應(yīng)用
請使用npm init -y來初始化Node應(yīng)用。然后,根據(jù)你的編程語言或框架,安裝適當(dāng)?shù)腟DK。在本例中,我使用的是:
npm install @modelcontextprotocol/sdk
并且,通過修改package.json文件來實現(xiàn):
- 讓Node應(yīng)用成為一個模塊。?
- 使用bin腳本在bin文件夾中包含一個可執(zhí)行文件。?
- 在build腳本中設(shè)置可執(zhí)行文件的權(quán)限。如有必要,請包含一個files腳本,來定義在最終構(gòu)建中包含哪些文件:
{
"name": "mcp-demo",
"version": "1.0.0",
"type": "module",
"bin": {
"mcp-demo": "./dist/index.js"
},
"scripts": {
"ts": "npx tsc",
"rootFile": "chmod 755 ./dist/index.js",
"build": "npm-run-all -s ts rootFile"
},
"files": [ "dist" ],
"dependencies": {
"@modelcontextprotocol/sdk": "^1.10.1",
"npm-run-all": "^4.1.5",
"typescript": "^5.8.3"
}
}
在此,我建議在項目文件夾的根目錄處,創(chuàng)建一個tsconfig.json文件,具體內(nèi)容如下:
{
"compilerOptions": {
"target": "ES2022",
"module": "Node16",
"moduleResolution": "Node16",
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules"
]
}
創(chuàng)建 MCP 服務(wù)器實例
接著,請創(chuàng)建一個src文件夾,并在該文件夾中創(chuàng)建一個index.ts文件。當(dāng)然,你也可以自定義不同的文件夾結(jié)構(gòu),但請確保相應(yīng)地更新到package.json和tsconfig.json的對應(yīng)位置。
// index.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({
name: "mcp-demo",
version: "1.0.0",
capabilities: {
resources: {},
tools: {},
prompts: {},
}
});
const transport = new StdioServerTransport();
await server.connect(transport);
console.log("Server started and connected to transport.");
MCP服務(wù)器需要設(shè)定一種傳輸類型,才能與MCP客戶端通信。這便是使用stdio傳輸類型的原因。請注意,該傳輸類型僅在Node中可用。
配置 MCP 客戶端
在本例中,我正在使用??Claude Desktop App?作為MCP客戶端來與MCP服務(wù)器通信。當(dāng)然,你也可以使用任何自己喜歡的MCP客戶端。?
首先,我需要告知Claude Desktop自己的MCP服務(wù)器,并提供一條可以找到它的路徑。為此,我需要修改Claude Desktop的配置文件。該文件存在于以下不同操作系統(tǒng)的路徑中:
- MacOS和Linux:~/Library/Application\ Support/Claude/claude_desktop_config.json?
- Windows:AppData\Claude\claude_desktop_config.json?請在終端上使用VSCode打開該文件:?
- MacOS和Linux:code ~/Library/Application\Support/Claude/claude_desktop_config.json?
- Windows:code $env:AppData\Claude\claude_desktop_config.json?然后,在你獲取了訪問該文件的權(quán)限后,請參照如下方式添加你的MCP服務(wù)器:
{?
"mcpServers": {?
"mcp-demo": {?
"command": "node",?
"args": [?
"/Users/murtuzaalisurti/Documents/Development/MCP Servers/demo/dist/index.js", // absolute path to your MCP server build?
]?
}?
}?
}?
- 請保存文件并重新啟動Claude Desktop。?
- 如果你遇到了錯誤,請轉(zhuǎn)到Claude App Settings > Developer > Logs。?
- 如果MCP服務(wù)器在Claude Desktop中被正確配置和注冊,那么你將可以通過轉(zhuǎn)到Claude App Settings > Developer > [MCP Server Name]來驗證MCP服務(wù)器的狀態(tài)(如下圖所示應(yīng)為running狀態(tài))。
使用MCP服務(wù)器
在Claude Desktop中,連接上MCP服務(wù)器后,如果你在MCP服務(wù)器中定義了資源,你可以看到一個插頭的圖標(biāo)。它允許你將這些資源中的數(shù)據(jù)附加到AI模型的上下文中。
Claude Desktop應(yīng)用的mcp資源上下文圖標(biāo)(插頭圖標(biāo))
點擊Claude Desktop應(yīng)用的mcp資源上下文圖標(biāo)(插入圖標(biāo))
一旦你將資源附加到聊天上下文中,并告訴Claude用正常人類語言檢索該信息,它便可以提供如下互動:
在Claude Desktop中將mcp資源附加到聊天的上下文中
如果你在MCP服務(wù)器中定義了tools,你將在Claude Desktop中看到一個錘子圖標(biāo),并能顯示可用的工具。
在Claude Desktop中將mcp工具附加到聊天上下文中
例如,我在自己的MCP服務(wù)器中添加了一個修改用戶年齡的工具,并將其與現(xiàn)有的資源結(jié)合使用,該資源能夠為Claude提供用戶列表。請注意,你需要將這些資源附加到聊天的上下文中。當(dāng)然,Claude需要征得你的許可,方可修改數(shù)據(jù)。
const users = [
{ name: "Alice", age: 30 },
{ name: "Bob", age: 25 },
{ name: "Charlie", age: 35 }
]
server.tool(
"modify-user-age",
"Modify user age",
{
name: z.string(), // install zod: npm i zod
age: z.number(),
},
({ name, age }) => {
const user = users.find(user => user.name === name);
if (!user) {
return {
content: [{
type: "text",
text: `User ${name} not found`,
}]
}
}
user.age = age;
return {
content: [{
type: "text",
text: `User ${name} updated to age ${age}`,
}]
}
},
)
通過請求權(quán)限在Claude Desktop中將mcp服務(wù)器資源和工具一起使用
在Claude Desktop中一起使用mcp服務(wù)器資源和工具
在將資源附加到聊天上下文后,如果我再次要求它獲取用戶列表,Claude就會使用更新的數(shù)據(jù)進行響應(yīng)了。
在Claude Desktop中使用mcp服務(wù)器資源和工具,獲取更新的用戶列表
這就是我構(gòu)建一個基本而簡單的MCP服務(wù)器,并將其與Claude Desktop(MCP客戶端)集成。
MCP 服務(wù)器列表
以下是你可以試用的MCP服務(wù)器詳盡列表:
- ?Git MCP???
- ??GitHub MCP???
- ??Google Maps MCP???
- ??Reddit MCP???
- ??Blender MCP???
- ??Da Vinci Resolve MCP???
- ??Google Drive MCP???
- ??Figma MCP???
- ??Prisma MCP???
- ??GitLab MCP???
- ??FileSystem MCP???
- ??Slack MCP???
- ??Brave Search MCP???
- ??SQLite MCP??
如果你想探索更多的MCP服務(wù)器,請查看如下MCP服務(wù)器目錄,其中包含了各種社區(qū)和官方的MCP服務(wù)器。?
- ??Glama???
- ??Cursor MCP Directory???
- ??HuggingFace MCP Server List???
- ??punkpeye/awesome-mcp-servers??
- ?modelcontextprotocol MCP server list???
- ??MCP.so???
小結(jié)
有人將MCP稱為AI領(lǐng)域的“USB-C”、也有人稱之為AI界的HTTP,顯然它比HTTP更復(fù)雜。盡管MCP并不能解決每個AI模型的通信問題,但是它肯定會使之變得更容易。隨著MCP的出現(xiàn),其他協(xié)議,如A2A(代理對代理協(xié)議)也開始被使用,并使得由不同框架構(gòu)建的AI代理之間的通信變得更加容易??梢姡琈CP只是AI通信協(xié)議的開始,我們將能看到一些更強大、更好用、更注重隱私的AI協(xié)議的涌現(xiàn)。
譯者介紹
陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內(nèi)外部資源與風(fēng)險實施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗。
原文標(biāo)題:?Anthropic’s New Protocol Wants to Be the HTTP of AI??,作者:Murtuza
