On-Call Health

io.github.Rootly-AI-Labs由 GitHub 账号 Rootly-AI-Labs 发布v0.4.1更新于 Nov 5, 2026

On-call burnout analysis: team risk summaries, at-risk responders, daily health trends.

发布方自己的服务:Rootly

概览

AI 生成的概览

将助手连接到 On-Call Health,用于运行值班倦怠风险分析,并找出高风险或状态良好的值班人员。

可以做什么
  • 检查并列出已连接的集成(Rootly、GitHub、Slack、Jira、Linear),查看当前值班人员
  • 启动、轮询并查看健康分析,包括最近一次分析及其状态
  • 读取团队汇总,含平均值、风险分布以及风险最高和最低的成员
  • 查找高风险人员、可替补的健康人员以及单个成员的每日健康趋势
  • 在需要全部字段时获取完整的原始分析数据
适用场景
适合工程经理和值班负责人让助手审视团队工作负荷、识别过度劳累风险较高的值班人员,并基于已同步到 On-Call Health 的数据建议更合理的排班。
运行要求
通过 uvx 以 stdio 在本地运行(PyPI 包 oncallhealth-mcp),也可自建 HTTP 服务。需要 On-Call Health 账号,并通过环境变量 ONCALLHEALTH_API_KEY 提供 API 密钥;需能访问 On-Call Health API。可选配置包括 API 地址、轮询间隔和 Code Mode。
安装前请注意
API 密钥属于机密,不要提交到版本库或写入会被提交的配置文件。分析在后端启动,超时后可能仍在继续运行。结果包含可识别的个人健康与工作负荷数据,应按敏感信息处理。评分是工作负荷指标,并非医学诊断。

安装

在 SourceWeft 中

  1. 打开 控制台中的 On-Call Health,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

oncallhealth-mcp

[PyPI version] [Python 3.10+]

MCP server for On-Call Health burnout analysis. Connects AI assistants to your on-call data for workload insights.

Prerequisites

Installation

The server runs locally over stdio with uvx (no install step) and reads the API key from the ONCALLHEALTH_API_KEY environment variable. Pick your client:

Claude Code

bash
claude mcp add oncallhealth --env ONCALLHEALTH_API_KEY=och_live_... -- uvx oncallhealth-mcp

Claude Desktop

Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json):

json
{  "mcpServers": {    "oncallhealth": {      "command": "uvx",      "args": ["oncallhealth-mcp"],      "env": { "ONCALLHEALTH_API_KEY": "och_live_your_api_key_here" }    }  }}

Cursor

Add to .cursor/mcp.json in your project (or ~/.cursor/mcp.json for global):

json
{  "mcpServers": {    "oncallhealth": {      "command": "uvx",      "args": ["oncallhealth-mcp"],      "env": { "ONCALLHEALTH_API_KEY": "och_live_your_api_key_here" }    }  }}

VS Code / GitHub Copilot

Add to .vscode/mcp.json in your project:

json
{  "servers": {    "oncallhealth": {      "command": "uvx",      "args": ["oncallhealth-mcp"],      "env": { "ONCALLHEALTH_API_KEY": "och_live_your_api_key_here" }    }  }}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

json
{  "mcpServers": {    "oncallhealth": {      "command": "uvx",      "args": ["oncallhealth-mcp"],      "env": { "ONCALLHEALTH_API_KEY": "och_live_your_api_key_here" }    }  }}

Codex CLI

bash
codex mcp add oncallhealth --env ONCALLHEALTH_API_KEY=och_live_... -- uvx oncallhealth-mcp

Gemini CLI

bash
gemini mcp add oncallhealth -e ONCALLHEALTH_API_KEY=och_live_... uvx oncallhealth-mcp

Manual / other clients

bash
pip install oncallhealth-mcpexport ONCALLHEALTH_API_KEY=och_live_...oncallhealth-mcp

Or run without installing: ONCALLHEALTH_API_KEY=och_live_... uvx oncallhealth-mcp.

Configuration

VariableRequiredDefaultDescription
ONCALLHEALTH_API_KEYYes (stdio)-API key from oncallhealth.ai
ONCALLHEALTH_API_URLNohttps://api.oncallhealth.aiAPI endpoint URL
ONCALLHEALTH_CODE_MODENooff1 exposes the catalog through Code Mode meta-tools (see below)
ONCALLHEALTH_POLL_INTERVALNo5.0Seconds between status checks inside analysis_run (backs off to ONCALLHEALTH_POLL_MAX_INTERVAL, default 30.0)
ONCALLHEALTH_MCP_ALLOWED_HOSTSNo-HTTP only: comma-separated host names that enable the Host/Origin DNS-rebinding guard

Request timeouts, retries and circuit-breaker settings are also configurable; see oncallhealth_mcp/client/config.py.

Security note

Avoid committing API keys to version control. Use environment variables or a secrets manager instead of hardcoding keys in config files.

Protocol compatibility

The server implements MCP revision 2026-07-28 (stateless Streamable HTTP, Mcp-Method/Mcp-Name routing headers, cacheable list results, the Tasks extension) and negotiates older revisions per connection, so clients on the 2025 handshake-era protocol keep working. Every tool publishes annotations (read-only, idempotent, open-world) and a structured output schema. The deprecated HTTP+SSE transport is not served.

Tools

Start with validate_integrations, then analysis_current (or analysis_run for a fresh analysis), then analysis_summary and the member-level tools.

ToolWhat it does
validate_integrationsCheck that every connected integration has valid credentials. force_refresh bypasses the backend cache.
integrations_listList connected Rootly, GitHub, Slack, Jira and Linear integrations.
oncall_usersWho is currently on call for a Rootly integration (integration_id).
analysis_currentMetadata of the most recent analysis (status, timestamps, config).
analysis_runStart an analysis and wait for it: days_back (default 30), include_weekends, integration_id, wait_timeout_seconds (default 600). Returns the team summary. Runs as a background task for clients that support the MCP Tasks extension, inline otherwise, with progress messages while waiting.
analysis_startStart an analysis without waiting. Poll with analysis_status.
analysis_statusStatus and metadata of an analysis (analysis_id).
analysis_summaryTeam averages, risk distribution, top five at-risk and healthiest members.
analysis_resultsFull raw payload of a completed analysis (large; prefer the focused tools).
get_at_risk_usersMembers at or above min_och_score (default 50) in include_risk_levels (default ["medium", "high"]), with Rootly/PagerDuty/Slack/GitHub IDs.
get_safe_respondersMembers at or below max_och_score (default 30) who could take extra shifts, up to limit.
check_users_riskRisk check for specific rootly_user_ids (list of integers), split into at-risk, healthy and not-found.
member_daily_healthDay-by-day health, incident and after-hours breakdown for member_email.

OCH scores run 0-100; higher means more at risk. Scores inform staffing decisions and are not a medical diagnosis.

Resources

URIContent
oncallhealth://methodologyShort description of the scoring methodology
oncallhealth://analyses/latestMetadata of the most recent analysis (JSON)
oncallhealth://analyses/{analysis_id}/summaryTeam summary of a completed analysis (JSON)

Prompts

PromptArgumentsPurpose
weekly_briefteam_nameWeekly on-call health brief with follow-up actions
investigate_respondermember_email, analysis_idDig into one responder's trend and recommend shift changes

Code Mode (optional)

With --code-mode or ONCALLHEALTH_CODE_MODE=1 the catalog is exposed through FastMCP Code Mode: three meta-tools (search, get_schema, execute) let an agent discover tools on demand and chain calls in a sandboxed Python snippet. It saves context when an agent needs many calls per task, at the cost of hiding the tool list, annotations and output schemas from clients that read them directly. Off by default.

CLI reference

usage: oncallhealth-mcp [-h] [--transport {stdio,http}] [--host HOST]                        [--port PORT] [--code-mode] [-v] [--version]
options:  --transport {stdio,http}  Transport to use (default: stdio)  --host HOST               Host to bind to (http transport only, default: 127.0.0.1)  --port PORT               Port to bind to (http transport only, default: 8000)  --code-mode               Expose the catalog through Code Mode meta-tools  -v, --verbose             Enable verbose logging  --version                 show program's version number and exit

Hosted deployment (Streamable HTTP)

oncallhealth-mcp --transport http (or the Docker image, which runs uvicorn oncallhealth_mcp.transport:mcp_http_app) serves:

  • POST /mcp: stateless Streamable HTTP MCP endpoint
  • GET /health: unauthenticated health check

Every MCP request must carry the user's API key as Authorization: Bearer och_...; X-API-Key: och_... is accepted as well. Keys are verified against the On-Call Health API (successful checks are cached for five minutes) and unauthenticated requests get 401 before any tool runs. Tool calls are rate limited per key and per tool (for example analysis_run and analysis_start at 5/minute) identified from the JSON-RPC body, with 429 and Retry-After on excess.

Example remote client configuration (Claude Code):

bash
claude mcp add --transport http oncallhealth https://your-host/mcp --header "Authorization: Bearer och_live_..."

Because the server is stateless you can run several uvicorn workers or replicas. For analysis_run background tasks to be shared across workers, point FastMCP's task backend at Redis or Valkey with FASTMCP_DOCKET_URL; the default in-memory backend is per process.

Set ONCALLHEALTH_MCP_ALLOWED_HOSTS=mcp.example.com to enable FastMCP's Host/Origin DNS-rebinding guard for the public host name.

bash
docker build -t oncallhealth-mcp .docker run -p 8080:8080 oncallhealth-mcp

Links

License

Apache-2.0

来源:README.md,提交 918da0c

工具

13

validate_integrations

Validate Integrations

Check that every connected integration has valid credentials. Call this before starting an analysis. Returns per-integration validation status (GitHub, Slack, Jira, Linear) and an all_valid flag.

输入参数force_refresh

integrations_list

Integrations List

List connected integrations (Rootly, GitHub, Slack, Jira, Linear).

无需输入参数。

oncall_users

Oncall Users

Get the users currently on call for a Rootly integration. Cross-reference the returned emails with analysis data (for example get_at_risk_users) to see whether anyone currently on call is at risk.

输入参数integration_id必填

analysis_current

Analysis Current

Get the most recent analysis for the current account. Returns metadata only (status, timestamps, configuration). Use analysis_summary with the returned id for the team overview.

无需输入参数。

analysis_run

Analysis Run

Start a new health analysis, wait for it to finish, and return the summary. Runs as a background task for clients that support the MCP Tasks extension and inline otherwise. Progress messages report the analysis status while waiting. On timeout the analysis keeps running on the backend; use analysis_status with the reported analysis_id to pick it up later.

输入参数days_backintegration_idinclude_weekendswait_timeout_seconds

analysis_start

Analysis Start

Start a new health analysis without waiting for it. Poll analysis_status until status is "completed", then use analysis_summary. Prefer analysis_run when you want a single call that waits for the result.

输入参数days_backintegration_idinclude_weekends

analysis_status

Analysis Status

Get the status and metadata of an analysis.

输入参数analysis_id必填

analysis_summary

Analysis Summary

Get a condensed team summary of a completed analysis. Returns team averages, the risk-level distribution and the five most and least at-risk members. Use analysis_results only when you need every field.

输入参数analysis_id必填

analysis_results

Analysis Results

Get the full raw results for a completed analysis. WARNING: Returns complete data for 80+ members with ~40 fields each and may overwhelm a context window. Prefer analysis_summary, get_at_risk_users or member_daily_health unless you need every field.

输入参数analysis_id必填

get_at_risk_users

Get At Risk Users

Get users at or above a health-risk threshold with their external IDs. Use this to identify at-risk responders and correlate them with Rootly, PagerDuty, Slack or GitHub using the returned platform IDs. Results are sorted by OCH score, highest risk first.

输入参数analysis_id必填min_och_scoreinclude_risk_levels

get_safe_responders

Get Safe Responders

Get users with low health risk who could take additional on-call shifts. Use this to find replacement responders when removing at-risk users from schedules. Results are sorted by OCH score, healthiest first.

输入参数limitanalysis_id必填max_och_score

check_users_risk

Check Users Risk

Check health risk for specific users by their Rootly user IDs. Use this after fetching a schedule from Rootly to see whether any scheduled responders are at risk. A user is at risk when their OCH score is at or above min_och_score or their risk level is medium or high.

输入参数analysis_id必填min_och_scorerootly_user_ids必填

member_daily_health

Member Daily Health

Get the day-by-day health breakdown for one team member. Shows per-day health scores, incident counts and after-hours activity over the analysis period (only days with data are included).

输入参数analysis_id必填member_email必填

版本历史

1
  1. v0.4.1最新Nov 5, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Rootly 集成