推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
tangkikodo
V2EX  ›  Python

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

  •  
  •   tangkikodo · 8h 34m ago · 289 views

    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%以上。

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   771 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.