# MCP Architecture Diagrams ## 전체 아키텍처 개요 ```mermaid graph TB subgraph "Client Interfaces" A[Chat Client/Claude Desktop] A1[Direct HTTP Client] A2[Web Browser] end subgraph "Flava MCP Hub" B[MCP Hub Server] C[Hub Management] D[Tool Registry] end subgraph "CQA Test App" E[MCP Server Implementation] F[Jira API Client] G[Flask Web Server] H[Test Tools] I[HTTP API Endpoints] J[Web UI] end subgraph "External Services" K[Jira Server] L[Other APIs] end %% MCP Hub connection A <-->|MCP Protocol| B B <-->|Tool Execution| E %% Direct connections (Remote MCP Server) A1 <-->|MCP Streamable HTTP
POST /mcp| E A1 <-->|REST API
POST /api/mcp/execute| I A2 <-->|Web Interface| J %% Internal connections E <-->|Jira Operations| F F <-->|REST API| K E <--> G E <--> H G <--> I G <--> J G <--> L %% Hub internal B --> C B --> D %% Styling classDef clientStyle fill:#e1f5fe classDef hubStyle fill:#f3e5f5 classDef appStyle fill:#e8f5e8 classDef externalStyle fill:#fff3e0 class A,A1,A2 clientStyle class B,C,D hubStyle class E,F,G,H,I,J appStyle class K,L externalStyle ``` ### 다양한 클라이언트 연결 방식 1. **MCP Hub를 통한 연결** - Chat Client → Flava MCP Hub → CQA Test App MCP Server - 표준 MCP 프로토콜 사용 - Hub에서 도구 관리 및 라우팅 2. **Remote MCP Server 연결 (Claude Code)** - HTTP Client → `/mcp` 엔드포인트 (MCP Streamable HTTP) - 표준 MCP 프로토콜을 HTTP로 구현 - Docker 컨테이너로 배포 3. **REST API 연결** - HTTP Client → `/api/mcp/execute` 엔드포인트 - REST API 형태로 MCP 도구 실행 - `curl`, Postman 등으로 테스트 가능 4. **웹 UI 연결** - Web Browser → `/jira_test_ui/` 페이지 - 사용자 친화적인 테스트 인터페이스 - 실시간 결과 확인 가능 ## MCP 서버 구현 구조 ```mermaid graph LR subgraph "MCP Protocol Layer" A[streamable_http.py] B[JSON-RPC 2.0 Handler] C[Tool Registry] end subgraph "Business Logic Layer" D[jira_client.py] E[API Functions] F[PAT Authentication] end subgraph "Integration Layer" G[Flask Blueprints] H[HTTP Endpoints] I[Web UI] end A --> B B --> C C --> D D --> E E --> F A --> G G --> H H --> I ``` ## Jira Tools 실행 플로우 ```mermaid sequenceDiagram participant Chat as Chat Interface participant Hub as Flava MCP Hub participant MCP as MCP Server participant Jira as Jira Client participant API as Jira API Chat->>Hub: "Jira에서 최근 이슈 검색해줘" Hub->>MCP: call_tool("jira_search_issues", {"jql": "..."}) MCP->>Jira: search_issues(jql, max_results) Jira->>API: GET /search?jql=... API-->>Jira: JSON Response Jira-->>MCP: Parsed Issues List MCP-->>Hub: Tool Result (JSON) Hub-->>Chat: Formatted Response ``` ## 배포 아키텍처 ```mermaid graph TB subgraph "Development Environment" A[Local Flask App] B[MCP Streamable HTTP] C[Local Jira Access] end subgraph "Claude Code Environment" D[Docker Container] E[MCP Client] F[Tool Execution] end subgraph "Production Environment" G[Containerized MCP Server] H[Environment Variables] I[Monitoring & Logs] end A -->|Development Testing| E B --> D G -->|Production Deployment| E H --> G I --> G E --> F D --> B ``` ## MCP Tools 매핑 ```mermaid graph LR subgraph "MCP Tools" A[jira_list_projects] B[jira_search_issues] C[jira_get_issue] D[jira_get_comments] E[jira_create_issue] end subgraph "Jira Client Methods" F[list_projects()] G[search_issues()] H[get_issue()] I[get_issue_comments()] J[create_issue()] end subgraph "Jira REST API" K[GET /project] L[GET /search] M[GET /issue/{key}] N[GET /issue/{key}/comment] O[POST /issue] end A --> F --> K B --> G --> L C --> H --> M D --> I --> N E --> J --> O ``` ## 연결 방식별 구조 ### Flask Integration ```mermaid graph TB A[run_cqa_test_app.py] --> B[Flask App] B --> C[MCP Streamable HTTP Blueprint] B --> D[MCP REST API Blueprint] C --> E[JSON-RPC Handler] D --> F[REST Endpoints] E --> G[Tool Execution] F --> G G --> H[Jira Client] H --> I[Jira API] B --> J[Web UI] B --> K[Other Blueprints] ``` ### Remote MCP Server Integration (Claude Code) ```mermaid graph TB A[Claude Code] --> B[Docker Container] B --> C[MCP Client] C --> D[HTTP Request to /mcp] D --> E[JSON-RPC 2.0 Handler] E --> F[Tool Dispatcher] F --> G[Jira Client] A --> H[User Interface] H --> I[Natural Language Processing] I --> J[Tool Selection] J --> C ``` ## 에러 처리 플로우 ```mermaid graph TD A[Tool Execution Request] --> B{Jira Connection OK?} B -->|No| C[Return Connection Error] B -->|Yes| D[Execute Jira API Call] D --> E{API Call Success?} E -->|No| F[Return API Error] E -->|Yes| G[Process Response] G --> H{Data Valid?} H -->|No| I[Return Data Error] H -->|Yes| J[Return Success Result] C --> K[Error Response to Hub] F --> K I --> K J --> L[Success Response to Hub] ```