十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 Flet MCP 服务器:为 LLM Agent 提供精确、版本相关的 Flet API 知识

使用 Flet MCP 服务器:为 LLM Agent 提供精确、版本相关的 Flet API 知识 使用 Flet MCP 服务器为 LLM Agent 提供精确、版本相关的 Flet API 知识【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/fletFlet MCP 服务器flet-mcp是一个基于 Model Context ProtocolMCP的服务器它把 Flet 的真实 API 索引、示例工程、图标库和 CLI 帮助暴露给 LLM Agent 与 AI 编程助手。本文围绕 website/docs/cookbook/flet-mcp.md 展开讲解安装、启动、客户端配置、工具组开关以及如何在 Pydantic AI、FastMCP 等自有 Agent 中直接使用它并结合仓库源码说明其底层实现原理。读完本文你将掌握如何用flet-mcp消除模型幻觉让 Agent 生成、重构出真正可运行的 Flet 代码。为什么需要 Flet MCP对抗训练数据漂移LLM 的预训练数据会随着时间推移而过时Flet 新增控件、属性签名变化、枚举成员改名后模型仍可能输出旧 API导致幻觉hallucination——编造不存在的控件、属性和枚举成员。flet-mcp的思路是把知识查询从模型记忆迁移到实时工具调用Agent 按需查询真实 Flet API、搜索示例工程、查找图标、检查 CLI 选项。它同时适用于两类场景AI 编辑器内Claude Desktop、Cursor、VS Code 等支持 MCP 的客户端自有 Agent自己构建的、需要生成或重构 Flet 代码的 Agent 程序。从仓库源码看flet-mcp包sdk/python/packages/flet-mcp体积很小核心逻辑集中在 server.py它基于 FastMCP 构建附带预生成的api.jsonGriffe 内省产物、图标元数据icons.json以及可选构建的 SQLite 索引mcp.db。包运行时只依赖fastmcp2.0.0见 pyproject.toml因此不安装 Flet 本体也能作为查询服务器运行。安装pip install flet-mcp安装后注册flet mcp命令fletCLI 必须已安装——任何正常的 Flet 项目都已具备。包内附带预构建的 API 索引开箱即用无需额外构建步骤。补充说明从 pyproject.toml 可以看到flet-mcp要求 Python 3.10并将fastmcp 2.0.0作为唯一运行时依赖构建索引所需的markdownify、griffe、flet、flet-cli被放在可选依赖组build中只有需要重新生成数据文件时才安装。启动服务器默认使用stdio传输大多数桌面 AI 客户端采用flet mcp或通过 HTTP 暴露flet mcp --transport streamable-http --port 8000从 CLI 命令实现 mcp.py 可以看到完整的参数面--transport可选stdio默认或streamable-http--port默认 8000仅对 HTTP 传输生效。此外还有build子命令用于重建索引数据--examples、--docs、--output下文构建数据文件一节会展开。配置 AI 客户端大多数支持 MCP 的客户端通过一段 JSON 配置。以 Claude Desktop 的claude_desktop_config.json为例{ mcpServers: { flet: { command: flet, args: [mcp] } } }Cursor、VS Code 等客户端在各自的 MCP 设置中使用相同的command/args结构只是配置文件的存放位置与编辑入口不同。工具组与开关工具按组组织通过服务器启动时读取的FLET_MCP_ENABLE_*环境变量控制开关。默认聚焦反幻觉起步组合——API与icons开启其余关闭组变量默认工具APIFLET_MCP_ENABLE_API开list_controls,get_api,get_enum,search_enum_members,enum_has_memberIconsFLET_MCP_ENABLE_ICONS开find_iconExamplesFLET_MCP_ENABLE_EXAMPLES关search_examples,get_exampleCLIFLET_MCP_ENABLE_CLI关get_cli_help文档搜索组search_docs/get_doc由FLET_MCP_ENABLE_DOCS控制目前处于规划中但尚未启用——正在重构以索引基于 Docusaurus 的文档站点。接受的真值为1、true、yes大小写不敏感。例如开启示例搜索工具FLET_MCP_ENABLE_EXAMPLES1 flet mcp实现细节在 server.py 中_enabled()读取FLET_MCP_ENABLE_name并归一化为小写判断_API_ON、_ICONS_ON默认1_EXAMPLES_ON、_DOCS_ON、_CLI_ON默认0据此构造_enabled_groups列表。活跃组还会写进服务器的启动指令instructions字符串MCP 客户端若把这些指令转发给模型例如 Pydantic AI 的MCPToolset(..., include_instructionsTrue)模型得到的引导就与实际注册的工具保持同步。注意工具组开关与索引数据是两回事。开启EXAMPLES只注册工具还需先执行flet mcp build --examples path生成 SQLite 索引没有索引时工具正常注册但返回空结果。各工具职责工具说明get_api核心校验工具。按名称查找任意 Flet 符号——控件、服务、dataclass 类型ButtonStyle、Padding等、事件或枚举。对已安装的 Flet 版本而言not found 是确定性结论。异步方法标记async: true每条目带package字段标明其所属 pip 包flet为核心其余如flet-audio为扩展。list_controls浏览可用控件与服务支持按类别/种类过滤。get_enum获取枚举的成员。search_enum_members按子串搜索大型枚举Icons、CupertinoIcons。enum_has_member使用前校验某个枚举成员是否存在。find_icon按关键字搜索 Material 与 Cupertino 图标支持同义词匹配如 user 能命中account_circle。search_examples按关键字搜索 Flet 示例工程可选按平台过滤。get_example获取search_examples返回示例的完整源码与元数据。get_cli_help获取fletCLI 各命令及其选项的结构化帮助。get_api主要校验器的工作原理get_api是设计上的第一查询工具。它的默认输出是紧凑的签名风格文本而非 JSON每个成员一行例如Page (control) — High-level root control for an app view. bases: AdaptiveControl properties: bgcolor: ColorValue? — Background color of the page. multi_views: list[MultiView] [] — The list of multi-views... events: on_route_change(RouteChangeEvent) — Called when route changes. methods: async push_route(route, kwargs) - None — Pushes a new route...布局约定api_store.py 的render_text实现符号名后的(control)/(service)/(type)/(event)/(enum)标明命中桶属性类型后的?表示可选可为 Noneon_x(SomeEvent)表示处理器接收SomeEvent参数async前缀表示方法必须被 await调用它的事件处理器必须是async defpackage: name行表示该类位于该 pip 包中使用前须加入项目依赖——要把它提示给用户无此行即核心flet始终可用DEPRECATED: reason表示不要使用改用 reason 中指定的替代品成员 docstring 被裁剪为第一句note:行提示如何下钻。get_api还支持下钻与过滤参数memberpush_route—— 获取单个成员的完整未裁剪 docstring 与精确类型queryborder—— 仅保留名称包含该子串大小写不敏感的成员两者同时传入时member优先名称冲突处理少数名字被多个类共享如 Text 控件与 canvas 的 Text shape返回主条目note:行列出其余同名符号及其点分限定名例如get_api(canvas.Text)对枚举使用member/query时会内联解析为排序的成员搜索等价于search_enum_members而不是报错——例如get_api(Colors, queryRED)概念式图标查找delete、user优先用find_icon大型枚举Icons、CupertinoIcons整体获取时截断为样本错误以 JSON 对象返回{error: ...}有时附带available_members/available_files提示。底层实现上ApiStore懒加载捆绑的api.jsonapi_store.py把 controls/types/events/enums/functions 五个桶构建为按名字索引的字典并保留一名多义的全部候选按桶优先级排序_BUCKET_RANKcontrols types events functions enums同名时 canvas 模块符号排后。query过滤还会递归走一遍基类如 TextField 的 border 属性定义在FormFieldControl上把继承命中归入inherited块返回——test_api_store.py 用Page继承AdaptiveControl的例子验证了这一点。文本渲染选择签名风格而非 JSON是刻意的同样的信息量下字符数约少 44%键名与引号在每个成员上重复显著节省 token需要结构化数据时可传formatjson。图标搜索find_iconfind_icon由IconStoreicons_store.py支撑。图标名来自捆绑api.json中的Icons/CupertinoIcons枚举成员而 Material 的同义词标签与流行度来自提交的data/icons.json源自 Google fonts.google.com 的图标搜索元数据Apache-2.0。运行时消费者不安装flet所以图标名不依赖 flet 包。检索是纯内存倒排索引名称 token 与同义词 tag 进入同一索引命中加分精确全名匹配额外加分排序按分数 → Google 流行度 → 名称长度 → 字母序确定性展开保证模型每次看到一致的结果。Material 的_OUTLINED/_ROUNDED/_SHARP风格变体在基图标也命中时会被折叠避免一个图标占多个结果位。返回形如Icons.ARROW_BACK、CupertinoIcons.BACK的限定名。枚举工具get_enum(name)小枚举 50 成员返回全部成员大型枚举返回元数据与样本成员并提示用find_icon()或search_enum_members()查找。search_enum_members(name, query, limit)按子串匹配排序分三档——精确 前缀 子串档内再按长度与字母序Material 风格变体折叠。例如search_enum_members(Icons, remove)返回REMOVE、REMOVE_CIRCLE、GROUP_REMOVE、BOOKMARK_REMOVEtest_api_store.py 验证。enum_has_member(name, member)大小写不敏感地校验成员存在性返回{enum: ..., member: ..., exists: bool}供模型在写代码前确认枚举值有效。示例与 CLI 工具search_examples/get_example查询 SQLite 全文索引mcp.db中的examples_ftsBM25 排序权重 title8、description5、tags4、controls5、layout_pattern6、features4、search_text2、code1get_example对小型示例整包返回大型多文件示例先列出各文件大小按 24,000 字符预算内联内容剩余文件可通过filename参数逐个获取。get_cli_help直接读取api.json中的cli段无参数返回全部命令概览带命令名返回详细 flags 与 options。响应尺寸预算是个刻意的工程决策工具输出会进入 Agent 对话历史并在后续每次 LLM 调用中被重新发送与计费因此超大载荷被分页/截断并附下钻提示server.py 注释最大捆绑示例约 111k 字符。在自有 Agent 中使用服务器本身是一个可导入的 FastMCP 实例自定义 Agent 可直接消费它。配合 Pydantic AIfrom pydantic_ai import Agent from pydantic_ai.toolsets import MCPToolset from flet_mcp import mcp agent Agent(anthropic:claude-sonnet-4-6, toolsets[MCPToolset(mcp)]) result agent.run_sync(Create a Flet app with a login form)或通过 FastMCP 客户端进程内调用——无子进程、无传输。在导入flet_mcp之前设置FLET_MCP_ENABLE_*变量使目标工具组完成注册客户端把结构化结果反序列化到.dataimport asyncio from fastmcp import Client from flet_mcp import mcp async def main(): async with Client(mcp) as client: api (await client.call_tool(get_api, {name: TextField})).data print(api[kind], api[package], len(api[properties])) asyncio.run(main())从源码看flet_mcp/__init__.py仅导出一件事——from flet_mcp.server import mcp即 server.py 中FastMCP(flet-mcp, instructions...)的实例。这也解释了为何必须先设环境变量、后导入工具注册发生在模块导入时if _API_ON:等条件装饰器导入完成后开关已定型。用 fastmcp CLI 验证工具开发调试时可用 fastmcp 命令行直接调用服务器内的工具# 查看注册的工具 fastmcp list packages/flet-mcp/src/flet_mcp/server.py # 搜索示例 fastmcp call packages/flet-mcp/src/flet_mcp/server.py search_examples {query: dropdown} # 获取完整示例代码 fastmcp call packages/flet-mcp/src/flet_mcp/server.py get_example {example_id: controls_dropdown_styled} # 查询任意符号的 API 参考 fastmcp call packages/flet-mcp/src/flet_mcp/server.py get_api {name: TextField} # 查找图标 fastmcp call packages/flet-mcp/src/flet_mcp/server.py find_icon {query: settings} # 搜索大型枚举 fastmcp call packages/flet-mcp/src/flet_mcp/server.py search_enum_members {name: Icons, query: arrow} # 获取 CLI 帮助 fastmcp call packages/flet-mcp/src/flet_mcp/server.py get_cli_help {command: run}构建数据文件进阶flet-mcp读取 Griffe 内省的api.json以及可选示例与文档的 SQLite 索引。在 flet SDK 工作区内部构建可保证每个 Flet 扩展包flet-audio、flet-map等都可导入——工作区把它们全部声明为成员但需安装mcp-build依赖组才能拿到构建期依赖markdownify、griffecd sdk/python uv sync --group mcp-build uv run flet mcp build # 仅 api.json uv run flet mcp build --examples ./examples # 追加示例索引图标搜索元数据data/icons.json是提交入库的文件而非构建产物——它由 Google fonts.google.com 的图标元数据生成仅当 Google 发布新图标时才需要刷新uv run python -m flet_mcp.build.icons文档索引当前暂缓--docs标志仍期待 mkdocs 的search_index.json而站点迁移到 Docusaurus Algolia 后已不再生成该文件。DOCS工具组保持默认关闭针对 Docusaurus 重建文档搜索被列为后续工作。另请注意在只安装核心flet的下游项目 venv 中运行构建也可行但生成的api.json会缺少该 venv 中未安装的扩展包控件——索引器会对每个缺失包记录一行 Failed to load 并跳过。源码位置速查服务器与全部工具定义sdk/python/packages/flet-mcp/src/flet_mcp/server.pyAPI 索引查询与文本渲染sdk/python/packages/flet-mcp/src/flet_mcp/api_store.py图标搜索sdk/python/packages/flet-mcp/src/flet_mcp/icons_store.pySQLite 索引访问sdk/python/packages/flet-mcp/src/flet_mcp/db.pyCLI 命令flet mcp注册与参数解析sdk/python/packages/flet-cli/src/flet_cli/commands/mcp.py单元测试渲染、排序、继承查询、同名消歧sdk/python/packages/flet-mcp/tests/test_api_store.py、sdk/python/packages/flet-mcp/tests/test_icons_store.py官方用法文档website/docs/cookbook/flet-mcp.md小结flet-mcp以极低的接入成本一次pip install 一段 JSON 配置把模型记忆中的过时 Flet API替换为可实时查询的版本相关 API 知识。核心设计包括预构建的 Griffe API 索引保证离线可用与确定性结论FLET_MCP_ENABLE_*按需裁剪工具面并把活跃组写入启动指令签名风格文本输出大幅降低 token 消耗预算分页保护对话历史不被超大载荷撑爆。无论是 Claude Desktop / Cursor / VS Code 等现成客户端还是基于 Pydantic AI / FastMCP 的自有 Agent都能用它获得准确、可验证的 Flet 开发能力。【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/flet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表