
Fettle MCP server
Which servers in the official MCP registry are Fettle's own, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.
read 2026-10-24
- Registry namesh.fettle/mcpverified in the MCP registry
The registry name sits under fettle.sh. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.
- Stateanswerschecked 2026-10-24
- Tools49
- Server calls itselffettle.sh
- Server version1.3.1
- Protocol version2025-06-18
On 2026-10-24 the server answered initialize and tools/list without a sign-in. First answer in 197 ms.
- Whether its tools do the product's job has not been judged yet.
- Checked on 3 of the 7 days it takes to judge reliability.
Once connected
- create_monitor, bulk_create_monitors, bulk_update_monitors, update_monitor, delete_monitor change data without a sign-in: anyone with the address can call them.
- Its definitions take about 18739 tokens of context: enable only the tools a task needs.
Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.
- INITE MCP scoreafter a weeka score needs 7 daily checks: 3 so far
- Use401 npm downloads a week
- Answeredmeasuring3 of the 7 daily checks it takes to print a share
- Median first answer787 ms
- Space in an agent's context≈ 18,739 tokensthe definitions of all its tools (49), which an agent carries on every turn
- Tool definitionsA · 100 of 100
- Typed results45 of 49 toolsdeclared outputSchema: results come typed, read once
- Every tool passes all six checks.
Worth a look
- Tools that change data, on a server that answers without a sign-in: create_monitor, bulk_create_monitors, bulk_update_monitors, update_monitor, delete_monitor
A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (30%), doing the product's job (25%), definitions (20%), context (10%) and use (15%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →
list_monitorsFind monitors in the organization by name, target, type, status or tag. Each row is short: id, name, type, target, status, is_active, tags, interval_seconds, ssl_expires_at and last_checked_at. Use it first to get a monitor's id, or to…
list_tagsList the tags used in the organization, most-used first, each with monitor_count and heartbeat_count, as items. Call it before tagging anything so you reuse an existing name instead of inventing a near-duplicate. Not a filter: to find the…
get_monitorRead one monitor's full configuration and current state. It has type, target, interval_seconds, timeout_seconds, regions, config, status, is_active, confirmation_threshold, notification_cooldown_seconds, channel_ids (empty means every…
create_monitorCreate one monitor that checks a URL, host or port on a schedule from one or more regions, and return it in the get_monitor shape. Use check_target first to catch a typo or an unreachable host; use bulk_create_monitors for several…
bulk_create_monitorsCreate 1 to 100 monitors in one call, all or nothing; for a single monitor use create_monitor. Requires a key with the write scope. An invalid item, or a batch that would exceed the plan, rejects the whole call and creates nothing: call…
bulk_pause_monitorsPause up to 100 monitors in one call, all or nothing: no checks run and each open incident closes without an alert. Use it to stop monitoring a whole project or group found with list_monitors; for one monitor use pause_monitor, and to…
bulk_resume_monitorsResume up to 100 paused monitors in one call, all or nothing; each goes back to PENDING and is checked on the next tick. For one monitor use resume_monitor; to run a check right away on a monitor that is already running, use check_now…
bulk_update_monitorsSet the same interval, timeout, regions, channels, threshold or cooldown on up to 100 monitors in one call, all or nothing. For example, move twenty PING monitors to other regions. Not for config or name (use update_monitor, one monitor…
get_exposed_ports_presetList the ports that should never be reachable from the internet (databases, queues, admin panels). Returns ports, each a port number and the service that usually listens on it. Use it to pick ports when asked to watch a server for exposed…
update_monitorChange one monitor's settings and return it in the get_monitor shape. Only the fields you pass change, and at least one besides monitor_id is required (422 otherwise); type and target never change (create a new monitor instead). Not for…
pause_monitorStop checking one monitor without deleting it: its status becomes PAUSED and an open incident on it closes without a recovery alert. Use it when the user wants a monitor off for an open-ended time. For a planned deploy or reboot prefer…
resume_monitorRestart checks on one paused monitor: its status goes back to PENDING and it is checked on the scheduler's next tick. For many monitors use bulk_resume_monitors; to check a running monitor right away use check_now. Requires a key with the…
delete_monitorDelete one monitor: it stops being checked and disappears from the organization's monitors, and no tool restores it. Use it only when the user explicitly asked for deletion; otherwise prefer pause_monitor, which keeps the monitor and its…
check_nowQueue one existing monitor to run on the scheduler's next tick instead of waiting out its interval, for example to confirm a fix. It returns the monitor record, not a check result: call get_monitor or list_check_results a moment later for…
bulk_update_monitor_tagsAdd and/or remove tags across up to 300 monitors in one call, all or nothing: each monitor ends with (its tags | add) - remove. Use it to retag a fleet; to replace one monitor's whole tag list use update_monitor, to rename or drop a tag…
get_uptime_summaryReport one monitor's uptime percentage, average response time and incident count over the last 24 hours, 7 days and 30 days at once, to answer how reliable it has been. For a day-by-day series use get_uptime_daily; for response time per…
get_plan_usageShow the organization's plan, its limits and current usage, to check that new monitors, heartbeats or regions fit before creating them or to explain a 403 naming a limit. Region codes and their cities come from list_regions; billing…
list_incidentsList the organization's monitor and heartbeat incidents, newest first, to see what is or was down and which alerts went out. Each item has id, monitor_id or heartbeat_id (exactly one is set), started_at, resolved_at (null while open)…
acknowledge_incidentMark an open incident as being handled so its repeat alerts stop; the recovery alert still goes out when it resolves. Use it when someone is working on the outage. It does not close the incident (that happens when the monitor recovers)…
list_heartbeatsFind heartbeat (cron / dead-man's-switch) monitors. Each has id, name, state (PENDING until a success ping makes it UP or a /fail ping makes it DOWN; later UP, DOWN or PAUSED), period_seconds, grace_seconds, ping_url, last_ping_at…
create_heartbeatCreate a heartbeat: Fettle alerts when a scheduled job stops calling its ping_url. Use it for cron jobs, backups and workers that should report in; to probe a URL, host or port from outside use create_monitor. The job calls ping_url (GET…
get_heartbeatRead one heartbeat in full, including how long its last run took. It has name, state, period_seconds, grace_seconds, ping_url, last_ping_at, last_success_at, last_start_at, last_duration_ms (how long the last run took, from its /start to…
update_heartbeatChange one heartbeat's name, timing, channels or tags; only the fields you pass change. A new period or grace applies from the next ping: the current deadline (overdue_at) is not recomputed. To stop or restart late alerts use…
pause_heartbeatPause one heartbeat: it is no longer reported late, pings to its ping_url are accepted but ignored, and its open incident closes without an alert. Use it when the job is stopped on purpose, such as a runner taken out of service…
resume_heartbeatResume one paused heartbeat: it goes back to PENDING with no deadline, so it is not reported late until its next success ping restarts the clock. Use it once the job runs again; to change its timing use update_heartbeat. There is no bulk…
delete_heartbeatDelete one heartbeat for good: its ping_url stops working (404) and no tool restores it. Use it only when the user asked for deletion; to stop alerts for a while use pause_heartbeat. Requires a key with the write scope. Returns…
list_maintenance_windowsList every maintenance window of the organization, enabled or not, in effect or not. Each has id, name, enabled, scope (ORG or MONITOR), dtstart, duration_minutes, rrule, timezone, monitor_ids and created_at. Use it to find a window's id…
list_active_maintenanceList the enabled maintenance windows in effect at this moment, to tell whether a monitor's alerts are silenced now. An ORG-scope window covers every monitor, a MONITOR-scope one its monitor_ids. For every window, including future and…
get_maintenance_windowRead one maintenance window with its schedule and its next three occurrences. It has the list_maintenance_windows fields plus next_occurrences, each with start and end. Use it to confirm when a recurring window fires next. To check a…
create_maintenance_windowCreate a one-time or recurring maintenance window that silences alerts for some or all monitors. While a window is in effect its monitors keep being checked, but no incident opens and no alert goes out. Use it around a deploy or reboot…
update_maintenance_windowChange one maintenance window's name, schedule, scope or monitors, or switch it off with enabled false; only the fields you pass change. While a window is in effect its monitors keep being checked, but no incident opens and no alert goes…
delete_maintenance_windowDelete one maintenance window; alerts for its monitors resume at once and no tool restores it. To suspend a window but keep it, use update_maintenance_window with enabled false. Requires a key with the write scope. Returns {"success"…
preview_maintenance_windowCompute the next three occurrences, each with start and end, that a schedule would produce, without saving anything. Use it to check a recurring schedule before create_maintenance_window or update_maintenance_window; for a saved window's…
list_status_pagesList the organization's public status pages. Each has id, slug, name, description, is_published (publicly visible now), history_days, created_at, groups (each with name, position and its components) and ungrouped_components. Use it to…
list_check_resultsList one monitor's individual check results, newest first, to find out why it is DOWN: which regions fail and with what status code or error. Each has id, region, checked_at, status, response_time_ms, status_code, error_message, details…
get_response_time_by_regionChart one monitor's average response time over time, one series per region, to see where it is slow and since when. Returns monitor_id, window, bucket_seconds and regions, each with region, display_name and points (oldest first, the same…
get_uptime_dailyReport one monitor's uptime for each UTC day, oldest first and ending today, to find the day an outage or degradation began. Each day has date, uptime_percentage, downtime_seconds, observed_seconds, degraded_seconds, total_checks…
get_incidentRead one incident in full, with every alert sent for it. It has id, monitor_id or heartbeat_id (exactly one is set), started_at, resolved_at, cause, cause_detail, last_notified_at, acknowledged_at, acknowledged_by, renotify_count and…
rename_tagRename a tag on every monitor and heartbeat that carries it; an item that already has the new name keeps one copy. Use it to fix a naming scheme across the organization; to change the tags of chosen monitors only use…
delete_tagRemove a tag from every monitor and heartbeat that carries it; the items themselves stay, and no tool restores the tag. Use it to retire a tag across the organization; to take it off chosen monitors only use bulk_update_monitor_tags with…
get_status_pageRead one status page with its components. It has the list_status_pages fields, where each component has id, monitor_id, display_name and position. Use it to get the component ids that create_status_page_incident takes as component_ids. To…
list_status_page_incidentsList the incidents shown on one status page, newest first, both posted by a person and opened by Fettle. Each has id, title, status, is_auto (opened by Fettle from a monitor), started_at, resolved_at, notified_at (when subscribers were…
create_status_page_incidentOpen a new incident on a status page with its first message, to tell the page's visitors about an outage. It is public and emails the page's confirmed subscribers: confirm the wording with the user before calling. Any status but RESOLVED…
post_status_page_updateAdd a message to an existing status page incident and set its status; RESOLVED closes it. It is public and emails the page's confirmed subscribers: confirm the wording with the user before calling. Every confirmed subscriber gets the…
update_status_page_incidentChange a status page incident's title without telling anyone: nothing is sent to subscribers. To change its status or add a message use post_status_page_update. Requires a key with the write scope. Returns the incident. Example…
delete_status_page_incidentRemove an incident and its timeline from a status page; it stops showing at once, nothing is sent to subscribers, and no tool restores it. Use it for an incident posted by mistake; to close a real one use post_status_page_update with…
list_channelsList the organization's notification channels (up to 100), to get the ids that channel_ids of monitors and heartbeats take. Each has id, type (TELEGRAM, WEBHOOK, SLACK or DISCORD), label, is_verified, is_active and destination_hint (a…
list_regionsList every check region of the platform, to show the user where checks can run. Returns regions, each with code (what a regions argument takes), display_name, city, country_code, group and group_display_name. The organization may use only…
check_targetRun one real check of a target from one region chosen by Fettle, without creating anything. It reports status (up, down, error or unknown), region, response_time_ms, status_code, error and failure_kind. unknown means no definite answer…
How to connect
Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:
{
"mcpServers": {
"fettle": {
"type": "http",
"url": "https://api.fettle.sh/mcp"
}
}
}Add it
Claude Code, in a terminal
claude mcp add --transport http fettle https://api.fettle.sh/mcpclaude.ai, ChatGPT and other clients: add https://api.fettle.sh/mcp as a custom connector in the settings.
Also shipped through: npm
OpenAPI spec
99 paths, read 2026-10-24. Open the spec ↗
Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.
Cookies
Before we count this visit
Analytics and ad measurement tell us which pages and which of our ads do their job: Google Analytics and Google Ads, the Meta pixel, Yandex Metrica, and one first-party id of our own. Nothing is stored until you answer, and declining changes nothing about the site.