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),仅供参考