OneUptime MCP Server:通过 Model Context Protocol 让 AI 代理直接操作监控、事件与可观测性数据
OneUptime MCP Server:通过 Model Context Protocol 让 AI 代理直接操作监控、事件与可观测性数据
📅 发布时间:2026/9/17 19:56:02👁 浏览次数:
OneUptime MCP Server通过 Model Context Protocol 让 AI 代理直接操作监控、事件与可观测性数据【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime本文以 OneUptime 官方文档 mcp-server.md 为核心结合仓库中 App/FeatureSet/MCP 的源码实现讲解 OneUptime MCP Server 的工作原理、客户端接入配置、工具目录与查询语法。读完本篇你可以把 Claude Desktop、VS CodeGitHub Copilot等 MCP 客户端接入自己的 OneUptime 实例云版或自托管并让 AI 代理完成监控器管理、事件响应、告警处理与遥测查询等运维操作。什么是 OneUptime MCP ServerOneUptime MCP Server 是大型语言模型LLM与 OneUptime 实例之间的一座桥梁。它实现了 Model Context ProtocolMCP让 Claude 等 AI 助手能够直接与你的监控基础设施交互——创建监控器、创建和解决事件Incident、管理状态页、查询日志/指标/链路等全部通过标准 MCP 工具调用完成。核心特性来自官方文档并经 ToolGenerator.ts 源码印证约 155 个工具覆盖 22 种数据库资源类型的完整 CRUD 工具、只读的遥测工具以及工作流与辅助工具实时操作资源可被实时创建、读取、更新、删除类型安全工具输入由模型 Zod Schema 转换为 JSON Schema输入参数在 SchemaConverter.ts 中完成校验与转换安全的认证按请求携带 API 密钥错误处理完整安全注解只读工具携带readOnlyHint删除工具携带destructiveHintMCP 客户端可据此自动放行安全调用、对破坏性操作二次确认简单集成兼容 Claude Desktop 及其他 MCP 客户端完全无状态不发放会话 ID每个请求自包含因此可以在负载均衡器和多副本部署后正常工作。工作原理随实例托管的无状态 Streamable HTTP 服务MCP Server 与 OneUptime 实例一起托管通过 Streamable HTTP 传输暴露在/mcp路径上无需本地安装云版用户https://oneuptime.com/mcp自托管用户https://your-oneuptime-domain.com/mcp从源码结构看其无状态设计有明确的工程动因。RouteHandler.ts 的注释说明早期实现用进程内 Map 保存会话多副本部署下initialize在一个 worker 建会话、后续请求却被负载均衡到另一个 worker导致 404 MCP session not foundGitHub issue #2459。因此现在每个 POST 请求都会创建全新的McpServerStreamableHTTPServerTransport实例处理完即销毁见 handleStatelessRequest。因为 OneUptime 工具不依赖会话内状态——tools/list来自路由挂载时绑定的工具列表每次tools/call都用该请求自身携带的 API 密钥认证——所以无状态模式是安全的。传输层还有一个兼容性协商层TransportNegotiation.ts协议版本会向下协商到双方都支持的最高版本而非直接拒绝更新版本的客户端响应格式则根据客户端Accept头在application/json与text/event-stream之间选择两者在 MCP 规范下都是合法的 POST 应答。GET /mcp与GET /mcp/health都会列出本构建支持的协议版本便于在不读容器日志的情况下诊断握手失败。服务初始化链路为App 启动时挂载 MCP FeatureSetApp/FeatureSet/MCP/Index.ts→ 初始化 OneUptimeApiService → 调用generateAllTools()生成全部工具 → 通过setupMCPRoutes注册 Express 路由。API 地址由环境变量HOST与HTTP_PROTOCOL推导见 ServerConfig.ts服务器本身不配置任何 API 密钥——密钥完全由客户端按请求提供。客户端配置Claude Desktop找到 Claude Desktop 配置文件macOS~/Library/Application Support/Claude/claude_desktop_config.jsonWindows%APPDATA%\Claude\claude_desktop_config.jsonLinux~/.config/Claude/claude_desktop_config.json接入 OneUptime 云版{ mcpServers: { oneuptime: { transport: streamable-http, url: https://oneuptime.com/mcp, headers: { x-api-key: your-api-key-here } } } }接入自托管实例把oneuptime.com换成你的 OneUptime 域名即可{ mcpServers: { oneuptime: { transport: streamable-http, url: https://your-oneuptime-domain.com/mcp, headers: { x-api-key: your-api-key-here } } } }公开访问无需 API 密钥若只需使用公开工具状态页信息、帮助可以不带密钥连接{ mcpServers: { oneuptime: { transport: streamable-http, url: https://oneuptime.com/mcp } } }此配置仅能访问公开状态页工具与辅助资源无需任何认证。其他客户端MCP FeatureSet 的 README 还给出了两种补充接法供参考Claude Codeclaude mcp add --transport http oneuptime https://oneuptime.com/mcp --header x-api-key: your-api-key-hereCursor.cursor/mcp.json{ mcpServers: { oneuptime: { url: https://oneuptime.com/mcp, headers: { x-api-key: your-api-key-here } } } }VS Code 与 GitHub CopilotVS Code 从 1.99 起原生支持 MCP 服务器配合 GitHub CopilotCopilot 可直接访问 OneUptime 数据。前提VS Code 1.99、已安装并启用 GitHub Copilot 扩展、启用 Copilot Chat。打开 MCP 配置CtrlShiftPmacOS 为CmdShiftP→ 输入 MCP: Open User Configuration。也可以在工作区创建.vscode/mcp.json做项目级配置。云版配置.vscode/mcp.json或用户级配置{ servers: { oneuptime: { type: http, url: https://oneuptime.com/mcp, headers: { x-api-key: ${input:oneuptime-api-key} } } }, inputs: [ { type: promptString, id: oneuptime-api-key, description: OneUptime API Key, password: true } ] }自托管版只需把 URL 换成https://your-oneuptime-domain.com/mcp。启动与使用CtrlShiftP/CmdShiftP→ MCP: List Servers 查看可用服务器点击 oneuptime 启动按提示输入 API 密钥password: true让 VS Code 弹窗询问而不是明文存储密钥在 Copilot Chat 的 Agent 模式中使用例如What monitors do I have in OneUptime? Show me recent incidents Create a new monitor for https://example.com获取 API 密钥与安全警告登录 OneUptime 实例进入项目设置→API 密钥点击创建 API 密钥命名例如 MCP Server按使用场景选择权限复制生成的密钥。API 密钥是项目级的MCP Server 从密钥推导所属项目因此所有 Create 工具都不需要projectId参数。警告——永远不要把 Master 密钥交给 AI 代理。OneUptime 的MasterAPI 密钥同样会被该请求头接受并授予实例级管理员权限。请始终使用权限最小的项目 API 密钥所有get_/list_/count_工具用只读密钥即可。密钥提取逻辑见 extractApiKey优先读x-api-key其次读Authorization并按 RFC 7235 做大小写不敏感的Bearer解析。可接受的请求头定义在 ServerConfig.ts 的API_KEY_HEADERS中。工具目录约 155 个工具从何而来工具在启动时由 ToolGenerator.ts 的generateAllTools()动态生成分为五类数据库资源——完整 CRUD22 个模型各生成 6 个工具create_、get_、list_、update_、delete_、count_例如create_incident、get_incident、list_incidents、update_incident、delete_incident、count_incidents。覆盖的模型为Incident、Alert、Monitor、Status Page、Scheduled Maintenance Event、Team、Monitor Status、On-Call Policy、Incident State、Incident Severity、Alert State、Alert Severity、Incident State Timeline、Alert State Timeline、Incident Public Note、Incident Internal Note、Alert Internal Note、Status Page Announcement、Scheduled Maintenance State、Scheduled Maintenance State Timeline、Label、Monitor Status Event。生成条件见 generateToolsForDatabaseModel模型必须设置enableMCP并定义crudApiPath否则直接跳过。新模型只要加上EnableMCP装饰器或分析型模型设置enableMCP下次启动即自动获得对应工具。遥测资源——只读Log、Metric、Span、Exception Instance、Monitor Log 只生成list_与count_工具例如list_logs、count_spans、list_exception_instances。没有 create 工具——遥测数据经 OpenTelemetry 采集入库不允许代理写入。工作流工具针对事件/告警响应的专用捷径实现在 WorkflowTools.tsacknowledge_incident/resolve_incident把事件移到项目的已确认/已解决状态等价于在 Dashboard 上点击对应按钮acknowledge_alert/resolve_alert告警同理add_incident_notevisibility: internal默认仅团队可见或visibility: public发布到状态页支持 Markdownadd_alert_note为告警添加内部备注oneuptime_whoami返回 API 密钥所属项目ID 与名称适合作为代理的第一个定位调用。从源码看确认/解决的本质是 changeState先通过/api/incident-state/get-list或/api/alert-state按isAcknowledgedState/isResolvedState标志查找到项目对应的状态行再向/api/incident-state-timeline或/api/alert-state-timeline插入一条指向该状态的记录——与 Dashboard 的操作完全一致代理无需了解 OneUptime 的数据模型细节。所有 ID 参数都会经过 UUID 校验requireUuid无效 ID 会返回提示性错误。辅助与公开工具oneuptime_help、oneuptime_list_resourcesHelperTools.ts帮助与资源发现无需 API 密钥无需密钥的公开状态页工具get_public_status_page_overview、get_public_status_page_incidents、get_public_status_page_scheduled_maintenance、get_public_status_page_announcements。公开状态页工具接受状态页 IDUUID或状态页域名。安全注解与写策略注解按操作类型自动生成getAnnotationsForOperationget_/list_/count_携带readOnlyHint: truedelete_携带destructiveHint: true并标记幂等update_标记幂等create_两者皆为 false。此外由于注解只是建议、很多客户端会自动放行任何非只读工具服务端还提供两个环境变量做硬性写策略applyWritePolicyMCP_READ_ONLYtrue只暴露读/列/计数工具彻底移除 create/update/deleteMCP_ALLOW_DESTRUCTIVEfalse保留 create/update但删除工具从工具面移除。默认不启用任何限制。生产环境中如果只想让代理观察而不允许修改建议显式开启MCP_READ_ONLY。遥测查询时间范围、操作符、select 与分页Logs、Metrics、TracesSpans、Exceptions 与 Monitor Logs 以只读的list_/count_工具提供。查询遥测务必带时间范围过滤器。查询字段可接受直接值或操作符对象{ query: { time: { _type: GreaterThan, value: 2026-07-04T00:00:00.000Z } }, sort: { time: DESC }, limit: 50 }支持的操作符与 ToolGenerator.ts 中注入到每个query参数描述里的提示一致操作符用途EqualTo/NotEqual精确等于 / 不等于IsNull/NotNull/EqualToOrNull空值判断GreaterThan/LessThan/GreaterThanOrEqual/LessThanOrEqual数值/日期区间InBetween区间数值/日期Search部分文本匹配Includes数组包含排序值只有ASC或DESC。字段选择selectget_与list_工具接受可选的select数组。默认返回所有可读字段但重型字段JSON、VeryLongText、HTML 列默认被排除必须显式写入select才会返回。可选项由 SelectFieldGenerator.ts 按模型计算且会自动写进工具的select参数描述中方便代理发现。分页limit默认 10、最大 100见 ServerConfig.ts 的LIST_DEFAULT_LIMIT/LIST_MAX_LIMITskip用于偏移。每个列表响应都如实报告分页元数据{ returnedCount: 10, totalCount: 42, skip: 0, limit: 10, hasMore: true, data: [...] }HTTP 端点端点方法说明/mcpPOSTJSON-RPC 请求工具调用及全部 MCP 操作/mcpGET无 SSEAccept头时返回友好的 JSON 发现响应含支持的协议版本带 SSEAccept头时返回405——无状态模式不提供独立 SSE 流规范客户端会忽略它继续工作/mcpDELETENo-op无状态没有需要终止的会话/mcp/healthGET健康检查包含本构建支持的协议版本/mcp/toolsGETREST 接口列出可用工具名称 描述 总数端点行为均可在 RouteHandler.ts 中核对/mcp/health的响应还包含mode: stateless、工具总数与activeSessions: 0为保持响应结构兼容而保留。验证接入# OneUptime 云版 curl https://oneuptime.com/mcp/health # 自托管 curl https://your-oneuptime-domain.com/mcp/health列出可用工具curl https://oneuptime.com/mcp/tools # 自托管curl https://your-oneuptime-domain.com/mcp/tools典型工作流与使用示例一个典型的事件响应闭环与 MCP README 中的示例工作流一致oneuptime_whoami确认密钥所属项目→list_incidents{sort: {createdAt: DESC}, limit: 5}→acknowledge_incident→ 用list_logs带时间范围过滤与list_exception_instances调查 →add_incident_notevisibility: public向客户发布状态更新→resolve_incident。自然语言示例可直接对客户端说基本信息查询Whats the current status of all my monitors? Show me incidents from the last 24 hours监控器管理Create a new website monitor for https://example.com that checks every 5 minutes Set up an API monitor for https://api.example.com/health with a 30-second timeout Change the monitoring interval for my website monitor to every 2 minutes Disable the monitor for staging.example.com while were doing maintenance事件管理Create a high-priority incident for the database outage affecting user authentication Add a note to incident #123 saying Database connection restored, monitoring for stability Mark incident #456 as resolved Assign the current payment gateway incident to the infrastructure team团队与 On-CallList the teams in this project Show me our on-call policies状态页管理Update our status page to show Investigating Payment Issues for the payment service Create a status page announcement about scheduled maintenance this weekend公开状态页查询无需密钥Whats the current status of status.example.com? Show me recent incidents from the OneUptime status page Are there any scheduled maintenance events on status.acme.com? Get the latest announcements from my public status page with ID abc123-...复合操作Create a scheduled maintenance window for Saturday 2-4 AM, disable all monitors for api.example.com during that time, and update the status page Show me all monitors that have been down in the last hour, create incidents for any that dont already have oneAPI 密钥权限与最佳实践只读给密钥仅授予读取权限即可支撑全部get_/list_/count_工具与公开工具完全访问需要创建/更新/删除时授予 Project Admin 权限最佳实践最小权限原则定期轮换密钥在 OneUptime 中跟踪密钥使用情况不同环境使用不同密钥。错误处理与故障排查工具级错误不会以 MCP 协议错误抛出而是以带内工具结果返回isError: true并携带statusCode、details与suggestion字段——代理可以读懂错误并自我修正。这是设计意图让 LLM 具备自纠能力。权限错误确认密钥具备相应权限——列出资源需要读权限创建/更新需要写权限删除需要删权限。连接问题依次检查 OneUptime URL 是否正确、密钥是否有效、实例是否可达、/mcp/health是否正常。无效密钥核对配置中的密钥、多余空格或字符、是否已过期。会话类错误本服务器无状态不发放也不跟踪会话 ID任何请求对任何副本都有效。旧版客户端若仍发送mcp-session-id头该头会被直接忽略如果旧客户端配置假设服务器会返回会话 ID需要更新配置。自托管与二次开发MCP Server 作为 App 容器的一部分交付经 Nginx 暴露在/mcp下无需独立部署见 MCP FeatureSet README。服务器与 OneUptime API 通信的 URL 由HOST和HTTP_PROTOCOL环境变量推导经 Common/Server/EnvironmentConfig 继承服务器侧从不配置 API 密钥。开发与测试方面MCP 代码位于 App/FeatureSet/MCP随 App 服务启动时挂载App/Index.ts 经由 FeatureSet 机制初始化测试位于 App/FeatureSet/MCP/Tests覆盖了路由行为、密钥提取、协议协商、工作流工具、公开状态页工具等。在 App 目录中运行cd App npm install npx jest ./FeatureSet/MCP/Tests --runInBand新增模型接入 MCP 只需装饰EnableMCP分析型模型设置enableMCP工具生成器会在下次启动时自动为其创建工具。小结OneUptime MCP Server 的价值在于两点其一把 OneUptime 的监控、事件、告警、状态页与遥测数据以约 155 个类型安全、带安全注解的 MCP 工具暴露给 AI 代理其二无状态 Streamable HTTP 设计加上协议/响应格式协商层使其在云与自托管的多副本环境下稳定可用且对新版客户端保持前向兼容。接入只需一段客户端配置加一个最小权限的项目 API 密钥——用只读密钥起步需要写入能力时再按需放开权限或依赖MCP_READ_ONLY/MCP_ALLOW_DESTRUCTIVE在服务端硬性兜底。【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址: https://gitcode.com/GitHub_Trending/on/oneuptime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考