beacon-mcp
The beacon-mcp server exposes the beacon log analytics platform's REST API as MCP tools and resources, enabling AI agents to query and analyze AI-assistant usage data. Capabilities include:
Organization & Configuration
list_organizations— Discover all available beacon organizations/tenantshealth_check— Verify API reachability and org healthget_config— Read public dashboard configuration (model pricing, session thresholds)
Dashboard Access
get_dashboard— Fetch the full dashboard payload or a specific sub-section (metrics,activity,traffic,distributions,sessions,projects) with filters by date range, user, model, project, and event status
Usage Summaries (5 dimensions)
query_project_summary— Daily token/event rollup by projectquery_language_summary— Daily rollup by programming language (from session detection)query_prompt_style_summary— Daily rollup by prompt style/classificationquery_employee_hourly_summary— Per-user, per-hour usage broken down by tool and modelquery_session_summary— Per-session rollup identifying heaviest sessions
Raw Events & Session Drilldown
query_events— Query raw events with flexible filters and pagination (up to 500 rows, or all rows)get_session_events— Fetch the complete event chain for a single session (prompts, token usage, errors, model)
Cacheable Resources: Static URIs beacon://orgs, beacon://config, and beacon://dashboard for client-side caching.
Additional Features
Most tools support common filters:
org,from/to,project,model,user, andstatus(errors_only/success_only)Flexible transport: stdio (default, for local agents like Claude Desktop/Cursor) or HTTP+SSE (
--http, for remote agents)Strong typing via Zod validation at the protocol boundary
Dual output: each tool returns both a Markdown summary and raw JSON payload
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@beacon-mcp show the dashboard summary for this month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
beacon-mcp
MCP server for the beacon log analytics platform.
Exposes beacon's REST API as Model Context Protocol tools and resources, so any MCP-compatible AI agent (Claude Desktop, Cursor, Cline, Continue, VS Code) can query and analyse AI-assistant usage data through a typed, validated interface.
The MCP server is a thin client over beacon's existing /api/v1 endpoints — it does not duplicate SQL, Parquet, or storage logic. It can run standalone, or be launched lazily by the beacon Go API and exposed through /api/v1/mcp.
Features
11 tools covering organisation discovery, health checks, configuration, full dashboard, dashboard sub-sections, 5 summary dimensions, raw event query, and per-session event chain.
3 resources (
beacon://orgs,beacon://config,beacon://dashboard) for context that should be cached client-side.Two transports: stdio (default) for Claude Desktop / Cursor / Cline, HTTP+SSE (
--http) for remote agents.Strict types & validation via Zod — every argument is checked at the protocol boundary.
Unified filter arguments:
org,from,to,project,model,user,status.Smart summaries: each tool returns a Markdown summary plus the raw JSON payload, so LLMs can both skim and re-parse.
API integration: works against the public
/api/v1API and can be proxied by the beacon Go backend at/api/v1/mcp; auth viaBEACON_API_KEYif you front beacon with a reverse proxy.
Related MCP server: CUT Clarity MCP Server
Quick start
Option A — npx (recommended, no install)
Run directly with npx from a beacon checkout or any directory:
BEACON_BASE_URL=http://127.0.0.1:8080 \
BEACON_ORG=default \
npx -y @beacon/mcp-serverThe -y flag auto-confirms the install prompt. The first invocation downloads the package (~22 kB) and starts the stdio transport immediately. Subsequent invocations are instant.
Option B — npm install (long-lived install)
npm install -g @beacon/mcp-server
# or, locally inside a project:
npm install @beacon/mcp-serverThen run with the beacon-mcp binary:
BEACON_BASE_URL=http://127.0.0.1:8080 \
BEACON_ORG=default \
beacon-mcpOption C — from source (for development)
git clone https://github.com/HyperBDR/beacon-mcp.git
cd beacon-mcp
npm install
npm run dev # stdio, with tsx — no build step
npm run dev:http # HTTP+SSE on $MCP_HTTP_PORT (default 8765)npm install is only required for development. End users never compile anything — the published package ships pre-built dist/.
Running modes
Command | What it does | When to use |
| stdio transport (JSON-RPC over stdin/stdout) | Claude Desktop / Cursor / Cline / VS Code / Continue |
| HTTP+SSE transport | Remote agents or browser-based MCP clients |
| Print CLI usage and exit | Sanity check |
| stdio via | Developing the server itself |
| HTTP+SSE via | Developing the server itself |
| Production stdio from compiled | Verifying the published binary locally |
CLI flags:
--http Run HTTP+SSE transport (default: stdio)
--host <addr> HTTP host (default: 127.0.0.1 or $MCP_HTTP_HOST)
--port <number> HTTP port (default: 8765 or $MCP_HTTP_PORT)
--help, -h Show this helpConfiguration
All settings come from environment variables. See .env.example for the full list.
Variable | Default | Description |
|
| Beacon REST API base URL |
|
| Default organisation ID; tools can override per-call via the |
|
| Per-request timeout in milliseconds |
| (unset) | Optional bearer token (sent as |
| (unset) | Optional HTTP proxy for requests to |
|
| HTTP transport host (only with |
|
| HTTP transport port (only with |
Client configuration
Below are the most common client integrations. After editing the config, fully restart the client (Claude Desktop, Cursor) so it picks up the new MCP server.
Claude Desktop
Config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
npx version (recommended, no global install):
{
"mcpServers": {
"beacon": {
"command": "npx",
"args": ["-y", "@beacon/mcp-server"],
"env": {
"BEACON_BASE_URL": "http://127.0.0.1:8080",
"BEACON_ORG": "default"
}
}
}
}Globally installed version:
{
"mcpServers": {
"beacon": {
"command": "beacon-mcp",
"args": [],
"env": {
"BEACON_BASE_URL": "http://127.0.0.1:8080",
"BEACON_ORG": "default"
}
}
}
}Development version (from a beacon-mcp source checkout, with npm install already run):
{
"mcpServers": {
"beacon-dev": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/beacon-mcp/src/index.ts"],
"env": {
"BEACON_BASE_URL": "http://127.0.0.1:8080",
"BEACON_ORG": "default"
}
}
}
}Cursor
Settings → MCP → Add new global MCP server. Same JSON shape as Claude Desktop (the mcpServers map is the standard).
A typical ~/.cursor/mcp.json:
{
"mcpServers": {
"beacon": {
"command": "npx",
"args": ["-y", "@beacon/mcp-server"],
"env": {
"BEACON_BASE_URL": "http://127.0.0.1:8080",
"BEACON_ORG": "default"
}
}
}
}Cline (VS Code)
Open the Cline panel → MCP Servers → "Configure MCP Servers". Same JSON shape.
Continue (VS Code JetBrains)
Add to ~/.continue/config.json under experimental.modelContextProtocolServers:
[
{
"name": "beacon",
"command": "npx",
"args": ["-y", "@beacon/mcp-server"],
"env": {
"BEACON_BASE_URL": "http://127.0.0.1:8080",
"BEACON_ORG": "default"
}
}
]Remote agents (HTTP+SSE)
After npx -y @beacon/mcp-server --http --host 0.0.0.0 --port 8765, the endpoint is:
http://<host>:8765/mcpUse any MCP HTTP client (the SDK ships Python/TS/Go/Kotlin clients). CORS is open by default — set up a reverse proxy with auth in production.
The server is a long-running process. Common deployment patterns:
# systemd unit
[Service]
ExecStart=/usr/bin/env npx -y @beacon/mcp-server --http --host 0.0.0.0 --port 8765
Environment=BEACON_BASE_URL=http://beacon.internal:8080
Environment=BEACON_ORG=production
Restart=always# docker-compose snippet
beacon-mcp:
image: node:22-alpine
command: ["npx", "-y", "@beacon/mcp-server", "--http", "--host", "0.0.0.0", "--port", "8765"]
environment:
BEACON_BASE_URL: http://beacon:8080
BEACON_ORG: production
ports:
- "8765:8765"
restart: unless-stoppedTool reference
Org & config
Tool | Description |
| List all beacon orgs available via the configured API. |
| Probe |
| Read public dashboard config (model pricing, min session event count). |
Dashboard
Tool | Description |
| Fetch the full dashboard payload, or a single sub-section ( |
Summary (5 dimensions)
Tool | Description |
| Daily per-project token/event rollup. |
| Daily per-language rollup (from session detection). |
| Daily per-prompt-style rollup. |
| Per-user, per-hour breakdown by tool and model. |
| Per-session rollup (heaviest sessions, models, timestamps). |
Events & sessions
Tool | Description |
| Raw event query with |
| Fetch the full event chain for a single session, given |
Common arguments
Almost every tool accepts:
org— organisation ID; falls back to$BEACON_ORG.from/to—YYYY-MM-DD(inclusive).project— exact project name, or"all"to disable.model— substring match, or"all".user— substring match againstsource_user_nameorsource_user_id.status—"errors_only"or"success_only".
query_events additionally accepts limit (1-500, default 100) and all (boolean).
Resources
URI | Description |
| List of organisations (cacheable). |
| Default org's dashboard config. |
| Full default-org dashboard payload. |
For per-org resources, call the get_config / get_dashboard tools with the org argument.
Output format
Every tool returns a single MCP content block with a Markdown summary followed by a fenced JSON payload. Example:
## Summary
### Overview
- Events: **12,480** (requests: 9,201, sessions: 318)
- Tokens: **42.1M** (prompt 30.5M + completion 11.6M)
- ...
### Top projects
| Project | Tokens | Events | Requests | Share |
| --- | --- | --- | --- | --- |
| beacon | 18,205,440 | 4,820 | 3,612 | 43.2% |
| ... |
## Data (JSON)
```json
{ "code": 0, "message": "success", "data": [...], "meta": {...} }
This dual format lets the model either skim the Markdown (low token cost) or re-parse the JSON (precise). Errors are returned as `isError: true` with a plain-text message.
---
## Troubleshooting
### "Failed to connect to 127.0.0.1 port 8080"
The beacon API isn't running, or `BEACON_BASE_URL` is wrong.
```bash
curl $BEACON_BASE_URL/api/v1/health
# expected: {"code":0,"message":"success","data":{"status":"ok","time":"..."}}"organization "X" not found"
$BEACON_ORG (or the org argument) is not registered in the beacon API. Run list_organizations first to see what's available.
"context deadline exceeded"
BEACON_TIMEOUT_MS is too low for the query. Try increasing it (default 30s) or narrowing the date range / using section on get_dashboard.
Claude Desktop: "MCP server disconnected"
Check the config file path is correct.
Run the command from a terminal first to surface any error output:
npx -y @beacon/mcp-serverFully quit and re-open Claude Desktop (config changes do not hot-reload).
On macOS, look at the Claude Desktop log:
~/Library/Logs/Claude/mcp*.log.
HTTP+SSE: CORS or 401 errors
The server ships with CORS wide open for browser clients. If you front it with nginx/traefik, configure Authorization: Bearer $BEACON_API_KEY forwarding at the proxy. The MCP SDK does not enforce auth itself — protect the endpoint with a reverse-proxy in production.
Behind a corporate proxy
Set BEACON_PROXY to route beacon traffic through the proxy. This affects
only the MCP server → beacon direction (not the MCP client ↔ MCP server
transport). The agent that runs the MCP client (Claude Desktop, Cursor,
etc.) is unaffected.
{
"mcpServers": {
"beacon": {
"command": "npx",
"args": ["-y", "@beacon/mcp-server"],
"env": {
"BEACON_BASE_URL": "http://beacon.internal:8080",
"BEACON_ORG": "default",
"BEACON_PROXY": "http://proxy.corp.local:8080"
}
}
}
}Supported schemes: http://, https://, socks5://. The socks5:// form
requires Node 18+ which uses undici 5+ under the hood. If the proxy
requires authentication, embed it in the URL: http://user:pass@host:port.
To verify the proxy is being used, tail the beacon server's access log while invoking any tool — requests will arrive from the proxy's IP, not the agent host.
Beacon is reachable but everything is empty
Check that the collector + analyzer pipelines have run. Raw events need to be aggregated by the analyzer before the summary endpoints return data. Run go run ./cmd/analyzer -config testdata/collector.yaml (in the beacon repo) periodically.
Development
npm install
npm run typecheck # tsc --noEmit
npm test # vitest run
npm run build # tsc → dist/ (mirrors what `npm publish` will do via the `prepare` script)Watch mode for tests:
npm run test:watchLayout
src/
index.ts # entry point, CLI parsing, transport selection
server.ts # McpServer construction; registers all tool modules
client.ts # BeaconClient — typed wrapper over beacon's REST API
config.ts # env + CLI arg parsing (zod-validated)
filters.ts # shared zod schemas (BaseFilter, EventFilter, SessionKey)
formatting.ts # JSON block + Markdown summary helpers
tools/
orgs.ts # list_organizations, health_check, get_config + resources
dashboard.ts # get_dashboard + beacon://dashboard
summary.ts # 5 query_*_summary tools
events.ts # query_events
session.ts # get_session_events
tests/
setup.ts # vitest setup
client.test.ts # BeaconClient unit tests
config.test.ts # config + CLI parsing tests
tools.test.ts # end-to-end tool tests over an in-memory MCP transportAdding a new tool
Pick or create a file under
src/tools/.Write a
registerXxxTools(server: McpServer, client: BeaconClient): voidfunction.Use the shared zod schemas in
filters.tsfor inputs.Format output with
resultBlocks(summary, payload)fromformatting.ts.Wire the registration into
server.ts.Add a test in
tests/tools.test.tsthat mocks the beacon response withmsw.
Publish flow
# Bump version
npm version patch # or minor / major
# Publish (the `prepare` script auto-runs `tsc` before upload)
npm login
npm publish --access publicThe published tarball contains only dist/, README.md, LICENSE, and package.json (controlled by package.json#files and .npmignore).
License
MIT — see LICENSE.
Available Tools
11 toolsget_configA
Read the public beacon configuration for an org (min session event count, model pricing).
Inputs: org.
get_dashboardA
Fetch the beacon dashboard payload (or a single sub-section) for the given date range. Returns metrics, activity, traffic, prompt/distribution breakdowns, and the top projects/sessions.
Inputs: org, from, to, project, +4 more.
get_session_eventsA
Fetch the full event chain for a single session (compact prompt previews, token usage, errors, model). Use after query_session_summary to drill into the heaviest sessions.
Inputs: user (required), session_id (required), project (required), org.
health_checkA
Check whether the beacon API is reachable and the (optional) org is healthy.
Inputs: org.
list_organizationsA
List all beacon organizations (tenants) available via the configured beacon API. Call this first if you don't know which org to query.
Inputs: no named parameters.
query_employee_hourly_summaryA
Per-user, per-hour usage broken down by tool and model. Use to find power users, peak hours, and per-model consumption.
Inputs: org, from, to, project, +3 more.
query_eventsA
Raw event query with date range, project/model/status/user filters and pagination. Use for inspecting individual events (errors, specific users, model behaviour, prompt previews). By default returns up to 100 rows; pass all: true to disable the limit (use sparingly).
Inputs: org, from, to, project, +5 more.
query_language_summaryA
Daily rollup per programming language (from session language detection). Use to identify which languages AI assistants are most often working in.
Inputs: org, from, to, project, +3 more.
query_project_summaryA
Daily rollup per project: event/request counts and token usage. Use for 'which project uses the most tokens this week' questions.
Inputs: org, from, to, project, +3 more.
query_prompt_style_summaryA
Daily rollup per prompt style (rule-classified). Useful for understanding how users phrase their requests.
Inputs: org, from, to, project, +3 more.
query_session_summaryA
Per-session rollup: which sessions used the most tokens, their models, timestamps, etc. Use to find the heaviest sessions before drilling in with get_session_events.
Inputs: org, from, to, project, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Each tool targets a distinct aspect of the beacon API: configuration, dashboards, session details, health, organizations, and various summaries (employee, events, language, project, prompt style, sessions). There is no overlap in purpose.
Most tools follow a consistent verb_prefix pattern: get_ for specific fetches, list_ for listings, query_ for summaries. However, health_check deviates from the pattern, and get_session_events vs query_session_summary have similar domains with different prefixes.
11 tools is well-scoped for an analytics server. It covers essential operations (config, health, org listing, session detail, and multiple summary queries) without being excessive.
The tool set appears complete for read-only analytics: it covers configuration, health, organization selection, raw events with pagination, and various rollups. Missing create/update/delete tools, but those are likely out of scope for an analytics API.
Maintenance
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Analytics for MCP servers. Query your tool calls, first-call success, retries and schema cost.
MCP server for Sentry - error monitoring, issue tracking, and debugging for AI assistants
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP-compatible server that enables AI assistants to interact with Lightdash analytics data, providing tools to list and retrieve projects, spaces, charts, dashboards, and metrics through a standardized interface.1365 npm27MIT
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server exposing Microsoft Clarity analytics data as tools for ChatGPT Agent Builder.-
- AlicenseAqualityBmaintenanceA read-only MCP server that exposes local coding-agent session logs as three tools for introspection of recent work, debugging tool failures, and tracking token usage and estimated cost without parsing log files.3MIT

@verlon-ai/mcpofficial
AlicenseAqualityCmaintenanceModel Context Protocol server for Verlon AI that exposes gates, logs, recommendations, and experiments as MCP tools, enabling coding agents to inspect and manage AI infrastructure natively.578 npmMIT