| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /mcp-toolkit |
| Aliases | /mcp-flutter, /in-app |
| Category | cocode-flutter |
| Complexity | high |
| MCP Servers | mcp_flutter |
/mcp-toolkit โ ์ฑ ์์ ์ง์ ์กฐ์ํ๋ ๋ฆฌ๋ชจ์ปจ#
ํ๋ง๋๋ก#
์คํ ์ค์ธ Flutter ์ฑ์ ๊ฒ(ํ๋ฉด ํญยท์คํฌ๋ฆฐ์ท)์ด ์๋๋ผ ์(๋ฐ์ดํฐยท์ํยท์ค์ ๊ฐ)์ ์ง์ ๋ง์ง๋ ๋ฆฌ๋ชจ์ปจ์ ๋๋ค. ์ฐ๊ทน ๋ฌด๋ ๋ค์์ ์ํ์ ๋ฏธ๋ฆฌ ์ธํ ํ๊ณ ์กฐ๋ช ์ค์์น๋ฅผ ์ง์ ์ผ๋ ์คํํ์ฒ๋ผ, AI๊ฐ ์ฑ ๋ด๋ถ๋ฅผ ์ํ๋ ์ํ๋ก ๋ฐ๋ก ๋ฐ๊ฟ ๋์ต๋๋ค.
๋๊ฐยท์ธ์ ์ฐ๋์#
- AI ์์ด์ ํธ๊ฐ ์คํ ์ค์ธ Flutter ์ฑ์ ๋ด๋ถ ์ํ(BLoC, DB, ๊ธฐ๋ฅ ํ๋๊ทธ)๋ฅผ ์ง์ ๋ฐ๊ฟ์ผ ํ ๋
- ๋จ์ํ ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋ ์คํฌ๋ฆฐ์ท์ ์ฐ๋ ๊ฒ๋ง์ผ๋ก๋ ์ฌํํ๊ธฐ ์ด๋ ค์ด ์ํฉ(์: "๋ฐ์ดํฐ๊ฐ 10๊ฐ ์๋ ํ๋ฉด", "๋คํธ์ํฌ๊ฐ ๋๊ธด ์ค๋ฅ ํ๋ฉด")์ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด ํ์ธํ๊ณ ์ถ์ ๋
๋ฌด์์ ํด์ฃผ๋์#
- ์ฑ์ ๊ฒ์ฌยท์กฐ์์ฉ ๋๊ตฌ๋ฅผ ์ฌ์ด ์ฃผ๊ณ (
setup), ์ง๊ธ ์ฑ์ด ์ด๋ค ๋๊ตฌ๋ฅผ ์ธ ์ ์๋์ง ๋ชฉ๋ก์ผ๋ก ๋ณด์ฌ์ค๋๋ค(list-tools). - ๋ฏธ๋ฆฌ ์ค๋น๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ ์ฑ์ ๋ฃ๊ณ ์ํ๋ ํ๋ฉด์ผ๋ก ์ด๋์ํต๋๋ค(
seed). - ํน์ ์ํ๊ฐ(BLoC)์ด ์ง๊ธ ์ด๋ค์ง ๊ทธ๋๋ก ์ฐ์ด์ ๋ณด์ฌ์ค๋๋ค(
dump-bloc). - ์ฌ๋ฌ ๋์์ ์ ํด์ง ์์๋๋ก ์๋ ์คํํ๋ ์๋๋ฆฌ์ค(YAML ํ์ผ)๋ฅผ ํ ๋ฒ์ ๋๋ฆฝ๋๋ค(
scenario). - ์คํ ๊ฒฐ๊ณผ๋
.claude/docs/mcp-toolkit/<run_id>/ํด๋์ ๊ธฐ๋ก์ผ๋ก ๋จ์ต๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ์ฒ์ ํ ๋ฒ: ์ฑ์ ๋๊ตฌ๋ฅผ ์ค์นยท๋ฑ๋ก
/mcp-toolkit setup
# ์ง๊ธ ์ฑ์ด ์ธ ์ ์๋ ๋๊ตฌ ๋ชฉ๋ก ํ์ธ
/mcp-toolkit list-tools
# ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๊ณ ํด๋น ํ๋ฉด์ผ๋ก ์ด๋
/mcp-toolkit seed --fixture=feed_with_10 --route=feed
# ํน์ ์ํ๊ฐ(FeedBloc)์ ๊ทธ๋๋ก ์ฐ์ด๋ณด๊ธฐ
/mcp-toolkit dump-bloc --type=FeedBloc
# ์ ํด์ง ์์๋ฅผ ๋ด์ ์๋๋ฆฌ์ค ํ์ผ ์คํ
/mcp-toolkit scenario --file=test/scenarios/feed_offline_error.yaml
seed๋--fixture(์ฑ์ธ ๋ฐ์ดํฐ)๊ฐ ๊ผญ ํ์ํ๊ณ ,--route(์ด๋ํ ํ๋ฉด)๋ ์ ํ์ ๋๋ค.dump-bloc๋--type(์ํ ์ข ๋ฅ)์ด ๊ผญ ํ์ํฉ๋๋ค.scenario๋--file(์๋๋ฆฌ์ค ํ์ผ ๊ฒฝ๋ก)์ด ๊ผญ ํ์ํฉ๋๋ค.
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
์ด ๋ช ๋ น์ ์ธ ๊ฐ์ ์ธต(์ฑ ๋ด๋ถ ์กฐ์ยท์์ ฏ ํธ๋ฆฌยท์ค์ ํ๋ฉด ์บก์ฒ)์ ํ ์ค๋ก ์ฎ์ด ์๋์ผ๋ก ๊ตด๋ฆฌ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
- ๋จผ์ ์ฑ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ๊ณ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฑ์๋๋ค.
- ์ํ๋ ํ๋ฉด์ผ๋ก ์ด๋ํ๊ณ , ๋คํธ์ํฌ๋ฅผ ๋๋ ๋ฑ ์ํ๋ ์กฐ๊ฑด์ ๋ง๋ญ๋๋ค.
- ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋(marionette) ํ๋ฉด์ ์บก์ฒ(pixel-loop)ํ๋ ๋์์ ์์๋๋ก ์คํํฉ๋๋ค.
- ๋ง์ง๋ง์ ํน์ ์ํ๊ฐ์ด ๊ธฐ๋ํ ๋๋ก ๋์๋์ง(์: "์คํ๋ผ์ธ ์ค๋ฅ" ์ํ์ธ์ง) ํ์ธํฉ๋๋ค.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Subcommands#
| Subcommand | Purpose |
|---|---|
setup | Install MCP server, add mcp_toolkit to the app, register cocode standard tools (commands/mcp-toolkit/setup.md) |
list-tools | Print every dynamic tool the running app currently exposes |
seed | Shortcut to db.seed_fixture + optional nav.go_named |
dump-bloc | Shortcut to bloc.dump_state with formatting |
scenario | Run a YAML-defined sequence of dynamic tool calls |
Quick Start#
# Onboarding
/mcp-toolkit setup
# Inspect what ' s registered
/mcp-toolkit list-tools
# Seed and navigate
/mcp-toolkit seed --fixture=feed_with_10 --route=feed
# Dump a BLoC ' s current state
/mcp-toolkit dump-bloc --type=FeedBloc
# Run a YAML scenario
/mcp-toolkit scenario --file=test/scenarios/feed_offline_error.yamlYAML Scenario Format#
# test/scenarios/feed_offline_error.yaml
name: feed_offline_error
steps:
- tool: db.reset
- tool: db.seed_fixture
args: { name: " feed_with_10 " }
- tool: nav.go_named
args: { name: " feed " }
- tool: network.offline
args: { value: true }
- external: cc-flutter-marionette:tap
args: { key: " refresh_button " }
- external: cc-flutter-pixel-loop:capture
args: { route: " /feed " , label: " offline-error " }
- tool: network.offline
args: { value: false }
asserts:
- tool: bloc.dump_state
args: { type: " FeedBloc " }
expect: { status: " offlineError " }The scenario runner orchestrates calls across all three layers (mcp_toolkit, marionette, pixel-loop) โ that's the whole point of the layered model.
Required Inputs#
| Subcommand | Required | Optional |
|---|---|---|
setup | โ | โ |
list-tools | โ | --filter |
seed | --fixture | --route, --reset-first |
dump-bloc | --type | --redact-pii=false |
scenario | --file | --output |
Output#
.claude/docs/mcp-toolkit/<run_id>/ โ see skill SKILL.md for schema.
Related#
- Skill:
cc-flutter-mcp-toolkit:mcp-toolkit - Templates:
cc-flutter-mcp-toolkit:mcp-toolkit/TEMPLATES.md - Companion:
cc-flutter-marionette:marionette(widget tree) - Companion:
cc-flutter-pixel-loop:pixel-loop(external pixels)