最近在一台没有管理员权限的 Windows 办公机上搞定了 Claude Desktop 接入 Grafana MCP,整个过程比想象中曲折,但结果非常值。Claude 现在可以直接帮我拉仪表盘列表、查 Prometheus 指标、看告警规则,不用再切到浏览器里逐层点菜单。如果你也在非管理员 Windows 环境下做监控运维或数据分析了,这篇文章就是你的完整实录,每一步都踩过、验证过。
先说清楚几个基本概念。MCP 的全称是 Model Context Protocol,你可以把它理解成 AI 助手的"外接硬件接口":Claude Desktop 本身只能聊天,但通过 MCP 协议,它可以调用外部工具和读取外部数据源。Grafana MCP 就是 Grafana 官方出的那个 MCP 服务器,它把 Grafana 的 API 能力封装成了一个个可调用的工具,比如列出仪表盘、查询指标、列举数据源、读取告警规则。Claude 只需要调用对应工具,就能拿到 Grafana 中的数据,并在对话里分析、总结、给你结论。
这篇文章不是给管理员看的,而是给那些公司机器上没 admin 权限、但又有真实监控分析需求的工程师看的。我会把非管理员用户能踩的坑都趟一遍,包括 Grafana 怎么不装服务也能跑、API 密钥怎么生成、Claude Desktop 的配置文件到底怎么写、uvx 路径为什么必须用绝对路径,以及最常见的一堆报错怎么排。
1. 场景拆解:为什么需要 Grafana MCP?
1.1 我实际遇到的痛点
日常工作中,我要频繁查看 Grafana 上的监控面板:某个服务是不是有告警、某条 PromQL 查询改一下怎么写、某个新增的 dashboard 叫什么名字。过去这套流程是"打开浏览器→输入 Grafana 地址→登录→进到对应文件夹→翻 dashboard→手动执行查询",中间至少五六步。而且当我只是想知道"此刻哪几个 dashboard 的 CPU 指标在告警",传统 UI 得挨个看,非常低效。
接入 Grafana MCP 之后,流程就变成:打开 Claude Desktop,输入"帮我看看当前 Grafana 里有哪些 dashboard 在告警",Claude 会自动调用 MCP 工具,列出告警规则,再根据返回结果整理成一段可读的话。如果我想分析某个指标的趋势,也只需要告诉它"查一下最近一小时的请求错误率",它会自己构造 PromQL 并执行查询,然后把结果讲给我听。这个体验对日常排障和复盘非常有用。
1.2 MCP 在这个场景里到底做了什么
MCP 不改变 Grafana 的任何行为,它只是在 Claude 和 Grafana API 之间搭了一座桥。Claude 是客户端,它负责理解用户意图、决定调用哪个工具、整理工具返回的数据;MCP Server(也就是 mcp-grafana)负责接收工具调用请求,去请求 Grafana 的 HTTP API,再把结果返回给 Claude。
整个链路大概是这样的:
用户输入 → Claude Desktop → MCP 协议 → mcp-grafana 进程 → Grafana HTTP API → JSON 数据 → Claude 分析所以本质上,Claude 能做什么,取决于 MCP 工具封装了哪些 API。mcp-grafana 这个项目目前还在快速迭代中,但核心工具已经能覆盖我日常 80% 的需求:list_dashboards列出所有仪表盘、get_dashboard获取单个仪表盘详情、list_datasources列出数据源、query_metrics对指定数据源执行指标查询、list_alert_rules和get_alert_rule处理告警规则。这些足够支撑起"对话式监控查询"这个场景。
1.3 这篇文章适合谁
如果你是 SRE、DevOps、平台工程师,或者每天都在跟 Grafana/Prometheus 打交道的后端开发,这篇文章能让你少走很多弯路。另外,如果你在公司电脑上没有管理员权限,以前觉得装 Grafana 很麻烦、装 Python 包各种 PermissionError,那么这里的用户级安装思路对你同样适用。文章会从环境准备讲到最终配置验证,操作上可以直接照着抄。
2. 非管理员 Windows 环境下的三件套安装
2.1 Claude Desktop:用户级安装,不需要碰管理员
很多人误以为 Claude Desktop 安装需要管理员权限,实际上 Windows 版的 Claude Desktop 默认就是按"当前用户"安装的,安装目录落在%LOCALAPPDATA%\AnthropicClaude\,不需要写入 Program Files,所以不会触发 UAC 提权。在非管理员账号下,你只需要从官网下载安装包,双击执行,安装向导会直接完成,不会弹出"需要管理员权限"的提示。
如果你在公司环境里遇到"安装程序被策略拦截"的情况,那多半是公司的软件分发策略限制了,跟 Claude Desktop 本身无关。这种情况下可以联系 IT 部门申请白名单,或者直接下载便携版(有环境的话)。但在大多数普通场景下,非管理员用户装 Claude Desktop 是完全可行的。
2.2 Grafana:宁可用 zip 包,也不用 MSI 安装器
我一开始图省事,想用 Grafana 官方的 Windows Installer(.msi 文件),结果双击就弹 UAC,提示需要管理员权限,直接被卡住。后来换了思路:Grafana 官方除了 MSI,还提供 zip 压缩包版本,解压就能用,完全不需要写系统目录、不需要注册 Windows 服务、不需要管理员授权。
zip 版 Grafana 的本质就是一个自带全部依赖的二进制集合,里面bin/grafana-server.exe就是服务端进程,conf/defaults.ini是默认配置。你把它解压到自己的用户目录下,比如C:\Users\<你的用户名>\tools\grafana,然后手动启动grafana-server.exe,Grafana 就跑起来了。数据文件、SQLite 数据库、日志全部写在这个目录下的data文件夹里,整个过程不碰系统任何全局设置。
这里有一个很重要的点:很多人误以为 Grafana 必须注册成 Windows 服务才能长期运行。其实不需要。你可以把它当作一个普通的前台进程跑着,或者像我一样用一个.bat脚本双击启动。后面我会给出具体脚本。如果希望机器开机自动启动,任务计划程序里建一个"当前用户登录时启动"的任务就够了,同样不需要管理员权限。
2.3 uv / uvx:Python 包运行器,装到用户目录
mcp-grafana 官方推荐用uvx来运行。uvx是 Python 生态里非常顺手的工具,它不需要你先装 Python 环境,自身是独立的二进制,首次运行时会自动下载并执行指定的 Python 包。关键在于:uv 在 Windows 上的安装是用户级的,默认装到%USERPROFILE%\.local\bin,不要求管理员权限。
安装 uv 的官方命令在 PowerShell 里执行:
irm https://astral.sh/uv/install.ps1 | iex执行完成后,uv 和 uvx 都会出现在C:\Users\<你的用户名>\.local\bin下。你可以打开一个新的 PowerShell 窗口验证一下:
uvx --version如果显示版本号,说明已经可用。这里有个小坑:新开的终端如果不带 PATH 刷新,可能找不到命令,关掉重开即可。后面配置 Claude Desktop 的时候,我会直接使用 uvx.exe 的完整路径,也是为了避开这种 PATH 不生效的问题。
3. 启动属于你自己的 Grafana 本地实例
3.1 解压、配置、启动一条龙
先找个干净的目录解压 Grafana zip 包。推荐放在用户目录下的 tools 文件夹,避免中文路径和空格带来的各种问题。我的目录结构是这样的:
C:\Users\dev\monitoring\ ├── grafana-11.0.0\ # Grafana 解压目录 │ ├── bin\ │ │ └── grafana-server.exe │ ├── conf\ │ │ ├── defaults.ini │ │ └── custom.ini │ └── data\ # 自动生成的数据目录在bin目录里直接双击grafana-server.exe可能会报错,因为 Grafana 在启动时要知道它的 homepath(也就是解压根目录),否则找不到配置文件。所以我写了一个start-grafana.bat放在解压目录外面,内容是:
@echo off set GF_HOME=C:\Users\dev\monitoring\grafana-11.0.0 cd /d %GF_HOME% bin\grafana-server.exe serve --homepath %GF_HOME% --config %GF_HOME%\conf\defaults.ini双击这个 bat 文件,如果看到类似下面这样的日志输出,说明 Grafana 已经启动了:
INFO [logger=server] Starting Grafana INFO [logger=server] HTTP Server Listening on http://localhost:3000注意,Grafana 默认监听 3000 端口。如果启动报错提示端口被占用,就说明你机器上已经有服务在用 3000 端口。非管理员用户不需要纠结太多,直接给 Grafana 换个端口就行:编辑conf\defaults.ini,找到http_port这一行,取消注释并改成其他值,例如:
http_port = 3210改完重新启动进程,Grafana 就会监听在http://localhost:3210。后面配置 MCP 时,把GRAFANA_URL也同步改成这个端口即可。
3.2 登录并创建 API 密钥(Service Account)
Grafana 启动后,打开浏览器访问http://localhost:3000(或你改的端口),首次登录使用默认账号admin、密码admin。系统会强制你修改默认密码,修改后重新登录。
接下来创建 API 密钥,这是 Claude 访问 Grafana 的身份凭证。操作路径是:
- 点击左侧菜单的Administration(管理)
- 进入Service accounts(服务账号)
- 点击Add service account(添加服务账号)
- 填写名称,比如
claude-mcp,角色建议选择Viewer(只读权限) - 创建后进入账号详情,点击Add service account token(添加令牌)
- 复制生成的一串以
glsa_开头的令牌
这个令牌就相当于 Grafana 的 API Key。生成后只显示这一次,一定要当场复制保存。后面配置 Claude Desktop 时会用到。如果只是让 Claude 查仪表盘和指标,Viewer 权限就够用了;如果需要让 Claude 帮你修改 dashboard 配置之类,才考虑用 Editor 权限。我个人强烈建议从最小权限开始,安全永远是第一位的。
3.3 给 Grafana 配上真实数据源
如果你的 Grafana 是全新实例,里面还没有任何数据源,Claude 调用query_metrics时会查到一堆错误,因为它不知道该往哪个数据源发查询。所以在测试 MCP 之前,先手动添加一个数据源。以 Prometheus 为例:
- 左侧菜单进入Connections → Data sources
- 点击Add data source,选择 Prometheus
- 在 URL 栏填写你的 Prometheus 地址,比如
http://localhost:9090 - 保存并测试,提示成功即可
如果你的环境里已有可用的监控数据,这一步就跳过。把数据源准备好之后,后面让 Claude 跑真实查询才有的放矢。
4. 配置 Claude Desktop 的 MCP 服务器
4.1 找到并编辑 claude_desktop_config.json
Claude Desktop 的 MCP 配置存放在%APPDATA%\Claude\claude_desktop_config.json。你可以手动打开这个目录用记事本编辑,也可以在 Claude Desktop 的界面上操作路径:左下角点齿轮 Settings,然后切到 Developer 或 MCP 相关页面,里面会有"Edit Config"按钮,点开就是同一个文件。
我直接打开记事本编辑。完整配置如下:
{ "mcpServers": { "grafana": { "command": "C:\\Users\\dev\\.local\\bin\\uvx.exe", "args": ["mcp-grafana"], "env": { "GRAFANA_URL": "http://localhost:3000", "GRAFANA_API_KEY": "glsa_yourtoken_here" } } } }注意三点:
command字段一定要写uvx.exe的完整路径,不要只写uvx这三个字。- 路径里的反斜杠在 JSON 中要写成
\\,否则解析会出错。 env里设置GRAFANA_URL和GRAFANA_API_KEY,这两个变量会被 mcp-grafana 进程读取。
4.2 为什么 command 必须用完整路径
这是我在实际配置中踩过最深的坑。如果我写成"command": "uvx",Claude Desktop 在启动 MCP 时大概率会报"找不到 uvx"错误。原因在于:Claude Desktop 不是你手动从命令行里启动的,它启动时环境变量的 PATH 不一定包含你用户目录下的.local\bin。你手动在终端里敲uvx能运行,不代表 Claude Desktop 的子进程能找到它。
所以最稳妥的做法是用绝对路径,也就是写成C:\\Users\\dev\\.local\\bin\\uvx.exe。这样无论 Claude Desktop 以什么方式启动,都能直接找到可执行文件。如果你的用户名是中文或带空格(尽量不要这样装工具链),这个绝对路径方式也能规避很多编码问题。
顺便说一句,uvx 首次运行 mcp-grafana 时需要下载该包到缓存目录,可能需要几秒到几十秒不等。所以第一次启动 MCP 时稍微耐心一点,工具不是立即出现的。之后再次启动就走缓存,速度会快很多。
4.3 保存配置并重新加载
配置保存后,完全关闭 Claude Desktop,再从开始菜单重新打开。注意是"完全退出",不是关掉窗口就完事。Windows 上经常出现托盘残留,可以用系统托盘图标退出,或者直接任务管理器里结束 Claude 相关进程。
重新打开后,稍微等几秒钟,让 Claude Desktop 完成 MCP 进程拉起。然后看窗口底部的工具按钮:Claude Desktop 界面上有一个锤子图标或者工具图标,点开能看到已加载的工具列表。如果看到grafana下面的list_dashboards、query_metrics等工具,说明配置成功了。
我建议先向 Claude 发送一条最基础的测试指令,例如:
帮我列出当前 Grafana 里的所有 dashboard。
如果 Claude 回复了 dashboard 列表(而不是说"我没有权限访问 Grafana"之类的话),就说明整条链路已经通了。如果这步失败,请看下一节排查。
5. 常见问题与排查技巧实录
5.1 MCP 工具列表里没有 grafana
这是最让人沮丧的:配置文件明明写好了,重启也重启了,工具却不见了。通常优先看日志。Claude Desktop 的日志文件在%APPDATA%\Claude\logs\,文件名一般是main.log或mcp.log。用文本编辑器打开,搜grafana或mcp关键字,就能看到启动 MCP 时的报错。
最常见的原因有两个:
一是command路径有问题。如果日志里出现ENOENT或"无法启动进程",就是找不到 uvx.exe,确认路径是否写全、是否写成双反斜杠。
二是 mcp-grafana 首次下载太慢,超时导致 Claude 放弃了启动。这种情况在日志里会看到超时或者 exit code 非零。处理办法是先手动在终端里跑一次uvx mcp-grafana,让它把包下载好,再重启 Claude Desktop。
5.2 报错 Information: uvx 不是内部或外部命令
这个报错基本可以断定是 PATH 问题,Claude Desktop 没找到 uvx。不要再折腾 PATH 环境变量,直接在配置文件里用绝对路径。Windows 下改用户级 PATH 虽然不需要管理员权限,但需要重启所有已运行的进程,包括 Explorer 和 Claude Desktop,代价太大。
我最终的配置方案是永远写C:\\Users\\dev\\.local\\bin\\uvx.exe,一劳永逸。
5.3 Grafana 返回 403 或 Unauthorized
这个问题集中在 API 密钥上。首先确认GRAFANA_API_KEY是不是以glsa_开头,并且是你创建后立即复制的那串。如果 token 过期或已被删除,Grafana 会返回 401/403。其次,确认角色权限满足要执行的操作。Viewer 角色可以查询仪表盘和数据源,但如果你让 Claude 执行修改类操作(如果工具有此功能),就需要更高权限。最后,确认GRAFANA_URL里没有多余的尾随斜杠,例如http://localhost:3000而不是http://localhost:3000/,否则某些 API 拼接会出问题。
5.4 连接被拒绝或请求超时
如果 Claude 调用工具时报"Connection refused",基本是 Grafana 根本没有在监听。回到启动 Grafana 的终端窗口,看进程是否还活着。如果你关闭了那个终端,Grafana 也随之退出了。我后来不再手动开终端,而是用下面的方式常驻:
@echo off start "" "C:\Users\dev\monitoring\grafana-11.0.0\bin\grafana-server.exe" serve --homepath "C:\Users\dev\monitoring\grafana-11.0.0" --config "C:\Users\dev\monitoring\grafana-11.0.0\conf\defaults.ini"用start拉起一个独立窗口,原窗口可以关闭,Grafana 继续在后台运行。或者用任务计划程序创建一个"交互式登录时启动"的计划任务,指向这个 bat,实现开机自启。
5.5 端口被占用导致 Grafana 起不来
非管理员用户切换到不同用户的会话时,经常遇到端口被占。确认方式:
netstat -ano | findstr :3000看到有进程监听 3000 端口,就换一个端口。改defaults.ini里的http_port为3210,然后把GRAFANA_URL改成http://localhost:3210。重新启动 Grafana 和 Claude Desktop 即可。
5.6 查询指标时报数据源不存在
Claude 返回"datasource not found"这类信息,一般是 Grafana 里没有对应的数据源名称。注意query_metrics这个工具要求你提供数据源名称,不是数据源类型。你先手动到 Grafana 的 Data sources 页面确认名称,然后在对话里明确告诉 Claude,比如"用 Prometheus 数据源查一下 node_memory_Active_bytes"。如果你的 Grafana 里同时有多个 Prometheus 数据源,更要明确指出名字,否则它可能会猜错。
5.7 一个容易被忽视的安全坑
MCP 工具的能力取决于你配置的 API Key。如果把拥有管理员权限的 token 写进 claude_desktop_config.json,一旦对话上下文被注入恶意指令(比如让 Claude 读取配置并外传的 prompt injection),影响范围会很大。所以我只给 Viewer 权限,不给自己找麻烦。Dashboard 的只读、指标的只读查询已经完全够用。
6. 实测效果与后续扩展
配置完成之后,我实际用了一周,几个高频操作特别顺手。
场景一:查 dashboard。"Grafana 里有哪些业务看板?" Claude 调用list_dashboards,返回了完整的 dashboards 列表,包括 uid、名称、tags,然后它根据名称推断哪些是核心看板,还帮我做了分组。
场景二:指标分析。"帮我查一下最近 10 分钟 API 网关的 5xx 错误率。" Claude 先列出数据源,确认有 Prometheus 数据源,然后构造 PromQL 查询,执行query_metrics,把返回的数据整理成趋势描述,甚至指出了存在突刺的时间点。这个体验比我自己打开 Grafana 手动输入 PromQL 快太多了。
场景三:告警复盘。"当前有没有活跃告警?" Claude 调用list_alert_rules之后,能直接列出每个告警的状态和触发条件。以前我要在 UI 里一层层点,现在一句话搞定。
后续如果想把这个能力推给远程的 Grafana 实例,也可以不跑本地 Grafana,只需要把GRAFANA_URL换成服务器的地址。因为 mcp-grafana 本质上就是个 HTTP API 客户端,它不在乎你的 Grafana 跑在哪里。不过修改GRAFANA_URL时要注意:远程实例需要配置好网络连通、API 密钥和跨域访问策略。非管理员用户在这台 Windows 机器上只是减少了安装层面的权限问题,网络层面的防火墙还是要靠网络管理员配合。
再分享一个小的定制技巧:mcp-grafana 运行的日志会输出到标准错误流,Claude Desktop 的 mcp.log 会记录这些内容。如果你怀疑工具处理逻辑有问题,直接看这个日志,里面能看到它实际请求了 Grafana 的哪个 API、返回了什么样的 JSON。这是排查"为什么 Claude 给的数据和我预期不一致"最有效的入口。
我在这个过程中最深的一个感受是:MCP 真正改变了监控数据的使用方式。过去 Grafana 数据只能通过浏览器这个入口去消费,而现在它变成了一个可以被 AI 调用的服务。对日常运维来说,少了一个工具切换的成本,多了一个用自然语言分析和追问的途径。而且整个过程在非管理员权限下完全可以复现——只要用 zip 包启动 Grafana、用户级安装 uv、再把 Claude Desktop 的 MCP 配置写成绝对路径,你也能拥有一个能"看懂"Grafana 数据的 Claude。