Skip to main content
Glama
oaslananka

MCP Health Monitor

mcp-health-monitor

MCP 服务器健康监控、正常运行时间跟踪、Azure DevOps 流水线状态,以及通过自然语言工具进行警报评估。

npm version npm downloads License: MIT Node.js

功能概述

mcp-health-monitor 会维护一份您关心的 MCP 服务器注册表,对它们执行真实的 MCP 握手,将健康历史记录在 SQLite 中,并通过 MCP 工具报告正常运行时间、延迟和警报阈值。它还跟踪 Azure DevOps 流水线,以便可以在同一位置检查应用程序健康状况和交付健康状况。

快速入门

通过 stdio 运行监控器:

npx -y mcp-health-monitor

Claude Desktop 或 VS Code MCP 配置示例:

{
  "name": "mcp-health-monitor",
  "version": "1.0.2",
  "mcpName": "io.github.oaslananka/mcp-health-monitor",
  "description": "Monitor MCP server health, uptime, response times, and Azure DevOps pipelines",
  "transport": "stdio",
  "command": "npx",
  "args": ["-y", "mcp-health-monitor"]
}

工具参考

工具

用途

典型提示词

register_server

保存要监控的 MCP 服务器

Register https://example.com/mcp as prod-gateway

check_server

对一台服务器进行实时健康检查

Check prod-gateway now

check_all

检查所有已注册的服务器

Check all my MCP servers

get_uptime

返回正常运行时间和延迟统计信息

Show 24h uptime for prod-gateway

get_dashboard

返回 JSON 仪表板数据

Give me a 24h dashboard

get_report

返回 Markdown 报告

Generate a Markdown health report for 24h

list_servers

显示已注册的服务器

List all monitored servers

unregister_server

移除服务器

Stop monitoring local-debugger

set_alert

配置阈值

Alert if prod-gateway exceeds 500ms or drops below 99% uptime

get_monitor_stats

显示监控器级别的统计信息

How many checks has the monitor recorded?

register_azure_pipelines

注册 Azure 流水线组

Track CI and Publish pipelines for my repo

check_pipeline_status

读取最新的 Azure 流水线运行情况

Check pipeline status for my release group

get_pipeline_logs

获取 Azure 构建日志

Show the failed logs for the latest Publish build

check_all_projects

结合 MCP 和 Azure 健康状况

Check all projects

Azure DevOps 集成

使用组织、项目、流水线名称和 PAT 注册流水线组:

register_azure_pipelines name="mcp-health-monitor" organization="oaslananka" project="open-source" pipeline_names=["mcp-health-monitor CI","mcp-health-monitor Publish"] pat_token="..."

在 v1.0 版本中,PAT 令牌以 base64 格式存储在本地 SQLite 数据库中。这只是编码,而非加密。请参阅 凭据存储说明。

警报配置

使用 set_alert 配置单台服务器:

字段

含义

max_response_time_ms

当检查超过此延迟时发出警报

min_uptime_percent

当选定时间窗口内的正常运行时间低于此值时发出警报

consecutive_failures_before_alert

在连续出现此次数的非正常结果后发出警报

警报由 check_server、check_all 和 get_dashboard 内联评估。Webhook 交付计划在 v1.1 中实现,v1.0.x 版本中不提供 Webhook MCP 工具。

数据存储

  • 默认数据库路径:~/.mcp-health-monitor/health.db

  • 覆盖路径:HEALTH_MONITOR_DB=/custom/path/health.db

  • 可选后台调度程序:HEALTH_MONITOR_AUTO_CHECK=1

  • HTTP 服务器健康端点:GET /health

  • 配置示例:.env.example

数据库在基于文件的数据库上使用 WAL 模式,并在启动时自动应用模式迁移。

Docker

构建并运行:

docker build -t mcp-health-monitor .
docker run --rm -p 3000:3000 -e HEALTH_MONITOR_AUTO_CHECK=1 mcp-health-monitor

然后检查:

curl http://localhost:3000/health

开发

npm install
npm run build
npm test
npm run test:integration
npm run lint
npm run lint:test
npm run format:check

在默认 Node 运行时版本高于项目目标版本的开发机上,请使用 npx --yes -p node@20.19.0 -p npm@10.8.2 npm <command>。

架构

高级模块图:

  • src/app.ts: MCP 工具注册和响应格式化

  • src/checker.ts: 带有重试/退避机制的实时 MCP 连接探测

  • src/registry.ts: 用于服务器、检查和流水线记录的 SQLite 读/写路径

  • src/db.ts + src/migrations.ts: 连接设置和模式升级

  • src/server-http.ts + src/mcp.ts: HTTP 和 stdio 入口点

  • src/scheduler.ts: 可选的后台自动检查循环

更多详细信息请参阅 architecture.md。

路线图

详细的里程碑规划请参阅 ROADMAP.md。

  • [x] v1.0: 核心监控、正常运行时间、警报、Azure 流水线、Markdown 报告

  • [ ] v1.1: Slack、Discord 和自定义端点的 Webhook 通知

  • [ ] v1.2: 多提供商流水线和通用 HTTP 监控

  • [ ] v2.0: 加密 PAT 存储和多用户支持

安全性

请阅读 SECURITY.md 以了解漏洞报告,并阅读 docs/security.md 以了解特定于实现的存储详细信息。

贡献

请参阅 contributing.md 以了解设置、标准和 PR 期望。

许可证

MIT

Available Tools

14 tools
check_allCheck All ServersB
Read-only

Check health of all registered MCP servers in parallel.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_msNo
tagsNoFilter by tags

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the behavioral trait 'in parallel', which is valuable but does not disclose other traits like rate limits or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single short sentence is concise but lacks structure; it omits important details that could be added without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple health check tool with 2 parameters and no output schema, the description is minimally adequate but does not explain return values, error scenarios, or the parallel behavior in detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (tags has description, timeout_ms does not). The description does not add any parameter explanation, so the agent must rely solely on schema for parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Check health') and the resource ('all registered MCP servers') with a specific detail ('in parallel'), distinguishing it from siblings like 'check_server' (singular) and 'check_all_projects' (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like 'check_server' or 'check_pipeline_status'. The description mentions parallel execution but does not specify context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_all_projectsCheck All Projects HealthA
Read-only

Check both MCP server health and Azure DevOps pipeline status across all registered projects.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_msNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive behavior. The description adds the scope (across all projects) but omits potential issues like partial failures or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with 14 words, front-loaded with key action, no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple health check tool, but missing details about output format and the timeout parameter's role. No output schema exists to compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter (timeout_ms) with 0% description coverage, and the description does not mention it, failing to provide guidance on usage or impact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it checks both MCP server health and Azure DevOps pipeline status across all projects, distinguishing it from sibling tools like check_pipeline_status (single pipeline) and check_server (single server).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for a comprehensive health overview but does not explicitly clarify when to prefer this tool over siblings like check_all or get_monitor_stats. No exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_pipeline_statusCheck Azure Pipeline StatusA
Read-only

Get the latest run status of registered Azure DevOps pipelines for one group or all groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_nameNoFilter by group name (e.g. "mcp-ssh-tool"). Omit for all groups.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, establishing a safe read operation. The description confirms this with 'Get', but adds no further behavioral details such as response format, error handling, or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence of 14 words, containing no redundant information. It efficiently conveys the tool's purpose and filter capability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter, no output schema), the description adequately covers the core functionality. It lacks detail on the return structure or edge cases, but is sufficient for a straightforward read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents the 'group_name' parameter as filtering by group name with an example. The tool description adds no additional meaning beyond restating 'one group or all groups'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get'), the resource ('latest run status of registered Azure DevOps pipelines'), and the scope ('one group or all groups'). It effectively differentiates from sibling tools like 'get_pipeline_logs' and 'check_all'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention specific contexts or exclusions. For example, it could indicate that 'check_all' is for a broader overview or that 'get_pipeline_logs' is for detailed logs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_serverCheck Server HealthC
Read-only

Check the health of a registered MCP server, list tools, and measure response time.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesServer name to check
timeout_msNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that the tool lists tools and measures response time, which is useful but doesn't disclose significant behavioral traits beyond what annotations indicate. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that concisely states the tool's actions, though listing three actions in one sentence could be clearer with separate points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and only two parameters, the description fails to explain what 'health' means, what the response format is, or how the timeout parameter affects behavior, leaving the agent without sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (only 'name' is described). The description does not add meaning for 'timeout_ms' or clarify parameter formats, leaving gaps that the schema alone doesn't fill.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks health, lists tools, and measures response time for a registered MCP server. It distinguishes from siblings like check_pipeline_status but could be more specific versus check_all.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like check_all or list_servers, leaving the agent to infer context from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dashboardGet Health DashboardA
Read-only

Get a dashboard overview of all registered MCP servers with uptime and performance stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
include_tool_statsNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint false. Description adds behavioral context: returns a dashboard of all servers with specific metrics (uptime, performance). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, concise sentence that immediately conveys purpose. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple read-only dashboard tool with clear annotations. Could mention the return format or what 'performance stats' includes, but not critical given simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameter descriptions in either schema or tool description. Schema has 0% description coverage. While parameter names and defaults hint at meaning (hours for time range, include_tool_stats flag), the description fails to explain them, forcing inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it retrieves a dashboard overview of all registered MCP servers with uptime and performance stats. Distinct from sibling tools like get_uptime (specific server) and get_monitor_stats (detailed stats).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use (overview of all servers), but does not explicitly mention when not to use or list alternatives. Suggests it's for high-level monitoring.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_monitor_statsGet Monitor StatisticsA
Read-only

Get statistics about the health monitor itself, including database activity.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint true and destructiveHint false, so the safety profile is covered. The description adds minor context about the contents (database activity) but does not disclose any additional behaviors such as pagination or return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 12 words, concise and immediately clear. It contains no filler or repeated information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple no-parameter tool with read-only annotations, the description adequately conveys the purpose. It could be more detailed about what statistics are included, but it's sufficient for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, which sets a baseline of 4. The schema has no properties and the description doesn't need to explain parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and names the resource ('statistics about the health monitor itself'), clearly distinguishing it from sibling tools that target pipelines, servers, or targets. The addition 'including database activity' gives concrete scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives is provided. It doesn't reference any conditions or exclusions relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pipeline_logsGet Pipeline LogsA
Read-only

Fetch logs from a specific Azure DevOps build to investigate pipeline failures.

ParametersJSON Schema
NameRequiredDescriptionDefault
group_nameYesPipeline group name
pipeline_nameYesSpecific pipeline name (e.g. "mcp-ssh-tool CI")
build_idNoSpecific build ID. If omitted, fetches the latest build.
failed_onlyNoOnly return logs from failed steps

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds 'to investigate pipeline failures' but doesn't disclose additional behavioral traits like pagination or log format. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no fluff, directly states purpose and context. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description could explain return format (e.g., text logs), but the input parameters are fully described in the schema. The addition of 'to investigate pipeline failures' provides usage context. Slightly incomplete but adequate for a simple logs tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema; it mentions investigating failures but doesn't tie directly to parameters like failed_only. It meets the minimum but doesn't enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches logs from a specific Azure DevOps build to investigate pipeline failures. The verb 'fetch' and resource 'logs' are specific, and the context of investigating failures distinguishes it from sibling tools like check_pipeline_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for investigating pipeline failures but does not explicitly state when not to use it or mention alternatives like check_pipeline_status for overall status checks. The intent is clear but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_reportGet Health Report (Markdown)A
Read-only

Get a human-readable Markdown health report for all servers. Paste directly into chat or docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context by stating the output is human-readable Markdown and covers all servers. This goes beyond annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the purpose. Every word adds value; no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter and no output schema. The description covers purpose and output format adequately but omits description of the parameter, leaving a gap for agents to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention the 'hours' parameter. The agent must rely solely on the schema (which has constraints but no description) to understand its meaning. For a simple parameter, this is a notable gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get', the resource 'health report', the scope 'all servers', and the output format 'Markdown'. It distinguishes itself from siblings like 'check_server' (per-server) and 'get_dashboard' (likely visual).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions pasting into chat or docs, implying usage context. However, it does not specify when to use this tool versus alternatives like 'check_server' or 'check_all', nor does it provide exclusions. The guidance is clear but incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_uptimeGet Uptime StatisticsA
Read-only

Get uptime history and statistics for a registered MCP server.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesServer name
hoursNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false. The description adds 'history and statistics', aligning with read-only behavior, but provides no additional behavioral traits like permissions or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no fluff, front-loaded with verb and resource. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, but the description does not mention return format or statistics included. For a simple 2-param tool, it is moderately complete but could clarify output to fully compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (only 'name' has a schema description). The description adds no parameter semantics; it does not explain 'hours' meaning or usage beyond what the schema shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'uptime history and statistics for a registered MCP server'. It is distinct from sibling tools like check_server (health check) and get_monitor_stats (monitoring stats).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly guide when to use this tool versus alternatives like check_server or get_monitor_stats. Usage is implied by the context of 'uptime history', but no exclusions or alternative tool names are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_serversList Registered ServersC
Read-only

List all registered MCP servers with their current status.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
statusNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds nothing beyond stating the action. It does not disclose any additional behavioral traits such as rate limits, data freshness, or implications of filtering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, no fluff, but lacks essential information about parameters. It is concise at the expense of completeness. For a tool with 2 optional params, a brief mention of filtering would improve without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has two optional parameters and no output schema, the description should explain the filtering options and return value. It only says 'with their current status' which is vague. The description is insufficient for an agent to understand the full capability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain the 'tags' or 'status' parameters. The description mentions 'all' servers but does not hint at optional filtering, leaving the agent unaware of how to use the input parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'list' and resource 'registered MCP servers', with 'current status' added. This distinguishes it from sibling tools like check_server (which likely checks a specific server) and register/unregister (which mutate). The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like check_all, get_dashboard, etc. The description does not provide context about typical use cases or comparisons, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_azure_pipelinesRegister Azure DevOps PipelinesB

Register Azure DevOps pipelines to monitor for CI, publish, and mirror status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesFriendly name for this pipeline group (e.g. "mcp-ssh-tool")
organizationYes
projectYes
pipeline_namesYesAzure pipeline names to monitor (e.g. ["mcp-ssh-tool CI", "mcp-ssh-tool Publish"])
pat_tokenYesAzure DevOps PAT - stored as base64 encoding in the local DB

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate it is not read-only, not destructive, and has open-world side effects. The description does not add behavioral details beyond the purpose, such as that it persists registration data, requires PAT authentication, or updates existing records. Key behaviors like storing the token as base64 are only in the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence of 12 words with no redundancy. It efficiently conveys the core purpose without extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 required parameters and no output schema, the description is too minimal. It does not explain what happens after registration, whether updates or overwrites occur, or any return value. Important context like prerequisites (e.g., PAT scopes) or error handling is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 60% (3 of 5 params have descriptions). The tool description does not add any parameter-specific information beyond what the schema already provides. For the params 'organization' and 'project' without schema descriptions, the description fails to clarify them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (register), the resource (Azure DevOps pipelines), and the purpose (to monitor for CI, publish, and mirror status). This distinguishes it from sibling tools like 'register_server' which register a different resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for setting up monitoring of pipelines, but does not explicitly state when to use this tool versus alternatives (e.g., 'register_server') or provide any 'when not to use' guidance. No exclusions or context for selection are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_serverRegister MCP ServerA

Register an MCP server to monitor. Supports http, sse, and stdio transports.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesUnique name for this MCP server
typeYesTransport type: http (Streamable HTTP), sse (legacy SSE), stdio
urlNoURL for http/sse servers (e.g. https://mcp-ssh-tool.onrender.com/mcp)
commandNoCommand for stdio servers (e.g. npx mcp-debug-recorder)
argsNoArgs for stdio command
tagsNoTags for grouping
alert_on_downNoAlert when server goes down
check_interval_minutesNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate write-only and non-destructive behavior. Description adds transport support context but omits details like immediate monitoring start, authentication needs, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is front-loaded with the main action and resource, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and sibling management tools, the description is too minimal. It does not explain return value, error conditions, or how registration affects monitoring.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 88% of parameters; the description adds value by explaining the 'type' parameter enum values (http, sse, stdio) and their meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Register') and the resource ('an MCP server to monitor'), and distinguishes from sibling tools like list_servers and unregister_server by noting supported transports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for registering new servers but lacks explicit guidance on prerequisites, when to use vs alternatives like register_azure_pipelines, or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_alertSet Alert ThresholdsA

Configure alert thresholds for response time, uptime, and consecutive failures.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesServer name
max_response_time_msNoAlert if response time exceeds this
min_uptime_percentNoAlert if uptime drops below this
consecutive_failures_before_alertNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-destructive mutation (readOnlyHint=false, destructiveHint=false). The description adds context that it configures specific metrics, though it doesn't elaborate on side effects (e.g., whether existing alerts are overwritten) or authorization needs. With annotations covering safety, the description provides reasonable added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, clear sentence with no wasted words. It efficiently conveys the tool's purpose, though a slightly more structured format (e.g., listing fields) could improve readability. Still well within acceptable conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters and no output schema. The description does not explain return values, confirmation behavior, or interaction effects. For a configuration operation, details on success indicators or apply timing would improve completeness. Adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (3 of 4 parameters have descriptions). The tool description does not add extra meaning beyond what the schema provides, and it fails to compensate for the undocumented 'consecutive_failures_before_alert' parameter. Thus, it adds minimal value semantically.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool configures alert thresholds for response time, uptime, and consecutive failures. It uses specific verbs and resources, distinguishing it from sibling tools like check_all or get_uptime which are for monitoring or reading data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It is implied for setting thresholds, but no when-not conditions or comparisons to sibling configuration tools are provided. Adequate but lacks proactive direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unregister_serverUnregister ServerB
Destructive

Remove a server from monitoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set destructiveHint=true, so the description adds minimal extra behavioral context. It does not detail consequences (e.g., irreversible? affects ongoing checks?) beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no redundancy. It is front-loaded and efficient, though it could arguably benefit from a bit more detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (one parameter, destructive hint, no output schema), the description barely covers the essentials. It lacks parameter explanation and post-condition information, leaving an agent with insufficient context for safe use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description provides no explanation of the 'name' parameter (e.g., what identifier/format). The agent has no additional context beyond the schema's type definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Remove a server from monitoring' clearly identifies the action (remove), resource (server), and context (from monitoring). This distinguishes it from siblings like 'register_server' (add) and 'list_servers' (list).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for unregistering a server that has been previously registered, but it does not explicitly state when to use it over alternatives or provide exclusions. No guidance on prerequisites or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv1.0.3
    • First observedcheck_all
    • First observedcheck_all_projects
    • First observedcheck_pipeline_status
    • First observedcheck_server
    • First observedget_dashboard
    • First observedget_monitor_stats
    • First observedget_pipeline_logs
    • First observedget_report
    • First observedget_uptime
    • First observedlist_servers
    • First observedregister_azure_pipelines
    • First observedregister_server
    • First observedset_alert
    • First observedunregister_server

TDQS

A3.6/5.0

Scored across 14 tools

Disambiguation4/5

Most tools are clearly distinct: registration, checks, logs, alerts, reports, and stats each target a different concern. However, 'get_dashboard' and 'get_report' overlap significantly (both provide overviews of monitored servers), and 'check_all' vs 'check_all_projects' could be confused by an agent (one covers only servers, the other covers servers plus pipelines).

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (register_*, check_*, get_*, set_*, list_*, unregister_*). Even the compound 'check_all_projects' fits the pattern as a verb with a clear object. There are no mixed naming conventions or vague verbs like 'process' or 'execute'.

Tool Count5/5

14 tools is well within the ideal 3-15 range. Each tool has a specific purpose in the monitoring domain, and the count supports comprehensive coverage without overwhelming an agent. The tool set is broad enough to cover registration, health checks, pipeline status, logs, reports, alerts, and stats.

Completeness4/5

The tool surface covers the core lifecycle: register, check, unregister, get logs, get history, get reports, and set alerts. Minor gaps include lack of explicit update/edit for registered servers or pipelines (e.g., changing transport or platform), and no tool to pause/resume monitoring, but agents can often work around those by re-registering.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors