LogoSkills

mcp-toolkit:setup

Install mcp_server_dart, add mcp_toolkit to the app, register the cocode standard tool set.

ํ•ญ๋ชฉ๋‚ด์šฉ
Invoke/mcp-toolkit:setup
Categorycocode-flutter
Complexitysimple

/mcp-toolkit setup โ€” ์•ฑ๊ณผ AI๋ฅผ ์ž‡๋Š” "์ „์„  ์—ฐ๊ฒฐ"#

ํ•œ๋งˆ๋””๋กœ#

๋งŒ๋“ค๊ณ  ์žˆ๋Š” Flutter ์•ฑ๊ณผ Claude(AI)๋ฅผ ์„œ๋กœ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ „์„ ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์ฝ˜์„ผํŠธ๋ฅผ ๊ฝ‚๋Š” ์„ค์น˜ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋๋‚˜์•ผ AI๊ฐ€ ์•ฑ ํ™”๋ฉด์„ ์ง์ ‘ ๋“ค์—ฌ๋‹ค๋ณด๊ณ , ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๊ณ , ๋™์ž‘์„ ์‹œ์ผœ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

๋ˆ„๊ฐ€ยท์–ธ์ œ ์“ฐ๋‚˜์š”#

  • ์ƒˆ Flutter ์•ฑ์ด๋‚˜ ์ž‘์—… ํ™˜๊ฒฝ์„ ์ฒ˜์Œ ์„ธํŒ…ํ•  ๋•Œ ๋”ฑ ํ•œ ๋ฒˆ ๋Œ๋ฆฌ๋Š” ์„ค์น˜ ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค.
  • AI๊ฐ€ ์•ฑ ๋‚ด๋ถ€(ํ™”๋ฉด ์ƒํƒœ, DB, ํ™”๋ฉด ์ด๋™ ๋“ฑ)๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ๋„๊ตฌ(bloc.*, db.*, nav.* ๋“ฑ)๋ฅผ ์“ฐ๊ณ  ์‹ถ์„ ๋•Œ.
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐ›์•„ "AI ์—ฐ๋™ ํ™˜๊ฒฝ"์„ ๊ฐ–์ถ”๋Š” ์ดˆ๊ธฐ ์ค€๋น„ ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”#

์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด ๋‹ค์Œ์ด ๊ฐ–์ถฐ์ง‘๋‹ˆ๋‹ค.

  • MCP ์„œ๋ฒ„(mcp_server_dart) ์„ค์น˜ โ€” AI์™€ ์•ฑ์„ ์ž‡๋Š” ์ค‘๊ณ„๊ธฐ ์—ญํ• 
  • Claude Code์— mcp_flutter ์—ฐ๊ฒฐ ๋“ฑ๋ก (ํ™”๋ฉด ์บก์ฒ˜ view_screenshot ํฌํ•จ)
  • ์•ฑ์— mcp_toolkit๊ณผ ๊ณต์šฉ ๋„๊ตฌ ๋ฌถ์Œ dev_tooling ํŒจํ‚ค์ง€ ์ถ”๊ฐ€
  • lib/main.dart์— ์—ฐ๊ฒฐ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ์‚ฝ์ž…
  • cocode ํ‘œ์ค€ ๋„๊ตฌ ์„ธํŠธ๊ฐ€ ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ๋๋Š”์ง€ ํ™•์ธ (bloc.dump_state, db.reset, nav.go_named, auth.impersonate ๋“ฑ)

์–ด๋–ป๊ฒŒ ์“ฐ๋‚˜์š”#

# 1. AI-์•ฑ ์ค‘๊ณ„ ์„œ๋ฒ„ ์„ค์น˜
dart pub global activate mcp_server_dart

# 2. Claude Code์— ์—ฐ๊ฒฐ ๋“ฑ๋ก (--images: ํ™”๋ฉด ์บก์ฒ˜ ๊ธฐ๋Šฅ ์ผœ๊ธฐ)
claude mcp add --transport stdio mcp_flutter -- mcp_server_dart --images

# 3. ๋Œ€์ƒ Flutter ์•ฑ์— ๋„๊ตฌ ์ถ”๊ฐ€
flutter pub add mcp_toolkit

# 4. ์„ค์น˜ ํ™•์ธ: ์•ฑ ์‹คํ–‰ ํ›„ Claude Code์—์„œ ๋„๊ตฌ ๋ชฉ๋ก ๋ณด๊ธฐ
flutter run
/mcp-toolkit list-tools

์„ค์น˜ํ•  ๋•Œ ์ผœ๊ณ  ๋Œ ์ˆ˜ ์žˆ๋Š” ์„ ํƒ ์˜ต์…˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

--images       # ํ™”๋ฉด ์บก์ฒ˜(view_screenshot) ๊ธฐ๋Šฅ ์ผœ๊ธฐ
--dumps        # ํ™”๋ฉด ๊ตฌ์กฐ ๋คํ”„ ๊ธฐ๋Šฅ ์ผœ๊ธฐ (๋ฌด๊ฑฐ์šฐ๋‹ˆ ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ)
--vm-port=N    # ์—ฐ๊ฒฐ ํฌํŠธ ๋ณ€๊ฒฝ (๊ธฐ๋ณธ๊ฐ’ 8181)

์•ˆ์—์„œ ๋ฌด์Šจ ์ผ์ด ๋ฒŒ์–ด์ง€๋‚˜์š”#

์„ค์น˜๋Š” ์ˆœ์„œ๋Œ€๋กœ 6๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  1. ์ค‘๊ณ„ ์„œ๋ฒ„ ์„ค์น˜ โ€” AI์™€ ์•ฑ์„ ์ž‡๋Š” mcp_server_dart๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์—ฐ๊ฒฐ ๋“ฑ๋ก โ€” Claude Code์— mcp_flutter๋ฅผ ๋“ฑ๋กํ•ด ๋‘˜์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  3. ์•ฑ์— ๋„๊ตฌ ์ถ”๊ฐ€ โ€” ๋Œ€์ƒ ์•ฑ์— mcp_toolkit๊ณผ ๊ณต์šฉ ๋„๊ตฌ ๋ฌถ์Œ dev_tooling์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ์‚ฝ์ž… โ€” lib/main.dart์— ์—ฐ๊ฒฐ์„ ์ผœ๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. (๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ๋งŒ ์ž‘๋™)
  5. ์ •์ƒ ๋™์ž‘ ํ™•์ธ โ€” ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ๋„๊ตฌ ๋ชฉ๋ก์„ ๋ถˆ๋Ÿฌ์™€ ํ‘œ์ค€ ๋„๊ตฌ๋“ค์ด ๋‹ค ๋œจ๋Š”์ง€ ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค.
  6. ์ „์ฒด ์—ฐ๊ฒฐ ์ ๊ฒ€ โ€” ๊ด€๋ จ MCP๋“ค์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ๋๋Š”์ง€ ํ•œ ๋ฒˆ์— ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

โš™๏ธ ์ƒ์„ธ ์˜ต์…˜ยท์‹คํ–‰ ๋ช…์„ธ (๊ฐœ๋ฐœ์ž / AI ์—์ด์ „ํŠธ์šฉ)

1. Install the MCP server#

dart pub global activate mcp_server_dart

2. Register with Claude Code#

The repo-level .mcp.json already lists mcp_flutter. To register globally:

claude mcp add --transport stdio mcp_flutter -- mcp_server_dart --images

--images enables view_screenshot. Omit if you only need dynamic tools.

3. Add the toolkit to the target Flutter app#

cd path/to/your/flutter/app
flutter pub add mcp_toolkit

Also add (or create) the shared dev tooling package:

flutter pub add dev_tooling --path=../packages/dev_tooling

The shared package houses cocode's standard dynamic tool set (bloc.*, db.*, nav.*, etc.) โ€” see skills/mcp-toolkit/TEMPLATES.md for the reference implementation.

4. Initialise the binding#

// lib/main.dart
import 'package:dev_tooling/mcp_entries.dart';
import 'package:flutter/foundation.dart';
import 'package:mcp_toolkit/mcp_toolkit.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  if (kDebugMode) {
    final binding = MCPToolkitBinding.instance;
    binding.initializeFlutterToolkit();
    binding.addEntries(entries: cocodeMcpEntries);
  }
  runApp(const App());
}

If you also use cc-flutter-marionette, init it before MCPToolkitBinding. They use different VM Service extension namespaces, so they coexist.

5. Sanity check#

flutter run
# In Claude Code:
/mcp-toolkit list-tools

Expected: bloc.dump_state, bloc.add_event, db.seed_fixture, db.reset, nav.go_named, network.offline, flags.set, locale.set, analytics.tail, auth.impersonate.

6. Verify the layered stack#

# All three MCPs should be connected
claude mcp list | grep -E  " maestro|marionette|mcp_flutter|dart|figma "

Optional flags#

FlagEffect
--imagesEnable view_screenshot
--dumpsEnable dump_render_tree (heavy โ€” only when you really need it)
--vm-port=NOverride VM Service port (default 8181)