Mackerel MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Mackerel MCP Servershow current alerts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Mackerel MCP Server
A Model Context Protocol server for interacting with Mackerel.
Configuration
The MCP server can be run either via Docker or npx.
Running via Docker
{
"mcpServers": {
"mackerel": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"MACKEREL_APIKEY",
"ghcr.io/mackerelio-labs/mcp-server:latest"
],
"env": {
"MACKEREL_APIKEY": "${MACKEREL_APIKEY}"
}
}
}
}Related MCP server: metabase-mcp-server
Running via npx
{
"mcpServers": {
"mackerel": {
"command": "npx",
"args": [
"-y",
"@mackerel/mcp-server"
],
"env": {
"MACKEREL_APIKEY": "${MACKEREL_APIKEY}"
}
}
}
}Available tools
list_alerts- Retrieve alerts.get_alert- Retrieve a specific alert.get_alert_logs- Retrieve logs for a specific alert.list_dashboards- Retrieve dashboards.get_dashboard- Retrieve a specific dashboard.update_dashboard- Update a specific dashboard.list_hosts- Retrieve hosts.get_host_metrics- Retrieve metrics data for a specific host.list_services- Retrieve services.get_service_metrics- Retrieve metrics data for a specific service.list_monitors- Retrieve monitor configurations.get_monitor- Retrieve a specific monitor configuration.get_trace- Retrieve trace data by trace ID for distributed tracing analysis.list_traces: - Search and retrieve traces.list_http_server_stats- Retrieve HTTP server statistics.list_db_query_stats- Retrieve database query statistics.search_logs- Search logs of a service.
Available Tools
17 toolsget_alertGet AlertARead-only
Retrieve a specific alert by ID from Mackerel.
š USE THIS TOOL WHEN USERS:
Investigate a particular alert
| Name | Required | Description | Default |
|---|---|---|---|
| alertId | Yes | The ID of the alert to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds only the source system and an example call; it says nothing about what an alert record contains or what happens if the ID is unknown (error vs empty), which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a short usage block and one example; nothing is redundant. The header/emoji markup and the stray closing </example> tag are minor noise but cost nothing in clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only getter with 100% schema coverage and declared readOnlyHint, the description plus schema is nearly sufficient. The only missing piece is return-shape information, which has no output schema to carry it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as "The ID of the alert to retrieve." The example (alertId=3Yr) adds a hint about ID format, but otherwise the description defers entirely to the schema ā the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Retrieve a specific alert by ID") and names the source system, Mackerel. The singular "by ID" implicitly contrasts with the sibling list_alerts, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "USE THIS TOOL WHEN USERS: Investigate a particular alert" block gives a clear triggering condition, reinforced by a worked example. It does not, however, tell the agent when to prefer list_alerts or get_alert_logs instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alert_logsGet Alert LogsARead-only
Retrieve logs for a specific alert by ID from Mackerel.
š USE THIS TOOL WHEN USERS:
View status change history for a specific alert
Investigate alert transitions and their reasons
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of alert logs to retrieve. When omitted, up to 100 logs are retrieved. The most that can be specified is 100 | |
| nextId | No | If specified, alert logs older than the specified are retrieved | |
| alertId | Yes | The ID of the alert to retrieve logs for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read. The description adds useful context that returned logs are status-change history with transition reasons, but says nothing about ordering, pagination semantics, or response shape beyond that. With annotations covering safety, this is a modest but real addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by short usage bullets and a code example, with no redundant prose. The emoji section header and the 'USE THIS TOOL WHEN USERS' scaffolding are mild padding but do not bury the key line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read tool with full schema coverage and a readOnly annotation, the definition covers purpose, triggering conditions, and an invocation example. Only the returned log fields/ordering are left unexplained, which is a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with limit, nextId, and alertId all documented in the schema itself. The description only restates alertId and shows the ID format via the example (alertId=3Yr); it adds no meaning beyond the structured fields, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve logs for a specific alert by ID from Mackerel. This is clearly distinct from list_alerts (enumeration) and get_alert (the alert object itself), though the description never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use bullets (view status change history, investigate alert transitions and reasons) plus a concrete call example. Missing any exclusion or pointer to the sibling get_alert for the alert's current state, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboardGet DashboardARead-only
Retrieve a specific dashboard by ID from Mackerel.
š USE THIS TOOL WHEN USERS:
Get details of a specific dashboard
View dashboard configuration and widgets
| Name | Required | Description | Default |
|---|---|---|---|
| dashboardId | Yes | The ID of the dashboard to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already tells the agent this is a safe read operation. The description adds that it retrieves dashboard configuration and widgets, but does not describe permissions, failure behavior, or other operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the description is reasonably short. The use-case bullets and example are helpful, though some content restates the initial retrieval sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only lookup, the definition is complete enough: the operation, ID parameter, and general returned content are clear. It could be improved by noting that list_dashboards can be used to find an unknown dashboard ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single dashboardId parameter is already documented by the schema. The example shows a sample ID value, but the description does not add significant semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve a specific dashboard by ID from Mackerel. It is clear what the tool does, though it does not explicitly contrast itself with siblings such as list_dashboards or update_dashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' section gives clear scenarios for retrieving dashboard details and viewing configuration/widgets. It provides when-to-use guidance but does not explicitly state when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_host_metricsGet Host MetricsARead-only
Retrieve metrics data for a specific host from Mackerel.
š USE THIS TOOL WHEN USERS:
Get metrics data for a specific host
Analyze host performance over time
š AVAILABLE METRIC NAMES:
Standard metrics (mackerel-agent): loadavg5, cpu.user, memory.used, disk.sda1.reads, network.eth0.rxBytes, etc.
Custom metrics: custom.myapp.* (user-defined metrics)
AWS integration: ec2.cpu.used, rds.database_connections.used, etc.
Azure integration: azure.virtual_machine.cpu.percent, azure.sql_database.cpu.percent, etc.
GCP integration: gce.instance.cpu.used, etc.
Get custom metric
get_host_metrics(hostId="host123", name="custom.myapp.response_time", from=1609459200, to=1609462800)Get AWS EC2 CPU utilization
get_host_metrics(hostId="host123", name="ec2.cpu.used", from=1609459200, to=1609462800)| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The end of the time period you want metrics for (unix time) | |
| from | Yes | The start of the time period you want metrics for (unix time) | |
| name | Yes | Metric name (e.g., loadavg5, cpu.user, memory.used, custom.myapp.*, ec2.cpu.used, etc.) | |
| hostId | Yes | Host ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful metric-name categories, but does not disclose return format, time-series granularity, rate limits, or constraints on the time range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded and organized into purpose, usage, metric names, and examples. It is somewhat lengthy with emoji headings and repetitive examples, but the content is generally purposeful for metric selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains how to call the tool and which metric names are available. However, with no output schema, it does not describe the return shape or time-series format, and it omits constraints such as maximum time range or data resolution.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four required parameters. The description adds meaningful guidance for the name parameter by enumerating standard, custom, AWS, Azure, and GCP metric naming conventions, plus concrete examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve metrics data for a specific host from Mackerel. It does not explicitly differentiate from the sibling get_service_metrics, but the host-specific scope makes the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' section gives a clear context for host metrics and performance analysis, but it largely restates the purpose. It provides no when-not conditions or explicit alternatives such as get_service_metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monitorGet MonitorARead-only
Retrieve a specific monitor configuration by ID from Mackerel.
š USE THIS TOOL WHEN USERS:
Get details of a specific monitor
| Name | Required | Description | Default |
|---|---|---|---|
| monitorId | Yes | Monitor ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the annotation carries the safety profile. The description adds no extra behavior beyond that: nothing about what happens with an unknown ID, error responses, or what fields the configuration contains. With annotations covering the basics, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose followed by a usage condition and one compact example. The 'USE THIS TOOL WHEN USERS: Get details of a specific monitor' bullet slightly restates the first sentence, a minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with readOnlyHint annotations and no output schema, the description covers the essentials for correct invocation. It could briefly say what the returned configuration includes or how to handle an unknown ID, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single monitorId parameter, so the baseline is 3. The example value ('2cSZzK3XfmB') usefully illustrates the ID format, but no additional semantics (scope, permissions, whether the ID is the display ID) are added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve a specific monitor configuration by ID from Mackerel'), so an agent can distinguish it from the sibling list_monitors. It stops short of explicitly naming the list vs. get distinction, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' block gives clear context ('Get details of a specific monitor') and a concrete example call. It lacks an explicit exclusion or an alternative reference (e.g., use list_monitors to enumerate), so it falls short of the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_service_metricsGet Service MetricsARead-only
Retrieve metrics data for a specific service from Mackerel.
š USE THIS TOOL WHEN USERS:
"Service metrics" are metrics that correspond to a service that consists of multiple hosts and their collective roles
The following can be visualized and monitored.
The total number of registered users in a service
The number of PVs for a website
Business related KPIs such as sales or the number of orders received from EC sites
š AVAILABLE METRIC NAMES:
Custom metrics: http.response_time, sales.count, analytics.page_view, etc.
Get service page views
get_service_metrics(serviceName="web", name="analytics.page_view", from=1609459200, to=1609462800)| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The end of the time period you want metrics for (unix time) | |
| from | Yes | The start of the time period you want metrics for (unix time) | |
| name | Yes | Metric name (e.g., __externalhttp.responsetime.<monitorId>, sales.count, analytics.page_view, etc.) | |
| serviceName | Yes | Service name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's main job is to add beyond that. It clarifies the metric namespace and gives concrete call examples, but says nothing about pagination, rate limits, or the shape of returned series data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage guidance, and the examples are genuinely useful for the tricky metric-name format. The emoji-headed bullet lists add some visual bulk but each section earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with no output schema, the description supplies what the agent needs to pick it and form a valid metric name. Only the return-format and empty-result behavior remain unspecified, which is a minor gap given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented and the 'name' param already carries the same example metric names. The description reinforces the metric-name formats and shows them in context, but does not add syntax or format meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Retrieve metrics data for a specific service') and disambiguates from the sibling get_host_metrics by explaining that service metrics aggregate multiple hosts and their collective roles. An agent can distinguish this tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The explicit 'USE THIS TOOL WHEN USERS' block and the definition of what a service metric is provide clear context for selection. However, it never names alternatives such as get_host_metrics or list_http_server_stats, so exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traceGet TraceARead-only
Retrieve trace data by trace ID from Mackerel for distributed tracing analysis.
š USE THIS TOOL WHEN USERS:
Analyze performance bottlenecks in distributed systems
Investigate error propagation across microservices
Understand request flow and service dependencies
Debug latency issues and identify slow operations
Generate documentation of system architecture from trace data
Focus on errors only
get_trace(traceId="abc123def456", errorSpansOnly=true)Filter spans with duration over 100ms
get_trace(traceId="abc123def456", duration=100)Detailed analysis with attributes
get_trace(traceId="abc123def456", includeAttributes=true, limit=50)Minimal view for overview
get_trace(traceId="abc123def456", includeEvents=false, limit=10)Pagination through large traces
get_trace(traceId="abc123def456", limit=20, offset=0) # First page
get_trace(traceId="abc123def456", limit=20, offset=20) # Second pageCombined filtering and pagination
get_trace(traceId="abc123def456", errorSpansOnly=true, limit=10, offset=0)| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of spans to return per page (default: 20, max: 100) | |
| offset | No | Number of spans to skip (default: 0) | |
| traceId | Yes | The ID of the trace to retrieve | |
| duration | No | Only return spans with duration (in milliseconds) equal to or greater than this value. Useful for identifying bottlenecks | |
| includeEvents | No | Whether to include span events. Default is true as events contain important error information | |
| errorSpansOnly | No | If true, only return spans that have errors or status code indicating failure | |
| includeAttributes | No | Whether to include span attributes. Default is false to reduce response size |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries the rest and does add value: pagination via limit/offset, default page size of 20 with a max of 100, and the rationale that includeAttributes defaults false to reduce response size while includeEvents defaults true because events carry error information. It doesn't describe the shape of the returned spans, which would round it out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence and USE-WHEN block are well front-loaded, but seven examples is more than needed: the 'combined filtering and pagination' example merely recombines behaviors already demonstrated separately, and every example repeats the same placeholder traceId, adding length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say what comes back; it implies pages of spans and mentions events/attributes but never sketches the span record or whether total counts are returned. Everything needed to invoke correctly is present, so the gap is modest rather than disqualifying.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the examples add real semantic guidance the schema lacks: duration is expressed in milliseconds and compared as a floor (duration=100 = spans over 100ms), and errorSpansOnly combined with limit/offset is shown for paged error triage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Retrieve trace data by trace ID from Mackerel') and the analysis domain (distributed tracing), which cleanly separates it from the list_traces sibling that returns collections rather than a single trace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' block gives five concrete scenarios (bottleneck analysis, error propagation, request flow, latency debugging, architecture docs) plus worked examples. It never names the alternative for enumerating traces (list_traces) or states when NOT to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alertsList AlertsARead-only
Retrieve alerts from Mackerel.
š USE THIS TOOL WHEN USERS:
Check currently active alerts
Get a list of alerts including closed alerts
Get all alerts
list_alerts(withClosed=true)| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | The maximum number of alerts to retrieve. When omitted, up to 100 cases are retrieved. The most that can be specified is 100 | |
| nextId | No | If specified, alerts older than the alert with the specified id are retrieved | |
| withClosed | No | Whether or not to get resolved alerts. If true, resolved alerts as well as open alerts are retrieved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this is a safe read, so the description's job is to add context beyond that. It mentions closed vs. open alerts, but says nothing about result ordering, default page size, or how nextId continues a paged read ā the mechanics an agent needs for repeat calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence and use-when bullets are front-loaded and scannable, and the examples are compact. Slight redundancy between the 'including closed alerts' bullet and the withClosed example, but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema and fully documented parameters, the description covers what to call it for and how to toggle closed alerts. Pagination behavior via nextId is the one gap, though the schema carries it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented. The example list_alerts(withClosed=true) usefully demonstrates that the default excludes resolved alerts, but limit and nextId semantics are left entirely to the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ā 'Retrieve alerts from Mackerel' ā and the bullets make clear it returns alert collections rather than a single alert. It does not explicitly contrast with siblings like get_alert or get_alert_logs, which an agent could confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' block gives concrete trigger conditions (active alerts, including closed alerts) and the examples show both default and withClosed invocations. There is no explicit when-not guidance or named alternative for single-alert lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboardsList DashboardsARead-only
Retrieve all dashboards from Mackerel.
š USE THIS TOOL WHEN USERS:
Get a list of dashboards
Get ID and title of each dashboard
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of dashboards to return (default: 20) | |
| offset | No | Number of dashboards to skip (default: 0) | |
| summary | No | If true, omit widget details to reduce response size (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safe-read profile, so the description's main added value is the retrieval scope. It says nothing about pagination limits or that the response is truncated by default, which matters for a tool claiming to return "all" dashboards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and trigger conditions are front-loaded in two short blocks, with no filler prose. The <examples> block is largely redundant for a zero-required-parameter call, adding length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should carry more: it names the returned fields (ID, title) but omits pagination behavior and the fact that widget details are stripped by default, both of which affect whether "all dashboards" is actually returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so limit, offset, and summary are fully documented in the schema with defaults. The description adds no syntax, range, or usage nuance beyond the schema ā the only weak hint is "ID and title," which gestures at summary=true. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Retrieve all dashboards from Mackerel") and the user goal it serves ("Get ID and title of each dashboard"). It doesn't explicitly contrast with the sibling get_dashboard, but list-vs-get is self-evident from the naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "USE THIS TOOL WHEN USERS" block gives concrete triggering conditions (listing dashboards, needing IDs and titles), which an agent can match intent against. No when-not-to-use guidance or named alternatives (e.g., get_dashboard for a single dashboard) is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_db_query_statsList Database Query StatisticsARead-only
Retrieve database query statistics from Mackerel.
š USE THIS TOOL WHEN USERS:
Analyze slow database queries
Identify high-frequency queries
Investigate database performance issues
Monitor query execution patterns
Filter by environment and version
list_db_query_stats(
serviceName="my-service",
from=1700000000,
to=1700001800,
environment="production",
version="v1.2.3"
)Search for specific queries
list_db_query_stats(
serviceName="my-service",
from=1700000000,
to=1700001800,
query="SELECT * FROM users"
)Pagination
list_db_query_stats(
serviceName="my-service",
from=1700000000,
to=1700001800,
page=10,
perPage=50
)| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End time for retrieving statistics (Unix epoch seconds). The range between `from` is limited to 30 minutes | |
| from | Yes | Start time for retrieving statistics (Unix epoch seconds). The range between `to` is limited to 30 minutes | |
| page | No | Page number (starting from 1). Default is 1 | |
| query | No | Filter by SQL query (partial match). Corresponds to `db.query.text` or `db.statement` in OpenTelemetry semantic conventions. db.query.text is preferred | |
| perPage | No | Number of items per page (1-100). Default is 20 | |
| version | No | Version. Corresponds to `service.version` in OpenTelemetry semantic conventions | |
| environment | No | Environment name. Corresponds to `deployment.environment` or `deployment.environment.name` in OpenTelemetry semantic conventions | |
| orderColumn | No | Sort column. One of `SUM` (total latency), `AVERAGE` (average latency), `P95` (95th percentile latency), or `EXECUTION_COUNT` (execution count). Default is `P95`. | |
| serviceName | Yes | Service name. Corresponds to `service.name` in OpenTelemetry semantic conventions. | |
| orderDirection | No | Sort order. Either `ASC` (ascending) or `DESC` (descending). Default is `DESC` | |
| serviceNamespace | No | Service namespace. Corresponds to `service.namespace` in OpenTelemetry semantic conventions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds usage scenarios but omits notable behavior: the 30-minute from/to range constraint (only in schema), default sort column P95, and the shape of returned statistics. Useful but not rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose statement and usage bullets are front-loaded and easy to scan. The four examples are somewhat verbose for a CRUD-list tool, but each demonstrates a distinct parameter combination, so little is pure waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no output schema, and no description of what the returned statistics contain (latency aggregates, query text, counts), the definition leaves the return payload undocumented. When/how is covered, but an agent cannot anticipate the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including enums (orderColumn, orderDirection) and defaults is already documented. The examples illustrate a few parameter combinations (pagination, filtering) but add no semantics beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve database query statistics from Mackerel'), which is unambiguous. It does not differentiate itself from siblings like list_http_server_stats or list_traces, so an agent must infer that this covers DB query stats specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' bullets give clear usage contexts (slow queries, high-frequency queries, performance investigation). However, no exclusion criteria or named alternatives are given, so when-not-to-use is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hostsList HostsARead-only
Retrieve hosts from Mackerel.
š USE THIS TOOL WHEN USERS:
Get a list of hosts
Filter hosts by various criteria (service, role, name, etc.)
Check host status and information
Get hosts for a specific role
list_hosts(service="web",role=["app"])Get hosts by status with pagination
list_hosts(status=["working","standby"], limit=10, offset=0)Get hosts in summary format (reduced response size)
list_hosts(summary=true)Get next page of hosts
list_hosts(limit=20, offset=20)| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Host name | |
| role | No | Role names in the service, multiple assignments possible (result will be a unit of the hosts that belong to each role) if service has not been assigned it will be ignored. | |
| limit | No | Maximum number of hosts to return (default: 20, max: 100) | |
| offset | No | Number of hosts to skip (default: 0) | |
| status | No | Filters the host status. multiple specifications are possible. defaults are `working` and `standby`. | |
| service | No | Service name | |
| customIdentifier | No | An identifier for the host that is user-specific and unique to the organization (registered at Register Host Information or Update Host Information API) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so the safety profile is covered. The description adds genuine operational context beyond that: default page size of 20, how to page forward with offset, and a summary mode to shrink response size. However, the summary parameter appears only in examples and not in the schema, so the behavioral promise is not fully backed by a structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and usage triggers are front-loaded before the examples, so an agent gets the essentials immediately. The example block is somewhat padded ā two of the five examples both demonstrate pagination and one relies on an undocumented parameter ā but no sentence is purely filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with all 7 optional parameters fully documented, the description covers selection, filtering, pagination, and response-size control. With no output schema, it could say more about what a host record contains, but that gap is minor for an enumeration endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 7 parameters is already documented, and the baseline is 3. The examples do show realistic combinations of service, role, status, limit, and offset, which adds modest value, but they also demonstrate list_hosts(summary=true) for a parameter absent from the input schema, potentially misleading an agent into an invalid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Retrieve hosts from Mackerel") and enumerates concrete capabilities: listing, filtering by service/role/name, and status checks. It doesn't explicitly distinguish itself from siblings like list_services or get_host_metrics, but the resource boundary is obvious from the name and text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "USE THIS TOOL WHEN USERS" block plus five worked examples make the intended invocation contexts very clear, including filter combinations and pagination. It stops short of naming an alternative tool (e.g., pointing to get_host_metrics when the user wants metrics rather than host records), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_http_server_statsList HTTP Server StatisticsARead-only
Retrieve HTTP server statistics from Mackerel.
š USE THIS TOOL WHEN USERS:
Analyze slow HTTP endpoints
Identify high-traffic routes
Monitor error rates for HTTP requests
Investigate API performance issues
Filter by environment and version
list_http_server_stats(
serviceName="my-service",
from=1700000000,
to=1700001800,
environment="production",
version="v1.2.3"
)Filter by HTTP method and route
list_http_server_stats(
serviceName="my-service",
from=1700000000,
to=1700001800,
method="GET",
route="/api/users"
)Pagination
list_http_server_stats(
serviceName="my-service",
from=1700000000,
to=1700001800,
page=2,
perPage=50
)| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End time for retrieving statistics (Unix epoch seconds). The range between `from` is limited to 30 minutes | |
| from | Yes | Start time for retrieving statistics (Unix epoch seconds). The range between `to` is limited to 30 minutes | |
| page | No | Page number (starting from 1). Default is 1 | |
| route | No | Filter by route (partial match). Corresponds to `http.route`, `url.path`, `http.target`, or `http.url` in OpenTelemetry semantic conventions. Preferred in this order | |
| method | No | Filter by HTTP method. Corresponds to `http.request.method` or `http.method` in OpenTelemetry semantic conventions. `http.request.method` is preferred | |
| perPage | No | Number of items per page (1-100). Default is 20 | |
| version | No | Version. Corresponds to `service.version` in OpenTelemetry semantic conventions | |
| environment | No | Environment name. Corresponds to `deployment.environment` or `deployment.environment.name` in OpenTelemetry semantic conventions | |
| orderColumn | No | Sort column. One of `SUM` (total latency), `AVERAGE` (average latency), `P95` (95th percentile latency), `ERROR_RATE` (error rate percentage), or `REQUEST_COUNT` (request count). Default is `P95` | |
| serviceName | Yes | Service name. Corresponds to `service.name` in OpenTelemetry semantic conventions | |
| orderDirection | No | Sort order. Either `ASC` (ascending) or `DESC` (descending). Default is `DESC` | |
| serviceNamespace | No | Service namespace. Corresponds to `service.namespace` in OpenTelemetry semantic conventions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description only needs to add context. It omits the most operationally important constraint, the 30-minute maximum time range, which lives only in the schema, and says nothing about pagination behavior or result ordering semantics beyond example arguments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and use cases are front-loaded correctly, but the four examples repeat the same serviceName/from/to boilerplate and spend significant space restating what the schema already declares. A single example plus prose about pagination and sorting would be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, no-output-schema tool that returns statistics, the description should at least indicate the shape of the returned metrics (latency, error rate, request counts) and reinforce the time-window and sort defaults. The sketch of use cases plus examples is adequate to invoke it, but leaves genuine gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter, enum, and the 30-minute limit is already documented in structured fields. The examples do show useful parameter combinations (environment+version, method+route, page+perPage), but they add no semantics the schema lacks, which is the expected baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve HTTP server statistics from Mackerel'), so the agent knows exactly what data comes back. It does not distinguish itself from conceptually adjacent siblings such as list_db_query_stats or get_service_metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The bulleted 'USE THIS TOOL WHEN USERS' list gives clear analytical scenarios (slow endpoints, high-traffic routes, error rates, API performance). It never names an alternative tool or states when not to use this one, so routing against siblings is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_monitorsList MonitorsARead-only
Retrieve all monitor configurations from Mackerel.
š USE THIS TOOL WHEN USERS:
Get a list of all monitors
View monitor configurations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that this retrieves all monitor configurations from Mackerel, but it does not disclose pagination behavior, return shape, authentication needs, or rate limits. For a simple read-only list tool this is adequate, but it goes only modestly beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and clear, but the use-case bullets largely restate the purpose, and the example adds little value for a zero-parameter tool. It is not bloated, but some content does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple zero-parameter read-only list operation with an annotation covering safety. The description is sufficient for an agent to invoke it correctly, though it omits pagination and return-format details that could matter for a list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain. The empty schema is fully self-describing, and the description does not need to compensate for undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: retrieve all monitor configurations from Mackerel. It implies a list-all operation, which helps distinguish it from the singular get_monitor sibling, though it does not explicitly name that sibling or contrast the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' section gives clear use cases: getting a list of all monitors and viewing monitor configurations. It does not provide exclusions or explicitly route users to get_monitor for a single monitor, so it lacks full when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_servicesList ServicesARead-only
Retrieve all services from Mackerel.
š USE THIS TOOL WHEN USERS:
Get a list of services
View service names, memos, and roles
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful output context by naming service names, memos, and roles, but it does not mention pagination, ordering, account scoping, or other operational behavior. With annotations covering safety, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the usage bullets are easy to scan. The example block for a zero-argument call is somewhat redundant, but it does not create meaningful bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only list tool with no output schema, the description provides enough to call it correctly: what it retrieves and when to use it. It could be stronger with account-scope or pagination details, but the core is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so parameter semantics are not applicable and the baseline is 4. The description does not need to explain any input arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve all services, and clarifies the fields shown (names, memos, roles). It is clear against most siblings by resource, though it does not explicitly name alternatives such as get_service_metrics or list_hosts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' section gives concrete triggering scenarios: getting a service list and viewing service names, memos, and roles. It lacks explicit when-not-to-use guidance or named alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracesList TracesARead-only
Search and retrieve traces from Mackerel for distributed tracing analysis.
š USE THIS TOOL WHEN USERS:
Search for traces within a time range
Find slow traces by latency filtering
Filter traces by service, environment, or version
Investigate distributed system behavior
Filter by latency
list_traces(
serviceName="my-service",
from=1700000000,
to=1700001800,
minLatencyMillis=100,
maxLatencyMillis=1000
)Filter by environment and version
list_traces(
serviceName="my-service",
from=1700000000,
to=1700001800,
environment="production",
version="v1.2.3"
)Search by span name
list_traces(
serviceName="my-service",
from=1700000000,
to=1700001800,
spanName="HTTP GET /api/users"
)Pagination and sorting
list_traces(
serviceName="my-service",
from=1700000000,
to=1700001800,
page=2,
perPage=50,
order={ column: "LATENCY", direction: "DESC" }
)| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End time for trace search (Unix epoch seconds) | |
| from | Yes | Start time for trace search (Unix epoch seconds) | |
| page | No | Page number (starting from 1). Default is 1 | |
| order | No | Sort preferences. Default is { column: 'START_AT', direction: 'DESC' } | |
| perPage | No | Number of items per page (1-100). Default is 20 | |
| traceId | No | Filter by trace ID (32-digit hexadecimal string) | |
| version | No | Version. Corresponds to `service.version` in OpenTelemetry semantic conventions | |
| spanName | No | Filter by span name | |
| attributes | No | Custom attribute filter conditions | |
| environment | No | Environment name. Corresponds to `deployment.environment` or `deployment.environment.name` in OpenTelemetry semantic conventions | |
| serviceName | Yes | Service name. Corresponds to `service.name` in OpenTelemetry semantic conventions | |
| issueFingerprint | No | Filter by issue fingerprint | |
| maxLatencyMillis | No | Maximum latency in milliseconds | |
| minLatencyMillis | No | Minimum latency in milliseconds | |
| serviceNamespace | No | Service namespace. Corresponds to `service.namespace` in OpenTelemetry semantic conventions | |
| resourceAttributes | No | Resource-level attribute filters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe read operation. The description adds useful context about distributed tracing analysis and demonstrates filtering and pagination, but it does not disclose return shape, result limits, permissions, or pagination metadata beyond the examples.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage guidance, then provides examples that are useful for a complex 16-parameter tool. The examples are somewhat repetitive, repeating serviceName, from, and to in every block, but the structure remains clear and the content generally earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, read-only annotation, and absence of an output schema, the description covers the main usage contexts and demonstrates key filters and pagination. It is sufficient for common invocation, though it could better explain what traces are returned and when to use get_trace instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 16 parameters and nested attribute filters are already documented in the schema. The examples demonstrate common parameter combinations, but they do not add much semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: search and retrieve traces from Mackerel for distributed tracing analysis. It is clear what the tool does, but it does not explicitly distinguish itself from the sibling get_trace tool or clarify list/search vs single-trace retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' list gives concrete usage contexts: time-range search, latency filtering, service/environment/version filtering, and distributed system investigation. It does not state when not to use it or name get_trace as the alternative for single-trace lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_logsSearch LogsARead-only
Search logs of a service from Mackerel.
š USE THIS TOOL WHEN USERS:
Investigate errors or incidents by reading application logs
Find logs related to a specific trace (traceId)
Look for logs containing specific keywords or matching structured (JSON) body fields
š KEEPING RESPONSES SMALL:
Pass
serviceNamespacewhen the service has one. Without it, only services without a namespace are searchedOmit
from/toto search relative to the current time (lookbackMinutes, default 60). The response includes the actualtimeRangesearchedNarrow the time range and use severities / keywords / bodyAttributes filters first
By default only timestamp, severity, body, traceId and spanId are returned. Use
fieldsto request attributes only when neededLog bodies longer than
maxBodyLengthare truncated and marked withbodyTruncated: trueTo get more logs, pass
pagination.nextPageCursoraspageCursoras-is with the same filters. The cursor carries the time range and sort order, sofrom/to/orderare not needed. The API allows 1 request per second
Logs in the last 15 minutes
search_logs(serviceName="my-service", serviceNamespace="my-namespace", lookbackMinutes=15)Logs related to a trace in chronological order
search_logs(serviceName="my-service", serviceNamespace="my-namespace", from=1700000000, to=1700003600, traceId="0af7651916cd43dd8448eb211c80319c", order="ASC")Keyword search
search_logs(serviceName="my-service", serviceNamespace="my-namespace", from=1700000000, to=1700003600, keywords=["timeout", "payment"])Filter JSON bodies: {"res": {"status": 500+}}
search_logs(
serviceName="my-service",
serviceNamespace="my-namespace",
from=1700000000,
to=1700003600,
bodyAttributes=[{keyPath: ["res", "status"], value: "500", type: "int", operator: "GTE"}]
)Include log attributes
search_logs(serviceName="my-service", serviceNamespace="my-namespace", from=1700000000, to=1700003600, fields=["timestamp", "body", "attributes", "resourceAttributes"])Next page
search_logs(serviceName="my-service", serviceNamespace="my-namespace", severities=["ERROR"], pageCursor=<pagination.nextPageCursor>)| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End time (Unix epoch seconds, exclusive). Defaults to the current time. The range from `from` must be 30 days or less | |
| from | No | Start time (Unix epoch seconds, inclusive). Defaults to `lookbackMinutes` before `to` | |
| order | No | Sort order by timestamp. Default is DESC (newest first) | |
| fields | No | Fields to include for each log. Default is ["timestamp","severity","body","traceId","spanId"]. Attribute fields are returned as {key: value} objects | |
| perPage | No | Number of logs per page (1-1000). Default is 20 | |
| traceId | No | Only logs associated with this trace ID (32-digit hex) | |
| keywords | No | Keywords that must all appear in the log body (partial match, AND) | |
| pageCursor | No | Pass `pagination.nextPageCursor` or `pagination.previousPageCursor` from a previous response as-is. The cursor carries the time range and sort order, so `from`, `to`, `lookbackMinutes` and `order` are ignored. Keep the filters unchanged between pages | |
| severities | No | Severities to include (OR) | |
| serviceName | Yes | Service name | |
| maxBodyLength | No | Truncate each log body to this many characters (default 1000). Truncated logs have `bodyTruncated: true` | |
| bodyAttributes | No | Filters on fields of JSON log bodies (AND). Logs whose body is not JSON never match | |
| lookbackMinutes | No | When `from` is omitted, search this many minutes before `to` (default 60). Use this for relative ranges such as 'the last 15 minutes' without knowing the current time | |
| serviceNamespace | No | Service namespace. Corresponds to `service.namespace` in OpenTelemetry semantic conventions. When omitted, only services without a namespace are searched, so always pass it for services that have one |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint already declaring the safety profile, the description discloses a lot beyond annotations: a documented 1 request/second rate limit, default returned fields, body truncation with a bodyTruncated marker, and that the response echoes the actual timeRange searched. The cursor contract ā that it carries time range and sort order so from/to/order are ignored and filters must stay fixed ā is exactly the kind of non-obvious behavior an agent cannot get from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, the use-case and response-size sections are scannable, and nothing is padded with filler. Seven worked examples for a 14-parameter tool with nested objects is defensible, though a couple (e.g. the plain keyword and time-range cases) partially duplicate the schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter read tool with nested bodyAttributes and no output schema, the description supplies the missing return-side information ā default field set, truncation behavior, and the pagination.nextPageCursor/previousPageCursor contract ā so an agent can both call and paginate it correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the floor, but the description adds real semantics on top: serviceNamespace omission silently narrows the search to namespace-less services, from/to omission falls back to lookbackMinutes, and pageCursor must be passed through as-is. The examples also demonstrate non-obvious parameter shapes like bodyAttributes keyPath/operator combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search logs of a service from Mackerel') and enumerates three concrete investigative use cases. It never differentiates itself from sibling tools that also surface logs or traces (get_alert_logs, get_trace, list_traces), so an agent deciding between those must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'USE THIS TOOL WHEN USERS' block gives clear triggering contexts (error investigation, trace lookup, keyword/structured-body matching), and the response-size section establishes a recommended filter ordering. There is no explicit when-not-to-use guidance and no sibling named as an alternative, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dashboardUpdate DashboardA
Update a specific dashboard by ID in Mackerel.
š USE THIS TOOL WHEN USERS:
Modify dashboard title, memo, or URL path
Update dashboard widgets configuration
| Name | Required | Description | Default |
|---|---|---|---|
| memo | Yes | Dashboard notes | |
| title | Yes | Dashboard name | |
| urlPath | Yes | Dashboard URL path | |
| widgets | Yes | List of widget objects | |
| dashboardId | Yes | The ID of the dashboard to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden for a destructive mutation. It never says whether this is a full replacement (all five params are required, strongly implying widgets not resubmitted are lost), what happens to an invalid dashboardId, what permissions are needed, or what is returned. The example illustrates payload shape but discloses nothing about 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in one sentence, followed by tightly scoped bullets and a single illustrative call. The example earns its place by showing a markdown widget inside the widgets array, though it also carries the minor cost of not illustrating any of the other widget types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation on a complex nested schema with no annotations and no output schema, an agent still has to guess replacement semantics, failure modes and return value. The description is sufficient to construct a call but leaves gaps that matter for a destructive update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the nested widget, graph, layout and range structures are already documented in structured data; baseline 3 applies. The worked example slightly reinforces the widget shape but adds no semantics about required-or-not fields or defaults beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (update) and resource (dashboard identified by ID) within a named product. The use-when bullets narrow it to title/memo/urlPath and widget configuration, which cleanly separates it from the read-only siblings get_dashboard and list_dashboards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Two explicit 'USE THIS TOOL WHEN USERS' conditions give clear context for invocation. There are no exclusions or named alternatives (e.g. 'to create or delete a dashboard use X', 'call get_dashboard first to retrieve existing widgets'), so the routing guidance is directional but incomplete.
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.
17 tool updates
v0.10.0- First observed
get_alert - First observed
get_alert_logs - First observed
get_dashboard - First observed
get_host_metrics - First observed
get_monitor - First observed
get_service_metrics - First observed
get_trace - First observed
list_alerts - First observed
list_dashboards - First observed
list_db_query_stats - First observed
list_hosts - First observed
list_http_server_stats - First observed
list_monitors - First observed
list_services - First observed
list_traces - First observed
search_logs - First observed
update_dashboard
TDQS
Scored across 17 tools
Each tool targets a clearly distinct resource and action: alerts, dashboards, hosts, services, monitors, metrics, traces, HTTP stats, DB stats, and logs. Overlaps such as get_trace vs. search_logs or get_host_metrics vs. get_service_metrics are resolved by resource scope and descriptions.
All tool names follow a consistent snake_case verb_noun convention, with list_*, get_*, update_*, and search_* used predictably. The one search_* tool still fits the same readable pattern.
Seventeen tools is slightly above the typical 3-15 range, but the server covers a broad monitoring domain with many distinct resource types. Each tool appears to earn its place, though the surface is on the heavier side.
The read-oriented surface is broad, but lifecycle coverage is incomplete: dashboards have list/get/update but no create/delete, monitors have list/get but no create/update/delete, and hosts/services lack dedicated detail tools. These gaps are workable for monitoring queries but notable for administrative workflows.
Maintenance
Related MCP Connectors
Monitor websites, APIs, and servers: create monitors, triage incidents, and query uptime stats.
Manage uptime monitors and incidents and search logs, metrics and traces from an AI assistant.
Manage Cronitor monitors and send telemetry pings ā list, inspect, create, update, delete.
Manage uptime monitors, incidents and status pages from any MCP client.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with Datadog's monitoring and observability platform through the MCP protocol. Supports incident management, monitor status checks, log searches, metrics queries, APM traces, dashboard access, RUM analytics, host management, and downtime scheduling.1322 npmApache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Metabase through its API, allowing users to list cards, databases, collections, execute queries, and create cards or bookmarks.5MIT
- FlicenseNot gradedqualityCmaintenanceProvides comprehensive access to the New Relic observability platform through 55 MCP tools, enabling APM, infrastructure, logs, traces, alerts, dashboards, synthetics, workflows, notifications, service levels, tags, entities, and workloads via a single GraphQL endpoint.-
- FlicenseNot gradedqualityCmaintenanceEnables interaction with Dynatrace Grail and API endpoints by executing DQL queries, retrieving logs, reporting active problems, and querying metrics.-