关于 Uptime Kuma MCP Server
这是用于管理 Uptime Kuma 实例的 FastMCP 服务,为监控运维人员及 AI 客户端提供管理监控项、标签、状态页和心跳数据的工具。
主要功能
- 01添加、编辑、删除、暂停和恢复监控项
- 02获取监控项列表和心跳数据
- 03管理监控项标签
- 04查询状态页详情
- 05支持 STDIO 和 SSE 模式
适用场景
- 01为 URL 添加 HTTP 监控
- 02暂停或更新监控项
- 03查看监控项的心跳历史
- 04查询状态页详情和标签
MCP 相关
向 MCP 客户端提供连接 Uptime Kuma 的工具,支持监控项、标签、状态页和心跳数据操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Uptime Kuma MCP 服务
本项目提供一个 FastMCP(消息控制协议)服务,作为中间层与 Uptime Kuma 实例交互。它提供一组工具,用于管理监控项、标签、状态页,以及从 Uptime Kuma 获取心跳数据。
功能
服务提供以下工具:
- 登录 Uptime Kuma:(内部函数,供所有工具使用)
add_monitors:向 Uptime Kuma 添加多个 HTTP 监控项。get_monitors:获取所有监控项的列表。delete_monitors:根据 ID 删除指定的监控项。pause_monitor:暂停指定的监控项。resume_monitor:恢复指定的监控项。get_monitor_beats:获取指定监控项的心跳数据。edit_monitor:编辑现有监控项的属性。add_monitor_tag:为指定监控项添加标签。delete_monitor_tag:删除指定监控项的标签。get_status_page:获取指定状态页的详细信息。get_heartbeats:在指定时间范围内获取指定监控项的心跳数据,并支持分页。get_tags:获取 Uptime Kuma 中定义的所有标签。
工作原理
- FastMCP 服务: 应用的核心是一个
FastMCP服务实例。此服务会监听传入的请求,以执行预定义的“工具”。 - Uptime Kuma API 集成: 每个工具在调用时,都会首先尝试使用
uptime-kuma-apiPython 客户端库登录配置的 Uptime Kuma 实例。 - 异步操作: 服务使用
asyncio构建,以实现非阻塞 I/O。由于uptime-kuma-api库是同步的,因此会将其调用封装在loop.run_in_executor中,以防止阻塞服务的事件循环。 - 环境配置: Uptime Kuma 凭据和服务绑定信息等关键配置详情通过环境变量管理,并从
.env文件加载。 - 工具定义: 每项对外提供的功能(例如
add_monitors、get_monitors)都定义为使用@mcp.tool()装饰的异步函数。这些工具负责处理与 Uptime Kuma API 交互的逻辑并格式化响应。
前置条件
- Python 3.7+(因为使用了
asyncio.get_running_loop()) - 一个 Uptime Kuma 实例。
- Uptime Kuma 实例的访问凭据(用户名、密码)。
设置
-
克隆仓库(如适用):
git clone <repository_url> cd uptime-kuma-mcp-server -
安装依赖项: 建议使用虚拟环境。
python -m venv venv source venv/bin/activate pip install -r requirements.txt
运行服务
服务可以通过两种模式运行:
-
STDIO 模式(默认): 此模式使用标准输入/输出进行通信,通常用于由其他应用程序将服务作为子进程管理的场景。
python main.py服务将启动,并在控制台记录运行情况。
-
SSE(服务器发送事件)模式: 此模式会运行一个使用服务器发送事件进行通信的 HTTP 服务。若要使用此模式,需要修改
main.py中的if __name__ == "__main__":代码块,改为调用main_sse()而非main_stdio()。main.py中的修改示例:if __name__ == "__main__": # logger.info("Starting MCP server in STDIO mode as per __main__ block...") # main_stdio() # logger.info("MCP server (stdio mode) has finished or exited.") logger.info("Starting MCP server in SSE mode...") main_sse() # Call main_sse() here logger.info("MCP server (SSE mode) has finished or exited.")然后运行:
python main.py服务将在环境变量
MCP_HOST和MCP_PORT指定的主机和端口上监听(默认值为0.0.0.0:8000)。
工具详情
所有工具都会先尝试登录 Uptime Kuma。若登录失败,工具执行将失败。
add_monitors(urls: list[str])
- **说明:**向 Uptime Kuma 添加多个 HTTP 监控项。
- 参数:
urls(字符串列表):要为其创建监控项的 URL 列表。监控项名称根据 URL 生成。
- **返回:**包含
monitor_addition_results、kuma_url、total_requested和successfully_added的字典。
get_monitors()
- **说明:**获取 Uptime Kuma 中所有监控项的列表。
- **参数:**无。
- **返回:**包含
monitors(精简后的列表)、total_count和kuma_url的字典。
delete_monitors(ids: list[int])
- **说明:**根据 ID 删除指定的监控项。
- 参数:
ids(整数列表):要删除的监控项 ID 列表。
- **返回:**包含
monitor_deletion_results、total_requested、successfully_deleted和kuma_url的字典。
pause_monitor(monitor_id: int)
- **说明:**暂停指定的监控项。
- 参数:
monitor_id(整数):要暂停的监控项 ID。
- **返回:**指示成功或失败并包含 API 响应的字典。
resume_monitor(monitor_id: int)
- **说明:**恢复指定的监控项。
- 参数:
monitor_id(整数):要恢复的监控项 ID。
- **返回:**指示成功或失败并包含 API 响应的字典。
get_monitor_beats(monitor_id: int, hours: int = 1)
- **说明:**获取指定监控项在给定时间范围内的心跳记录。
- 参数:
monitor_id(整数):监控项的 ID。hours(整数,默认值:1):要获取的心跳记录时间范围,即距当前时间的小时数。
- **返回:**包含
beats、count和status的字典。
edit_monitor(monitor_id: int, options: dict)
- **说明:**编辑现有监控项。
- 参数:
monitor_id(整数):要编辑的监控项 ID。options(字典):要更新的监控项属性(例如,{"name": "New Name", "interval": 60})。可用字段请参阅 Uptime Kuma API。
- **返回:**指示成功或失败并包含 API 响应的字典。
add_monitor_tag(monitor_id: int, tag_id: int, value: str)
- **说明:**为指定监控项添加标签。
- 参数:
monitor_id(整数):监控项的 ID。tag_id(整数):要添加的标签 ID。value(字符串):标签的值。
- **返回:**指示成功或失败并包含 API 响应的字典。
delete_monitor_tag(monitor_id: int, tag_id: int)
- **说明:**从指定监控项中删除标签。
- 参数:
monitor_id(整数):监控项的 ID。tag_id(整数):要删除的标签 ID。
- **返回:**指示成功或失败并包含 API 响应的字典。
get_status_page(slug: str)
- **说明:**根据 slug 获取指定状态页的详情。
- 参数:
slug(字符串):状态页的 slug。
- **返回:**包含状态页
data或错误消息的字典。
get_heartbeats(offset: int = 0, limit: int = 100)
- **说明:**分页获取心跳监控数据。
- 注意:此工具会先从 Uptime Kuma 获取所有心跳记录,然后在服务端进行分页。对于非常大的数据集,这可能效率低下。
- 参数:
offset(整数,默认值:0):分页偏移量。limit(整数,默认值:100):每页心跳记录数量上限。
- **返回:**包含分页后的
data、total_available、count_returned、offset和limit的字典。
get_tags()
- 描述: 获取 Uptime Kuma 中定义的所有标签。
- 参数: 无。
- 返回: 一个字典,其中包含标签列表(
data)及其数量(count)。
日志记录
该服务使用 Python 的 logging 模块。默认情况下,日志以 INFO 级别输出到控制台(标准输出),并包含时间戳、日志记录器名称、日志级别和消息。
错误处理
- 配置错误: 如果未设置 Uptime Kuma 的必要环境变量(
KUMA_URL、KUMA_USERNAME、KUMA_PASSWORD),服务将无法启动(并引发ValueError)。 - API 错误: 与 Uptime Kuma API 交互期间发生的错误(例如登录失败、监控器 ID 无效)会被记录。工具通常会返回一个包含
"status"字段(值为"error"或"failed")和"error_message"的字典。 - 一般异常: 工具处理程序中未捕获的异常会被记录并重新引发,以便 FastMCP 框架妥善处理(这可能包括向客户端发送错误响应)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。