mcpField
F
Fettle

Fettle

リモート
fettle.shクラウド・インフラ0今日更新
リポジトリ公式サイト

Fettle について

Fettleは、AIアシスタントから組織の稼働監視を管理するMCPサーバーです。モニター、インシデント、ハートビート、メンテナンス時間、ステータスページのインシデントを扱い、APIキーの権限で読み書きを制御します。

主な機能

  1. 01モニターの作成、確認、更新、一時停止
  2. 02稼働率、応答時間、チェック結果の確認
  3. 03インシデントの一覧表示と確認
  4. 04ハートビート監視とメンテナンス時間の管理
  5. 05ステータスページのインシデント、タグ、リージョンの管理

活用シーン

  1. 01URL、ホスト、ポートのモニター作成
  2. 02今週モニターに発生したインシデントの確認
  3. 03計画デプロイ中のチェック一時停止
  4. 04ステータスページのインシデント更新

MCP 対応

パッケージまたはリモートエンドポイント `https://api.fettle.sh/mcp` を通じて、Fettleの監視ツールをMCPクライアントに公開します。組織のAPIキーで認証し、書き込み操作にはwriteスコープのキーが必要です。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://api.fettle.sh/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://api.fettle.sh/mcp認証が必要
パッケージ
npmfettle-mcp0.7.1

ツール

49
パラメーター型必須説明
qstringいいえ
tagarrayいいえ
pageintegerいいえ
sizeintegerいいえ
sortenumいいえstatus | up_first | name | newest | oldest | ssl_expiry
typearrayいいえ
statusarrayいいえ
tag_matchenumいいえ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_pagesreadステータスページを一覧表示します。各ページのスラッグと公開済みかどうかを確認できます。
get_status_pagereadグループとコンポーネントを含むステータスページを1つ取得します。
list_status_page_incidentsreadステータスページのインシデントを、担当者が投稿したもの、またはFettleが開始したものに分けて、タイムラインとともに一覧表示します。
create_status_page_incidentwrite最初のメッセージを添えて、ステータスページでインシデントを開始します。
post_status_page_updatewriteステータスページのインシデントにメッセージを追加し、ステータスを設定します。RESOLVEDにすると終了します。
update_status_page_incidentwriteステータスページのインシデント名を変更します。購読者には通知されません。
delete_status_page_incidentwriteインシデントとそのタイムラインをステータスページから削除します。
組織とプラットフォーム
ツールスコープ機能
get_plan_usageread組織のプラン、その上限、および各上限の使用状況を確認します。
list_channelsreadモニターに紐付ける通知チャネル(ID、タイプ、ラベル、検証済みかどうか)を一覧表示します。
list_regionsreadチェックリージョンと、リージョン引数に指定するコードを一覧表示します。

この一覧は手作業で作成されたものではありません。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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。