# campusx-official/mcp-client architecture

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

- Interactive diagram: https://gitdiagram.com/campusx-official/mcp-client
- Repository: https://github.com/campusx-official/mcp-client

## Overview

This repository contains two small MCP chat clients: a Streamlit conversational app and an asynchronous command-line demo. Both discover tools from configured MCP servers, ask an OpenAI model whether to call them, execute requested tools, and use tool results for a final response. The Streamlit app additionally keeps and renders conversation history. Server implementations are external; their configured locations are embedded in the clients, and their internals are not present in the tree.

Main entry points: [`client2.py`](https://github.com/campusx-official/mcp-client/blob/main/client2.py) (Streamlit chat), [`client1.py`](https://github.com/campusx-official/mcp-client/blob/main/client1.py) (CLI demo)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Chat clients"]
  node_streamlit["Streamlit chat<br/>[client2.py]"]
  node_cli["CLI demo<br/>[client1.py]"]
end

subgraph group_tooling["MCP tool access"]
  node_adapter["MCP client adapter"]
end

subgraph group_services["External services"]
  node_openai{{"OpenAI model"}}
  node_math{{"Math MCP server"}}
  node_expense{{"Expense MCP server"}}
  node_manim{{"Manim MCP server"}}
end

node_user(("Chat user"))

node_user -->|"sends chat"| node_streamlit
node_streamlit -->|"discovers tools"| node_adapter
node_adapter -->|"lists tools"| node_math
node_adapter -->|"lists tools"| node_expense
node_adapter -->|"lists tools"| node_manim
node_adapter -->|"returns tools"| node_streamlit
node_streamlit -->|"requests response"| node_openai
node_openai -->|"returns tool calls"| node_streamlit
node_streamlit -->|"invokes tools"| node_adapter
node_adapter -->|"dispatches call"| node_math
node_adapter -->|"dispatches call"| node_expense
node_adapter -->|"dispatches call"| node_manim
node_adapter -->|"returns results"| node_streamlit
node_streamlit -->|"submits tool results"| node_openai
node_user -->|"starts demo"| node_cli
node_cli -->|"discovers tools"| node_adapter
node_adapter -->|"returns tools"| node_cli
node_cli -->|"requests tool choice"| node_openai
node_openai -->|"returns tool calls"| node_cli
node_cli -->|"invokes tools"| node_adapter
node_adapter -->|"returns results"| node_cli
node_cli -->|"submits tool results"| node_openai

click node_streamlit "https://github.com/campusx-official/mcp-client/blob/main/client2.py"
click node_cli "https://github.com/campusx-official/mcp-client/blob/main/client1.py"

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_streamlit,node_cli,node_user toneBlue
class node_adapter toneAmber
class node_openai,node_math,node_expense,node_manim toneMint
```

## Components

### Chat clients

- [Streamlit chat](https://github.com/campusx-official/mcp-client/blob/main/client2.py): `client2.py`
- [CLI demo](https://github.com/campusx-official/mcp-client/blob/main/client1.py): `client1.py`

### MCP tool access

- **MCP client adapter**

### External services

- **OpenAI model**
- **Math MCP server**
- **Expense MCP server**
- **Manim MCP server**

### Other components

- **Chat user**

## Connections

- Chat user → Streamlit chat: sends chat
- Streamlit chat → MCP client adapter: discovers tools
- MCP client adapter → Math MCP server: lists tools
- MCP client adapter → Expense MCP server: lists tools
- MCP client adapter → Manim MCP server: lists tools
- MCP client adapter → Streamlit chat: returns tools
- Streamlit chat → OpenAI model: requests response
- OpenAI model → Streamlit chat: returns tool calls
- Streamlit chat → MCP client adapter: invokes tools
- MCP client adapter → Math MCP server: dispatches call
- MCP client adapter → Expense MCP server: dispatches call
- MCP client adapter → Manim MCP server: dispatches call
- MCP client adapter → Streamlit chat: returns results
- Streamlit chat → OpenAI model: submits tool results
- Chat user → CLI demo: starts demo
- CLI demo → MCP client adapter: discovers tools
- MCP client adapter → CLI demo: returns tools
- CLI demo → OpenAI model: requests tool choice
- OpenAI model → CLI demo: returns tool calls
- CLI demo → MCP client adapter: invokes tools
- MCP client adapter → CLI demo: returns results
- CLI demo → OpenAI model: submits tool results
