Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Agentic Data Stack

The open-source stack for ClickHouse's suite of agentic analytic tools — your chat, your models, your data.
Powered by ClickHouse, LibreChat, and Langfuse.

Learn more at clickhouse.ai

Overview

This project runs a fully self-hosted agentic analytics environment with Docker Compose. It connects a chat UI (LibreChat) to your data (ClickHouse) via MCP, with full LLM observability (Langfuse) — all in a single docker compose up command.

What's included

ComponentPurposePort
LibreChatModern Chat UI with multi-model / provider support (OpenAI, Anthropic, Google)3080
Admin PanelBrowser-based configuration UI for LibreChat3081
ClickHouse MCPMCP server that gives agents access to ClickHouse8000
LangfuseLLM observability — traces, evals, prompt management3000
ClickHouseWorld's fastest analytical database8123
PostgreSQLTransactional database for Langfuse5432
MongoDBTransactional database for LibreChat27017
MinIOS3-compatible object storage9090
RedisCaching and queue6379
MeilisearchFull-text search for LibreChat7700
pgvectorVector database for RAG5433
RAG APIRetrieval-augmented generation service for LibreChat8001

Quick Start

Prerequisites

1. Prepare the environment

./scripts/prepare-demo.sh

This is your fastest way to get started with the Agentic Data Stack. It generates a .env file with random credentials for all services, then presents an interactive menu to optionally configure API keys for OpenAI, Anthropic, and/or Google. Any providers you skip will remain as user_provided, letting users enter their own keys in the LibreChat UI.

You can also generate credentials separately and customize the initial administrator account credentials:

USER_EMAIL="you@example.com" USER_PASSWORD="supersecret" USER_NAME="YourName" ./scripts/generate-env.sh

Learn more about configuring your LibreChat instance at https://librechat.ai/docs.

Note: To use LibreChat's file search / RAG features, the RAG API needs a real API key for embeddings — user_provided won't work because the RAG API calls the embeddings endpoint directly. If OPENAI_API_KEY is set to user_provided, set RAG_OPENAI_API_KEY to a valid OpenAI key (it overrides OPENAI_API_KEY for RAG only). You can also switch embedding providers via EMBEDDINGS_PROVIDER (openai, azure, huggingface, huggingfacetei, ollama). See the RAG API docs for details.

2. Start the stack

docker compose up -d

3. Access the services

An admin user is created automatically on first startup using the credentials from your .env file.

Architecture

Architecture

LibreChat connects to ClickHouse through the MCP server, allowing AI agents to query and analyze your data. All LLM interactions are traced in Langfuse for observability, evaluation, and prompt management. The Admin Panel provides a browser-based UI for LibreChat configuration without editing librechat.yaml by hand.

Scripts

ScriptDescription
scripts/prepare-demo.shGenerate .env and interactively configure API keys
scripts/generate-env.shGenerate .env with random credentials
scripts/reset-all.shStop all containers and wipe all data/volumes
scripts/create-librechat-user.shManually create a LibreChat admin user
scripts/init-librechat-user.shAuto-init user on container startup (used internally)

Configuration

  • LibreChatlibrechat.yaml configures endpoints, MCP servers, and agent capabilities. The Admin Panel (http://localhost:3081) offers a browser-based alternative for most of these settings.
  • Environment.env holds all credentials and service configuration (see .env.example for reference).
  • Dockerdocker-compose.yml includes the four compose files:
    • langfuse-compose.yml — Langfuse, ClickHouse, PostgreSQL, Redis, MinIO
    • clickhouse-mcp-compose.yml — ClickHouse MCP server
    • librechat-compose.yml — LibreChat, MongoDB, Meilisearch, pgvector, RAG API
    • admin-panel-compose.yml — LibreChat Admin Panel

Reset Everything

To tear down all containers and delete all data:

./scripts/reset-all.sh

Then set up again and start fresh:

./scripts/prepare-demo.sh
docker compose up -d

Links

About

Official ClickHouse Agentic Data Stack - self-host with ClickHouse, LibreChat, Langfuse, and ClickHouse MCP.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages