FVM MCP 服务器首个 alpha 版本发布:FVM CLI 的 MCP 工具化落地

开发工具CLI【免费下载链接】fvmFlutter Version Management: A simple CLI to manage Flutter SDK versions.项目地址https://gitcode.com/gh_mirrors/fv/fvm点击查看免费下载fvm_mcp是 FVMFlutter Version Management项目独立发布的 MCPModel Context Protocol服务器它把 FVM CLI 的能力以工具Tool的形式暴露给支持 MCP 的 AI 客户端。本文以 fvm_mcp/CHANGELOG.md 记录的0.0.1-alpha.12026-02-13版本变更为主线结合 fvm_mcp/README.md 与 fvm_mcp/lib/src/server.dart 等源码讲解该版本新增的三类工具面、FVM 版本门控机制、跨平台 CI 校验与自动化发布流水线以及为发布到 pub.dev 所做的工程化调整。读完本文你将掌握fvm_mcp的架构组成、版本兼容边界、源码运行与二进制安装方式以及它的自动化发布链路是如何运作的。版本背景从嵌入式方案到独立服务器fvm_mcp在项目中的定位是一条渐进式路线FVM 主仓库的文档 docs/pages/documentation/guides/dart-mcp.mdx 展示了如何让 Dart 官方 MCP 服务器指向 FVM 钉住的 SDK而fvm_mcp更进一步直接把 FVM 本身实现为 MCP 服务器无需借助 Dart 官方服务器中转。根据 fvm_mcp/CHANGELOG.md 与 fvm_mcp/README.md0.0.1-alpha.1是fvm_mcp独立的首次公开 alpha 发布。在此之前FVM 官方文档中已规划了将 MCP 服务器嵌入 FVM CLI 的fvm mcp子命令方案见 fvm_mcp/README.md 中“Embed into FVM”一节的示例代码。本次发布则先以独立包的形式开放随后可再嵌入 CLI从而让 MCP 工具面与安装的 FVM 版本保持锁定。核心新增三类 MCP 工具面版本变更记录中“MCP tool surface for FVM JSON API, mutating commands, and command proxies”对应 fvm_mcp/lib/src/server.dart 中_registerJsonApiTools()、_registerMutatingTools()、_registerProxyTools()三个注册方法。工具命名统一使用fvm.*命名空间服务器在instructions中也明确提示客户端“Use tools under the fvm.* namespace”。只读 JSON API 工具fvm.api.*这四个工具是对 FVM 内置 JSON APIlib/src/commands/api_command.dart的透传ProcessRunner.runJsonApi会把 MCP 参数原样拼装为fvm api ...子命令工具名对应 CLI支持的 MCP 参数fvm.api.listfvm api listcompress--compress、skip_size_calculation--skip-size-calculationfvm.api.releasesfvm api releasescompress、limit--limit n、filter_channel--filter-channel stable|beta|devfvm.api.contextfvm api contextcompressfvm.api.projectfvm api projectpath--path path、compressfvm.api.list返回本地缓存的 Flutter SDK 列表skip_size_calculation可跳过 SDK 磁盘大小计算以加快响应适用于缓存较大的机器对应 lib/src/commands/api_command.dart 中APIListCommand对--skip-size-calculation的描述。fvm.api.releases返回可用 Flutter 发布版本filter_channel仅允许stable、beta、dev三个取值与 lib/src/commands/api_command.dart 中allowed: [stable, beta, dev]一致。fvm.api.context返回 FVM 环境与配置信息缓存路径、CI 状态、skipInput、privilegedAccess等字段定义可对照 lib/src/utils/context.dart。fvm.api.project返回项目配置path缺省时指向当前工作目录。这些工具使用_readOnlyToolAnnotationsreadOnlyHint: true、idempotentHint: true向 MCP 客户端声明只读且幂等便于客户端安全地自动调用。变更类工具fvm.install、fvm.remove、fvm.use、fvm.global四个变更工具将 FVM 的写操作暴露为“state-changing”工具使用_mutatingToolAnnotationsdestructiveHint: true。它们在 FVM 支持非交互模式时才会注册详见下文版本门控。fvm.install安装 SDK 到缓存。支持version、setup--setup/--no-setup、skip_pub_get、cwd。由于安装可能耗时较长服务器为其设置了15 分钟超时与progressLabel: install。fvm.remove从缓存移除 SDK。出于安全考虑MCP 模式不支持alltrue——源码中run回调会直接返回错误“fvm.remove with alltrue is not supported in MCP non-interactive mode. Remove a specific version instead.”只允许按指定version移除超时 5 分钟。fvm.use为当前项目设置 SDK。参数最丰富version、force--force、pin--pin钉住精确版本防止自动升级、flavor--flavor项目的命名 SDK 配置变体、env--env多环境项目设置的环境名、skip_setup、skip_pub_get、cwd超时 10 分钟。fvm.global设置/取消全局 SDK。version与unlinktrue二选一force可选超时 2 分钟。若两者都未提供返回“Missing args: set version or unlinktrue.”错误。代理类工具fvm.flutter、fvm.dart、fvm.exec、fvm.spawn代理工具不解析 FVM 自身业务而是把命令转发给 FVM 执行并遵循 FVM 的路由顺序项目 → 祖先目录 → 全局 → PATH因此带openWorldHint: true注解fvm.flutterfvm flutter args运行项目解析出的 SDK 下的 flutter。fvm.dartfvm dart args运行项目解析出的 SDK 下的 dart。fvm.execfvm exec command args在项目 SDK 环境下执行任意命令command为必填且不能为空。fvm.spawnfvm spawn version flutter_args用指定 SDK 版本运行 flutterversion必填。从源码看参数组装大量复用 fvm_mcp/lib/src/arg_utils.dart 中的辅助函数flag处理布尔开关、opt处理带值选项、maybeOne/stringArg处理可选字符串、listArg处理字符串数组类型不符时会抛出ArgumentError被 fvm_mcp/lib/src/server.dart 中的_tool()包装层捕获并转换为isError: true的CallToolResult。这些行为均有对应的单元测试覆盖见 fvm_mcp/test/arg_utils_test.dart。版本门控按检测到的 FVM 版本动态注册工具变更记录中“FVM version gating for JSON API support and non-interactive mutation support”是本次发布的核心工程点。服务器启动时先执行fvm --version探测版本实现于 fvm_mcp/lib/src/version.dart再决定注册哪些工具JSON API 门控≥ 3.1.2JSON API 自 FVM 3.1.0 引入但fvm api context在 3.1.2 才被修复见主仓库 CHANGELOG.md 中 3.1.2 条目因此fvm_mcp把 JSON API 工具的门槛定为3.1.2避免对旧版本暴露行为错误的工具。变更工具门控≥ 3.2.0FVM 3.2.0 通过--fvm-skip-input支持跳过输入请求见 CHANGELOG.md 3.2.0 条目这是变更工具能在非交互 MCP 场景安全运行的先决条件。ProcessRunner在检测到支持时会为所有变更类命令自动注入--fvm-skip-input前缀见 fvm_mcp/lib/src/process_runner.dart 的run()方法该注入行为由 fvm_mcp/test/process_runner_test.dart 中“run passes --fvm-skip-input when supported”用例验证。版本解析本身也经过精心设计parseFvmVersionOutput先优先匹配整行干净的语义版本如4.0.5或fvm 4.0.5再退而匹配显式提到 fvm 的行内版本从而在 FVM 输出夹杂日志如FINE: Pub 3.10.1时仍能提取正确版本。预发布版本的处理值得注意3.2.0-rc.1会被判定为supportsJsonApi true但supportsSkipInput false因为预发布版本不满足精确的稳定版门槛——这一边界由 fvm_mcp/test/version_test.dart 中的 “prerelease does not satisfy exact stable threshold” 用例明确锁定。若fvm --version无法解析出语义版本start()会抛出StateError“Unable to detect FVM semver fromfvm --version”提示确保 FVM 在 PATH 上且能输出语义版本号。变更项版本号、pub.dev 发布与文档完善0.0.1-alpha.1的“Changed”部分包含三项工程化调整默认版本号设为0.0.1-alpha.1服务器上报的版本来自 fvm_mcp/lib/src/server.dart 中的String.fromEnvironment(FVM_MCP_VERSION, defaultValue: 0.0.1-alpha.1)。这意味着构建时可通过-DFVM_MCP_VERSION...覆盖默认版本便于发布流水线写入与 tag 一致的版本。启用 pub.dev 发布publish_to: none被移除并在 fvm_mcp/pubspec.yaml 中补充了repository元数据该包版本号与 fvm_mcp/CHANGELOG.md 保持对应。包依赖dart_mcp ^0.3.3、process ^0.5.5、pub_semver ^2.2.0、stream_channel ^2.1.2Dart SDK 约束为3.9.0 4.0.0源码运行前置条件见 fvm_mcp/README.md。README 扩充补充了源码运行方式、二进制安装流程与部署计划下文展开说明。CI 与自动化发布tag 驱动的发布流水线变更记录中的两项跨平台 CI 检查与自动化 GitHub release 流水线共同构成“测试通过才能发版”的闭环跨平台 CI 检查在fvm_mcp目录下执行格式化format、静态分析analyze与测试test确保三端Linux/macOS/Windows行为一致。测试套件覆盖版本解析fvm_mcp/test/version_test.dart、参数工具fvm_mcp/test/arg_utils_test.dart与进程运行器fvm_mcp/test/process_runner_test.dart用编译出的 fake fvm 验证--fvm-skip-input注入、非零退出码与超时处理。自动化发布流水线由fvm-mcp-v*形式的 tag 触发例如fvm-mcp-v0.0.1-alpha.1。发布前会校验tag 与包版本、运行时服务器版本三者对齐fvm_mcp/CHANGELOG.md中存在对应 tag 版本的章节。随后在 GitHub-hosted runner 上构建各平台二进制产出归档与SHA256SUMS校验文件发布到 GitHub Releases。部署计划中的版本来源约定fvm_mcp/README.md 明确了版本事实来源包版本fvm_mcp/pubspec.yaml运行时版本fvm_mcp/lib/src/server.dart 的FVM_MCP_VERSION默认值发布说明fvm_mcp/CHANGELOG.md 中与 tag 版本对应的章节CI/CD 工作流.github/workflows/release-fvm-mcp.yml运行与安装方式fvm_mcp/README.md 提供了两种使用路径从源码运行需要 Dart SDK3.9.0 4.0.0且fvm在 PATH 上cd fvm_mcp dart pub get dart run bin/fvm_mcp.dart对应 MCP 客户端配置源码模式{ command: dart, args: [run, bin/fvm_mcp.dart], cwd: /absolute/path/to/repo/fvm_mcp }安装独立二进制从 tagged release 下载对应平台归档——fvm_mcp-version-linux-x64.tar.gz、fvm_mcp-version-macos.tar.gz、fvm_mcp-version-windows-x64.zip——解压后放入PATH再配置 MCP 客户端通过 stdio 启动{ command: fvm_mcp, args: [] }两种模式都通过 stdio 传输与 MCP 客户端通信传输层由dart_mcp包的stream_channel实现对应 fvm_mcp/lib/src/server.dart 中FvmMcpServer.start(channel: ...)的入参设计。安全设计小结版本发布所承载的安全策略可以从源码中归纳为四点均已在 fvm_mcp/lib/src/server.dart 落实工具分类标注只读工具声明readOnlyHint: true变更工具声明destructiveHint: true提醒客户端谨慎调用。移除操作收窄fvm.remove拒绝alltrue强制指定具体版本避免误删全部缓存。非交互保护变更工具仅在检测到 FVM ≥ 3.2.0 时注册并自动注入--fvm-skip-input这与主仓库 lib/src/utils/context.dart 中skipInput isCI || _skipInput || !stdinHasTerminal的判定逻辑相互呼应保证无人值守场景下不会卡在交互提示。超时与进度反馈不同命令设置差异化超时215 分钟超时后终止进程并返回结构化错误支持 MCP 进度通知ProgressNotification长任务如 install可向客户端汇报进行状态。结语0.0.1-alpha.1为fvm_mcp奠定了“三面工具 版本门控 自动发布”的基础架构只读 JSON 透传、受限的变更操作、按 FVM 路由语义执行的代理三者通过启动时的版本探测动态装配。对于想在 AI 编程工具中直接驱动 FVM 的开发者可以从 fvm_mcp/README.md 的源码运行方式快速起步对 FVM 本身嵌入 MCPfvm mcp子命令的演进方向则可参考 README 中“Embed into FVM”一节的示例代码继续跟踪后续版本。赞分享开发工具CLI【免费下载链接】fvmFlutter Version Management: A simple CLI to manage Flutter SDK versions.项目地址https://gitcode.com/gh_mirrors/fv/fvm点击查看免费下载相关推荐Flutter 版本管理工具 FVM 教程Flutter 版本管理工具 FVM 教程 1. 项目介绍 FVMFlutter Version Management 是一个轻量级命令行界面工具用于管理开发工具CLIlsp-tools-mcp 0.1.0 发布解析从 codex-lsp 提取的 LSP MCP 工具服务器及其在 oh-my-openagent 的工程化落地lsp tools mcp 0.1.0 发布解析从 codex lsp 提取的 LSP MCP 工具服务器及其在 oh my openagent 的工程化落地人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排FVM JSON API 实战指南用 fvm api 把 Flutter 版本管理接入你的工具链FVM JSON API 实战指南用 fvm api 把 Flutter 版本管理接入你的工具链 FVMFlutter Version Management开发工具CLI上一篇Plate 富文本编辑器事件委托预算Event Delegation Budget实战指南下一篇Vector vector Sink 默认 scheme 弃用指南无 scheme 地址从 http 向 https 迁移创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
报考提示:本文涉及的批次、材料要求可能随上级文件调整,报名前建议再确认一次。你所在的工种、城市、当前进度如果拿不准,可以直接电话 18236992212 或在线预约,我们按你的情况单独捋一遍流程,不白跑。
证书真伪提醒:凡是说"不用考试直接拿证""花钱买证""包过免考"的,基本都是假证或骗局。正规特种作业操作证必须本人参考、本人答题,办下来的证在应急管理部官网、河南省厅平台都能查到电子记录。查不到的证,上岗被查到要担责任,千万别图省事。拿不准的,先打 18236992212 问一句。
报考流程

从咨询到拿证,六步走完

不管这篇资讯讲的是哪个工种,报名到取证的流程都是这六步,照着走不绕弯。

01

咨询定工种

说清岗位和单位要求,确认该考哪类证。

02

材料预审

按清单准备,拍照发来免费预审。

03

报名建档

提交报名信息,同步本批次窗口。

04

考前辅导

理论题库加实操要点针对性训练。

05

参加考试

理论机考加实操考核,按批次安排。

06

取证复审

查证领证,到期前提醒复审换证。

报名咨询前台接待

正规培训通道

走应急管理部门认可的报名与培训渠道,本人参考本人答题。

材料免费预审

报名前拍照发来逐项核对,缺什么错什么当场指出来。

批次提前通知

河南应急厅批次一有消息,第一时间同步报名学员。

费用透明无隐形

报名前把费用明细一次性说清,包含哪些、怎么收都写明。

电话咨询

18236992212,说清工种和城市,我们按你的情况给建议。

邮箱咨询

809451989@qq.com,材料拍照发来,免费预审。

在线预约

留下姓名、电话、工种,我们安排专人回访对接。

濮阳 / 许昌

两地设服务点,就近安排报名与考试对接。

常见问题

关于报考,常被问到的几个问题

看完这篇资讯,下面这些问题顺便一起答了。

我现在报名,大概多久能参加考试?

材料预审通过、报名建档后,一般排在最近的一个批次。具体时间取决于河南应急管理厅当期批次安排和机位,濮阳、许昌本地考点通常每月都有场次。报名时我们会告诉你本批次的报名截止时间和预计考试时间。

没有相关工作经验,能直接考吗?

大部分工种允许零基础报名,经正规培训后参考。部分岗位对学历、体检有要求,具体以工种对照条件为准。不确定自己符不符合的,先说说你的情况,我们帮你判断该报哪个。

考试没过可以补考吗?怎么收费?

理论和实操分别考核,单科不合格一般有补考机会,补考按当期批次重新排期。费用明细我们会在报名前一次性说清,没有隐形收费。

企业要一批人考证,能统一办理吗?

可以。建筑、化工、制造类企业批量申报走企业团报通道,统一建档、对公收费、台账整理一起办,安全管理员配套我们也能对接。

拿到证以后多久要复审?在哪复审?

特种作业操作证每 3 年复审一次,满 6 年需要换证。复审不必须回发证地,濮阳、许昌本地都能办,异地也能对接。建议提前一两个月开始准备,别等证书过期了才想起这件事。

怎么查自己的证是不是真的?

上应急管理部官网或河南省厅政务平台,输入身份证号和证件号就能查电子记录。查不到的、或者有人跟你说"不用考试直接拿证"的,基本都是假证,上岗被查到要担责任,别图省事吃这个亏。

整个下来大概要花多少钱?

不同工种费用不一样,跟培训课时、考试次数挂钩。我们会在报名前把费用明细一次性说清,包含哪些、不包含哪些写在明面上,没有隐形收费。补考另行排期,费用按当期标准走。

我条件好像不太够,还能考吗?

年龄、学历、体检这几项卡得最严,哪项差一点、怎么补,各工种要求不同。别自己猜,把你的情况说清楚——多大年龄、什么学历、有没有相关经验——我们帮你判断该报哪个工种、差的条件怎么补,能考就告诉你怎么考,不能考也不耽误你时间。

个人预约 / 企业团报

文章里没说清的,直接问我们

你的工种、城市、当前进度,说一句就行。材料、批次、费用按你的情况单独捋,不套模板。