Fettle について
Fettleは、AIアシスタントから組織の稼働監視を管理するMCPサーバーです。モニター、インシデント、ハートビート、メンテナンス時間、ステータスページのインシデントを扱い、APIキーの権限で読み書きを制御します。
主な機能
- 01モニターの作成、確認、更新、一時停止
- 02稼働率、応答時間、チェック結果の確認
- 03インシデントの一覧表示と確認
- 04ハートビート監視とメンテナンス時間の管理
- 05ステータスページのインシデント、タグ、リージョンの管理
活用シーン
- 01URL、ホスト、ポートのモニター作成
- 02今週モニターに発生したインシデントの確認
- 03計画デプロイ中のチェック一時停止
- 04ステータスページのインシデント更新
MCP 対応
パッケージまたはリモートエンドポイント `https://api.fettle.sh/mcp` を通じて、Fettleの監視ツールをMCPクライアントに公開します。組織のAPIキーで認証し、書き込み操作にはwriteスコープのキーが必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.fettle.sh/mcpclaude mcp add --transport http sh-fettle https://api.fettle.sh/mcp{"mcpServers":{"sh-fettle":{"type":"http","url":"https://api.fettle.sh/mcp"}}}Cursor で開く{"servers":{"sh-fettle":{"type":"http","url":"https://api.fettle.sh/mcp"}}}VS Code で開く{"mcpServers":{"sh-fettle":{"type":"http","url":"https://api.fettle.sh/mcp"}}}{"mcpServers":{"sh-fettle":{"serverUrl":"https://api.fettle.sh/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://api.fettle.sh/mcp認証が必要ツール
49| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| q | string | いいえ | |
| tag | array | いいえ | |
| page | integer | いいえ | |
| size | integer | いいえ | |
| sort | enum | いいえ | status | up_first | name | newest | oldest | ssl_expiry |
| type | array | いいえ | |
| status | array | いいえ | |
| tag_match | enum | いいえ | all | any |
詳細
fettle-mcp
ウェブサイト: fettle.sh · MCP ドキュメント: fettle.sh/docs/mcp · ダッシュボード: dashboard.fettle.sh · サポート: [email protected]
Fettle の MCP サーバーです。Model Context Protocol に対応した Claude Code、Codex、Claude Desktop、Cursor、Windsurf などから操作できる稼働時間監視ツールです。
アシスタントに、モニターの作成、停止した原因の確認、インシデントの確認、デプロイ前のチェックの一時停止などを頼むと、通常と同じ公開 API が呼び出されます。
"Add an HTTP monitor for https://api.acme.dev, check it every 5 minutes from Europe."
"Which of my monitors had incidents this week?"
"Pause the checkout monitor — we're deploying for the next 20 minutes."
公式 MCP レジストリでは、このサーバーは sh.fettle/mcp として登録されています。レジストリからインストールするクライアント向けに、手動編集した設定ファイルを使わず、両方のチャネルをカバーする単一のエントリーです。
必要条件
- Node.js 20 以降
- Fettle アカウントと API キー(https://fettle.sh の Settings → API Keys)
API キーは 1 つの組織に属し、読み取りまたは書き込みのスコープを持ちます。読み取りスコープのキーでは一覧表示と詳細確認ができます。以下の書き込みツールには、書き込みスコープのキーが必要です。
インストール
インストールは不要です。MCP クライアントは必要に応じて npx でパッケージを実行します。クライアントの設定にエントリーを 1 つ追加し、再起動してください。
Claude Code
claude mcp add fettle --env FETTLE_API_KEY=fettle_your_key_here -- npx -y fettle-mcp
Codex
codex mcp add fettle --env FETTLE_API_KEY=fettle_your_key_here -- npx -y fettle-mcp
または、~/.codex/config.toml(信頼する単一のプロジェクトの場合は .codex/config.toml)を手動で編集します。
[mcp_servers.fettle]
command = "npx"
args = ["-y", "fettle-mcp"]
[mcp_servers.fettle.env]
FETTLE_API_KEY = "fettle_your_key_here"
Claude Desktop
macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json を使用します。
{
"mcpServers": {
"fettle": {
"command": "npx",
"args": ["-y", "fettle-mcp"],
"env": { "FETTLE_API_KEY": "fettle_your_key_here" }
}
}
}
Cursor
~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクトごと)を使用します。
{
"mcpServers": {
"fettle": {
"command": "npx",
"args": ["-y", "fettle-mcp"],
"env": { "FETTLE_API_KEY": "fettle_your_key_here" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json を使用します。
{
"mcpServers": {
"fettle": {
"command": "npx",
"args": ["-y", "fettle-mcp"],
"env": { "FETTLE_API_KEY": "fettle_your_key_here" }
}
}
}
設定
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
FETTLE_API_KEY | はい | — | API キーです。これがないとサーバーは起動しません。 |
FETTLE_API_URL | いいえ | https://api.fettle.sh | サーバーの接続先を別の API に変更します。通常は設定する必要はありません。 |
FETTLE_TIMEOUT_MS | いいえ | 30000 | ツール呼び出しを中断するまでの待機時間です。 |
ツール
ツールは 49 個あり、対象ごとにグループ化されています。読み取りスコープのキーでは read のツールを呼び出せます。write と記されたツールには、書き込みスコープのキーが必要です。
すべてのツールには MCP ヒント readOnlyHint、destructiveHint、idempotentHint、openWorldHint が付いているため、クライアントは名前を解析しなくても読み取りと変更を判別でき、必要な場合にのみ確認を求められます。破壊的な操作に該当するのは 5 つの delete_* ツールだけです。preview_maintenance_window と check_target は書き込みスコープのキーが必要ですが、何も変更しないため、読み取り専用としてマークされています。check_now と check_target は対象ホストにアクセスするため、オープンワールドとして扱われます。
結果が JSON オブジェクトとなるすべてのツールは outputSchema を宣言し、結果をテキストに加えて structuredContent としても返します。そのため、クライアントはテキストを解析せずに型付きフィールドを読み取れます。例外は、テキストのみを返す 4 つのツールです。簡潔な行を返す list_monitors と、結果がリストとなる 3 つのツール、list_active_maintenance、preview_maintenance_window、list_channels です。
モニター
| ツール | 範囲 | 内容 |
|---|---|---|
list_monitors | 読み取り | モニターをステータス、対象、タグ、SSL の有効期限とともに簡潔に一覧表示します。種類、ステータス、タグで絞り込めます。 |
get_monitor | 読み取り | ID を指定して、1 件のモニターの完全な設定と現在のステータスを読み取ります。 |
check_target | 書き込み | モニターを作成する前に、1 つのリージョンから対象に対して 1 回プローブを実行します。 |
create_monitor | 書き込み | URL、ホスト、ポートを定期的にチェックするモニターを作成します。 |
bulk_create_monitors | 書き込み | 1 回の呼び出しで最大 100 件のモニターを作成します。すべて作成するか、どれも作成しないかのいずれかです。 |
update_monitor | 書き込み | 既存のモニターの設定を変更します。 |
bulk_update_monitors | 書き込み | 最大 100 件のモニターに同じ間隔、リージョン、チャネル、しきい値を一括設定します。すべて適用するか、何も適用しないかのいずれかです。 |
pause_monitor | 書き込み | モニターを削除せずにチェックを停止します。計画的なダウンタイムの前に使用します。 |
bulk_pause_monitors | 書き込み | 1 回の呼び出しで最大 100 件のモニターを一時停止します。すべて一時停止するか、どれも一時停止しないかのいずれかです。 |
resume_monitor | 書き込み | 一時停止中のモニターのチェックを再開します。 |
bulk_resume_monitors | 書き込み | 1 回の呼び出しで最大 100 件の一時停止中のモニターを再開します。すべて再開するか、どれも再開しないかのいずれかです。 |
delete_monitor | 書き込み | モニターを論理削除します。チェックが停止し、モニター一覧から除外されます。 |
check_now | 書き込み | モニターを再設定して、間隔が終わるのを待たずに、次のスケジューラーのティックで実行します。 |
get_exposed_ports_preset | 読み取り | インターネットからアクセスできないようにすべきデータベースポートと管理ポートを取得します。 |
結果と稼働時間
| ツール | 範囲 | 内容 |
|---|---|---|
get_uptime_summary | 読み取り | 24 時間/7 日/30 日の稼働時間、平均応答時間、インシデント件数をまとめて取得します。 |
get_uptime_daily | 読み取り | モニターの稼働時間を UTC の日ごとに、古い順に取得します。 |
get_response_time_by_region | 読み取り | 24 時間、7 日、30 日のモニターの平均応答時間を取得します。リージョンごとに 1 系列で表示します。 |
list_check_results | 読み取り | モニターの個々のチェック結果を新しい順に一覧表示します。リージョン、ステータス、期間で絞り込めます。 |
インシデント
| ツール | 範囲 | 内容 |
|---|---|---|
list_incidents | 読み取り | インシデントを一覧表示します。モニター、ステータス、原因、期間で絞り込むこともできます。 |
get_incident | 読み取り | 1 件のインシデントについて、原因とすべてのアラート試行を読み取ります。 |
acknowledge_incident | 書き込み | 未解決のインシデントを確認済みにして、繰り返し通知を停止します。 |
ハートビート
| ツール | 範囲 | 説明 |
|---|---|---|
list_heartbeats | 読み取り | ハートビート(cron/デッドマンスイッチ)モニターの一覧と、それぞれの最終 ping 時刻を表示します。 |
get_heartbeat | 読み取り | ping URL と、遅延として報告される時刻を含むハートビートを 1 つ読み取ります。 |
create_heartbeat | 書き込み | ハートビートモニターを作成し、スケジュール済みジョブが ping する URL を取得します。 |
update_heartbeat | 書き込み | ハートビートの名前、間隔、猶予期間、チャンネル、タグを変更します。 |
pause_heartbeat | 書き込み | ハートビートを一時停止します。遅延として報告されず、ping も無視されます。 |
resume_heartbeat | 書き込み | 一時停止中のハートビートを再開します。 |
delete_heartbeat | 書き込み | ハートビートを完全に削除します。ping URL は機能しなくなります。 |
メンテナンスウィンドウ
| ツール | 範囲 | 説明 |
|---|---|---|
list_maintenance_windows | 読み取り | メンテナンスウィンドウ(単発または繰り返し、組織全体またはモニターごと)の一覧を表示します。 |
list_active_maintenance | 読み取り | 現在有効なメンテナンスウィンドウを表示します。 |
get_maintenance_window | 読み取り | 次の 3 回分の発生予定を含むメンテナンスウィンドウを 1 つ読み取ります。 |
preview_maintenance_window | 書き込み | スケジュールを保存せずに、そのスケジュールで発生する次の 3 回分を表示します。 |
create_maintenance_window | 書き込み | アラートを抑制するウィンドウを、単発または iCal RRULE スケジュールで作成します。 |
update_maintenance_window | 書き込み | メンテナンスウィンドウを変更します。 |
delete_maintenance_window | 書き込み | メンテナンスウィンドウを削除します。アラートはただちに再開されます。 |
タグ
| ツール | 範囲 | 説明 |
|---|---|---|
list_tags | 読み取り | 組織内のすべてのタグと、それぞれが付与されているモニターおよびハートビートの数を一覧表示します。 |
bulk_update_monitor_tags | 書き込み | 1 回の呼び出しで、最大 300 個のモニターにタグを追加または削除します。 |
rename_tag | 書き込み | タグが付与されているすべてのモニターとハートビートで、そのタグの名前を変更します。 |
delete_tag | 書き込み | タグが付与されているすべてのモニターとハートビートから、そのタグを削除します。 |
ステータスページ
| ツール | スコープ | 機能 |
|---|---|---|
list_status_pages | read | ステータスページを一覧表示します。各ページのスラッグと公開済みかどうかを確認できます。 |
get_status_page | read | グループとコンポーネントを含むステータスページを1つ取得します。 |
list_status_page_incidents | read | ステータスページのインシデントを、担当者が投稿したもの、またはFettleが開始したものに分けて、タイムラインとともに一覧表示します。 |
create_status_page_incident | write | 最初のメッセージを添えて、ステータスページでインシデントを開始します。 |
post_status_page_update | write | ステータスページのインシデントにメッセージを追加し、ステータスを設定します。RESOLVEDにすると終了します。 |
update_status_page_incident | write | ステータスページのインシデント名を変更します。購読者には通知されません。 |
delete_status_page_incident | write | インシデントとそのタイムラインをステータスページから削除します。 |
組織とプラットフォーム
| ツール | スコープ | 機能 |
|---|---|---|
get_plan_usage | read | 組織のプラン、その上限、および各上限の使用状況を確認します。 |
list_channels | read | モニターに紐付ける通知チャネル(ID、タイプ、ラベル、検証済みかどうか)を一覧表示します。 |
list_regions | read | チェックリージョンと、リージョン引数に指定するコードを一覧表示します。 |
この一覧は手作業で作成されたものではありません。Fettleバックエンドの単一のレジストリから生成され、
/public-api/mcp-tools.jsonで提供されます。
このパッケージはそのファイルを同梱し、起動時にそこからツールを構築するため、
2つのMCPチャネルで異なるツールが提供されることはありません。
エージェントガイド
サーバーはinitializeのinstructionsでこのガイドをクライアントに送信するため、
どちらのチャネル経由で接続したエージェントもすでにこのガイドを利用できます。ここでは、
人間やサーバーの指示を表示しないクライアント向けに掲載しています。
Fettle is an uptime monitoring service. The tools see only the API key's organization: monitors, heartbeats, maintenance windows, incidents, status page incidents, tags, channels (read), regions. Channels, status pages, members, API keys and billing are managed only in the dashboard (https://dashboard.fettle.sh). Read a tool's description (arguments, limits, errors) before its first call.
FINDING THINGS
- list_monitors: one short row per monitor, to find ids. Filters are JSON arrays. Broken now: status ["DOWN", "DEGRADED"]. Certificates expiring first: type ["SSL"], sort "ssl_expiry".
- tag filters lists; tag_match "all" (default) needs every tag, "any" one of them.
- Pages: page from 1, size 1..100 (default 25).
PLAN LIMITS
Call get_plan_usage before creating anything: limits (null means none) and usage. A broken limit or an unknown region is a 403 naming it: change the request or tell the user; never retry it unchanged.
CREATING MONITORS
- check_target probes a target once before create_monitor.
- regions: unless the user names some, use every limits.allowed_regions code, up to max_regions; SSL, DNS and port-list TCP take one.
- After create, tell the user the interval and regions chosen; offer to change the interval (update_monitor).
- bulk_create_monitors creates up to 100, all or nothing.
- type and target never change after create.
- channel_ids: ids from list_channels. Empty or omitted on create alerts every verified, active channel. Email is not a channel: every alert also emails the creator of the monitor or heartbeat.
- update tools change only the fields you pass; omit one to keep it, never send null. A monitor's config is replaced whole: resend every config field to keep.
- Exposed ports on a server: follow get_exposed_ports_preset.
MANY MONITORS AT ONCE
Find ids with list_monitors, then bulk_pause_monitors, bulk_resume_monitors or bulk_update_monitors (interval, timeout, regions, channels, threshold, cooldown) for up to 100 ids, all or nothing. bulk_update_monitor_tags adds or removes tags on up to 300. There is no bulk delete.
TAGS
Call list_tags first and reuse names. Tags are flat labels such as env:prod, trimmed, lowercased and deduplicated; at most 10 per item. rename_tag and delete_tag act on every monitor and heartbeat.
HEARTBEATS
A job calls ping_url when it succeeds. Job every N seconds, alert after T seconds of silence: period_seconds = N, grace_seconds = T - N. Never late before its first success ping. ping_url + "/start" restarts the clock, ping_url + "/fail" marks it DOWN at once.
MAINTENANCE
Before a deploy or reboot, create_maintenance_window (scope ORG or MONITOR) instead of pausing monitors: checks keep running, but no incident opens and no alert goes out. Not for heartbeats. preview_maintenance_window shows a schedule's next occurrences; list_active_maintenance shows what is silenced now.
OUTAGES
list_monitors status ["DOWN"] -> list_check_results (status code, error, region per check) -> get_incident. acknowledge_incident stops repeat alerts; the recovery alert still goes out. create_status_page_incident and post_status_page_update can email the page's subscribers: confirm the text with the user first.
ERRORS (start of a failed call's text)
- "Authentication failed": the key is missing, revoked or expired, the address is not allowed, or its creator lost access. Do not retry; tell the user.
- "This tool requires/needs an API key with write scope": the key is read-only; tell the user.
- "Invalid argument(s)": names each failing field. "Invalid request:": the rule broken. Fix, retry.
- "Forbidden:": a plan limit, an unknown region, or the key's user lacks the permission; the reason says which.
- "Not found:": no such id in this organization.
- "Rate limited": wait the seconds given, then retry. All API keys share the organization's per-minute budget.
- "Tool '<name>' failed: the API returned 5xx": server fault, retry once later.
- "Tool '<name>' does not accept argument(s)": drop the ones named.
- "Request failed with status N": read the reason, do not retry unchanged.
もう一方のチャネル:リモートMCP
クライアントがHTTP経由のリモートMCPサーバーに対応している場合、このパッケージは必要ありません。
同じAPIキーをBearerトークンとして、https://api.fettle.sh/mcpを指定してください。
同じツール、同じ動作で、インストールも更新も不要です。
Claude Codeでは、コマンドラインからリモートチャネルを追加します。上記のstdioとは異なる フラグを使用し、環境変数ではなくヘッダーとしてキーを指定します。
claude mcp add fettle --transport http https://api.fettle.sh/mcp \
--header "Authorization: Bearer fettle_your_key_here"
JSONファイルで設定するクライアントでは、同じ2つのフィールドを指定します。
{
"mcpServers": {
"fettle": {
"url": "https://api.fettle.sh/mcp",
"headers": { "Authorization": "Bearer fettle_your_key_here" }
}
}
}
Codexでは~/.codex/config.tomlでリモートチャネルを設定し、キーは環境変数から読み込むため、
ファイル内にキーが保存されることはありません。
[mcp_servers.fettle]
url = "https://api.fettle.sh/mcp"
bearer_token_env_var = "FETTLE_API_KEY"
クライアントがstdioにしか対応していない場合や、クライアントのクラウド設定ではなく ローカルの設定ファイルに認証情報を保存したい場合は、このパッケージを使用してください。
どちらのチャネルも、現時点ではOAuthに対応していません。どちらもAPIキーで認証します。
レート制限とプラン
ツール呼び出しでは、REST APIと同じ組織ごとのリクエスト上限が消費されます。別枠ではなく、
プランで定められた上限です。レート制限に達した場合は、何秒待つ必要があるかが返されます。
check_nowには、呼び出し元のアドレスごとに1分あたり10回という独自の上限もあります。
get_plan_usageでは、組織のリクエスト上限をlimits.api_rate_limit_per_minuteとして確認できます。
プランの上限はhttps://fettle.sh/pricingに記載されています。
トラブルシューティング
FETTLE_API_KEY is not set — クライアントが変数を設定せずにサーバーを起動しました。上記の設定のenvブロックを確認してから、クライアントを完全に再起動してください。ほとんどのクライアントは起動時にのみMCP設定を読み込みます。
Authentication failed — キーが間違っているか、失効しているか、削除済みの組織のものです。Settings → API Keysで新しいキーを作成してください。
This tool requires an API key with write scope — キーが読み取り専用です。書き込みスコープのキーを作成してください。既存のキーのスコープを広げる方法はありません。
アシスタントにツールが表示されない — クライアントを再起動し、node -vでNode.js 20+を確認してください。ターミナルでnpx -y fettle-mcpを実行してください。キー不足のメッセージが表示されて終了すれば、パッケージ自体が実行できていることを確認できます。
開発
pnpm install
pnpm run typecheck
pnpm test
pnpm run build
pnpm run contract:check # vendored contract vs. production
ツールの追加は、こちらではなくバックエンドのレジストリを変更して行います。そこでコントラクトを再生成し、pnpm run contract:check -- --writeで再度ベンダーに取り込んで、変更をコミットしてください。このパッケージには、ツールを記述するソースファイルはありません。
server.jsonは公式MCPレジストリが提供するエントリーで、バージョンも記載されています。package.jsonと一致しなくなるとテストが失敗するため、両方を同時に更新してください。
リリースはバージョンタグで行います。vX.Y.Zをプッシュすると.github/workflows/publish.ymlが実行され、テスト、ビルドを行い、プロベナンス付きでパッケージをnpmに公開します。
ライセンス
MIT © Fettle
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。