11<p align =" center " ><a href =" https://github.com/tadata-org/fastapi_mcp " ><img src =" https://github.com/user-attachments/assets/609d5b8b-37a1-42c4-87e2-f045b60026b1 " alt =" fastapi-to-mcp " height =" 100 " /></a ></p >
22<h1 align =" center " >FastAPI-MCP</h1 >
3- <p align =" center " >一个零配置工具,用于自动将FastAPI端点公开为模型上下文协议 (MCP)工具。</p >
3+ <p align =" center " >一个零配置工具,用于自动将 FastAPI 端点公开为模型上下文协议 (MCP)工具。</p >
44<div align =" center " >
55
66[ ![ PyPI version] ( https://badge.fury.io/py/fastapi-mcp.svg )] ( https://pypi.org/project/fastapi-mcp/ )
1616
1717## 特点
1818
19- - ** 直接集成** - 直接将MCP服务器挂载到您的FastAPI应用
20- - ** 零配置** - 只需指向您的FastAPI应用即可工作
21- - ** 自动发现** 所有FastAPI端点并转换为MCP工具
19+ - ** 直接集成** - 直接将 MCP 服务器挂载到您的 FastAPI 应用
20+ - ** 零配置** - 只需指向您的 FastAPI 应用即可工作
21+ - ** 自动发现** - 所有 FastAPI 端点并转换为 MCP 工具
2222- ** 保留模式** - 保留您的请求模型和响应模型的模式
23- - ** 保留文档** - 保留所有端点的文档,就像在Swagger中一样
24- - ** 灵活部署** - 将MCP服务器挂载到同一应用 ,或单独部署
23+ - ** 保留文档** - 保留所有端点的文档,就像在 Swagger 中一样
24+ - ** 灵活部署** - 将 MCP 服务器挂载到同一应用 ,或单独部署
2525
2626## 安装
2727
28- 我们推荐使用[ uv] ( https://docs.astral.sh/uv/ ) ,一个快速的Python包安装器 :
28+ 我们推荐使用 [ uv] ( https://docs.astral.sh/uv/ ) ,一个快速的 Python 包安装器 :
2929
3030``` bash
3131uv add fastapi-mcp
@@ -39,7 +39,7 @@ pip install fastapi-mcp
3939
4040## 基本用法
4141
42- 使用FastAPI-MCP的最简单方法是直接将MCP服务器添加到您的FastAPI应用中 :
42+ 使用 FastAPI-MCP 的最简单方法是直接将 MCP 服务器添加到您的 FastAPI 应用中 :
4343
4444``` python
4545from fastapi import FastAPI
@@ -51,44 +51,44 @@ mcp = FastApiMCP(
5151 app,
5252
5353 # 可选参数
54- name = " 我的API MCP" ,
55- description = " 我的API描述 " ,
54+ name = " 我的 API MCP" ,
55+ description = " 我的 API 描述 " ,
5656 base_url = " http://localhost:8000" ,
5757)
5858
59- # 直接将MCP服务器挂载到您的FastAPI应用
59+ # 直接将 MCP 服务器挂载到您的 FastAPI 应用
6060mcp.mount()
6161```
6262
63- 就是这样!您的自动生成的MCP服务器现在可以在 ` https://app.base.url/mcp ` 访问。
63+ 就是这样!您的自动生成的 MCP 服务器现在可以在 ` https://app.base.url/mcp ` 访问。
6464
65- > ** 关于` base_url ` 的注意事项** :虽然` base_url ` 是可选的,但强烈建议您明确提供它。` base_url ` 告诉MCP服务器在调用工具时向何处发送API请求 。如果不提供,库将尝试自动确定URL,这在部署环境中内部和外部URL不同时可能无法正确工作 。
65+ > ** 关于` base_url ` 的注意事项** :虽然` base_url ` 是可选的,但强烈建议您明确提供它。` base_url ` 告诉 MCP 服务器在调用工具时向何处发送 API 请求 。如果不提供,库将尝试自动确定URL,这在部署环境中内部和外部 URL 不同时可能无法正确工作 。
6666
6767## 工具命名
6868
69- FastAPI-MCP使用FastAPI路由中的 ` operation_id ` 作为MCP工具的名称 。如果您不指定` operation_id ` ,FastAPI会自动生成一个 ,但这些名称可能比较晦涩。
69+ FastAPI-MCP 使用 FastAPI 路由中的 ` operation_id ` 作为 MCP 工具的名称 。如果您不指定` operation_id ` ,FastAPI 会自动生成一个 ,但这些名称可能比较晦涩。
7070
7171比较以下两个端点定义:
7272
7373``` python
74- # 自动生成的operation_id (类似于"read_user_users__user_id__get")
74+ # 自动生成的 operation_id (类似于 "read_user_users__user_id__get")
7575@app.get (" /users/{user_id} " )
7676async def read_user (user_id : int ):
7777 return {" user_id" : user_id}
7878
79- # 显式operation_id(工具将被命名为"get_user_info")
79+ # 显式operation_id(工具将被命名为 "get_user_info")
8080@app.get (" /users/{user_id} " , operation_id = " get_user_info" )
8181async def read_user (user_id : int ):
8282 return {" user_id" : user_id}
8383```
8484
85- 为了获得更清晰、更直观的工具名称,我们建议在FastAPI路由定义中添加显式的 ` operation_id ` 参数。
85+ 为了获得更清晰、更直观的工具名称,我们建议在 FastAPI 路由定义中添加显式的 ` operation_id ` 参数。
8686
87- 要了解更多信息,请阅读FastAPI官方文档中关于 [ 路径操作的高级配置] ( https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/ ) 的部分。
87+ 要了解更多信息,请阅读 FastAPI 官方文档中关于 [ 路径操作的高级配置] ( https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/ ) 的部分。
8888
8989## 高级用法
9090
91- FastAPI-MCP提供了多种方式来自定义和控制MCP服务器的创建和配置 。以下是一些高级用法模式:
91+ FastAPI-MCP 提供了多种方式来自定义和控制 MCP 服务器的创建和配置 。以下是一些高级用法模式:
9292
9393### 自定义模式描述
9494
@@ -100,18 +100,18 @@ app = FastAPI()
100100
101101mcp = FastApiMCP(
102102 app,
103- name = " 我的API MCP" ,
103+ name = " 我的 API MCP" ,
104104 base_url = " http://localhost:8000" ,
105105 describe_all_responses = True , # 在工具描述中包含所有可能的响应模式
106- describe_full_response_schema = True # 在工具描述中包含完整的JSON模式
106+ describe_full_response_schema = True # 在工具描述中包含完整的 JSON 模式
107107)
108108
109109mcp.mount()
110110```
111111
112- ### 自定义暴露的端点
112+ ### 自定义公开的端点
113113
114- 您可以使用Open API操作ID或标签来控制哪些FastAPI端点暴露为MCP工具 :
114+ 您可以使用 Open API 操作 ID 或标签来控制哪些 FastAPI 端点暴露为 MCP 工具 :
115115
116116``` python
117117from fastapi import FastAPI
@@ -143,7 +143,7 @@ mcp = FastApiMCP(
143143 exclude_tags = [" admin" , " internal" ]
144144)
145145
146- # 结合操作ID和标签 (包含模式)
146+ # 结合操作 ID 和标签 (包含模式)
147147mcp = FastApiMCP(
148148 app,
149149 include_operations = [" user_login" ],
@@ -159,40 +159,40 @@ mcp.mount()
159159- 您可以将操作过滤与标签过滤结合使用(例如,使用` include_operations ` 和` include_tags ` )
160160- 当结合过滤器时,将采取贪婪方法。匹配任一标准的端点都将被包含
161161
162- ### 与原始FastAPI应用分开部署
162+ ### 与原始 FastAPI 应用分开部署
163163
164- 您不限于在创建MCP的同一个FastAPI应用上提供MCP服务 。
164+ 您不限于在创建 MCP 的同一个 FastAPI 应用上提供 MCP 服务 。
165165
166- 您可以从一个FastAPI应用创建MCP服务器 ,并将其挂载到另一个应用上:
166+ 您可以从一个 FastAPI 应用创建 MCP 服务器 ,并将其挂载到另一个应用上:
167167
168168``` python
169169from fastapi import FastAPI
170170from fastapi_mcp import FastApiMCP
171171
172- # 您的API应用
172+ # 您的 API 应用
173173api_app = FastAPI()
174- # ... 在api_app上定义您的API端点 ...
174+ # ... 在 api_app 上定义您的 API 端点 ...
175175
176- # 一个单独的MCP服务器应用
176+ # 一个单独的 MCP 服务器应用
177177mcp_app = FastAPI()
178178
179- # 从API应用创建MCP服务器
179+ # 从 API 应用创建 MCP 服务器
180180mcp = FastApiMCP(
181181 api_app,
182182 base_url = " http://api-host:8001" , # API应用将运行的URL
183183)
184184
185- # 将MCP服务器挂载到单独的应用
185+ # 将 MCP 服务器挂载到单独的应用
186186mcp.mount(mcp_app)
187187
188188# 现在您可以分别运行两个应用:
189189# uvicorn main:api_app --host api-host --port 8001
190190# uvicorn main:mcp_app --host mcp-host --port 8000
191191```
192192
193- ### 在MCP服务器创建后添加端点
193+ ### 在 MCP 服务器创建后添加端点
194194
195- 如果您在创建MCP服务器后向FastAPI应用添加端点 ,您需要刷新服务器以包含它们:
195+ 如果您在创建 MCP 服务器后向 FastAPI 应用添加端点 ,您需要刷新服务器以包含它们:
196196
197197``` python
198198from fastapi import FastAPI
@@ -201,44 +201,44 @@ from fastapi_mcp import FastApiMCP
201201app = FastAPI()
202202# ... 定义初始端点 ...
203203
204- # 创建MCP服务器
204+ # 创建 MCP 服务器
205205mcp = FastApiMCP(app)
206206mcp.mount()
207207
208- # 在MCP服务器创建后添加新端点
208+ # 在 MCP 服务器创建后添加新端点
209209@app.get (" /new/endpoint/" , operation_id = " new_endpoint" )
210210async def new_endpoint ():
211211 return {" message" : " Hello, world!" }
212212
213- # 刷新MCP服务器以包含新端点
213+ # 刷新 MCP 服务器以包含新端点
214214mcp.setup_server()
215215```
216216
217217## 示例
218218
219- 请参阅[ examples] ( examples ) 目录以获取完整示例。
219+ 请参阅 [ examples] ( examples ) 目录以获取完整示例。
220220
221- ## 使用SSE连接到MCP服务器
221+ ## 使用 SSE 连接到 MCP 服务器
222222
223- 一旦您的集成了MCP的FastAPI应用运行,您可以使用任何支持SSE的MCP客户端连接到它,例如Cursor :
223+ 一旦您的集成了 MCP 的 FastAPI 应用运行,您可以使用任何支持 SSE 的 MCP 客户端连接到它,例如 Cursor :
224224
2252251 . 运行您的应用。
226226
227- 2 . 在Cursor -> 设置 -> MCP中,使用您的MCP服务器端点的URL (例如,` http://localhost:8000/mcp ` )作为sse 。
227+ 2 . 在 Cursor -> 设置 -> MCP 中,使用您的 MCP 服务器端点的URL (例如,` http://localhost:8000/mcp ` )作为 sse 。
228228
229- 3 . Cursor将自动发现所有可用的工具和资源 。
229+ 3 . Cursor 将自动发现所有可用的工具和资源 。
230230
231- ## 使用[ mcp-proxy stdio] ( https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov-file#1-stdio-to-sse ) 连接到MCP服务器
231+ ## 使用 [ mcp-proxy stdio] ( https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov-file#1-stdio-to-sse ) 连接到 MCP 服务器
232232
233- 如果您的MCP客户端不支持SSE,例如Claude Desktop:
233+ 如果您的 MCP 客户端不支持 SSE,例如 Claude Desktop:
234234
2352351 . 运行您的应用。
236236
237- 2 . 安装[ mcp-proxy] ( https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov-file#installing-via-pypi ) ,例如:` uv tool install mcp-proxy ` 。
237+ 2 . 安装 [ mcp-proxy] ( https://github.com/sparfenyuk/mcp-proxy?tab=readme-ov-file#installing-via-pypi ) ,例如:` uv tool install mcp-proxy ` 。
238238
239- 3 . 在Claude Desktop的MCP配置文件 (` claude_desktop_config.json ` )中添加:
239+ 3 . 在 Claude Desktop 的 MCP 配置文件 (` claude_desktop_config.json ` )中添加:
240240
241- 在Windows上 :
241+ 在 Windows 上 :
242242``` json
243243{
244244 "mcpServers" : {
@@ -249,7 +249,7 @@ mcp.setup_server()
249249 }
250250}
251251```
252- 在MacOS上 :
252+ 在 MacOS 上 :
253253``` json
254254{
255255 "mcpServers" : {
@@ -260,19 +260,19 @@ mcp.setup_server()
260260 }
261261}
262262```
263- 通过在终端运行` which mcp-proxy ` 来找到mcp-proxy的路径 。
263+ 通过在终端运行` which mcp-proxy ` 来找到 mcp-proxy 的路径 。
264264
265- 4 . Claude Desktop将自动发现所有可用的工具和资源
265+ 4 . Claude Desktop 将自动发现所有可用的工具和资源
266266
267267## 开发和贡献
268268
269- 感谢您考虑为FastAPI-MCP做出贡献 !我们鼓励社区发布问题和拉取请求。
269+ 感谢您考虑为 FastAPI-MCP 做出贡献 !我们鼓励社区发布问题和拉取请求。
270270
271- 在开始之前,请参阅我们的[ 贡献指南] ( CONTRIBUTING.md ) 。
271+ 在开始之前,请参阅我们的 [ 贡献指南] ( CONTRIBUTING.md ) 。
272272
273273## 社区
274274
275- 加入[ MCParty Slack社区 ] ( https://join.slack.com/t/themcparty/shared_invite/zt-30yxr1zdi-2FG~XjBA0xIgYSYuKe7~Xg ) ,与其他MCP爱好者联系 ,提问,并分享您使用FastAPI-MCP的经验 。
275+ 加入 [ MCParty Slack 社区 ] ( https://join.slack.com/t/themcparty/shared_invite/zt-30yxr1zdi-2FG~XjBA0xIgYSYuKe7~Xg ) ,与其他 MCP 爱好者联系 ,提问,并分享您使用 FastAPI-MCP 的经验 。
276276
277277## 要求
278278
@@ -281,4 +281,4 @@ mcp.setup_server()
281281
282282## 许可证
283283
284- MIT许可证。版权所有 (c) 2024 Tadata Inc.
284+ MIT License. Copyright (c) 2024 Tadata Inc.
0 commit comments