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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

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 and the Agentic Data Stack blog.

One Click Deploy

Want to skip the setup and jump straight into adding agentic analytics into your workflow? Choose a Railway template below to spin up a preconfigured instance of the Agentic Data Stack in the cloud.

Langfuse OSS
Langfuse Cloud
Deploy on RailwayDeploy on Railway (Langfuse Cloud)

More details available in the Deploy on Railway section.

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

Deploy on Railway

One-click deploy of two "Lite" variants of the stack:

  • Langfuse OSS — Deploys LibreChat, the Admin Panel, Langfuse v3, and a ClickHouse MCP server pre-configured against the public ClickHouse demo cluster.
  • Langfuse Cloud — Deploys LibreChat, the Admin Panel, and ClickHouse MCP, and is pre-configured to send traces to your existing Langfuse Cloud (or other remote Langfuse) project.

Both Railway templates skip Meilisearch, pgvector, and the RAG API for simplicity. The ClickHouse MCP server ships pointed at sql-clickhouse.clickhouse.com so you can chat with the public demo data immediately; the ClickHouse Cloud MCP is also wired up if you want to OAuth into your own Cloud account post-deploy. Prefer to self-host? See Quick Start below.

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.

The script then asks whether LibreChat should send its Langfuse traces to the local Langfuse container (the default) or to a remote Langfuse project. Choose the cloud option to point LibreChat at Langfuse Cloud (or any self-hosted Langfuse) by entering the base URL, public key, and secret key for that project. You can change this later by editing LANGFUSE_BASE_URL, LANGFUSE_PUBLIC_KEY, and LANGFUSE_SECRET_KEY in .env.

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

98 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages