使用说明
mcp-seq-otlp
Standalone MCP server that gives AI agents controlled API access to a user-owned Datalust Seq instance.
Official Seq API Docs
- Official Seq HTTP API usage guide: Using the HTTP API
What This Service Assumes
- You already run/manage your own Seq instance.
- This service only needs connection settings.
Required configuration:
SEQ_URLSEQ_API_KEY
URL Support
SEQ_URL accepts either:
- Host URL (recommended; service will append
/api):http://localhost:10150https://seq.example.com
- Full API base URL (also supported):
http://localhost:10150/apihttps://seq.example.com/api
Available MCP Tools
seq_agent_guide: returns agent-focused tool selection rules, recommended workflows, examples, and safety limits.seq_connection_test: validates Seq connectivity and API reachability, and reports the resolved root/healthURL used for the check.seq_starter_help: lists the compact starter alias tools.seq_starter_overview: quick health, user, diagnostics, signals, and workspace summary.seq_starter_events_search: common event search by filter/signal/time range.seq_starter_event_by_id: fetch one event by id.seq_starter_data_query: run aqquery usingGETorPOST.seq_starter_signals_list/seq_starter_signal_by_id: signal discovery helpers.seq_starter_dashboards_list: list dashboards.seq_starter_alerts_list: list alerts.seq_starter_events_stream: bounded live-tail style stream call.seq_api_catalog: returns the full official Seq route/verb/permission catalog.seq_api_live_links: discovers livename -> routelinks from your Seq instance.seq_api_request: generic verb/path invoker for official cataloged Seq API routes.seq_server_ttl: report remaining idle lifetime without resetting the timer.seq_server_keep_alive: reset the idle timer without contacting Seq.seq_<verb>_<route>: auto-generated tool per official route+verb (from docs).
Scope note:
seq_starter_*tools are focused on common read workflows.seq_api_requestandseq_<verb>_<route>expose the broader HTTP API surface from the Seq endpoint catalog, including non-GETroutes.- Generic requests are constrained to official route templates, with bounded query/path maps and request/response size limits to reduce accidental high-cost calls.
Agent Usage Process
AI agents should follow this sequence for reliable use:
- Start with
seq_agent_guideto get the current workflow guidance and example calls. - Use
seq_connection_testif the target Seq instance, API key, or URL shape may be wrong. - Use
seq_starter_overviewto understand the current user, diagnostics status, and visible signals/workspaces. - Prefer
seq_starter_events_search,seq_starter_data_query, and otherseq_starter_*tools for common read workflows. - For advanced API access, call
seq_api_catalogfirst, then callseq_api_requestwith the exact official route template.
Short examples:
{
"tool": "seq_starter_events_search",
"arguments": {
"filter": "@Level = 'Error'",
"count": 50,
"render": true
}
}
{
"tool": "seq_api_request",
"arguments": {
"method": "GET",
"path": "api/events/{id}",
"pathParams": {
"id": "event-123"
},
"query": {
"render": "true"
}
}
}
Detailed agent workflow guide:
Seq API Key Permissions
Use least privilege based on the exact tools/workflows your MCP client will call.
Authoritative Datalust references:
- API keys and permission model: Datalust API Keys
- HTTP API usage guide: Using the HTTP API
- Server endpoint + permission table: Server HTTP API
Recommended permission profiles:
- Read-focused starter usage (
seq_starter_*,seq_connection_test, read-only queries): enableRead; disableIngest,Write,Project,Organization,System. - Full route-surface usage (
seq_api_requestandseq_<verb>_<route>): required permissions depend on the specific route+verb; checkseq_api_catalogor the official endpoint table before granting.
Permission guidance for this project:
| Permission | Needed now | Why |
|---|---|---|
Read |
Yes | Required by starter query/retrieval workflows. |
Ingest |
Usually No | Needed only when calling ingestion routes such as ingest/* or api/events/raw when API-key-for-writing is required. |
Write |
Maybe | Needed for write routes (for example signals, dashboards, alerts, permalinks, SQL queries). |
Project |
Maybe | Needed for project-scoped administration and some settings/index routes. |
Organization |
Maybe | Needed for organization/user-management routes. |
System |
Maybe | Needed for system administration routes (for example apps, feeds, backups, updates). |
Starter endpoint mapping in current implementation:
GET /health: public endpoint.GET /api/events/resources: public endpoint.GET /api/events:Readpermission demand.GET /api/events/{id}:Readpermission demand.GET /api/data:Readpermission demand.
API Key Header
The server authenticates to Seq using the X-Seq-ApiKey header.
Resilience and Permission Handling
Tool failures are returned as structured MCP error responses (isError: true) instead of crashing the server process.
Current graceful handling includes:
401 Unauthorized: returns guidance to verifySEQ_API_KEYandSEQ_URL.403 Forbidden: returns a permission-denied response with route-derived permission hints when available.- Network/timeout failures: returns connectivity diagnostics for AI clients.
- Oversized requests/responses: returns actionable limit errors instead of exhausting the server process.
- Binary responses: returns structured metadata with base64 payloads for non-text endpoints such as icon routes.
Health check behavior:
seq_connection_testalways probes the Seq host root at/health.- If
SEQ_URLis configured as eitherhttp://host:portorhttp://host:port/api, the health check resolves tohttp://host:port/health.
Local Run (Node)
Use Node.js v24.21.0 LTS and npm 12.2.0 (see .nvmrc and package.json).
Install the pinned npm version after selecting Node.js:
npm install --global npm@12.2.0
npm ci
npm run build
npm test
npm audit
The Docker build and CI use the same npm version. Both Docker stages pin the Node.js 24.21.0 / Alpine 3.24 image by digest for reproducible builds.
Windows PowerShell:
$env:SEQ_URL = "http://localhost:10150"
$env:SEQ_API_KEY = "your-key"
node dist/index.js
Docker Standalone Run
Docker Hub documentation assets in this repo:
- Auto-sync source for Hub long description:
.dockerhub-readme.md - Main project reference:
README.md
Build image and refresh local MCP catalog artifacts:
./build-docker-image.sh
Run via Docker Compose (recommended for MCP stdio):
PowerShell:
./scripts/run-mcp-compose.ps1 -SeqUrl "http://localhost:10150" -SeqApiKey "<YOUR_SEQ_API_KEY>" -Build
Bash:
./scripts/run-mcp-compose.sh --seq-url "http://localhost:10150" --seq-api-key "<YOUR_SEQ_API_KEY>" --build
Compose run behavior:
- Value precedence is: explicit script args -> existing environment variables ->
.env. - If the target
.envis missing, scripts create a generic template.envautomatically. - When that generated generic template is in use, ensure
SEQ_URLandSEQ_API_KEYare resolved via script args, existing environment variables, or a populated.envfile. MCP_IMAGE_TAGis optional; when empty, Compose uses an untagged image reference (mcp/seq-otlp).- Scripts check image availability through compose service metadata and auto-build if the selected tag is not available.
- By default, no container name is specified, so Docker auto-generates a random name.
- You can override container name with
-ContainerName(PowerShell) or--container-name(Bash). - For security, prefer setting
SEQ_API_KEYvia environment variables or.envinstead of CLI args.
Or use helper scripts:
PowerShell:
./build-docker-image.ps1
Bash:
./build-docker-image.sh
Script intent:
./build-docker-image.sh: generates Docker MCP Toolkit manifests, builds and validates the Docker image, and refreshes the local Docker MCP catalog when Docker MCP is available../build-docker-image.ps1: generates Docker MCP Toolkit manifests, builds and validates the Docker image, and refreshes the local Docker MCP catalog when Docker MCP is available../scripts/run-mcp-compose.sh: runs the MCP server through Docker Compose for stdio use; it can build if needed, but its primary job is to run the container.
Default build behavior:
- When you run the build script without
--tagor-Tag, it builds the named imagemcp/seq-otlp, which Docker treats asmcp/seq-otlp:latest. - If you want a different reusable image such as
mcp/seq-otlp:v0.4.1, pass an explicit tag. --latest-tagor-LatestTagremains optional and adds an additional tag alongside the primary image tag.- To skip local Docker MCP catalog refresh, pass
-SkipDockerMcpCatalogInstallin PowerShell or--skip-docker-mcp-catalog-installin Bash.
Build and push to registry (pullable by other Docker hosts):
PowerShell:
./build-docker-image.ps1 -Registry ghcr.io/mclifeleader -Tag v0.4.1 -Push
Bash:
./build-docker-image.sh --registry ghcr.io/mclifeleader --tag v0.4.1 --push
By default, the build scripts do not apply an additional tag. If you want one, pass it explicitly with PowerShell -LatestTag <tag> or Bash --latest-tag <tag>.
Build and export tar (loadable with docker load):
PowerShell:
./build-docker-image.ps1 -SaveTar ./mcp-seq-otlp.tar
Bash:
./build-docker-image.sh --save-tar ./mcp-seq-otlp.tar
Run against local Seq:
docker run --rm -i \
-e SEQ_URL=http://host.docker.internal:10150 \
-e SEQ_API_KEY=your-key \
mcp/seq-otlp
Run against FQDN Seq:
docker run --rm -i \
-e SEQ_URL=https://seq.example.com \
-e SEQ_API_KEY=your-key \
mcp/seq-otlp
Run with Podman:
podman build -t mcp/seq-otlp .
podman run --rm -i \
-e SEQ_URL=https://seq.example.com \
-e SEQ_API_KEY=your-key \
mcp/seq-otlp
The container startup contract requires both variables to be present:
SEQ_URLSEQ_API_KEY
Optional stability controls:
MCP_IDLE_TIMEOUT_MS: idle lifetime in milliseconds, default900000(15 minutes), bounded to1-2147483647.SEQ_TIMEOUT_MS: request timeout in milliseconds, default30000, bounded to1000-120000.SEQ_MAX_REQUEST_BYTES: max outbound request body size, default262144.SEQ_MAX_RESPONSE_BYTES: max inbound response size, default1048576.
If either is missing, the container exits immediately with a clear startup error.
Container lifecycle
The server automatically stops after 15 minutes without an MCP request. Set
MCP_IDLE_TIMEOUT_MS to configure this interval. The timer starts at server
startup. Every MCP request resets it, including discovery, ping, and failed tool
calls, except seq_server_ttl. Protocol notifications and outgoing responses do
not reset it. Expiry closes the transport and exits successfully, even if stdin
is still open or a Seq request is outstanding; outstanding calls may be interrupted.
seq_server_ttlreturns{ idleTimeoutMs, remainingMs }without resetting the timer.seq_server_keep_aliveresets the timer and returns the same fields, without contacting Seq.
This is a stdio MCP server; these endpoints are MCP tools. The server also exits
when stdin reaches EOF and handles SIGTERM/SIGINT as graceful shutdown
requests. The launcher must use --rm so Docker or Podman removes the container after
the server process exits:
docker run --rm -i \
-e SEQ_URL=https://seq.example.com \
-e SEQ_API_KEY=your-key \
mcp/seq-otlp:latest
Use the same flags with podman run. Expiry stops the container and removes it
from the active container list. --rm also removes the stopped container record;
the image remains available for new containers. Avoid restart policies such as
always or unless-stopped, which would relaunch an expired container.
For Compose, use docker compose run --rm -i seq-otlp-mcp or one of the
provided run-mcp-compose scripts. Do not use docker compose up -d for this
stdio server: detached mode has no MCP client attached to close stdin.
There is no image or MCP catalog setting that can force Docker to remove a container. Removal is intentionally controlled by the Docker/MCP host. The container does not mount the Docker socket and cannot safely delete itself.
If an instance lingers:
runningwithOpenStdin=true: the launcher still owns an open stdin stream. The server exits when the idle timer expires; MCP requests such as periodic pings reset that timer. Close stdin or stop the container for immediate shutdown.exited: the launcher omitted--rmand must remove the stopped container.
The Docker MCP Gateway normally supplies --rm -i --init for catalog-based
stdio servers. A lingering per-server container under that launcher indicates a
gateway/session cleanup issue rather than an image metadata option.
Live contract check:
npm run validate:live-contract
This command uses the current SEQ_URL and SEQ_API_KEY to compare live advertised routes against src/route-catalog.ts and to probe safe read-only endpoints for stale 404 entries.
Copy/Paste MCP Config (Codex and VS Code)
Assumes the image already exists (mcp/seq-otlp).
{
"mcpServers": {
"seq-otlp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"SEQ_URL=http://host.docker.internal:10150",
"-e",
"SEQ_API_KEY=<YOUR_SEQ_API_KEY>",
"mcp/seq-otlp"
]
}
}
}
Docker MCP Catalog Compatibility
This repo includes a catalog-ready server definition in:
catalog/server.yamlcatalog/tools.jsoncatalog/docker-mcp-toolkit.yamlassets/seq-otlp-icon.svg
catalog/server.yaml declares:
SEQ_URLas a required user parameter (mapped viaconfig.env)SEQ_API_KEYas a required secret (mapped viaconfig.secrets)
catalog/server.yaml and catalog/tools.json follow the Docker MCP registry
server format, so they can be used in catalog generation/import workflows (for
example via docker/mcp-registry tools).
catalog/docker-mcp-toolkit.yaml is a Docker MCP Toolkit local import entry for
docker mcp catalog server add / docker mcp profile server add workflows.
It is generated by ./build-docker-image.ps1 and ./build-docker-image.sh
from catalog/tools.json, then included in the built image.
Submission checklist for Docker MCP Registry:
docs/docker-mcp-registry-submission.md
MCP Client Integration Example
Use a command-based MCP client entry that launches the container with stdin/stdout attached.
{
"mcpServers": {
"seq-otlp": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"SEQ_URL=https://seq.example.com",
"-e",
"SEQ_API_KEY=<YOUR_SEQ_API_KEY>",
"mcp/seq-otlp"
]
}
}
}
Security Notes
- Do not commit keys.
- Use least-privilege Seq API keys.
- Prefer HTTPS for non-local Seq instances.
API Mapping Artifact
- Full generated API map:
docs/api-map.md - Maintenance/update playbook:
docs/seq-mcp-maintenance.md - Project skill for update workflows:
.github/skills/seq-mcp-maintainer/SKILL.md - Project wiki (how-to and operations): seq-mcp wiki
Status
Core standalone server scaffold is implemented and buildable.
