使用说明
Sequ MCP服务器
MCP服务器 序列 -将Claude和其他LLM客户端连接到结构化日志,以便通过MCP工具搜索、聚合和分析它们。
需要时
- 将Claude Desktop连接到您的SEQ并分析日志而无需复制- 场景1(STDIO EXE).
- 提升命令或远程客户端的共享MCP服务器- 脚本2(Docker HTTP/SSE).
- 从一台服务器为多个具有不同SEQ的客户提供服务- 场景3(Multi-Tenant HTTP).
- 在没有单独Seq的情况下尝试本地 本地沙盒(Docker Compose).
快速启动
场景1 Claude Desktop+本地SEQ(STDIO)
一个用户,一个SEQ在机器或局域网上。API密钥保留在用户的机器上,不需要网络。
-
从页面下载操作系统的Binar 发布:
seq-mcp-stdio-win-x64.exeseq-mcp-stdio-linux-x64seq-mcp-stdio-osx-x64
Linux/macOS:
chmod +x seq-mcp-stdio-*. -
添加到
claude_desktop_config.json:{ "mcpServers": { "seq": { "command": "/path/to/seq-mcp-stdio-...", "env": { "SEQ_URL": "http://localhost:5341", "SEQ_API_KEY": "your-api-key-if-needed" } } } } -
重新启动Claude Desktop。
STDIO进程日志在STDERR Claude Desktop中存储,并在自己的日志中存储,STDOUT的JSON RPC保持干净。
脚本2-Docker HTTP/SSE命令
一个服务器,不同的客户端通过URL连接到。适用于具有通用SEQ的命令。
docker run -d --name seq-mcp -p 5555:5555 \
-e SEQ_URL=http://your-seq:5341 \
-e SEQ_API_KEY=your-api-key \
ghcr.io/weselow/seq-mcp-server:latest
curl http://localhost:5555/health
Claude Desktop配置:
{
"mcpServers": {
"seq": {
"url": "http://localhost:5555/sse",
"headers": {
"X-Seq-Project-Scope": "MyWebApp"
}
}
}
}
url 强制性的。 headers -可选,筛选项目日志(请参阅。 scope过滤).
服务器听两个传输:
GET /sseLegacy SSE(Claude Desktop,经典MCP客户端)POST /--流式HTTPпо MCP 2025-03-26 (新客户)。
脚本3-Multi-Tenant HTTP
一个MCP服务器维护不同的SEQ客户端在标题中传递目标URL X-Seq-Url钥匙 X-Seq-ApiKey适用于SaaS、聚合器、内部平台。
明确包括 默认情况下 X-Seq-Url 忽略:
docker run -d --name seq-mcp -p 5555:5555 \
-e SEQ_ALLOW_URL_OVERRIDE=true \
-e SEQ_BLOCK_PRIVATE_HOSTS=true \
ghcr.io/weselow/seq-mcp-server:latest
查询示例(Streamable HTTP):
curl -X POST http://localhost:5555/ \
-H "X-Seq-Url: https://tenant-a.seq.example.com" \
-H "X-Seq-ApiKey: per-tenant-api-key" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
--data '{...MCP-запрос...}'
在制作之前,请阅读本节 多租安全:如果没有反向代理认证和速度限制,多租赁不能在互联网上打开。
本地沙盒(Docker Compose中的SEQ+MCP)
要尝试没有单独SEQ的MCP服务器:
docker-compose up -d
curl http://localhost:5555/health # MCP
open http://localhost:8080 # Seq UI
Compose将SEQ(UI)提升到 8080摄入 53413、MCP服务器(5555)在一个网络上。SEQ数据的持久卷。停止并删除数据-- docker-compose down -v.
配置
环境变量
变种,目的地,违约。
|---|---|---|
| SEQ_URL SEQ服务器URL http://localhost:8080 |
| SEQ_API_KEY API 关键 |
| SEQ_PROJECT_SCOPE SCOPE过滤项目名称
| SEQ_SCOPE_FIELD 过滤项目的区域 Application |
| SEQ_ALLOW_URL_OVERRIDE 允许 X-Seq-Url 多租户(Multi-Tenant) false |
| SEQ_BLOCK_PRIVATE_HOSTS 阻止传出连接中的RFC1818 false |
| PORT HTTP服务器端口 5555 |
默认 SEQ_URL = http://localhost:8080 设计用于内置 docker-compose.yml,SEQ在这个端口上给出UI。对于用户机器上的独立SEQ,请指定 SEQ_URL=http://localhost:5341 (标准Ingestion端口)
兼容名称 SEQ_SERVER_URL 作为同义词 SEQ_URL -留下来与旧的碎片向后兼容。
配置源
每个字段都是根据自己的规则从源读取的,这是一个有意识的兼容性解决方案:
赢家逻辑
|---|---|---|
| Url, ApiKey Ðenv>appsettingsÐenv覆盖文件-典型的容器场景›
| ProjectScope, ScopeField ÐAppSettings>EnvÐFile将“保护”提交到项目配置映像›
HTTP标头(X-Seq-*)总是高于ENV和Appsettings–per-request override→
scope过滤
如果在一个SEQ中写入多个项目,则可以自动添加条件 <scope-field> = '<project>' 所有的要求。这节省了LLM代币并加快了分析速度。
来源优先:
- HTTP头
X-Seq-Project-Scope+X-Seq-Scope-Field. SEQ_PROJECT_SCOPE+SEQ_SCOPE_FIELD(env)。Seq:ProjectScope+Seq:ScopeField(appsettings.json)。
自定义过滤器通过 and:
пользовательский: Level = 'Error'
итоговый: (Application = 'MyWebApp') and (Level = 'Error')
多租安全
适用于 情景3.
如何保护服务器本身
- 无旗
SEQ_ALLOW_URL_OVERRIDE=true标题X-Seq-Url悄悄地忽略它,在日志中只发出一次警告(没有回音值)。 - 校验 URL 中间层:示意图
http/https,无Credentials,无Fragment,无null字节,无CR/LF。无效的URL400 Bad Request,答案中不显示标题的值。 - 传出TCP连接器筛选器 标题URL:
- 环回(
127.0.0.0/8,::1•始终被冻结; - 链接本地(
169.254.0.0/16包括AWS IMDS169.254.169.254,fe80::/10•始终被冻结; - RFC1918(
10/8,172.16/12,192.168/16•在下列情况下被冻结:SEQ_BLOCK_PRIVATE_HOSTS=true.
- 环回(
- 每个连接上的DNS解析 -关闭DNS重新绑定:即使域首先指向公共IP,然后指向Loopback,第二个连接器也会检查新地址。
X-Seq-ApiKey无法登录 在任何形式上,这都不是一个相当于密码的秘密。
在公共推广之前,操作员应该做什么
- 使用TLS和客户端身份验证(MTLS、OAuth2、API Gateway)设置反向代理(nginx、caddy、traefik)。没有身份验证,多租赁MCP不会在互联网上显示。
- 在Endpoint启用速率限制
/(流式HTTP)и/sse代理客户端X-Seq-Url可以尝试扫描内部网络。 - 打开
SEQ_BLOCK_PRIVATE_HOSTS=true否则,RFC1818地址(VPC内部网络)仍然可以访问。
什么是MCP服务器
工具(7)
名称、目的地、关键参数
|---|---|---|
| seq_search_events 搜索SEQ过滤器事件 filter, limit |
| seq_list_signals 保存的信号列表
| seq_execute_sql SQL查询日志 query |
| seq_create_signal 设置警报/警报 title, description, filter, isProtected |
| seq_update_signal 更新信号。 signalId, title?, description?, filter? |
| seq_delete_signal 删除信号 signalId |
| seq_get_apps –用SEQ编写的应用程序和事件数量› limit |
所有工具都返回结构化JSON。描述和参数-俄语。
资源(9)
URI 方案 seq://:
events/latest最后50个事件,所有级别。events/errors50个错误(Error+Fatal).events/warnings最后的50个警告。events/exceptions最后50个例外events/last-hour在过去的一个小时,100。events/today今天的事件,200。performance/slow-C交易Elapsed > 1000ms最后50。signals所有保存的信号。stats/summary-按级别(SQL)聚合过去一小时的事件。
促销 (8)
典型分析任务模板,俄语:
名称参数做什么
|---|---|---|
| seq_analyze_errors | period (1H/24H/7D)–前5个错误,模式,建议›
| seq_top_exceptions | count (10)例外情况分类
| seq_activity_summary | period –日志级别摘要。
| seq_check_signals 检查活动信号。
| seq_performance_check | period 操作缓慢,问题
| seq_trace_request | requestId Requestid/Correlationid下载
| seq_security_audit | period Auth/Unauthorized事件审计
| seq_daily_report -每日报告
健康检查
GET http://localhost:5555/health -MCP服务器状态和SEQ可用性。
{
"status": "healthy",
"version": "1.0.0.0",
"uptimeSeconds": 3600,
"seqConnection": {
"isHealthy": true,
"message": "Connected to Seq server",
"responseTimeMs": 45
},
"metrics": {
"total_requests": 150,
"uptime_seconds": 3600,
"seq_response_time_ms": 45
}
}
如果没有SEQ, 503 Service Unavailable 同一个身体,但 status: "unhealthy" 在描述 seqConnection.message适用于Liveness/Readiness Kubernetes和Prometheus Scrape。
生产部署
docker编写
services:
seq-mcp:
image: ghcr.io/weselow/seq-mcp-server:latest
ports:
- "5555:5555"
environment:
- SEQ_URL=http://your-seq:5341
- SEQ_API_KEY=${SEQ_API_KEY}
- SEQ_PROJECT_SCOPE=ProductionApp
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5555/health"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits: { cpus: '0.5', memory: 512M }
reservations: { cpus: '0.25', memory: 256M }
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: seq-mcp-server
spec:
replicas: 2
selector: { matchLabels: { app: seq-mcp } }
template:
metadata: { labels: { app: seq-mcp } }
spec:
containers:
- name: seq-mcp
image: ghcr.io/weselow/seq-mcp-server:latest
ports: [{ containerPort: 5555 }]
env:
- { name: SEQ_URL, value: "http://seq-service:5341" }
- name: SEQ_API_KEY
valueFrom:
secretKeyRef: { name: seq-credentials, key: api-key }
livenessProbe:
httpGet: { path: /health, port: 5555 }
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet: { path: /health, port: 5555 }
initialDelaySeconds: 5
periodSeconds: 10
resources:
limits: { cpu: 500m, memory: 512Mi }
requests: { cpu: 250m, memory: 256Mi }
建筑
- 语言/RuntimeC网9。
- 主控程序:规范2025-03-26,HTTP/SSE和STDIO JSON-RPC。
- 项目:
src/SeqMcp.Core-共享库(模型、服务、工具、资源、Prompt、选项)。src/SeqMcp.Http— ASP.Net Core Web应用程序,Docker容器。src/SeqMcp.Stdio单文件CLI EXE,本地STDIO传输。
- 直接注入:单一
ISeqConnectionFactory(单打)每对HttpClient+SeqConnection,lru缓存,lease/refcount用于安全驱逐。 - HTTP客户端:调谐
SocketsHttpHandler-pooled connections,gzip,无重定向和Cookie。 - 标准化严格在stderr中;STDout是为JSON-RPC保留的。
src/
├── SeqMcp.Core/
│ ├── Configuration/ — SeqOptions, SeqRequestContext, SeqOptionsLoader
│ ├── Hosting/ — DI-расширения для MCP-примитивов
│ ├── Services/ — SeqApiClient, SeqConnectionFactory, HealthCheckService
│ ├── Tools/ — SeqTools
│ ├── Resources/ — SeqResources
│ ├── Prompts/ — SeqPrompts
│ └── Models/ — DTO
├── SeqMcp.Http/
│ ├── Middleware/ — SeqHeadersMiddleware, RequestLoggingMiddleware
│ └── Program.cs — DI, транспорт MCP, /health
└── SeqMcp.Stdio/
└── Program.cs — точка входа stdio-сервера
tests/
├── SeqMcp.Tests/ — unit-тесты Core и Http (xUnit + FluentAssertions + Moq)
└── SeqMcp.Stdio.IntegrationTests/ — stdio через Process.Start, JSON-RPC handshake
源代码集
要求
- .NET 9 SDK。
- 可选:由SEQ运行的Docker(用于集成测试)。
Stdio exe
dotnet publish src/SeqMcp.Stdio/SeqMcp.Stdio.csproj \
-c Release -r <rid> -p:PublishSingleFile=true -p:SelfContained=true
# <rid>: win-x64 | linux-x64 | osx-x64
结果-单文件二进制 src/SeqMcp.Stdio/bin/Release/net9.0/<rid>/publish/.
HTTP 服务器
dotnet publish src/SeqMcp.Http/SeqMcp.Http.csproj -c Release -o ./publish
SEQ_URL=http://localhost:5341 dotnet ./publish/SeqMcp.Http.dll
Docker图像
docker build -t seq-mcp-server:local .
docker run -d -p 5555:5555 -e SEQ_URL=http://your-seq:5341 seq-mcp-server:local
测试
dotnet test # все 172 теста
dotnet test --collect:"XPlat Code Coverage" # с покрытием
dotnet test --filter "FullyQualifiedName~SeqToolsTests" # один класс
172个测试=169个单元+3个STDIO Integration。部分测试标记 Skip 并要求现场SEQ http://localhost:5341.详情- docs/INTEGRATION_TESTS.md.
开发
该项目遵循严格的TDD标准:
- docs/standards/GLOBAL实施标准.md -一般原则。
- docs/standards/tdd-standard.md --红色→ 绿色→ 重构。
规则:
- 测试是第一个写的。永远不要为了编译而修改测试-为测试修改代码。
- 函数<30行,循环复杂性<10,类<200行。
- 方法覆盖率>60%。
- Conventional commits in communications.
CI/CD:三个Workflow-CI(build/test/lint)、Docker(build/push in GHCR)、Security(CodeQL+依赖性检查)。文件: docs/CICD.md.
依赖
ModelContextProtocol/ModelContextProtocol.AspNetCore0.4.0-评测2-MCP SDK。Seq.Api2025.2.2–用于Signals和SQL的SEQ客户端。Microsoft.Extensions.Hosting/Logging9.0.9.- 第2.9单元,流畅性练习8,第4单元。
许可证
MIT。