MCP Server 开发实战 | 大模型无缝对接 Grafana

前言

随着大模型的飞速发展,越来越多的 AI 创新颠覆了过往很多产品的使用体验。但你是否曾想过,在向大型语言模型提问时,它能否根据你的需求精准返回系统中的对应数据?例如,当用户查询 Grafana 服务时,模型是否可以返回系统的 Dashboard 列表以及大盘实时图片。又或者,当用户询问某天的天气时,模型能否直接提供一张清晰的天气卡片。

今天,我们将以 AI 世界的“USB-C”标准接口——MCP(Model Context Protocol)为例,演示如何通过 MCP Server 实现大模型与阿里云 Grafana 服务的无缝对接,让智能交互更加高效、直观。

什么是 MCP?

咨询通义千问,你会了解到 MCP(Model Context Protocol)是一种开放标准的协议,旨在解决大型语言模型(LLM)数据源接入混乱的问题。它允许开发者构建服务器,以安全、标准化的方式向 LLM 应用程序公开数据和功能。以下是 MCP 的主要特点:

  • 标准化 MCP 通过定义统一的通信协议,简化了不同 AI 和服务之间的集成过程。开发者无需为每个特定服务编写定制代码,只需遵循MCP标准,即可快速接入多种AI模型和服务。
  • 安全性 安全性是 MCP 设计的核心考量之一。MCP 确保数据传输的安全性,保护用户隐私和数据安全,提供多层次的安全机制,包括数据加密、身份验证和权限控制等。
  • 灵活性 MCP 具有高度的灵活性,能够适应各种应用场景和需求。无论是数据库、文件还是 API,MCP 都能提供支持,使得开发者可以根据具体需求选择最适合的技术栈。
  • 跨平台 MCP 具备卓越的跨平台能力,适用于任何系统和编程语言(如Python、TypeScript、Go)。这使得 MCP 不局限于特定环境,而是能够在广泛的平台上实现一致的服务体验。

通过这些特性,MCP 成为了连接不同服务与应用的强大桥梁,极大地提升了开发效率和用户体验。

MCP 怎么工作?

MCP 采用客户端-服务器模式,其核心组件如下:

  • MCP 客户端:嵌入在 AI 应用中(如Claude Desktop、Cherry Studio、Cursor),负责与服务器通信,向服务器发送请求并告知需要执行的操作。
  • MCP 服务器:一个轻量级服务,负责连接具体的数据源或工具(如数据库、文件系统、API、Git 仓库等),完成实际的任务处理。

如上图所示,当你在 AI 应用(如 Cherry Studio)的聊天窗口中询问“今天天气怎么样?”时,应用会首先将你的问题传递给选定的 AI 模型(如 DeepSeek 或 Qwen)。如果该大模型支持 MCP 协议,则会基于配置文件信息自动建立 MCP Client 连接,并调用 MCP Server 执行相应的天气查询操作(包括 Tool、Resource、Prompt)。随后,大模型根据返回的查询结果生成回答,并将其展示在聊天窗口中,完成整个交互过程。

如何开发 MCP Server?

MCP(Model Context Protocol)提供了三种主要能力:Tool、Resource 和 Prompt,每种能力都针对不同的应用场景和需求。

Tool(工具)

Tool 允许服务器公开可执行的函数,这些函数可由客户端调用,并供大型语言模型(LLM)使用以完成特定操作。通过 Tool,LLM 可以直接调用暴露的函数,从而实现对功能的主动控制。例如,查询数据库、发送消息、调用 API 或执行特定逻辑的任务。

Resource(资源)

Resource 表示服务器向客户端提供的各类只读数据,如文件、数据库记录、图片或日志等。这些资源由客户端或应用管理,用于为 LLM 提供上下文信息,帮助其更好地理解和响应用户需求。

Prompt(提示词)

Prompt 是由服务器定义的可重用指令或者模板,用户可以通过选择提示词来引导或标准化与 LLM 的交互过程,使其更精确和标准化输出。Prompt 的选择权通常掌握在用户手中,使其能够灵活定制对话体验。

除了上面 3 种能力,还有更高级的采样(Sampling),不过大部分客户端都没有支持。接下来,我们将以大部分客户端支持的 Tool 为例,正式开始开发一个可以连接 Grafana 的 MCP Server,展示如何利用 MCP 协议实现功能扩展与服务集成。

一、初始化项目

安装 UV 命令
curl -LsSf https://astral.sh/uv/install.sh | sh
初始化 MCP 项目
# 给项目创建一个文件夹
uv init grafana-mcp-example
cd grafana-mcp-example# 安装依赖
uv add "mcp[cli]" requests# 创建 server 文件
touch server.py

二、初始化 FastMCP Server

MCP Python SDK 现已推出全新的 FastMCP 类,该类充分利用 Python 的类型注解(如 @mcp.tool())和文档字符串特性,能够自动生成工具定义。这一功能显著简化了 MCP 中 Tool、Resource 和 Prompt 等功能组件的创建与管理流程,使开发者可以更加高效地构建和维护相关服务。

定义 MCP Server

创建一个名为 mcp 的 FastMCP 对象 ,并以 stdio 模式运行。

from mcp.server.fastmcp import FastMCPMCP_SERVER_NAME = "grafana-mcp-server"
mcp = FastMCP(MCP_SERVER_NAME)if __name__ == "__main__":# Initialize and run the servermcp.run(transport='stdio')
添加 Tool

使用 @mcp.tool() 注解将这两个函数标记为 MCP 的 Tool。并通过注释说明函数的用途。

@mcp.tool()
def listFolder() -> list[any] | str:"""列出所有 Grafana 文件夹名称"""return grafana.GrafanaClient().listFolder()@mcp.tool()
def listDashboard(folderName: str) -> list[any] | str:"""列出文件夹下所有 Grafana 大盘名称"""return grafana.GrafanaClient().listDashboard(folderName)
实现 Grafana Client

这里我们简单的实现查询 Grafana 的文件夹列表和文件夹下 Dashboard 列表的 Client,更多丰富功能可以自己进行实现。

import os
import requestsclass GrafanaClient:'Grafana URL地址'grafanaURL="localhost:3000"'Grafana API Key'grafanaApiKey=""def __init__(self):self.grafanaURL = os.getenv("GRAFANA_URL")self.grafanaApiKey = os.getenv("GRAFANA_API_KEY")def grafanaHeader(self):#Grafana 请求Header headers = {"Authorization": "Bearer "+self.grafanaApiKey, "Content-Type": "application/json"}return headersdef listFolder(self) -> list[any]:#列出所有 Grafana 文件夹名称response = requests.get(self.grafanaURL+"/api/search?type=dash-folder", headers=self.grafanaHeader())resContent=[]if response.status_code == 200:for item in response.json():resContent.append({"uid":item["uid"],"name":item["title"]})return resContentdef listDashboard(self,folderName: str) -> list[any]:#列出文件夹下所有 Grafana 大盘名称resContent=[]#查询文件夹UIDresponse = requests.get(self.grafanaURL+"/api/search?type=dash-folder&query="+folderName, headers=self.grafanaHeader())folderUid=""if response.status_code == 200:for item in response.json():folderUid=item["uid"]else:return resContent#查询文件夹下大盘列表response = requests.get(self.grafanaURL+"/api/search?type=dash-db&folderUIDs="+folderUid, headers=self.grafanaHeader())if response.status_code == 200:for item in response.json():resContent.append({"uid":item["uid"],"name":item["title"]})return resContent

如何集成 MCP Server?

在完成上述 MCP Server 的编码工作后,我们即可开始将其集成到 AI 应用中。

环境准备

接下来,我们将演示如何在 Cherry Studio 中配置 MCP 服务器,让百炼大模型对接自建的 Grafana 应用。演示环境如下:

  • 系统: Apple M1  macOS 15.1 (24B83)
  • 工具: Cherry Studio 1.1.2【1】、 VS Code 1.98.2
  • 大模型: 阿里云百炼 qwen-plus 2.5(需要支持 MCP 协议模型)

在 Cherry Studio 中添加阿里云百炼大模型 qwen-plus

Grafana API Key 准备

接下来,您需要准备 Grafana 的 API Key 或 Service Account Token。如果您还没有 Grafana 服务,可以免费试用阿里云 Grafana 服务【1】。具体创建步骤请参考文档【2】的第二部分。在此过程中,请注意区分 Grafana 的版本:

Grafana 9.0.x 及以前版本:创建 API Key。

  • Grafana 10.0.x 及以后版本:创建 Service Account Token。

确保根据您的 Grafana 版本选择正确的创建方法。

配置MCP服务

在 Cherry Studio 中添加 MCP 服务器,配置上面步骤中开发的 MCP Server。

MCP 服务器参数说明:

  • 类型: STDIO
  • 命令: /Users/{当前用户}/.local/bin/uv     uv安装目录
  • 参数: 配置 mcp-grafana 项目目录
--directory
/Users/{当前用户}/grafana-mcp-example
run
server.py
  • 环境变量:
    • 配置 Grafana 的地址和 API Key (GRAFANA_URL、GRAFANA_API_KEY)

大模型验证

首先,在助手菜单中依次选择大模型为“qwen-plus”,并将 MCP 服务器设置为刚刚创建的“mcp-grafana”。

至此,MCP 服务的搭建与配置已全部完成,接下来即可通过大模型查询您的应用数据。

当您提问“Grafana 文件夹列表”或“某个文件夹下的大盘列表”时,系统将返回 Grafana 中对应的文件夹与大盘信息。经过对比可以确认,返回的结果与 Grafana 中的实际数据完全一致。

至此,我们已完成了一个简单的 MCP Server 开发体验。您可以基于开源社区提供的 mcp-grafana 进行扩展,也可以根据需求自定义更多功能,例如返回某个大盘面板的曲线图等,进一步丰富应用场景。

结语

本开发实战通过构建一个 Grafana MCP Server 实例,展示了如何利用 MCP 协议增强大型语言模型(LLM)的能力,充分体现了 MCP 在提升 LLM 应用开发效率方面的显著优势。MCP 不仅适用于对接 Grafana,其应用场景广泛,涵盖各行各业。例如,用户可以像点外卖一样简单地使用 AI 完成购物、应用管理、旅行规划等任务。服务商仅需开放标准 MCP 接口,即可实现服务与 AI 的无缝集成,极大简化了用户的操作流程。作为“AI 界的超级连接器”,MCP 降低了技术门槛,使得每个人都能轻松享受智能生活带来的便利,使 AI 真正成为“生活管家”。无论是准备会议 PPT 还是解决学习中的难题,AI 都能提供个性化的帮助,实现了科技为人服务的理想。MCP 让复杂的任务变得简单高效,推动了智能化生活的普及与应用,真正做到了让科技服务于每一个人。

【1】Cherry Studio 1.1.2

https://cherry-ai.com/download

【2】阿里云Grafana服务

https://www.aliyun.com/product/aliware/grafana

【3】Grafana基于API Key分享大盘

https://help.aliyun.com/zh/grafana/use-cases/use-api-key-to-share-grafana-dashboards

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

块存储、文件存储和对象存储的特点、应用场景及区别

块存储、文件存储和对象存储的特点、应用场景及区别 块存储 特点:块存储将数据分割成固定大小的块,每个块都有唯一的标识符。数据以块为单位进行读写操作,适合需要高性能和低延迟的场景。 应用场景:数据库存储、虚拟机磁盘、高性能…

OpenCv--换脸

引言 在当今数字化时代,图像处理技术的发展日新月异。换脸技术作为其中一项极具趣味性和挑战性的应用,吸引了众多开发者和爱好者的目光。OpenCV 作为一款强大的开源计算机视觉库,为我们实现换脸提供了丰富的工具和方法。本文将深入探讨如何使…

安卓基础(SQLite)

基础 import sqlite3# 连接到数据库 conn sqlite3.connect(mydatabase.db) cursor conn.cursor()# 执行查询 cursor.execute("SELECT * FROM users") rows cursor.fetchall()for row in rows:print(row)# 关闭连接 conn.close() 创建一个继承自 SQLiteOpenHelpe…

QuickAPI 核心能力解析:构建数据服务化的三位一体生态

在企业数据资产化运营的进程中,如何打破数据开发与共享的效率瓶颈,实现从 “数据可用” 到 “数据好用” 的跨越?麦聪软件的 QuickAPI 给出了系统性答案。作为 SQL2API 理念的标杆产品,QuickAPI 通过SQL 编辑器、数据 API、数据市…

《计算机视觉度量:从特征描述到深度学习》—生成式人工智能在工业检测的应用

2022 年 11 月 30 日一个很重要的标志事件就是chatgpt的出现,打开了生成式人工智能的开端。这也许会是一个历史性的时刻,今天是2025年4月,过去两年多,那个时刻目前回想还是对本人造成了冲击,一个完全有自主分析能力的生…

【软件测试】自动化测试框架Pytest + Selenium的使用

Pytest Selenium 是一种常见的自动化测试框架组合,用于编写和执行 Web 应用程序的自动化测试。Pytest 是一个强大的 Python 测试框架,而 Selenium 是一个用于浏览器自动化的工具,二者结合使用可以高效地进行 Web 应用的功能测试、UI 测试等。…

煤矿湿喷砂浆搅拌机组创新设计与关键技术研究

引言&#xff1a;湿喷工艺在煤矿支护中的革命性意义 在深部煤矿巷道支护领域&#xff0c;湿喷混凝土技术以其回弹率低&#xff08;<15%&#xff09;、粉尘浓度小&#xff08;<10mg/m&#xff09;的显著优势&#xff0c;逐步取代传统干喷工艺。作为湿喷工艺的核心设备&am…

如何处理ONLYOFFICE文档服务器与Java Web应用间的安全认证和授权

如何处理ONLYOFFICE文档服务器与Java Web应用间的安全认证和授权&#xff1f; 处理 ONLYOFFICE 文档服务器与 Java Web 应用之间的安全认证和授权&#xff0c;通常涉及以下几个关键步骤和技术&#xff1a; 1. JWT (JSON Web Token) 认证 启用 JWT&#xff1a; ONLYOFFICE 文档…

无参数RCE

无参数RCE&#xff08;Remote Code Execution&#xff0c;远程代码执行&#xff09; 是一种通过利用目标系统中的漏洞&#xff0c;在不直接传递用户可控参数的情况下&#xff0c;实现远程执行任意代码的攻击技术。与传统的RCE攻击不同&#xff0c;无参数RCE不依赖外部输入参数…

OL9设置oracle23ai数据库开机自启动

1、设置oracle用户的环境变量信息 [oracleOracleLinuxR9U5 ~]$vim ~/.bash_profile # Set Oracle environment variables for Oracle 23c AI export ORACLE_HOME/opt/oracle/product/23ai/dbhomeFree export ORACLE_SIDFREE export PATH$ORACLE_HOME/bin:$PATH export LD_LIB…

AI agents系列之智能体框架介绍

1. 引言 智能体AI Agents框架通过赋予自主系统动态感知、推理和行动的能力&#xff0c;彻底改变了AI领域。本节将探讨智能体框架的核心概念&#xff0c;并重点介绍为什么开源解决方案对现代AI开发的创新和可扩展性至关重要。 1.1 什么是智能体框架&#xff1f; 智能体框架代…

【数据资产入表】数据确权

&#xfeff;#数据要素[话题]#&#xfeff; &#xfeff;#数据资源盘点[话题]#&#xfeff; &#xfeff;#数据资产盘点[话题]#&#xfeff; &#xfeff;#数据资产[话题]#&#xfeff; &#xfeff;#数据资产入表[话题]#&#xfeff; &#xfeff;#数据盘点[话题]#&…

关于vxe-select得filter-method 自定义方法得使用,忽略大小写匹配

vxe-select使用模糊匹配时&#xff0c;filter-method自定义匹配方法&#xff0c;模糊忽略大小写进行匹配数据 <vxe-select v-model"marketingId":options"marketingOptions"transfer clearable placeholder"市场"filterable :filter-method&…

AIDL 中如何传递 Parcelable 对象

目录 1. 直接在 AIDL 中定义 Parcelable 对象2. 自定义 Parcelable 对象的传递3. 以 Rect 类为例的 Parcelable 实现4. 注意安全性5. 小结1. 直接在 AIDL 中定义 Parcelable 对象 背景说明 从 Android 10(API 级别 29)开始,AIDL 允许直接在 .aidl 文件中定义 Parcelable 对…

【LangChain核心组件】Retrieval(检索)模块

在AI技术日新月异的今天&#xff0c;大型语言模型&#xff08;LLM&#xff09;的局限性也逐渐显现——它们无法有效处理特定领域知识和用户私有数据。这正是检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;技术崛起的根本原因。作为当前最…

Java使用WebSocket视频拆帧进度处理与拆帧图片推送,结合Apipost进行调试

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>Configuration public class WebSocketConfig {/*** 启动 WebSocket 服务器*/Beanpublic ServerEndpointE…

XSS攻击(反射型、存储型、dom型、PDF、SWF、SVG)

一、XSS攻击是什么 XSS是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中 Web 里面的脚本代码会被执行&#xff0c;从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。 二、XSS分类 反射型XSS 常见情况是…

vue + element-plus自定义表单验证(修改密码业务)

写一个vue组件Password.vue 没有表单验证只有3个表单项 <template><div><el-form><el-form-item label"旧密码"><el-input></el-input></el-form-item><el-form-item label"新密码"><el-input>&l…

Linux下使用MTK的SP_Flash_tool刷机工具

MTK的SP_Flash_tool刷机工具安装流程如下&#xff1a; 1、解压SP_Flash_Tool_Linux_v5.1336.00.100_Customer.zip unzip SP_Flash_Tool_exe_Linux_64Bit_v5.1520.00.100.zip 2、首先安装 libusb-dev 这个包&#xff1a; sudo apt-get install libusb-dev 3、安装成功之后…

基于 PyGetWindow 获取窗口信息和控制窗口

PyGetWindow 是基于Python的一款简单、跨平台的模块&#xff0c;用来获取窗口信息和控制窗口。可以实现的功能有&#xff1a; 获取当前系统中所有打开窗口的列表。 根据窗口标题、窗口句柄等属性获取特定的窗口对象。 激活、最小化、最大化和关闭窗口。 获取和设置窗口的位置、…