日志分析服务器

Seq MCP Server是一个连接Claude和其他LLM客户端的日志分析工具,支持搜索、聚合和分析结构化日志。

  • by weselow
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 weselow/seq-mcp-server

使用说明

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密钥保留在用户的机器上,不需要网络。

  1. 从页面下载操作系统的Binar 发布:

    • seq-mcp-stdio-win-x64.exe
    • seq-mcp-stdio-linux-x64
    • seq-mcp-stdio-osx-x64

    Linux/macOS: chmod +x seq-mcp-stdio-*.

  2. 添加到 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"
          }
        }
      }
    }
    
  3. 重新启动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 /sse Legacy 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代币并加快了分析速度。

来源优先:

  1. HTTP头 X-Seq-Project-Scope + X-Seq-Scope-Field.
  2. SEQ_PROJECT_SCOPE + SEQ_SCOPE_FIELD (env)。
  3. 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。无效的URL 400 Bad Request,答案中不显示标题的值。
  • 传出TCP连接器筛选器 标题URL:
    • 环回(127.0.0.0/8, ::1•始终被冻结;
    • 链接本地(169.254.0.0/16包括AWS IMDS 169.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/errors 50个错误(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标准:

规则:

  1. 测试是第一个写的。永远不要为了编译而修改测试-为测试修改代码。
  2. 函数<30行,循环复杂性<10,类<200行。
  3. 方法覆盖率>60%。
  4. Conventional commits in communications.

CI/CD:三个Workflow-CI(build/test/lint)、Docker(build/push in GHCR)、Security(CodeQL+依赖性检查)。文件: docs/CICD.md.

依赖

  • ModelContextProtocol / ModelContextProtocol.AspNetCore 0.4.0-评测2-MCP SDK。
  • Seq.Api 2025.2.2–用于Signals和SQL的SEQ客户端。
  • Microsoft.Extensions.Hosting / Logging 9.0.9.
  • 第2.9单元,流畅性练习8,第4单元。

许可证

MIT。

参考文献