﻿---
title: "Grafana Cloud MCP 用 mcp.grafana.com/mcp，login 失败先补 Accept 头"
summary: "托管地址是 https://mcp.grafana.com/mcp，OAuth。Codex 官方页没有这一条。login 若被 302 到文档，在 http_headers 写 Accept 和 X-Grafana-URL。这不是本机 mcp-grafana。"
category: mcp
level: intermediate
surfaces: [cli, app, ide]
tags: ["MCP", "Grafana", "OAuth", "HTTP"]
canonical: /tips/mcp-grafana-cloud/
---

# Grafana Cloud MCP 用 mcp.grafana.com/mcp，login 失败先补 Accept 头

托管地址是 https://mcp.grafana.com/mcp，OAuth。Codex 官方页没有这一条。login 若被 302 到文档，在 http_headers 写 Accept 和 X-Grafana-URL。这不是本机 mcp-grafana。

Grafana Cloud **托管**的是远程 Streamable HTTP，只要 Grafana Cloud，不要自托管。权限跟你登录的 Grafana 用户走，还要有 Assistant Cloud MCP User（或 `grafana-assistant-app.cloud-mcp:access`）。官方客户端列表没有 Codex 专页，按「其它 MCP 客户端」写 TOML：

```bash
codex mcp add grafana_cloud --url https://mcp.grafana.com/mcp
codex mcp login grafana_cloud
```

名字用下划线。已经占用了 `grafana` 给本机 stdio 时，不要覆盖那张表。

`X-Grafana-URL` 是栈地址，不是密钥，能跳过授权页上的 URL 输入。`codex mcp login` 的探测请求默认不带 MCP 的 `Accept` 头时，Grafana 会 302 到文档站，Codex 会拒绝跨源跳转（开放问题 openai/codex#37830）。login 报 OAuth discovery redirect 时，把这两颗头写进 `http_headers`：

```toml
[mcp_servers.grafana_cloud]
url = "https://mcp.grafana.com/mcp"
http_headers = { "X-Grafana-URL" = "https://myinstance.grafana.net", "Accept" = "application/json, text/event-stream" }
enabled = true
```

然后再 `codex mcp login grafana_cloud`。不要把服务账号 token 写进这张 HTTP 表。

授权页可以只勾 Read。Query 仍会跑原始 SQL；Write 会改 dashboard / incident。这台会计入 Grafana Assistant 用量。

不要做这些：

- 不要抄 Claude 的 `--transport http`，也不要抄 Cursor JSON。
- 不要抄 `/sse`，也不要套 `mcp-remote`。
- 不要给自托管 Grafana 配这个 URL。自托管走 `uvx mcp-grafana`。
- 不要给它 `required = true` 挂全局。
- 不要把 `X-Grafana-URL` 写成带尖括号的占位符。

网页 Cloud 不读 `~/.codex/config.toml`。改完新开会话。用 `codex mcp get grafana_cloud` 看传输是 streamable_http。

## 来源

- [Grafana Cloud · MCP server](https://grafana.com/docs/grafana-cloud/ai-tools/mcp-servers/cloud-mcp/)
- [openai/codex#37830](https://github.com/openai/codex/issues/37830)
- [OpenAI · Model Context Protocol](https://learn.chatgpt.com/docs/extend/mcp)
