Fanout
概览
作者提供的说明(英文原文)
Investigate OpenTelemetry traces, metrics, and logs, and manage personal dashboards.
它能帮你做什么
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
- 连接方式: 在云端运行
- 传输方式: Streamable HTTP
- 分类: 开发者工具
安装
选择你使用的 AI 应用,然后复制设置。
通过 2/2 项检查 · 你的提问会经过开发者的服务器({fanout_host})
第一步:你用哪个 AI?
选择你用的应用,步骤会显示在下方。
可连接 Claude,但需要先准备
地址中有 {…} 部分,需要先改成你自己的 · 在 claude.ai 或桌面应用设置一次,即可在聊天中使用 · 免费账户可添加 1 个
打开 Claude 的 Connectors 页面
CustomizeConnectors
点击“+ Add” → “Add custom connector”,填写这 2 项
把这里的内容复制到 Claude 中同名的输入框,然后点击 Continue
Name · 名称FanoutRemote MCP server URL · 地址https://{fanout_host}/mcpAuthentication 保持 Claude 检测到的设置,然后点击 Add
在聊天中开启
+ConnectorsFanout
试一试
用 Fanout 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude 说正在使用 Fanout,或回答中出现 Fanout 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
仅企业版 ChatGPT 可连接
适用于网页版 ChatGPT Business、Enterprise 或 Edu,需由工作区管理员或所有者添加 · 使用 Free、Plus 或 Pro:你的 ChatGPT 方案暂时无法自行连接 MCP · 地址中有 {…} 部分,需要先改成你自己的
在网页版 ChatGPT 打开添加 MCP 的页面
Plugins+Add custom MCP server
填写名称和地址
输入名称,在 Connection 下粘贴地址,勾选风险提示,然后点击 Create as a plugin
Name · 名称FanoutConnection · 地址https://{fanout_host}/mcp在聊天中选择 Fanout
开启新聊天,输入前先从插件列表中选择 Fanout
试一试
用 Fanout 告诉我你能帮我做什么,然后做一件给我看✓ 如果 ChatGPT 说正在使用 Fanout,或回答中出现 Fanout 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 OpenAI 帮助页面核实 · 你的界面可能因版本略有不同
可连接 Claude Code,但需要先准备
地址中有 {…} 部分,需要先改成你自己的
打开终端
Mac:按 Command+空格,输入 Terminal · Windows:打开 PowerShell
粘贴这条命令并按 Enter
claude mcp add --transport http fanout 'https://{fanout_host}/mcp'在 Claude Code 中输入 /mcp
应能看到 Fanout 在列表中并显示已连接
试一试
用 Fanout 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude Code 说正在使用 Fanout,或回答中出现 Fanout 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
可连接 Cursor,但需要先准备
地址中有 {…} 部分,需要先改成你自己的
打开 Cursor 的 MCP 设置文件
~/.cursor/mcp.json
粘贴这些设置,填写空着的值并保存
{ "mcpServers": { "fanout": { "url": "https://{fanout_host}/mcp" } } }在 Cursor 中以 Agent 模式打开 AI 聊天
试一试
用 Fanout 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Cursor 说正在使用 Fanout,或回答中出现 Fanout 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Cursor 帮助页面核实 · 你的界面可能因版本略有不同
可连接 VS Code,但需要先准备
地址中有 {…} 部分,需要先改成你自己的
打开 VS Code 的 MCP 设置文件
MCP: Open User Configuration
粘贴这些设置,填写空着的值并保存
{ "servers": { "fanout": { "type": "http", "url": "https://{fanout_host}/mcp" } } }在 VS Code 中以 Agent 模式打开 AI 聊天
试一试
用 Fanout 告诉我你能帮我做什么,然后做一件给我看✓ 如果 VS Code 说正在使用 Fanout,或回答中出现 Fanout 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 VS Code 帮助页面核实 · 你的界面可能因版本略有不同
其他支持 MCP 的应用(如 Windsurf、Zed、Gemini CLI)添加方式各不相同,请在应用列表中查看
通过网页连接的应用使用的地址
https://{fanout_host}/mcpJSON 设置在下方“开发者专用”中
开发者专用:终端命令和 JSON 设置
通过网页连接
Claude Code
claude mcp add --transport http fanout 'https://{fanout_host}/mcp'Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"fanout": {
"url": "https://{fanout_host}/mcp"
}
}
}VS Code (mcp.json)
{
"servers": {
"fanout": {
"type": "http",
"url": "https://{fanout_host}/mcp"
}
}
}这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
一览
哪些应用可以使用它
依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。
通过互联网连接,适用于
ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
它能做什么
这个地址需要填入你自己的值,所以我们无法替你读取工具列表。
基础检查i
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月11日
- ✓ 通过
作者与仓库一致
注册名称已通过 GitHub 账户 labstack 验证,该账户拥有此仓库
- ✓ 通过
仍在维护
代码最后更新于前天
- … 尚未检查
有许可证
我们还没有从 GitHub 读取这个仓库
- – 不适用
端点有响应
这个地址需要填入你自己的账户信息,所以我们无法替你检查
- – 不适用
使用 OAuth 登录
这个地址需要填入你自己的账户信息,所以我们无法替你检查
- … 尚未检查
工具描述中没有隐藏指令
尚未检查;我们会在检查端点时读取工具列表
讨论
提问、分享技巧或报告无法使用。按“有帮助”数量排序。
用户评价
还没有评价
与“开发者工具”中的其他服务器比较i
- 星标数多于此分类中其他 5756 个服务器的 95%
- 发布到注册中心的时间比此分类中其他 5756 个服务器的 91% 更新
- 基础检查结果等于或优于此分类中其他 5756 个服务器的 100%
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
常见问题
Fanout 安全吗?
它在 2 项适用的基础检查中通过了 2 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
它需要哪些密钥或代码?
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在我的电脑上运行还是在云端?
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
它还在维护吗?
GitHub 仓库最后更新于前天,最新版本(2026.11.3-alpha)于前天进入注册中心。
哪些应用可以使用它?
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,因此也能用于支持远程 MCP 的应用,例如 ChatGPT Business 及以上方案。
有什么可以替代它?
同一分类中有:REA, Netdata, Front-End Checklist
替代选择
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Netdata
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Front-End Checklist
Review frontend code and live pages against 386 quality-gated web development rules.
作者的 README
打开 README
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Fanout
Observability your agents can operate. Send OpenTelemetry to one binary, then investigate with Fanout's built-in agent or connect your own over MCP.
Fanout keeps OpenTelemetry traces, logs, and metrics in one binary and one data directory, with no external storage services to operate. Fanout is pre-release and changes without migration paths; the browser client, built-in agent, MCP tools, dashboards, and alerts are preview capabilities (status). Start with the documentation or run it below.
- OTLP ingest over gRPC and HTTP, with local Parquet storage and DuckDB analytics.
- An investigation agent that answers questions about your telemetry in plain language.
- An MCP server for external agents using the same typed query tools.
- Dashboards across traces, logs, and metrics, and alerts on service error rate, latency, throughput, and log volume.
Quick start
Docker
docker run --name fanout --restart unless-stopped -p 7520:7520 \
-v fanout-data:/var/lib/fanout/data \ -e FANOUT_AUTH_CODE_SECRET=$(openssl rand -hex 32) \ labstack/fanout:latest
Open the one-time setup URL printed by the container and create the first administrator. Fanout displays the ingest token exactly once; save it with your collector secrets. For later sign-in without SMTP, mint a 15-minute, single-use link against the running container's control database:
docker exec fanout fanout login-link admin@example.com
The UI, API, MCP, and both OTLP transports share port 7520. See installation for image defaults and bind-mount ownership, and first boot for setup and SMTP login.
Native binary
Install a checksum-verified release for Linux or macOS, amd64 or arm64:
curl -fsSL https://raw.githubusercontent.com/labstack/fanout/main/scripts/install.sh | sh
export FANOUT_AUTH_CODE_SECRET=$(openssl rand -hex 32) fanout
Set FANOUT_VERSION to a release tag, such as v2026.10.23-alpha, to pin a release, and FANOUT_PREFIX to choose the installation directory. Native installs bind 127.0.0.1:7520; set FANOUT_ADDR=:7520 for remote access, then follow the same first-boot setup.
Send telemetry
A standard OTLP/HTTP exporter can use the saved ingest token:
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:7520 export OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer%20$INGEST_TOKEN"
For a Collector on the same private container network, the forwarding side is:
exporters:
otlp_http/fanout: endpoint: http://fanout:7520 headers: Authorization: "Bearer ${env:INGEST_TOKEN}"
service: pipelines: traces: { receivers: [otlp], exporters: [otlp_http/fanout] } metrics: { receivers: [otlp], exporters: [otlp_http/fanout] } logs: { receivers: [otlp], exporters: [otlp_http/fanout] }
Use an existing otlp receiver, set INGEST_TOKEN, and replace fanout with the Collector's reachable private hostname. OTLP/gRPC uses localhost:7520 locally; see send telemetry for TLS and HTTP/2 setup.
Enable chat
Select FANOUT_AI_PROVIDER=anthropic and inject ANTHROPIC_API_KEY, or select FANOUT_AI_PROVIDER=openai and inject OPENAI_API_KEY, then restart Fanout; the selected provider requires its key at startup. With no provider, chat is disabled and the other features still work. See AI settings.
Connect an MCP client
Set FANOUT_PUBLIC_URL to your stable, externally reachable HTTPS origin, then point a remote MCP client at that origin's /mcp endpoint. The client discovers and registers through OAuth; you authorize its scopes in the browser. Fanout serves MCP 2026-07-28 and, through the initialize handshake, 2025-11-25 and 2025-06-18 over Streamable HTTP. See connect over MCP for setup and permissions.
How it compares
| If you use | Where Fanout differs |
|---|---|
| Grafana with Loki, Tempo, and Mimir | That stack keeps a service and a query language per signal, plus object storage underneath. Fanout keeps one process, one data directory, and one typed contract across all three signals, at the cost of the horizontal scale those components are built for. |
| SigNoz | Both are OTLP-native and self-hosted. SigNoz composes a collector, ClickHouse, and query services; Fanout compiles ingest, authoritative Parquet storage, indexed trace reads, DuckDB analytics, alerting, and the browser client into one binary. |
| Jaeger | Jaeger covers traces and expects a storage backend you run separately. Fanout ingests traces, logs, and metrics into the same store, with nothing else to deploy. |
| Prometheus with Grafana | Prometheus pulls metrics and is excellent at them. Fanout accepts pushed OTLP for all three signals and is built around investigating a specific incident rather than maintaining long-range metric series. |
| Datadog, Honeycomb, Grafana Cloud | Those are managed services: someone else runs the storage, the scaling, and the upgrades, and your telemetry leaves your network to get there. Fanout is a binary you run, on data that stays on your disk. |
| An OpenTelemetry Collector piped into ClickHouse | The same shape, assembled by hand: collector, database, dashboards, and the glue between them. Fanout is that assembly as one program, with an agent and an MCP server already wired to the same query contract. |
Fanout is a single node. It has no clustering, no replication, and no object tier; a deployment that outgrows one machine's disk and CPU has outgrown Fanout.
Architecture
One process contains ingest, storage, query, alerts, the agent, MCP, and the React client. Browser and agent clients share a typed observability contract.
Parquet holds telemetry, DuckDB query state is rebuildable, and SQLite holds transactional product state. See how storage works for durable ingest, indexed reads, and compaction while reads continue.
Configuration
Configuration is environment-only: built-in defaults followed by nonempty process environment values, validated before data files or listeners open. Settings are read once at startup; every change requires a restart.
| Environment variable | Default | Purpose |
|---|---|---|
FANOUT_ADDR | 127.0.0.1:7520 | UI, API, MCP, and both OTLP transports |
FANOUT_DATA_DIR | ./data | Parquet, query state, and control SQLite |
FANOUT_AUTH_MODE | local | Login link or SMTP, or oidc |
FANOUT_AUTH_CODE_SECRET | — | Required in local mode, 32+ characters |
FANOUT_AI_PROVIDER | — | Empty disables chat; anthropic or openai enables it |
ANTHROPIC_API_KEY | — | Required for Anthropic chat |
OPENAI_API_KEY | — | Required for OpenAI chat |
FANOUT_RETENTION_DAYS | 30 | Telemetry retention window |
FANOUT_MCP_ENABLED | true | Serve the MCP endpoint at /mcp |
Every secret accepts _FILE instead of its value; see the settings reference for validation and runtime secret delivery for deployment examples.
Advanced DuckDB sizing
Fanout sizes DuckDB automatically; measured workloads can override memory, connections, and threads as described in DuckDB sizing.
For TLS, health checks, backups, upgrades, retention, and recovery, see the operator runbook.
Performance
Fanout v2026.10.8-alpha accepted 415,859 mixed OpenTelemetry items/s over 303.5 seconds on a Hetzner Cloud ccx33 (8 dedicated vCPUs, 32 GB RAM), with telemetrygen on a separate ccx33. The ingest run on 16 October 2026 passed every quality gate. See the performance methodology. Fanout Bench reproduces the measurement on your hardware.
Build from source
- Go 1.27.3 and a C/C++ toolchain on native Linux or macOS, amd64 or arm64. Build with
just buildorbash scripts/with-duckdb.sh go build ./cmd/fanout; the wrapper supplies DuckDB's pinned headers, static libraries, and CGO flags. The first build needs network access to download the checksum-verified engine. - [Bun](https://bun.sh) — compiles the browser assets
- Node.js 24.19.0 — runs development helpers and builds the documentation site
- [just](https://just.systems) — task runner
- A 32-character authentication code secret
git clone https://github.com/labstack/fanout.git
cd fanout just install # browser dependencies and git hooks just build # browser assets, then the binary
Run it with the minimum configuration:
export FANOUT_AUTH_CODE_SECRET=$(openssl rand -hex 32) # must be 32+ characters
./bin/fanout
Open http://localhost:7520 and follow first-boot setup. SMTP and chat are optional; without SMTP, run ./bin/fanout login-link admin@example.com with the same configuration and data directory.
Development
Run just to list recipes, just check for the full gate, just test for Go tests, and just ui to rebuild embedded browser assets. See CONTRIBUTING.md for environment setup, generated assets, hooks, and project layout.
Releases
Versions are CalVer — vYYYY.M.N[-alpha|-beta|-rc], numbered from 0 within each month across all maturity suffixes. Fanout is alpha (for example, v2026.10.23-alpha); GA has no suffix. Container tags omit the leading v, and every release moves latest. Tagged releases publish identical manifests to Docker Hub (labstack/fanout) and GHCR (ghcr.io/labstack/fanout); GHCR is canonical and also carries development images.
| Image tag | Points at |
|---|---|
labstack/fanout:latest | the newest release, mirrored on Docker Hub |
labstack/fanout:2026.10.23-alpha | that exact release, mirrored on Docker Hub |
ghcr.io/labstack/fanout:latest | the newest release |
ghcr.io/labstack/fanout:2026.10.23-alpha | that exact release |
ghcr.io/labstack/fanout:main | the tip of main |
ghcr.io/labstack/fanout:sha- | one specific commit |
See docs/release.md for platforms, checksums, provenance, and verification.