fastapi_mcp 是一個用于將 FastAPI 端點暴露為模型上下文協議(Model Context Protocol, MCP)工具的庫,并且支持認證功能。
環境macbook,python3.13
pip install fastapi uvicorn fastapi-mcp
代碼
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from fastapi_mcp import FastApiMCP# 定義圖書模型
class Book(BaseModel):id: inttitle: strauthor: str# 創建 FastAPI 應用
app = FastAPI()# 模擬數據庫
books_db = {}# 創建圖書
@app.post("/books/", response_model=Book)
async def create_book(book: Book):if book.id in books_db:raise HTTPException(status_code=400, detail="Book with this ID already exists")books_db[book.id] = bookreturn book# 獲取所有圖書
@app.get("/books/", response_model=list[Book])
async def get_all_books():return list(books_db.values())# 獲取單個圖書
@app.get("/books/{book_id}", response_model=Book)
async def get_book(book_id: int):book = books_db.get(book_id)if book is None:raise HTTPException(status_code=404, detail="Book not found")return book# 更新圖書
@app.put("/books/{book_id}", response_model=Book)
async def update_book(book_id: int, book: Book):if book_id not in books_db:raise HTTPException(status_code=404, detail="Book not found")book.id = book_idbooks_db[book_id] = bookreturn book# 刪除圖書
@app.delete("/books/{book_id}", status_code=204)
async def delete_book(book_id: int):if book_id not in books_db:raise HTTPException(status_code=404, detail="Book not found")del books_db[book_id]return None# 創建 FastApiMCP 實例
mcp = FastApiMCP(app)# 掛載 MCP 服務器
mcp.mount()if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)
python3 -m uvicorn main:app --reload
插入一本書
curl -X POST "http://localhost:8000/books/" -H "Content-Type: application/json" -d '{"id": 1, "title": "Python Crash Course", "author": "Eric Matthes"}'
查詢
curl -X GET "http://localhost:8000/books/" [{"id":1,"title":"Python Crash Course","author":"Eric Matthes"}]
cherry studio
如果啟動python時報錯ImportError
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/pydantic_core/_pydantic_core.cpython-313-darwin.so, 0x0002)
解決
python3 -m pip install pydantic --force-reinstall