协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
flutter-mcp-toolkit-maintain-web【开发与工程】Maintains showcase/flutter_test_app and intentcall web targets (Chrome, web codegen, WebMCP bootstrap, web-showcase, webmcp verify, Chrome DevTools MCP). Use when editing web/index.html, agent_manifest.json, intentcall_webmcp.generated.js, web platform sync, Chrome dogfood, WebMCP modelContext, or agent WebMCP list/execute.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Dogfood app: showcase/flutter_test_app. Canonical platform doc: showcase/flutter_test_app/INTENTCALL_PLATFORM.md.
| Path | Proves |
|---|---|
VM extensions + fmt_* tools | MCP toolkit dogfood (always) |
navigator.modelContext / document.modelContext | True WebMCP (Chrome flags / --web-browser-flag) |
ADR: decisions/0008_web_agent_invoke_js_only.mdx — JS fetch('/agent/invoke') 404 by design; Dart invokeDirect works when modelContext exists.
make web-showcase
# WS_URI from .showcase/web_app.log (re-grep after hot reload)
grep -Eo 'ws://127\.0\.0\.1:[0-9]+/[A-Za-z0-9_=-]+/ws' .showcase/web_app.log | tail -1
dart run mcp_server_dart/bin/flutter_mcp_toolkit.dart webmcp chrome-args
dart run mcp_server_dart/bin/flutter_mcp_toolkit.dart webmcp verify --web-port 8080
Stop: make showcase-stop.
Do not rely on chrome://flags alone across machines — use CLI flags / make web-showcase / VS Code launch args.
Use config showcase/flutter_test_app Chrome + WebMCP in .vscode/launch.json:
--web-browser-flag=--user-data-dir=${workspaceFolder}/.showcase/chrome-webmcp-profile — persistent profile so chrome://flags survive stop/start (Flutter default is a temp profile every run).--web-browser-flag=--enable-features=WebMCPTesting,WebModelContext,DevToolsWebMCPSupport--web-browser-flag=--enable-experimental-web-platform-featuresPath must not include literal quotes in the value (avoids a dir named "./…").
Chrome 149+ Application → WebMCP pane also needs #devtools-webmcp-support / feature DevToolsWebMCPSupport (API alone is not enough for that UI).
Prefer chrome-devtools MCP (list_webmcp_tools, execute_webmcp_tool) over flutter_mcp_toolkit webmcp verify --tool-name when an agent should drive page tools.
Grok (~/.grok/config.toml):
[mcp_servers.chrome-devtools]
command = "npx"
args = [
"-y",
"chrome-devtools-mcp@latest",
"--categoryExperimentalWebmcp",
"--chromeArg=--enable-features=WebMCP,WebModelContext,DevToolsWebMCPSupport,WebMCPTesting",
"--chromeArg=--enable-experimental-web-platform-features",
"--userDataDir=/Users/YOU/.cache/chrome-devtools-mcp/chrome-profile-webmcp",
"--no-usage-statistics",
]
enabled = true
startup_timeout_sec = 90
Or: grok mcp add chrome-devtools -- npx -y chrome-devtools-mcp@latest --categoryExperimentalWebmcp ...
Cursor — same command/args under mcpServers.chrome-devtools in ~/.cursor/mcp.json.
Restart the agent session after install. Doctor: grok mcp doctor chrome-devtools.
make web-showcase or VS Code Chrome + WebMCP on :8080).list_pages — chrome-devtools may start its own browser (about:blank).navigate_page → http://localhost:8080/ (or your app URL).list_webmcp_tools can be empty).list_webmcp_tools — expect IntentCall tools + often mcp_* toolkit tools registered on modelContext.execute_webmcp_tool with toolName + JSON-string input when required.Example IntentCall tools: app_enable_switch (no args), app_set_greeting ({"text":"…"}), app_intentcall_bridge_ping ({"echo":"…"}), app_get_agent_showcase_state.
execute_webmcp_tool
toolName: app_enable_switch
input: {}
dart run mcp_server_dart/bin/flutter_mcp_toolkit.dart webmcp verify --web-port 8080 \
--tool-name app_enable_switch --tool-args '{}'
dart run mcp_server_dart/bin/flutter_mcp_toolkit.dart codegen sync \
--platform web,android,ios,macos,linux,windows \
--project-dir showcase/flutter_test_app
dart run mcp_server_dart/bin/flutter_mcp_toolkit.dart init intentcall-platform \
--project-dir showcase/flutter_test_app --check
| Artifact | Source |
|---|---|
web/intentcall_webmcp.generated.js | codegen sync from web/agent_manifest.json |
web/index.html | init intentcall-platform script tag |
| Dart bootstrap | projection the app registers — showcase: ShowcaseWebMcpProjection (in intentcall_showcase_bootstrap.dart), wrapping projectEntriesToWebMcp from intentcall_platform_sync; wired via MCPToolkitBinding.addEntryListener (ADR-0016) |
dart run mcp_server_dart/bin/flutter_mcp_toolkit.dart --save-images \
--output-dir .showcase/web_iter validate-runtime \
--target "$WS_URI" \
--flutter-device chrome \
--timeout-ms 45000
Pass --web-browser-debugging-port <cdp> if CDP discovery fails.
projectEntriesToWebMcp) both call registerTool; dedupe or gate one path (agent_web_mcp_bootstrap_web.dart name cache).webmcp verify may report webmcp_active_log_evidence while CDP hasModelContext is false (Flutter execution context).--user-data-dir, Flutter wipes chrome://flags every stop/start.--browser-url=http://127.0.0.1:<cdpPort>.docs/superpowers/evals/2026-05-26-webmcp-verification.mdflutter-mcp-cli-runtime-validation — validate-runtime detailsflutter-mcp-toolkit-dogfood-iterations — scored iterationsflutter-mcp-e2e-harness — programmatic scenarios over this showcase (packages/harness, --web --detach variant)--categoryExperimentalWebmcp + Chrome 149+)