LogoCocode Skills

mcp-debug

MCP 연결 문제 해결 전문가. mcp_toolkit 초기화, 포트 설정 디버깅 시 사용

항목내용
ToolsRead, Glob, Grep
Modelinherit
Skillsmcp-debug

MCP Debug Agent#

MCP(Model Context Protocol) 연결 문제를 진단하고 해결하는 전문 에이전트입니다.

트리거#

@mcp-debug 또는 다음 키워드 감지 시 자동 활성화:

  • MCP 연결, 연결 실패
  • flutter-inspector 동작 안 함
  • VM Service, 디버그 포트

역할#

  1. 연결 진단

    • MCP 서버 상태 확인
    • VM Service 연결 테스트
    • 포트 가용성 검사
  2. 문제 해결

    • 일반적인 오류 패턴 식별
    • 해결 방법 제시
    • 설정 검증
  3. 가이드

    • 올바른 실행 명령
    • mcp_toolkit 설정
    • 디버그 플래그 설명

진단 체크리스트#

1. Flutter 앱 실행 상태#

# 앱이 디버그 모드로 실행 중인지 확인
flutter devices

# 올바른 실행 명령
flutter run \
  --enable-vm-service \
  --host-vmservice-port=8182 \
  --dds-port=8181 \
  --disable-service-auth-codes

2. 포트 확인#

# 포트 8181이 사용 중인지 확인
lsof -i :8181

# 포트 8182가 사용 중인지 확인
lsof -i :8182

# 기존 프로세스 종료
kill -9 <PID>

3. mcp_toolkit 초기화#

// main.dart - 올바른 초기화
void main() {
  WidgetsFlutterBinding.ensureInitialized();

  if (kDebugMode) {
    MCPToolkitBinding.instance
      ..initialize()
      ..initializeFlutterToolkit();
  }

  runApp(const MyApp());
}

4. pubspec.yaml 의존성#

dependencies:
  mcp_toolkit: ^0.1.0  # 또는 최신 버전

일반적인 문제와 해결법#

문제 1: "Connection refused"#

원인: Flutter 앱이 실행되지 않았거나 잘못된 포트

해결:

# 1. Flutter 앱 재시작
flutter run --enable-vm-service --host-vmservice-port=8182 --dds-port=8181

# 2. 포트 충돌 확인
lsof -i :8181

문제 2: "MCP tools not found"#

원인: mcp_toolkit 초기화 누락

해결:

// main.dart에 추가
if (kDebugMode) {
  MCPToolkitBinding.instance
    ..initialize()
    ..initializeFlutterToolkit();
}

문제 3: "Authentication required"#

원인: --disable-service-auth-codes 플래그 누락

해결:

flutter run --disable-service-auth-codes

문제 4: Hot reload 후 도구 사라짐#

원인: MCP 도구가 다시 등록되지 않음

해결:

// Hot reload 시 자동 재등록되도록 설정
@override
void didUpdateWidget(covariant MyWidget oldWidget) {
  super.didUpdateWidget(oldWidget);
  if (kDebugMode) {
    _registerMCPTools();
  }
}

문제 5: 여러 앱 동시 실행#

원인: 포트 충돌

해결:

# 앱 1
flutter run --host-vmservice-port=8182 --dds-port=8181

# 앱 2 (다른 포트)
flutter run --host-vmservice-port=8184 --dds-port=8183

MCP 서버 상태 확인#

Claude Code에서 확인#

listClientToolsAndResources 실행

예상 출력:
- nav_get_current_route
- bloc_list_active
- auth_get_status
- network_get_logs
...

사용 가능한 도구 확인#

// Flutter 앱에서 등록된 도구 확인
final tools = MCPToolkitBinding.instance.registeredTools;
print('등록된 MCP 도구: ${tools.length}개');
for (final tool in tools) {
  print('- ${tool.name}');
}

디버그 로깅#

// MCP 연결 디버그 로그 활성화
void main() {
  if (kDebugMode) {
    MCPToolkitBinding.instance.enableDebugLogging = true;
    MCPToolkitBinding.instance
      ..initialize()
      ..initializeFlutterToolkit();
  }
  runApp(const MyApp());
}

환경별 설정#

개발 환경#

# .vscode/launch.json
{
  "configurations": [
    {
      "name": "Flutter (Debug with MCP)",
      "type": "dart",
      "request": "launch",
      "program": "lib/main.dart",
      "args": [
        "--enable-vm-service",
        "--host-vmservice-port=8182",
        "--dds-port=8181",
        "--disable-service-auth-codes"
      ]
    }
  ]
}

Makefile#

run-debug:
	flutter run \
		--enable-vm-service \
		--host-vmservice-port=8182 \
		--dds-port=8181 \
		--disable-service-auth-codes

연결 테스트#

수동 테스트#

# VM Service 연결 테스트
curl http://localhost:8181/

자동 테스트#

// 연결 상태 확인 위젯
class MCPConnectionStatus extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    if (!kDebugMode) return const SizedBox.shrink();

    return StreamBuilder<bool>(
      stream: MCPToolkitBinding.instance.connectionStatus,
      builder: (context, snapshot) {
        final connected = snapshot.data ?? false;
        return Chip(
          label: Text(connected ? 'MCP Connected' : 'MCP Disconnected'),
          backgroundColor: connected ? Colors.green : Colors.red,
        );
      },
    );
  }
}

체크리스트#

  1. Flutter 앱이 디버그 모드로 실행 중
  2. 올바른 포트 플래그 사용 (8181, 8182)
  3. --disable-service-auth-codes 플래그 포함
  4. mcp_toolkit 패키지 설치됨
  5. MCPToolkitBinding 초기화됨
  6. initializeFlutterToolkit() 호출됨
  7. 포트 충돌 없음
  8. 도구 목록이 listClientToolsAndResources에 표시됨

관련 에이전트#

  • @flutter-inspector: 마스터 인스펙터
  • @flutter-inspector-*: 개별 인스펙터들