讓你的服務(wù)變成MCP Server?FastAPI MCP 指南
原創(chuàng)在當(dāng)今AI世界中,應(yīng)用程序和大模型之間的無(wú)縫集成至關(guān)重要。模型上下文協(xié)議 (MCP) 通過(guò)允許 AI 模型訪問(wèn)外部工具和數(shù)據(jù)源來(lái)彌合這一差距。
FastAPI MCP 可以用最少的配置將現(xiàn)有的 FastAPI 端點(diǎn)轉(zhuǎn)換為與 MCP 兼容的工具。本文將描述設(shè)置和使用 FastAPI MCP 來(lái)增強(qiáng) AI 應(yīng)用程序。作為一個(gè)零配置工具,它會(huì)自動(dòng)將FastAPI 端點(diǎn)作為MCP工具公開(kāi)。FastAPI MCP 的美妙之處在于其簡(jiǎn)單性,它使用現(xiàn)有的 API 端點(diǎn),并使它們可供 AI 模型訪問(wèn),而無(wú)需您重寫(xiě)代碼或創(chuàng)建單獨(dú)的實(shí)現(xiàn)。
如果希望零基礎(chǔ)快速入門(mén)基于MCP的AI 應(yīng)用開(kāi)發(fā),感謝大家閱讀一個(gè)老程序員寫(xiě)的入門(mén)讀物:
1. FastAPI MCP 基礎(chǔ)
借助 FastAPI MCP 服務(wù)器的支持,開(kāi)發(fā)者可以更高效地將現(xiàn)有的 API 接口集成到 AI 模型的工作流中,從而實(shí)現(xiàn)模型對(duì)工具的智能調(diào)用。通過(guò)這一能力,F(xiàn)astAPI 不僅延續(xù)了其在構(gòu)建高性能、易維護(hù) API 方面的優(yōu)勢(shì),還為 AI 應(yīng)用提供了標(biāo)準(zhǔn)化、可擴(kuò)展的接口接入方式。
使用 FastAPI MCP 的集成功能,可以輕松實(shí)現(xiàn)以下關(guān)鍵特性:
自動(dòng)將 FastAPI 端點(diǎn)轉(zhuǎn)換為 MCP 工具。這意味著你無(wú)需手動(dòng)編寫(xiě)額外代碼或重復(fù)定義接口邏輯,只需對(duì)現(xiàn)有端點(diǎn)稍作配置,即可將其注冊(cè)為模型可調(diào)用的功能模塊。這大大降低了將業(yè)務(wù)服務(wù)與 AI 模型連接的門(mén)檻。
無(wú)縫保留原有的 API 模式和文檔。FastAPI 以其強(qiáng)大的類(lèi)型注解和自動(dòng)生成的交互式文檔著稱。在啟用 MCP 功能后,這些優(yōu)勢(shì)依然得以保留——無(wú)論是請(qǐng)求體結(jié)構(gòu)、響應(yīng)格式還是驗(yàn)證規(guī)則,都將繼續(xù)生效。同時(shí),MCP 工具的描述信息也可以直接從 OpenAPI/Swagger 文檔中提取,確保工具說(shuō)明的一致性和準(zhǔn)確性。
部署方式也具備高度靈活性。你可以選擇將 MCP 服務(wù)器與現(xiàn)有 API 服務(wù)一起部署,形成一個(gè)統(tǒng)一的服務(wù)單元;也可以將其作為獨(dú)立服務(wù)運(yùn)行,以實(shí)現(xiàn)更清晰的職責(zé)劃分和資源管理。這種靈活的架構(gòu)設(shè)計(jì),使得 FastAPI 可以適應(yīng)從小型應(yīng)用到企業(yè)級(jí)系統(tǒng)的多種部署需求。
不僅如此,還可以精細(xì)控制哪些端點(diǎn)被公開(kāi)為 MCP 工具。并非所有 API 都適合暴露給 AI 模型,有些可能涉及內(nèi)部邏輯或安全敏感操作。FastAPI 提供了便捷的機(jī)制,讓你能夠有選擇性地指定需要注冊(cè)為工具的端點(diǎn),從而確保系統(tǒng)的安全性與可控性。
我們可以自定義工具說(shuō)明的生成方式。包括工具名稱、描述、參數(shù)格式、返回值結(jié)構(gòu)等都可以根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景進(jìn)行調(diào)整。這種定制化能力不僅有助于提升模型對(duì)工具的理解效率,還能增強(qiáng)提示詞工程中的語(yǔ)義一致性,使 AI 在調(diào)用工具時(shí)更加準(zhǔn)確和可靠。
FastAPI MCP不僅簡(jiǎn)化了工具接入流程,還兼顧了開(kāi)發(fā)效率、系統(tǒng)安全與模型可用性之間的平衡,是當(dāng)前推動(dòng) AI 與業(yè)務(wù)服務(wù)深度融合的理想選擇之一。
2. FastAPI MCP 的基本使用
在開(kāi)始使用之前,需要安裝 FastAPI MCP 包:
uv add fastapi-mcp
或者 pip install fastapi-mcp實(shí)現(xiàn) FastAPI MCP 的最簡(jiǎn)單方法是將其直接掛載到現(xiàn)有的 FastAPI 應(yīng)用程序中。這里有一個(gè)最小的例子:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
# Your existing FastAPI app
app = FastAPI()
# Define your API endpoints
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}
# Add MCP server to your FastAPI app
mcp = FastApiMCP(
app,
name="My API MCP",
description="MCP server for my API",
base_url="<http://localhost:8000>"
)
# Mount the MCP server to your app
mcp.mount()
# Run your app as usual
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)通過(guò)這幾行代碼,你的 FastAPI 應(yīng)用程序現(xiàn)在已經(jīng)配備了一個(gè) MCP 服務(wù)器,可以 http://localhost:8000/MCP 訪問(wèn)。支持 MCP 的 AI 模型,比如 Claude,現(xiàn)在可以作為工具發(fā)現(xiàn) API 端點(diǎn)并與之交互。
3. 工具命名的最佳實(shí)踐
當(dāng) AI 模型與我們的工具交互時(shí),清晰的命名是必不可少的。FastAPI MCP 使用 FastAPI 路由中的 operation_id 作為 MCP 工具名。如果沒(méi)有指定operation_id,F(xiàn)astAPI 會(huì)自動(dòng)生成一個(gè),但這個(gè) id 可能用戶友好性較差。
考慮以下兩個(gè)端點(diǎn)定義:
# Auto-generated operation_id (e.g., "read_user_users__user_id__get")
@app.get("/users/{user_id}")
async def read_user(user_id: int):
return {"user_id": user_id}# Explicit operation_id (tool will be named "get_user_info")
@app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}第二種方法創(chuàng)建一個(gè)更直觀的工具名稱,AI 模型將發(fā)現(xiàn)更容易正確使用。始終提供顯式的 operation_id 值,以獲得更清晰的工具名稱。
4. 高級(jí)配置選項(xiàng)
FastAPI MCP 提供了控制如何將 API 模式描述為 AI 模型的選項(xiàng):mcp = FastApiMCP(app,name="My API MCP",base_url="<http://localhost:8000>",describe_all_responses=True, # Include all possible response schemasdescribe_full_response_schema=True # Include full JSON schemas in descriptions)describe_all_responses選項(xiàng)在工具描述中包含所有可能的響應(yīng)模式,而 describe_full_response_schema 包含完整的 JSON 模式而不是簡(jiǎn)化版本。
如果不希望將所有 API 端點(diǎn)公開(kāi)為 MCP 工具。FastAPI MCP 提供了幾種過(guò)濾端點(diǎn)成為工具的方法:
# Only include specific operations
mcp = FastApiMCP(
app,
include_operations=["get_user", "create_user"]
)# Exclude specific operations
mcp = FastApiMCP(
app,
exclude_operations=["delete_user"]
)# Only include operations with specific tags
mcp = FastApiMCP(
app,
include_tags=["users", "public"]
)# Exclude operations with specific tags
mcp = FastApiMCP(
app,
exclude_tags=["admin", "internal"]
)# Combine operation IDs and tags
mcp = FastApiMCP(
app,
include_operations=["user_login"],
include_tags=["public"]
)這些過(guò)濾功能使我們能夠細(xì)粒度地控制哪些端點(diǎn)作為工具公開(kāi),從而允許我們?cè)诰S護(hù)安全性的同時(shí)為 AI 模型提供必要的功能。
5. 部署選項(xiàng)
雖然將 MCP 服務(wù)器掛載到現(xiàn)有的 FastAPI 應(yīng)用程序很簡(jiǎn)單,但是出于安全或架構(gòu)的原因,可能需要單獨(dú)部署它。以下是如何設(shè)置:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
# Your API app
api_app = FastAPI()
# Define your API endpoints on api_app
@api_app.get("/users/{user_id}", operation_id="get_user_info")
async def read_user(user_id: int):
return {"user_id": user_id}
# A separate app for the MCP server
mcp_app = FastAPI()
# Create MCP server from the API app
mcp = FastApiMCP(
api_app,
base_url="<http://api-host:8001>" # The URL where the API app will be running
)
# Mount the MCP server to the separate app
mcp.mount(mcp_app)# 現(xiàn)在可以獨(dú)立運(yùn)行這兩個(gè)服務(wù)了
# uvicorn main:api_app --host api-host --port 8001
# uvicorn main:mcp_app --host mcp-host --port 8000這種方法允許在不同的主機(jī)或端口上運(yùn)行 API 和 MCP 服務(wù)器,從而在架構(gòu)中提供靈活性。
6. 創(chuàng)建后更新工具
如果在創(chuàng)建 MCP 服務(wù)器之后向 FastAPI 應(yīng)用程序添加新端點(diǎn),則需要刷新服務(wù)器以包含它們:
# Create MCP server
mcp = FastApiMCP(app)
mcp.mount()# Add new endpoints after MCP server creation
@app.get("/new/endpoint/", operation_id="new_endpoint")
async def new_endpoint():
return {"message": "Hello, world!"}# Refresh the MCP server to include the new endpoint
mcp.setup_server()# Add new endpoints after MCP server creation
@app.get("/new/endpoint/", operation_id="new_endpoint")
async def new_endpoint():
return {"message": "Hello, world!"}# Refresh the MCP server to include the new endpoint
mcp.setup_server()setup_server ()方法用任何新的端點(diǎn)更新 MCP 服務(wù)器,確保工具與 API 保持同步。
7. 將 AI 模型連接到 MCP 服務(wù)器
一旦集成了 MCP 的 FastAPI 應(yīng)用程序運(yùn)行起來(lái),我們就可以通過(guò)各種方式將人工智能模型連接到它。
使用服務(wù)器發(fā)送的事件 (SSE)
許多 MCP 客戶端 (如 Cursor) 支持服務(wù)器發(fā)送事件 (SSE) 進(jìn)行實(shí)時(shí)通信:
- 在啟用 FastAPI MCP 的情況下運(yùn)行應(yīng)用程序
- 在Cursor中,進(jìn)入 Settings > MCP
- 使用 MCP 服務(wù)器的端點(diǎn) (例如 http://localhost:8000/MCP) 作為 SSE URL
- Cursor 將自動(dòng)發(fā)現(xiàn)所有可用的工具和資源
為其他客戶端使用 MCP-Proxy
對(duì)于不直接支持 SSE 的客戶端,可以使用 mcp-proxy:
- 安裝 mcp-proxy: uv tool install mcp-proxy
- 將proxy配置添加到 Claude Desktop 的 MCP 配置文件
{
"mcpServers": {
"my-api-mcp-proxy": {
"command": "/Full/Path/To/Your/Executable/mcp-proxy",
"args": ["<http://127.0.0.1:8000/mcp>"]
}
}
}8. 真實(shí)世界的應(yīng)用和好處
FastAPI MCP 的出現(xiàn),為將現(xiàn)有的 API 無(wú)縫集成到人工智能模型中提供了新的可能性。這種集成不僅簡(jiǎn)化了開(kāi)發(fā)流程,還顯著增強(qiáng)了 AI 模型的功能和應(yīng)用場(chǎng)景。
它極大地?cái)U(kuò)展了數(shù)據(jù)訪問(wèn)的能力。通過(guò) FastAPI MCP,AI 模型可以直接查詢數(shù)據(jù)庫(kù)或數(shù)據(jù)服務(wù),獲取所需的實(shí)時(shí)信息。這意味著無(wú)論是客戶資料、交易記錄還是市場(chǎng)趨勢(shì)分析,模型都能迅速獲得最新、最準(zhǔn)確的數(shù)據(jù)支持,從而做出更加精準(zhǔn)的預(yù)測(cè)和決策。
在文檔處理方面,F(xiàn)astAPI MCP 允許模型在系統(tǒng)中執(zhí)行添加、檢索或分析文檔的操作。例如,在法律行業(yè),模型可以通過(guò)調(diào)用 API 來(lái)檢索特定案件的相關(guān)文件;在醫(yī)療領(lǐng)域,則可以用于病歷管理和診斷報(bào)告生成。這種能力使得 AI 不僅限于數(shù)據(jù)分析,還能深入到具體的業(yè)務(wù)操作層面,提供更為全面的服務(wù)。
FastAPI MCP 支持復(fù)雜的業(yè)務(wù)邏輯執(zhí)行。通過(guò) API,AI 模型能夠觸發(fā)一系列預(yù)定義的業(yè)務(wù)流程,如訂單處理、庫(kù)存管理或財(cái)務(wù)結(jié)算等。這不僅提高了自動(dòng)化水平,也確保了操作的一致性和準(zhǔn)確性,減少了人為錯(cuò)誤的可能性。
FastAPI MCP 還促進(jìn)了用戶交互的發(fā)展,使 AI 驅(qū)動(dòng)的應(yīng)用程序能夠以更加自然、高效的方式與用戶進(jìn)行互動(dòng)。無(wú)論是在客戶服務(wù)中的智能應(yīng)答,還是個(gè)性化推薦系統(tǒng)的優(yōu)化,MCP 都能提供強(qiáng)大的技術(shù)支持,提升用戶體驗(yàn)。
使用 FastAPI MCP 的主要優(yōu)點(diǎn)體現(xiàn)在以下幾個(gè)方面:
- 開(kāi)發(fā)效率的提升。開(kāi)發(fā)者無(wú)需從零開(kāi)始構(gòu)建專(zhuān)門(mén)的集成接口,而是可以直接重用現(xiàn)有的 API。這種方式不僅節(jié)省了大量的時(shí)間和資源,還加快了項(xiàng)目的推進(jìn)速度。
- 一致性。由于所有的 API 邏輯都維護(hù)在一個(gè)單一的真實(shí)來(lái)源中,任何更新或修改都會(huì)自動(dòng)同步到所有相關(guān)的應(yīng)用和服務(wù),包括那些由 AI 模型使用的部分。這確保了整個(gè)系統(tǒng)的穩(wěn)定性和一致性,減少了維護(hù)成本。
- 簡(jiǎn)單維護(hù)。當(dāng) API 發(fā)生變化時(shí),這些變更會(huì)自動(dòng)反映在 MCP 工具中,無(wú)需手動(dòng)調(diào)整每個(gè)集成點(diǎn)。這對(duì)于需要頻繁迭代和升級(jí)的系統(tǒng)來(lái)說(shuō)尤為重要,能夠有效避免因版本不匹配導(dǎo)致的問(wèn)題。
- 安全性。FastAPI MCP 提供了精細(xì)的控制機(jī)制,允許開(kāi)發(fā)者明確指定哪些端點(diǎn)可以被 AI 模型訪問(wèn)。這樣既能保證數(shù)據(jù)的安全性,又能靈活應(yīng)對(duì)不同的應(yīng)用場(chǎng)景需求。
FastAPI MCP 不僅為 AI 模型與現(xiàn)有 API 的集成開(kāi)辟了新路徑,還在多個(gè)關(guān)鍵領(lǐng)域展現(xiàn)了其獨(dú)特價(jià)值,包括數(shù)據(jù)訪問(wèn)、文檔處理、業(yè)務(wù)邏輯執(zhí)行以及用戶交互優(yōu)化。同時(shí),它帶來(lái)的開(kāi)發(fā)效率、一致性、維護(hù)簡(jiǎn)便性和安全性方面的優(yōu)勢(shì)。
9. 小結(jié)
FastAPI MCP 標(biāo)志著在實(shí)現(xiàn) API 與人工智能模型之間無(wú)縫、高效集成方面邁出的關(guān)鍵一步。它通過(guò)自動(dòng)化地將 FastAPI 端點(diǎn)轉(zhuǎn)化為符合 MCP 規(guī)范的工具,有效避免了重復(fù)開(kāi)發(fā)的工作量,顯著降低了構(gòu)建 AI 增強(qiáng)型應(yīng)用的技術(shù)門(mén)檻和復(fù)雜度。
無(wú)論開(kāi)發(fā)一個(gè)簡(jiǎn)單的原型,還是打造一個(gè)面向生產(chǎn)的復(fù)雜系統(tǒng),F(xiàn)astAPI MCP 都能提供足夠的靈活性與精細(xì)的控制能力,幫助您高效地將現(xiàn)有 API 功能安全、準(zhǔn)確地暴露給 AI 模型使用。借助本指南中所介紹的最佳實(shí)踐,您可以充分發(fā)揮 MCP 在智能服務(wù)構(gòu)建中的潛力,提升應(yīng)用的自動(dòng)化水平與智能化能力。
現(xiàn)在就開(kāi)始讓我們將API 與 AI 模型集成,釋放前所未有的自動(dòng)化潛能,開(kāi)啟更智能、更流暢的用戶體驗(yàn)之旅。




































