# elgatosf/elgato-mcp-server architecture

> Architecture diagram of the GitHub repository elgatosf/elgato-mcp-server, 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/elgatosf/elgato-mcp-server
- Repository: https://github.com/elgatosf/elgato-mcp-server

## Overview

Elgato MCP Server bridges MCP clients to locally running Elgato apps over IPC. The principal workflow selects stdio or HTTP, routes MCP tool/resource requests through the bridge and client manager, and forwards them to the connected app; discovered capabilities and app notifications flow back to MCP clients. The graph also preserves reconnection, HTTP sessions, and optional ngrok access. Source excerpts show the main orchestration and request paths; additional capabilities are included where documented in the README.

Main entry points: [`src/McpBridge.ts`](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/McpBridge.ts) (MCP bridge), [`src/transports/http.ts`](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/http.ts) (HTTP transport), [`src/ClientManager.ts`](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts) (Client manager), [`src/index.ts`](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/index.ts) (CLI entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Server entry"]
  node_cli["CLI entry<br/>[index.ts]"]
  node_stdio["stdio transport<br/>[stdio.ts]"]
  node_utilities["Naming and CLI utilities<br/>[utils.ts]"]
end

subgraph group_mcp["MCP bridge"]
  node_bridge["MCP bridge<br/>[McpBridge.ts]"]
  node_protocol_types["IPC and MCP types<br/>[types.ts]"]
end

subgraph group_apps["App connectivity"]
  node_manager["Client manager<br/>[ClientManager.ts]"]
  node_ipc["IPC client<br/>[IpcClient.ts]"]
  node_discovery["Tool and resource discovery<br/>[ClientManager.ts]"]
  node_notifications["App notifications<br/>[ClientManager.ts]"]
end

subgraph group_http["HTTP access"]
  node_http_transport["HTTP transport<br/>[http.ts]"]
  node_http_sessions[("HTTP sessions<br/>[http.ts]")]
  node_ngrok["ngrok tunnel"]
end

node_mcp_client(("MCP client"))
node_elgato_app(("Elgato app"))

node_mcp_client -.->|"uses stdio"| node_stdio
node_mcp_client -.->|"sends MCP requests"| node_http_transport
node_cli -->|"selects transport"| node_stdio
node_cli -->|"selects transport"| node_http_transport
node_cli -->|"parses options"| node_utilities
node_stdio -->|"creates connected bridge"| node_bridge
node_http_transport -->|"creates initialized bridge"| node_bridge
node_http_transport -->|"manages sessions"| node_http_sessions
node_http_transport -->|"opens optional tunnel"| node_ngrok
node_bridge -->|"delegates app operations"| node_manager
node_manager -->|"creates and calls clients"| node_ipc
node_ipc -.->|"exchanges IPC messages"| node_elgato_app
node_manager -->|"refreshes capabilities"| node_discovery
node_discovery -->|"requests tool lists"| node_ipc
node_elgato_app -.->|"sends notifications"| node_notifications
node_notifications -.->|"forwards notifications"| node_bridge
node_bridge -.->|"forwards app updates"| node_mcp_client
node_bridge -.->|"uses protocol types"| node_protocol_types
node_manager -->|"converts and prefixes names"| node_utilities

click node_cli "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/index.ts"
click node_stdio "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/stdio.ts"
click node_http_transport "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/http.ts"
click node_http_sessions "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/http.ts"
click node_bridge "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/McpBridge.ts"
click node_manager "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts"
click node_ipc "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/IpcClient.ts"
click node_discovery "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts"
click node_notifications "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts"
click node_protocol_types "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/types.ts"
click node_utilities "https://github.com/elgatosf/elgato-mcp-server/blob/main/src/utils.ts"

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_cli,node_stdio,node_utilities,node_mcp_client toneBlue
class node_bridge,node_protocol_types toneAmber
class node_manager,node_ipc,node_discovery,node_notifications toneMint
class node_http_transport,node_http_sessions,node_ngrok toneRose
class node_elgato_app toneIndigo
```

## Components

### Server entry

- [CLI entry](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/index.ts): `src/index.ts`
- [stdio transport](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/stdio.ts): `src/transports/stdio.ts`
- [Naming and CLI utilities](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/utils.ts): `src/utils.ts`

### MCP bridge

- [MCP bridge](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/McpBridge.ts): `src/McpBridge.ts`
- [IPC and MCP types](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/types.ts): `src/types.ts`

### App connectivity

- [Client manager](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts): `src/ClientManager.ts`
- [IPC client](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/IpcClient.ts): `src/IpcClient.ts`
- [Tool and resource discovery](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts): `src/ClientManager.ts`
- [App notifications](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/ClientManager.ts): `src/ClientManager.ts`

### HTTP access

- [HTTP transport](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/http.ts): `src/transports/http.ts`
- [HTTP sessions](https://github.com/elgatosf/elgato-mcp-server/blob/main/src/transports/http.ts): `src/transports/http.ts`
- **ngrok tunnel**

### Other components

- **MCP client**
- **Elgato app**

## Connections

- MCP client → stdio transport: uses stdio (evidence: `README.md`)
- MCP client → HTTP transport: sends MCP requests (evidence: `README.md`)
- CLI entry → stdio transport: selects transport (evidence: `src/index.ts`)
- CLI entry → HTTP transport: selects transport (evidence: `src/index.ts`)
- CLI entry → Naming and CLI utilities: parses options (evidence: `src/index.ts`)
- stdio transport → MCP bridge: creates connected bridge (evidence: `src/transports/stdio.ts`)
- HTTP transport → MCP bridge: creates initialized bridge (evidence: `src/transports/http.ts`)
- HTTP transport → HTTP sessions: manages sessions (evidence: `src/transports/http.ts`)
- HTTP transport → ngrok tunnel: opens optional tunnel (evidence: `src/transports/http.ts`)
- MCP bridge → Client manager: delegates app operations (evidence: `src/McpBridge.ts`)
- Client manager → IPC client: creates and calls clients (evidence: `src/ClientManager.ts`)
- IPC client → Elgato app: exchanges IPC messages (evidence: `README.md`)
- Client manager → Tool and resource discovery: refreshes capabilities (evidence: `src/ClientManager.ts`)
- Tool and resource discovery → IPC client: requests tool lists (evidence: `src/ClientManager.ts`)
- Elgato app → App notifications: sends notifications (evidence: `README.md`)
- App notifications → MCP bridge: forwards notifications (evidence: `README.md`)
- MCP bridge → MCP client: forwards app updates (evidence: `README.md`)
- MCP bridge → IPC and MCP types: uses protocol types (evidence: `src/McpBridge.ts`)
- Client manager → Naming and CLI utilities: converts and prefixes names (evidence: `src/ClientManager.ts`)
