目次

サインインとアクセス

AI クライアントは OAuth 2.1 で LetKite にサインインします。各クライアントは一度だけ承認し、そのときにクライアントができることとアクセスできるマシンを選びます。このアクセスはいつでも取り消せます。

ディスカバリー

トークンなしで https://mcp.letkite.com/mcp を呼び出したクライアントは、HTTP 401 と、保護リソースメタデータを指す WWW-Authenticate ヘッダーを受け取ります。クライアントはそこから認可サーバーを見つけます:

保護リソースメタデータhttps://mcp.letkite.com/.well-known/oauth-protected-resource/mcp
認可サーバーメタデータhttps://mcp.letkite.com/.well-known/oauth-authorization-server(/.well-known/openid-configuration でも取得できます)
発行者https://mcp.letkite.com
認可エンドポイントhttps://mcp.letkite.com/oauth/authorize
トークンエンドポイントhttps://mcp.letkite.com/oauth/token
取り消しエンドポイントhttps://mcp.letkite.com/oauth/revoke(リフレッシュトークン用)
登録エンドポイントhttps://mcp.letkite.com/oauth/register

クライアント登録

LetKite には事前登録されたクライアントはありません。クライアントは、次の 2 つのいずれかの方法で自身を識別します:

  • 動的クライアント登録(RFC 7591):クライアントが登録エンドポイントにメタデータを送信し、クライアント ID を受け取ります。クライアントシークレットは、client_secret_post または client_secret_basic を求めるクライアントにのみ発行されます。パブリッククライアントはシークレットを使いません。
  • クライアント ID メタデータドキュメント:クライアント ID が、クライアントのメタデータを提供する https:// URL になっています。LetKite はこれを、タイムアウト 5 秒、最大 64 KB、リダイレクトをたどらず、公開アドレスからのみ取得します。

リダイレクト URI は https である必要があります。http はループバックアドレス(localhost、127.0.0.1)でのみ使え、Claude Code のようなローカルのクライアント向けです。この場合、ポートは任意です(RFC 8252)。LetKite は Claude、ChatGPT などの既知のクライアントのコールバックを認識し、クライアントのコールバックがそのいずれでもない場合は、サインインページで警告します。拒否されたコールバックは監査ログに記録されます。

認可フロー

  • 認可コードフローのみ(response_type=code)で、すべてのリクエストで PKCE S256 が必須です。
  • リソースインジケーター(RFC 8707):クライアントはリソースとして https://mcp.letkite.com/mcp を指定できます。トークンは常にこのリソース向けに発行されます。
  • 認可レスポンスには iss が含まれます(RFC 9207)。
  • グラント:authorization_code と refresh_token。

サインインは LetKite 自身のサインインページ(id.letkite.com)で行い、アカウントで必要とされている場合は 2 段階認証も行います。複数の LetKite アカウントに所属している場合は、1 つを選びます。続いて、同意画面に次の内容が表示されます:

  • クライアントの名前、登録方法、サインイン後の戻り先
  • クライアントが求めるスコープ(チェックを外せますが、少なくとも 1 つは残ります)
  • クライアントがアクセスできるマシン:後から追加されるものも含むすべてのマシン、または選んだタグや ID のマシンのみ
  • クライアントを制限するポリシー(アカウントのポリシーから選択)

承認すると、その人、クライアント、スコープの組み合わせ、マシンの範囲、ポリシーに対して、1 つの接続(グラント)が作成されます。アカウントのオーナーとあなたには、新しい接続についてのメールが届きます。メールには、あなた自身による操作でなかった場合に接続を取り消すためのリンクが含まれます。

スコープ

スコープ許可される操作ツール(例)
fleet.readマシンの一覧表示、ファイルの読み取り、ログとジョブの状態の確認list_hosts、host_facts、read_file、list_dir、job_status、log_read
fleet.execコマンドの実行、シェルとターミナルを開く操作、ジョブと定期実行の開始、スリープ中のマシンの起動exec、shell_run、job_start、terminal_open、schedule_create
fleet.writeファイルの書き込み、アップロード、コピー、削除write_file、delete_path、transfer_start
fleet.adminポート転送と監査ログの読み取り。ほかの 3 つのスコープを含みますtunnel_open、tunnel_http、audit_tail
offline_access受け付けます。リフレッシュトークンはいずれの場合も発行されます

各ツールに必要なスコープは、ツールページにある各ツールの説明に記載されています。スコープがない呼び出しは token lacks fleet.… で失敗します。

トークン

アクセストークン15 分。https://mcp.letkite.com/mcp 向けの署名付き JWT(RS256)で、Authorization: Bearer として送信します
リフレッシュトークン30 日。使用するたびに新しいものに置き換わります。古いトークンを再使用すると、チェーン全体が失効します
認可コード2 分。使えるのは 1 回だけです。コードが再使用されると、そのコードから発行されたトークンが失効します

アクセスの取り消し

  • コンソールの接続(https://dashboard.letkite.com/connections)で、自分の接続を切断できます。オーナーと管理者は、すべての人の接続を切断できます。
  • 新しい接続の通知メールにあるリンクを使います。

LetKite はツールが呼び出されるたびに接続を読み直すため、切断されたクライアントは、トークンの期限切れを待たずに数秒以内に拒否されます。すべてのリフレッシュトークンが期限切れになってから 1 日たった接続は、定期実行で使われていない限り、自動的に削除されます。