
Loki MCP Server 连接失败TaoToken 这样填模型 Base URL。很多人第一次在 Claude Code 里看到claude mcp get loki返回 failed或者/mcp面板一闪而过会下意识去查 Loki 地址、网络连通性、Docker 端口。但实际踩下来更常见的根因是 Claude Code 自己的模型 API 地址没配对导致整个对话链路先断了MCP 工具自然也没机会被调用。本文围绕 Loki、MCP、Claude Desktop、Claude Code、Cursor 这几个高频场景把 TaoToken 的 Base URL 填法、三端配置、验证命令和报错排查一次讲清。你不需要先理解 MCP 协议细节只要按步骤把模型链路和 MCP Server 两条线分别打通就能让自然语言查日志真正跑起来。1. Loki MCP Server 连接失败的现场claude mcp get loki 显示 failed 时先看模型链路典型现场是这样的你在 Claude Code 里输入claude mcp get loki返回里写着 Type: http、URL: http://localhost:8080/stream但 Status 是 failed 或 disconnected。接着你去看 Loki 容器curl http://localhost:3100/ready又是 ready。于是问题变得很迷惑Loki 活着MCP Server 也活着为什么 Claude Code 说连不上这里要先分清两条链路。第一条是 Claude Code 到模型 API 的链路负责把自然语言变成工具调用第二条是 Claude Code 到 Loki MCP Server 的链路负责真正执行loki_query、loki_label_names、loki_label_values。如果第一条链路因为 Base URL 填错、Key 无效、多了/v1而失败Claude Code 可能连工具列表都拉不全表现就像 MCP 连接失败。所以排障顺序应该是先确认模型 API 能通再确认 MCP Server 能通。症状容易误判的原因优先验证claude mcp get loki显示 failed以为 Loki 挂了先看 Claude Code 模型 API 配置/mcp面板打开后没有 loki 工具以为 MCP 没注册检查~/.claude/settings.json的 env能聊天但调用 loki 时报错以为工具实现有问题检查 MCP URL 和 transport查询报 invalid start time以为 LogQL 写错检查时间格式是否带负号或 RFC3339返回结果超 token 限制以为 Loki 数据太多加 limit、缩小时间范围、加过滤条件我试过在同一个终端里先export ANTHROPIC_BASE_URLhttps://taotoken.net/api再启动 Claude Codeclaude mcp get loki立刻从 failed 变成 connected。这个现象说明MCP 的失败不一定是 MCP 本身模型 API 的 Base URL 才是整条链路的入口。入口没对后面都白搭。1.1 为什么 Base URL 不要加 /v1Claude Code 使用的是 Anthropic 兼容协议。TaoToken 的模型 Base URL 应该填https://taotoken.net/api不要写成https://taotoken.net/api/v1也不要写成https://taotoken.net/v1。多写/v1后客户端会在后面再拼一次版本路径最终请求地址会变成类似/api/v1/v1/messages服务端返回 404 或 401Claude Code 侧往往只显示一个笼统的连接失败。你可以把 Base URL 理解成“小区大门地址”/v1是“几单元几零几”。客户端自己知道要进哪个单元你只需要给到小区大门。给多了快递员反而找不到。这个规则在 Claude Code、Claude Desktop 的 API 配置、Cursor 的模型配置里都适用。2. 先给 Claude Code 接上 TaoToken创建 Key 与 Base URL 规则在折腾 Loki MCP Server 之前先把模型链路打通。打开 TaoToken 官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content进入控制台后创建 API Key。建议单独建一个 Key 给 Claude Code 用名字写成claude-code-loki-mcp方便以后按用途禁用或轮换。创建入口在https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewriteKey 管理页在https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite。拿到 Key 后先不要急着配 Loki。先用模型对话页验证这个 Key 能不能正常调用模型入口是https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite。在对话页里发一句“你好回复 OK”如果能正常返回说明 Key 和账户状态没问题。这一步能帮你排除掉后面一半的玄学问题。然后确认两个地址用途地址备注官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册、看文档、进控制台模型 API Base URLhttps://taotoken.net/api不要加/v1API 文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite看 Anthropic 兼容说明Claude Code 专用说明https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_code_anthropicutm_campaignrewrite配置姿势和常见问题如果你准备长期在 Claude Code 里跑 Loki 查询、日志分析、Agent 工作流可以顺手看一下 Coding Plan入口是https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite。它更适合高频编码和长上下文场景和按量 Key 是两条不同的使用路径。3. 可复制配置Claude Code、Claude Desktop、Cursor 三端各填哪里配置的核心就一句话模型 Base URL 填https://taotoken.net/apiMCP Server 地址填你实际部署的 Loki MCP 地址。下面三端配置可以直接复制把 Key 和 URL 换成你自己的。3.1 Claude Codesettings.json 与 mcp addClaude Code 推荐把模型配置写进~/.claude/settings.json这样每个终端窗口都能生效不用每次 export。文件内容如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: sk-你的TaoTokenKey } }保存后重新打开终端或者执行source ~/.zshrc如果你用的是 shell 方式。接着添加 Loki MCP Server。本地 Docker 跑起来的 Loki MCP推荐用 Streamable HTTPclaude mcp add --transport http --scope user loki http://localhost:8080/stream如果你用的是 SSE 旧协议可以改成claude mcp add --transport sse --scope user loki http://localhost:8080/sse添加完成后检查claude mcp get loki期望看到Status: connected、Type: http、URL: http://localhost:8080/stream。如果这里显示 failed先回到第 2 节确认模型 Key 和 Base URL再看第 5 节的排查表。3.2 Claude Desktopclaude_desktop_config.json 里放 MCP ServerClaude Desktop 的 MCP 配置在claude_desktop_config.json。macOS 通常在~/Library/Application Support/Claude/claude_desktop_config.jsonWindows 在%APPDATA%\Claude\claude_desktop_config.json。如果你用 Docker 跑 Loki MCP Server配置如下{ mcpServers: { loki: { command: docker, args: [ run, --rm, -i, -e, LOKI_URLhttp://host.docker.internal:3100, loki-mcp-server:latest ] } } }注意host.docker.internal是 Docker 容器访问宿主机服务的地址。macOS 和 Windows 的 Docker Desktop 支持这个域名Linux 上需要额外加--add-hosthost.docker.internal:host-gateway或者直接写宿主机的局域网 IP。Claude Desktop 的模型 API 配置不在这个文件里如果你在 Claude Desktop 里也接了自定义 API记得同样把 Base URL 填成https://taotoken.net/api不要加/v1。3.3 Cursormcp.json 与模型 Base URL 分开配Cursor 的 MCP 配置通常在~/.cursor/mcp.json格式和 Claude Desktop 类似{ mcpServers: { loki: { command: docker, args: [ run, --rm, -i, -e, LOKI_URLhttp://host.docker.internal:3100, loki-mcp-server:latest ] } } }Cursor 的模型侧如果是通过 Anthropic 兼容方式接入Base URL 同样填https://taotoken.net/api。配置完后重启 Cursor在 MCP 面板里应该能看到loki以及三个工具loki_query、loki_label_names、loki_label_values。如果只看到 server 名字但看不到工具通常是 transport 选错或者 MCP Server 启动后立刻退出去看 Docker 日志里有没有报错。3.4 Loki MCP Server 自身的 Docker 环境变量Loki MCP Server 通过环境变量回退来拿 Loki 地址和认证信息优先级是请求参数大于环境变量大于默认值。常用变量如下services: loki-mcp-server: image: loki-mcp-server:latest ports: - 8080:8080 environment: LOKI_URL: http://loki:3100 LOKI_ORG_ID: LOKI_USERNAME: LOKI_PASSWORD: LOKI_TOKEN: PORT: 8080 depends_on: loki: condition: service_healthy如果你在本地直接跑二进制LOKI_URL可以写成http://localhost:3100。如果在 Docker Compose 里跑服务名是loki就写http://loki:3100。这个细节看起来小但很多人把localhost写进容器里结果 MCP Server 一直连不上 Loki表现又是claude mcp get lokifailed很容易绕远路。4. 验证请求从 claude mcp get loki 到真实查日志配置完成后不要直接上复杂 LogQL先用最小请求验证每一层。顺序是模型 API 通、MCP Server 通、Loki 通、工具调用通。第一步确认 Claude Code 模型链路claude -p 回复 OK如果返回OK说明ANTHROPIC_BASE_URL和 Key 没问题。如果这里就报错先不要看 Loki去检查~/.claude/settings.json里的 Base URL 是否多写了/v1Key 是否复制完整。第二步确认 MCP Server 健康检查curl -s http://localhost:8080/healthz期望返回ok。如果没有返回去看容器日志docker logs -f loki-mcp-server第三步确认 Loki 本身可查curl -G http://localhost:3100/loki/api/v1/label/app/values \ --data-urlencode startnow-1h如果返回 JSON 里有status:success和 values 数组说明 Loki 有数据。如果没有数据先跑一下仓库里的./insert-loki-logs.sh插入测试日志再查。第四步回到 Claude Code 里验证 MCP 工具claude mcp get loki期望看到 connected。然后在 Claude Code 对话框里输入loki查看所有可用的标签名成功时Claude Code 会调用loki_label_names返回类似app、env、host、job、namespace、pod、service_name的标签列表。接着你可以继续问查询 apppb-trading-engine envprodjp 近 5 分钟的错误日志帮我分析下这里有个高频坑时间参数不要写5m要写-5m。因为 Loki MCP Server 的parseTime支持now、-5m、RFC3339 和纯日期但不支持不带负号的5m。如果你在 Claude Code 里看到MCP error -32603: invalid start time: unsupported time format: 5m直接把start改成-5m或者写完整 UTC 时间start: 2026-04-08T06:00:00Z end: 2026-04-08T07:10:00Z成功返回后你会看到loki_query的结果。如果日志量很大Claude Code 可能会提示结果超过最大 token 限制并把输出保存到本地文件。这时不要硬读应该缩小时间范围、加limit、加更严格的 LogQL 过滤例如{apppb-trading-engine, envprodjp} |~ (?i)error|exception|fatal|panic | json | line_format {{.message}}5. 常见错排查invalid start time、result exceeds maximum tokens 与 Docker LOKI_URL排障最怕一锅乱炖。下面按报错信息拆开每一条都给出验证命令和修改点。你可以把它当成 Loki MCP Server 连接失败的自查清单。5.1 claude mcp get loki 显示 failed 或 disconnected先看三处模型 Base URL 是否写成https://taotoken.net/api而不是带/v1MCP URL 是否是http://localhost:8080/stream而不是/sse混用MCP Server 是否真的在监听8080。验证命令claude mcp get loki curl -v http://localhost:8080/healthz docker ps | grep loki-mcp如果是 Claude Desktop 或 Cursor重启客户端后再看。JSON 配置文件里多一个逗号、少一个引号客户端可能直接忽略整个 MCP 配置表现就是“没有 loki 工具”。5.2 MCP error -32603: invalid start time: unsupported time format: 5m这是 Loki MCP Server 的时间解析问题。它支持now、-1h、-30m、2026-04-08T06:00:00Z、2026-04-08 06:00:00、2026-04-08。你写5m时解析器以为你要一个未来时间或纯日期直接报 unsupported。改法有三种start: -5m start: now start: 2026-04-08T06:00:00Z如果你在代码里扩展parseTime记得保持“先判断 now、再判断负号相对时间、再尝试 RFC3339、最后尝试纯日期”的顺序避免5m被误判。5.3 result exceeds maximum allowed tokensLoki 返回的日志行可能非常长Claude Code 会把超限结果保存到tool-results目录。解决方向不是换模型而是减少返回量。优先加limit: 50再把时间范围从 1 小时缩到 5 分钟最后用 LogQL 过滤掉 INFO 级别{apppb-trading-engine, envprodjp} |~ (?i)error|exception|fatal|panic如果还是超限可以用loki_label_values先确认标签值避免查了一个不存在的 app结果扫了大量无关数据。5.4 Docker 里 LOKI_URL 填 localhost 导致连不上容器里的localhost指向容器自己不是宿主机。Loki MCP Server 在 Docker 里跑Loki 在宿主机跑应该写LOKI_URL: http://host.docker.internal:3100如果 Loki 也在同一个 Compose 网络里服务名是loki则写LOKI_URL: http://loki:3100改完执行docker compose up -d --force-recreate loki-mcp-server curl -s http://localhost:8080/healthz5.5 时间戳显示 2262 年这是 Loki MCP Server 早期实现里的纳秒 bug。Loki 返回的是纳秒时间戳如果代码写成time.Unix(ts, 0)就会把纳秒当秒处理显示成 2262 年。正确写法是timestamp : time.Unix(0, int64(ns))如果你自己扩展了formatLokiResults记得所有时间戳转换都走这个函数不要在新 Tool 里再写一遍错误逻辑。6. 排障完成后把 TaoToken 的 Coding Plan 用起来Loki MCP Server 连接失败这个问题表面看是 MCP 配置实际排障时最容易被忽略的是模型 API Base URL。记住三个固定值TaoToken 模型 Base URL 是https://taotoken.net/api不要加/v1Loki MCP Server 的 Streamable HTTP 端点是http://localhost:8080/streamclaude mcp get loki看到 connected 才算真正通。如果你是第一次接入先去https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite创建 Key再看https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite里的接入文档。如果你只是想先验证模型是否正常用https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite发一条消息最快。如果你准备长期在 Claude Code、Cursor 里跑日志分析、Agent 工作流直接看https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite把高频查询和长上下文场景交给 Coding Plan 更省心。最后再提醒一句遇到claude mcp get lokifailed 时先跑claude -p 回复 OK模型链路通了MCP 的问题往往就只剩一个 URL 拼写。