fastapi-gql-mcp, 将 fastapi 应用转变成 agent 友好的 mcp 服务

6 小时 21 分钟前
 tangkikodo

FastAPI 的用户许多一定用过 FastAPI-MCP 这个 package 来将自己的 API 转换成 MCP 服务。

在使用的过程中会遇到一些问题,比如 Endpoints 不断上升的时候,会造成的 Context 的大量占用,以及 Response 的 Size 如果过大的话,也会容易造成 Context 过大的问题。比如一个列表页的 API 可能动则上百 K 或者几 MB ,那么这个数据在 Agent 中获取到的话,就容易让 Context 超出上限。

针对这个问题的解决方案,有一个思路是借鉴 GraphQL 的做法。 因为 FastAPI 提供了 return annotation ,所以可以将每一个 endpoint 都当成一个 GraphQL 的节点,然后将它返回的数据类型变成这个节点下的子节点树。 这样子它就可以变成一个 query 和 mutation 的 GraphQL schema 。 再结合强类型的返回类型描述,我们可以实现类似于 GraphQL 中 pick 字段的能力。

前者的话,它解决了 Endpoint 增长的时候 MCP tools 过多的问题。它相当于通过一个 queryschema 的接口,获取到了所有的可用的方法清单。 而后者则解决了方法返回数据过大的问题,因为你可以只摘取里面你所需要的字段,这样可以极大地减小返回数据的大小。同时基于 GraphQL ,你还能实现一个请求中调用多个方法的能力,这样子可以节省大量来回调用的成本。

https://github.com/KLR-Pattern/fastapi-gql-mcp 这个开源项目就是这个思路的实现。

尚处于早期开发中,但是很多功能都已经实现了,并且还在不断高速迭代打磨中。

测试覆盖率 95%以上。

欢迎大家尝试使用,感谢。

243 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1246683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX