# chaozai0304/mcp-spring-ai-mcp-client architecture

> Architecture diagram of the GitHub repository chaozai0304/mcp-spring-ai-mcp-client, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/chaozai0304/mcp-spring-ai-mcp-client
- Repository: https://github.com/chaozai0304/mcp-spring-ai-mcp-client

## Overview

This Spring Boot app exposes chat endpoints that ask an OpenAI chat model to answer prompts, optionally invoking MCP-provided GitHub tools and locally defined task tools; the response is returned to the caller. The README describes tool selection, MCP execution, and a final model summary. A separate utility demonstrates direct stdio MCP tool listing and calls. The graph includes these documented capabilities, but the MCP server configuration and runtime wiring are not shown in the excerpts, so those links are documented rather than inferred from configuration.

Main entry points: [`src/main/java/com/aitools/mcp/controller/ChatController.java`](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java) (Chat endpoints), [`src/main/java/com/aitools/mcp/util/McpClientRun.java`](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java) (Standalone MCP client), [`src/main/java/com/aitools/mcp/config/ChatClientConfig.java`](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/config/ChatClientConfig.java) (Task tool provider), [`src/main/java/com/aitools/mcp/service/TaskMcpCallServerServices.java`](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/service/TaskMcpCallServerServices.java) (Name-to-age tool)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_chat["Chat workflow"]
  node_controller["Chat endpoints"]
  node_openai["OpenAI model"]
  node_memory[("In-memory chat history")]
  node_logger["Request/response logging"]
end

subgraph group_tools["Tool providers"]
  node_mcp_callbacks["MCP tool callbacks"]
  node_github_mcp["GitHub MCP server"]
  node_task_provider["Task tool provider"]
  node_task_service["Name-to-age tool"]
end

subgraph group_direct["Direct MCP client"]
  node_direct_client["Standalone MCP client<br/>[McpClientRun.java]"]
  node_stdio_server["GitHub stdio server"]
  node_tool_listing["Tool listing<br/>[McpClientRun.java]"]
  node_tool_calls["Directory/file calls<br/>[McpClientRun.java]"]
end

node_user(("Chat user"))

node_user -->|"submits prompt"| node_controller
node_controller -->|"prompts model"| node_openai
node_openai -->|"returns answer"| node_controller
node_controller -->|"registers tools"| node_mcp_callbacks
node_controller -->|"registers tools"| node_task_provider
node_task_provider -->|"wraps tool methods"| node_task_service
node_controller -->|"adds advisor"| node_memory
node_controller -->|"adds advisor"| node_logger
node_openai -->|"selects MCP call"| node_mcp_callbacks
node_mcp_callbacks -->|"calls tools"| node_github_mcp
node_openai -->|"summarizes results"| node_github_mcp
node_direct_client -->|"opens stdio transport"| node_stdio_server
node_direct_client -->|"lists tools"| node_tool_listing
node_direct_client -->|"calls tools"| node_tool_calls

click node_controller "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java"
click node_memory "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java"
click node_logger "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java"
click node_task_provider "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/config/ChatClientConfig.java"
click node_task_service "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/service/TaskMcpCallServerServices.java"
click node_direct_client "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java"
click node_tool_listing "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java"
click node_tool_calls "https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_controller,node_openai,node_memory,node_logger,node_user toneBlue
class node_mcp_callbacks,node_github_mcp,node_task_provider,node_task_service toneAmber
class node_direct_client,node_stdio_server,node_tool_listing,node_tool_calls toneMint
```

## Components

### Chat workflow

- [Chat endpoints](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java): `src/main/java/com/aitools/mcp/controller/ChatController.java`
- **OpenAI model**
- [In-memory chat history](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java): `src/main/java/com/aitools/mcp/controller/ChatController.java`
- [Request/response logging](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/controller/ChatController.java): `src/main/java/com/aitools/mcp/controller/ChatController.java`

### Tool providers

- **MCP tool callbacks**
- **GitHub MCP server**
- [Task tool provider](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/config/ChatClientConfig.java): `src/main/java/com/aitools/mcp/config/ChatClientConfig.java`
- [Name-to-age tool](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/service/TaskMcpCallServerServices.java): `src/main/java/com/aitools/mcp/service/TaskMcpCallServerServices.java`

### Direct MCP client

- [Standalone MCP client](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java): `src/main/java/com/aitools/mcp/util/McpClientRun.java`
- **GitHub stdio server**
- [Tool listing](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java): `src/main/java/com/aitools/mcp/util/McpClientRun.java`
- [Directory/file calls](https://github.com/chaozai0304/mcp-spring-ai-mcp-client/blob/main/src/main/java/com/aitools/mcp/util/McpClientRun.java): `src/main/java/com/aitools/mcp/util/McpClientRun.java`

### Other components

- **Chat user**

## Connections

- Chat user → Chat endpoints: submits prompt (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- Chat endpoints → OpenAI model: prompts model (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- OpenAI model → Chat endpoints: returns answer (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- Chat endpoints → MCP tool callbacks: registers tools (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- Chat endpoints → Task tool provider: registers tools (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- Task tool provider → Name-to-age tool: wraps tool methods (evidence: `src/main/java/com/aitools/mcp/config/ChatClientConfig.java`)
- Chat endpoints → In-memory chat history: adds advisor (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- Chat endpoints → Request/response logging: adds advisor (evidence: `src/main/java/com/aitools/mcp/controller/ChatController.java`)
- OpenAI model → MCP tool callbacks: selects MCP call (evidence: `README.md`)
- MCP tool callbacks → GitHub MCP server: calls tools (evidence: `README.md`)
- OpenAI model → GitHub MCP server: summarizes results (evidence: `README.md`)
- Standalone MCP client → GitHub stdio server: opens stdio transport (evidence: `src/main/java/com/aitools/mcp/util/McpClientRun.java`)
- Standalone MCP client → Tool listing: lists tools (evidence: `src/main/java/com/aitools/mcp/util/McpClientRun.java`)
- Standalone MCP client → Directory/file calls: calls tools (evidence: `src/main/java/com/aitools/mcp/util/McpClientRun.java`)
