# jeroenn89/meepleos architecture

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

- Interactive diagram: https://gitdiagram.com/jeroenn89/meepleos
- Repository: https://github.com/jeroenn89/meepleos

## Overview

MeepleOS is a local MCP server for managing board games, players, recorded game sessions, and on-demand statistics. An MCP client sends requests over stdio to category-specific tools, which invoke business services; services validate inputs and use repository interfaces, implemented by the EF Core data layer over SQLite. Statistics are calculated from session history, with player and board-game data also used for summaries. The README documents all four tool categories; sampled source shows selected service, repository, and host behavior, but not every tool implementation.

Main entry points: [`src/MeepleOS.ServerLayer/Program.cs`](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Program.cs) (stdio host), [`src/MeepleOS.DataLayer/Data/Context/MeepleDbContext.cs`](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Data/Context/MeepleDbContext.cs) (EF database context), [`src/MeepleOS.BusinessLayer/Services/StatisticsService.cs`](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/StatisticsService.cs) (Statistics service), [`src/MeepleOS.BusinessLayer/Repositories`](https://github.com/jeroenn89/meepleos/tree/main/src/MeepleOS.BusinessLayer/Repositories) (Repository interfaces)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["MCP Server"]
  node_host["stdio host<br/>[Program.cs]"]
  node_boardgame_tools["Boardgame tools<br/>[BoardgameTools.cs]"]
  node_player_tools["Player tools<br/>[PlayerTools.cs]"]
  node_session_tools["Session tools"]
  node_statistics_tools["Statistics tools<br/>[StatisticsTools.cs]"]
end

subgraph group_business["Business Logic"]
  node_boardgame_service["Boardgame service"]
  node_player_service["Player service<br/>[PlayerService.cs]"]
  node_session_service["Session service"]
  node_repository_interfaces["Repository interfaces<br/>[Repositories]"]
end

subgraph group_storage["SQLite Storage"]
  node_boardgame_repository["Boardgame repository"]
  node_player_repository["Player repository"]
  node_session_repository["Session repository"]
  node_db_context["EF database context<br/>[MeepleDbContext.cs]"]
  node_sqlite[("SQLite database")]
  node_entities["Domain entities<br/>[Models]"]
end

subgraph group_analytics["Statistics"]
  node_statistics_service["Statistics service"]
  node_statistics_period["Period definition"]
end

node_client(("MCP client"))

node_client -->|"sends MCP messages"| node_host
node_host -->|"registers tools"| node_boardgame_tools
node_host -->|"registers tools"| node_player_tools
node_host -->|"registers tools"| node_session_tools
node_host -->|"registers tools"| node_statistics_tools
node_boardgame_tools -->|"calls"| node_boardgame_service
node_player_tools -->|"calls"| node_player_service
node_session_tools -->|"calls"| node_session_service
node_statistics_tools -->|"calls"| node_statistics_service
node_boardgame_service -->|"uses"| node_repository_interfaces
node_player_service -->|"uses"| node_repository_interfaces
node_session_service -->|"uses"| node_repository_interfaces
node_statistics_service -->|"reads through"| node_repository_interfaces
node_statistics_service -->|"uses"| node_statistics_period
node_host -->|"configures"| node_db_context
node_host -->|"registers implementation"| node_boardgame_repository
node_host -->|"registers implementation"| node_player_repository
node_host -->|"registers implementation"| node_session_repository
node_boardgame_repository -->|"queries and writes"| node_db_context
node_player_repository -->|"queries and writes"| node_db_context
node_session_repository -->|"queries and writes"| node_db_context
node_db_context -->|"maps"| node_entities
node_db_context -->|"persists data"| node_sqlite
node_statistics_service -.->|"returns results to"| node_statistics_tools

click node_host "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Program.cs"
click node_boardgame_tools "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/BoardgameTools.cs"
click node_player_tools "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/PlayerTools.cs"
click node_session_tools "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/GameSessionTools.cs"
click node_statistics_tools "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/StatisticsTools.cs"
click node_boardgame_service "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/BoardgameService.cs"
click node_player_service "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/PlayerService.cs"
click node_session_service "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/GameSessionService.cs"
click node_repository_interfaces "https://github.com/jeroenn89/meepleos/tree/main/src/MeepleOS.BusinessLayer/Repositories"
click node_boardgame_repository "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Repositories/BoardgameRepository.cs"
click node_player_repository "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Repositories/PlayerRepository.cs"
click node_session_repository "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Repositories/GameSessionRepository.cs"
click node_db_context "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Data/Context/MeepleDbContext.cs"
click node_entities "https://github.com/jeroenn89/meepleos/tree/main/src/MeepleOS.DataLayer/Data/Models"
click node_statistics_service "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/StatisticsService.cs"
click node_statistics_period "https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/StatisticsPeriod.cs"

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_host,node_boardgame_tools,node_player_tools,node_session_tools,node_statistics_tools,node_client toneBlue
class node_boardgame_service,node_player_service,node_session_service,node_repository_interfaces toneAmber
class node_boardgame_repository,node_player_repository,node_session_repository,node_db_context,node_sqlite,node_entities toneMint
class node_statistics_service,node_statistics_period toneRose
```

## Components

### MCP Server

- [stdio host](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Program.cs): `src/MeepleOS.ServerLayer/Program.cs`
- [Boardgame tools](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/BoardgameTools.cs): `src/MeepleOS.ServerLayer/Tools/BoardgameTools.cs`
- [Player tools](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/PlayerTools.cs): `src/MeepleOS.ServerLayer/Tools/PlayerTools.cs`
- [Session tools](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/GameSessionTools.cs): `src/MeepleOS.ServerLayer/Tools/GameSessionTools.cs`
- [Statistics tools](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.ServerLayer/Tools/StatisticsTools.cs): `src/MeepleOS.ServerLayer/Tools/StatisticsTools.cs`

### Business Logic

- [Boardgame service](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/BoardgameService.cs): `src/MeepleOS.BusinessLayer/Services/BoardgameService.cs`
- [Player service](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/PlayerService.cs): `src/MeepleOS.BusinessLayer/Services/PlayerService.cs`
- [Session service](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/GameSessionService.cs): `src/MeepleOS.BusinessLayer/Services/GameSessionService.cs`
- [Repository interfaces](https://github.com/jeroenn89/meepleos/tree/main/src/MeepleOS.BusinessLayer/Repositories): `src/MeepleOS.BusinessLayer/Repositories`

### SQLite Storage

- [Boardgame repository](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Repositories/BoardgameRepository.cs): `src/MeepleOS.DataLayer/Repositories/BoardgameRepository.cs`
- [Player repository](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Repositories/PlayerRepository.cs): `src/MeepleOS.DataLayer/Repositories/PlayerRepository.cs`
- [Session repository](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Repositories/GameSessionRepository.cs): `src/MeepleOS.DataLayer/Repositories/GameSessionRepository.cs`
- [EF database context](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.DataLayer/Data/Context/MeepleDbContext.cs): `src/MeepleOS.DataLayer/Data/Context/MeepleDbContext.cs`
- **SQLite database**
- [Domain entities](https://github.com/jeroenn89/meepleos/tree/main/src/MeepleOS.DataLayer/Data/Models): `src/MeepleOS.DataLayer/Data/Models`

### Statistics

- [Statistics service](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/StatisticsService.cs): `src/MeepleOS.BusinessLayer/Services/StatisticsService.cs`
- [Period definition](https://github.com/jeroenn89/meepleos/blob/main/src/MeepleOS.BusinessLayer/Services/StatisticsPeriod.cs): `src/MeepleOS.BusinessLayer/Services/StatisticsPeriod.cs`

### Other components

- **MCP client**

## Connections

- MCP client → stdio host: sends MCP messages (evidence: `README.md`)
- stdio host → Boardgame tools: registers tools (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- stdio host → Player tools: registers tools (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- stdio host → Session tools: registers tools (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- stdio host → Statistics tools: registers tools (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- Boardgame tools → Boardgame service: calls (evidence: `src/MeepleOS.ServerLayer/Tools/BoardgameTools.cs`)
- Player tools → Player service: calls (evidence: `src/MeepleOS.ServerLayer/Tools/PlayerTools.cs`)
- Session tools → Session service: calls (evidence: `src/MeepleOS.ServerLayer/Tools/GameSessionTools.cs`)
- Statistics tools → Statistics service: calls (evidence: `src/MeepleOS.ServerLayer/Tools/StatisticsTools.cs`)
- Boardgame service → Repository interfaces: uses (evidence: `src/MeepleOS.BusinessLayer/Services/BoardgameService.cs`)
- Player service → Repository interfaces: uses (evidence: `src/MeepleOS.BusinessLayer/Services/PlayerService.cs`)
- Session service → Repository interfaces: uses (evidence: `src/MeepleOS.BusinessLayer/Services/GameSessionService.cs`)
- Statistics service → Repository interfaces: reads through (evidence: `src/MeepleOS.BusinessLayer/Services/StatisticsService.cs`)
- Statistics service → Period definition: uses (evidence: `src/MeepleOS.BusinessLayer/Services/StatisticsService.cs`)
- stdio host → EF database context: configures (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- stdio host → Boardgame repository: registers implementation (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- stdio host → Player repository: registers implementation (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- stdio host → Session repository: registers implementation (evidence: `src/MeepleOS.ServerLayer/Program.cs`)
- Boardgame repository → EF database context: queries and writes (evidence: `src/MeepleOS.DataLayer/Repositories/BoardgameRepository.cs`)
- Player repository → EF database context: queries and writes (evidence: `src/MeepleOS.DataLayer/Repositories/PlayerRepository.cs`)
- Session repository → EF database context: queries and writes (evidence: `src/MeepleOS.DataLayer/Repositories/GameSessionRepository.cs`)
- EF database context → Domain entities: maps (evidence: `src/MeepleOS.DataLayer/Data/Context/MeepleDbContext.cs`)
- EF database context → SQLite database: persists data
- Statistics service → Statistics tools: returns results to (evidence: `src/MeepleOS.ServerLayer/Tools/StatisticsTools.cs`)
