1
1
<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 >
2
2
<h1 align =" center " >FastAPI-MCP</h1 >
3
- <p align =" center " >一个零配置工具,用于自动将FastAPI端点公开为模型上下文协议 (MCP)工具。</p >
3
+ <p align =" center " >一个零配置工具,用于自动将 FastAPI 端点公开为模型上下文协议 (MCP)工具。</p >
4
4
<div align =" center " >
5
5
6
6
[ ![ PyPI version] ( https://badge.fury.io/py/fastapi-mcp.svg )] ( https://pypi.org/project/fastapi-mcp/ )
16
16
17
17
## 特点
18
18
19
- - ** 直接集成** - 直接将MCP服务器挂载到您的FastAPI应用
20
- - ** 零配置** - 只需指向您的FastAPI应用即可工作
21
- - ** 自动发现** 所有FastAPI端点并转换为MCP工具
19
+ - ** 直接集成** - 直接将 MCP 服务器挂载到您的 FastAPI 应用
20
+ - ** 零配置** - 只需指向您的 FastAPI 应用即可工作
21
+ - ** 自动发现** - 所有 FastAPI 端点并转换为 MCP 工具
22
22
- ** 保留模式** - 保留您的请求模型和响应模型的模式
23
- - ** 保留文档** - 保留所有端点的文档,就像在Swagger中一样
24
- - ** 灵活部署** - 将MCP服务器挂载到同一应用 ,或单独部署
23
+ - ** 保留文档** - 保留所有端点的文档,就像在 Swagger 中一样
24
+ - ** 灵活部署** - 将 MCP 服务器挂载到同一应用 ,或单独部署
25
25
26
26
## 安装
27
27
28
- 我们推荐使用[ uv] ( https://docs.astral.sh/uv/ ) ,一个快速的Python包安装器 :
28
+ 我们推荐使用 [ uv] ( https://docs.astral.sh/uv/ ) ,一个快速的 Python 包安装器 :
29
29
30
30
``` bash
31
31
uv add fastapi-mcp
@@ -39,7 +39,7 @@ pip install fastapi-mcp
39
39
40
40
## 基本用法
41
41
42
- 使用FastAPI-MCP的最简单方法是直接将MCP服务器添加到您的FastAPI应用中 :
42
+ 使用 FastAPI-MCP 的最简单方法是直接将 MCP 服务器添加到您的 FastAPI 应用中 :
43
43
44
44
``` python
45
45
from fastapi import FastAPI
@@ -51,44 +51,44 @@ mcp = FastApiMCP(
51
51
app,
52
52
53
53
# 可选参数
54
- name = " 我的API MCP" ,
55
- description = " 我的API描述 " ,
54
+ name = " 我的 API MCP" ,
55
+ description = " 我的 API 描述 " ,
56
56
base_url = " http://localhost:8000" ,
57
57
)
58
58
59
- # 直接将MCP服务器挂载到您的FastAPI应用
59
+ # 直接将 MCP 服务器挂载到您的 FastAPI 应用
60
60
mcp.mount()
61
61
```
62
62
63
- 就是这样!您的自动生成的MCP服务器现在可以在 ` https://app.base.url/mcp ` 访问。
63
+ 就是这样!您的自动生成的 MCP 服务器现在可以在 ` https://app.base.url/mcp ` 访问。
64
64
65
- > ** 关于` base_url ` 的注意事项** :虽然` base_url ` 是可选的,但强烈建议您明确提供它。` base_url ` 告诉MCP服务器在调用工具时向何处发送API请求 。如果不提供,库将尝试自动确定URL,这在部署环境中内部和外部URL不同时可能无法正确工作 。
65
+ > ** 关于` base_url ` 的注意事项** :虽然` base_url ` 是可选的,但强烈建议您明确提供它。` base_url ` 告诉 MCP 服务器在调用工具时向何处发送 API 请求 。如果不提供,库将尝试自动确定URL,这在部署环境中内部和外部 URL 不同时可能无法正确工作 。
66
66
67
67
## 工具命名
68
68
69
- FastAPI-MCP使用FastAPI路由中的 ` operation_id ` 作为MCP工具的名称 。如果您不指定` operation_id ` ,FastAPI会自动生成一个 ,但这些名称可能比较晦涩。
69
+ FastAPI-MCP 使用 FastAPI 路由中的 ` operation_id ` 作为 MCP 工具的名称 。如果您不指定` operation_id ` ,FastAPI 会自动生成一个 ,但这些名称可能比较晦涩。
70
70
71
71
比较以下两个端点定义:
72
72
73
73
``` python
74
- # 自动生成的operation_id (类似于"read_user_users__user_id__get")
74
+ # 自动生成的 operation_id (类似于 "read_user_users__user_id__get")
75
75
@app.get (" /users/{user_id} " )
76
76
async def read_user (user_id : int ):
77
77
return {" user_id" : user_id}
78
78
79
- # 显式operation_id(工具将被命名为"get_user_info")
79
+ # 显式operation_id(工具将被命名为 "get_user_info")
80
80
@app.get (" /users/{user_id} " , operation_id = " get_user_info" )
81
81
async def read_user (user_id : int ):
82
82
return {" user_id" : user_id}
83
83
```
84
84
85
- 为了获得更清晰、更直观的工具名称,我们建议在FastAPI路由定义中添加显式的 ` operation_id ` 参数。
85
+ 为了获得更清晰、更直观的工具名称,我们建议在 FastAPI 路由定义中添加显式的 ` operation_id ` 参数。
86
86
87
- 要了解更多信息,请阅读FastAPI官方文档中关于 [ 路径操作的高级配置] ( https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/ ) 的部分。
87
+ 要了解更多信息,请阅读 FastAPI 官方文档中关于 [ 路径操作的高级配置] ( https://fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/ ) 的部分。
88
88
89
89
## 高级用法
90
90
91
- FastAPI-MCP提供了多种方式来自定义和控制MCP服务器的创建和配置 。以下是一些高级用法模式:
91
+ FastAPI-MCP 提供了多种方式来自定义和控制 MCP 服务器的创建和配置 。以下是一些高级用法模式:
92
92
93
93
### 自定义模式描述
94
94
@@ -100,18 +100,18 @@ app = FastAPI()
100
100
101
101
mcp = FastApiMCP(
102
102
app,
103
- name = " 我的API MCP" ,
103
+ name = " 我的 API MCP" ,
104
104
base_url = " http://localhost:8000" ,
105
105
describe_all_responses = True , # 在工具描述中包含所有可能的响应模式
106
- describe_full_response_schema = True # 在工具描述中包含完整的JSON模式
106
+ describe_full_response_schema = True # 在工具描述中包含完整的 JSON 模式
107
107
)
108
108
109
109
mcp.mount()
110
110
```
111
111
112
- ### 自定义暴露的端点
112
+ ### 自定义公开的端点
113
113
114
- 您可以使用Open API操作ID或标签来控制哪些FastAPI端点暴露为MCP工具 :
114
+ 您可以使用 Open API 操作 ID 或标签来控制哪些 FastAPI 端点暴露为 MCP 工具 :
115
115
116
116
``` python
117
117
from fastapi import FastAPI
@@ -143,7 +143,7 @@ mcp = FastApiMCP(
143
143
exclude_tags = [" admin" , " internal" ]
144
144
)
145
145
146
- # 结合操作ID和标签 (包含模式)
146
+ # 结合操作 ID 和标签 (包含模式)
147
147
mcp = FastApiMCP(
148
148
app,
149
149
include_operations = [" user_login" ],
@@ -159,40 +159,40 @@ mcp.mount()
159
159
- 您可以将操作过滤与标签过滤结合使用(例如,使用` include_operations ` 和` include_tags ` )
160
160
- 当结合过滤器时,将采取贪婪方法。匹配任一标准的端点都将被包含
161
161
162
- ### 与原始FastAPI应用分开部署
162
+ ### 与原始 FastAPI 应用分开部署
163
163
164
- 您不限于在创建MCP的同一个FastAPI应用上提供MCP服务 。
164
+ 您不限于在创建 MCP 的同一个 FastAPI 应用上提供 MCP 服务 。
165
165
166
- 您可以从一个FastAPI应用创建MCP服务器 ,并将其挂载到另一个应用上:
166
+ 您可以从一个 FastAPI 应用创建 MCP 服务器 ,并将其挂载到另一个应用上:
167
167
168
168
``` python
169
169
from fastapi import FastAPI
170
170
from fastapi_mcp import FastApiMCP
171
171
172
- # 您的API应用
172
+ # 您的 API 应用
173
173
api_app = FastAPI()
174
- # ... 在api_app上定义您的API端点 ...
174
+ # ... 在 api_app 上定义您的 API 端点 ...
175
175
176
- # 一个单独的MCP服务器应用
176
+ # 一个单独的 MCP 服务器应用
177
177
mcp_app = FastAPI()
178
178
179
- # 从API应用创建MCP服务器
179
+ # 从 API 应用创建 MCP 服务器
180
180
mcp = FastApiMCP(
181
181
api_app,
182
182
base_url = " http://api-host:8001" , # API应用将运行的URL
183
183
)
184
184
185
- # 将MCP服务器挂载到单独的应用
185
+ # 将 MCP 服务器挂载到单独的应用
186
186
mcp.mount(mcp_app)
187
187
188
188
# 现在您可以分别运行两个应用:
189
189
# uvicorn main:api_app --host api-host --port 8001
190
190
# uvicorn main:mcp_app --host mcp-host --port 8000
191
191
```
192
192
193
- ### 在MCP服务器创建后添加端点
193
+ ### 在 MCP 服务器创建后添加端点
194
194
195
- 如果您在创建MCP服务器后向FastAPI应用添加端点 ,您需要刷新服务器以包含它们:
195
+ 如果您在创建 MCP 服务器后向 FastAPI 应用添加端点 ,您需要刷新服务器以包含它们:
196
196
197
197
``` python
198
198
from fastapi import FastAPI
@@ -201,44 +201,44 @@ from fastapi_mcp import FastApiMCP
201
201
app = FastAPI()
202
202
# ... 定义初始端点 ...
203
203
204
- # 创建MCP服务器
204
+ # 创建 MCP 服务器
205
205
mcp = FastApiMCP(app)
206
206
mcp.mount()
207
207
208
- # 在MCP服务器创建后添加新端点
208
+ # 在 MCP 服务器创建后添加新端点
209
209
@app.get (" /new/endpoint/" , operation_id = " new_endpoint" )
210
210
async def new_endpoint ():
211
211
return {" message" : " Hello, world!" }
212
212
213
- # 刷新MCP服务器以包含新端点
213
+ # 刷新 MCP 服务器以包含新端点
214
214
mcp.setup_server()
215
215
```
216
216
217
217
## 示例
218
218
219
- 请参阅[ examples] ( examples ) 目录以获取完整示例。
219
+ 请参阅 [ examples] ( examples ) 目录以获取完整示例。
220
220
221
- ## 使用SSE连接到MCP服务器
221
+ ## 使用 SSE 连接到 MCP 服务器
222
222
223
- 一旦您的集成了MCP的FastAPI应用运行,您可以使用任何支持SSE的MCP客户端连接到它,例如Cursor :
223
+ 一旦您的集成了 MCP 的 FastAPI 应用运行,您可以使用任何支持 SSE 的 MCP 客户端连接到它,例如 Cursor :
224
224
225
225
1 . 运行您的应用。
226
226
227
- 2 . 在Cursor -> 设置 -> MCP中,使用您的MCP服务器端点的URL (例如,` http://localhost:8000/mcp ` )作为sse 。
227
+ 2 . 在 Cursor -> 设置 -> MCP 中,使用您的 MCP 服务器端点的URL (例如,` http://localhost:8000/mcp ` )作为 sse 。
228
228
229
- 3 . Cursor将自动发现所有可用的工具和资源 。
229
+ 3 . Cursor 将自动发现所有可用的工具和资源 。
230
230
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 服务器
232
232
233
- 如果您的MCP客户端不支持SSE,例如Claude Desktop:
233
+ 如果您的 MCP 客户端不支持 SSE,例如 Claude Desktop:
234
234
235
235
1 . 运行您的应用。
236
236
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 ` 。
238
238
239
- 3 . 在Claude Desktop的MCP配置文件 (` claude_desktop_config.json ` )中添加:
239
+ 3 . 在 Claude Desktop 的 MCP 配置文件 (` claude_desktop_config.json ` )中添加:
240
240
241
- 在Windows上 :
241
+ 在 Windows 上 :
242
242
``` json
243
243
{
244
244
"mcpServers" : {
@@ -249,7 +249,7 @@ mcp.setup_server()
249
249
}
250
250
}
251
251
```
252
- 在MacOS上 :
252
+ 在 MacOS 上 :
253
253
``` json
254
254
{
255
255
"mcpServers" : {
@@ -260,19 +260,19 @@ mcp.setup_server()
260
260
}
261
261
}
262
262
```
263
- 通过在终端运行` which mcp-proxy ` 来找到mcp-proxy的路径 。
263
+ 通过在终端运行` which mcp-proxy ` 来找到 mcp-proxy 的路径 。
264
264
265
- 4 . Claude Desktop将自动发现所有可用的工具和资源
265
+ 4 . Claude Desktop 将自动发现所有可用的工具和资源
266
266
267
267
## 开发和贡献
268
268
269
- 感谢您考虑为FastAPI-MCP做出贡献 !我们鼓励社区发布问题和拉取请求。
269
+ 感谢您考虑为 FastAPI-MCP 做出贡献 !我们鼓励社区发布问题和拉取请求。
270
270
271
- 在开始之前,请参阅我们的[ 贡献指南] ( CONTRIBUTING.md ) 。
271
+ 在开始之前,请参阅我们的 [ 贡献指南] ( CONTRIBUTING.md ) 。
272
272
273
273
## 社区
274
274
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 的经验 。
276
276
277
277
## 要求
278
278
@@ -281,4 +281,4 @@ mcp.setup_server()
281
281
282
282
## 许可证
283
283
284
- MIT许可证。版权所有 (c) 2024 Tadata Inc.
284
+ MIT License. Copyright (c) 2024 Tadata Inc.
0 commit comments