re:Invent 2026 の計画を Claude Code と相談しながら作ろうとしていたら、セッションカタログを取れる AWS Events API というものを見つけたので調べてみた。
概要
AWS Events API は REST API と MCP サーバーの 2 つの形で提供されている。
| 形態 | エンドポイント |
|---|---|
| REST API | https://api.awsevents.com/v1/... |
| MCP サーバー | https://api.awsevents.com/mcp |
公式ドキュメントはこちら。
機能一覧
用意されている操作はこの 12 個。REST API と MCP のどちらでも同じ操作ができる。
| 操作 | メソッドとパス | できること |
|---|---|---|
| ListEvents | GET /v1/events |
開催中・開催予定のイベント一覧 |
| GetEvent | GET /v1/events/{eventId} |
イベント 1 件の情報 |
| ListSessions | GET /v1/events/{eventId}/sessions |
セッション一覧(ページ単位) |
| GetSession | GET /v1/events/{eventId}/sessions/{sessionId} |
セッション 1 件の詳細 |
| GetSchedule | GET /v1/events/{eventId}/schedule |
自分のスケジュール(予約・お気に入り・個人予定) |
| ReserveSessions | POST /v1/events/{eventId}/reservations |
セッションを予約(1 回で最大 10 件) |
| CancelReservation | DELETE /v1/events/{eventId}/reservations/{sessionId} |
予約をキャンセル |
| AssociateFavorites | POST /v1/events/{eventId}/favorites |
お気に入りに追加 |
| DisassociateFavorite | DELETE /v1/events/{eventId}/favorites/{sessionId} |
お気に入りから外す |
| CreatePersonalTime | POST /v1/events/{eventId}/personal-time |
個人予定を追加 |
| UpdatePersonalTime | PUT /v1/events/{eventId}/personal-time/{personalTimeId} |
個人予定を変更 |
| DeletePersonalTime | DELETE /v1/events/{eventId}/personal-time/{personalTimeId} |
個人予定を削除 |
イベント情報の取得にサインインは要らない。セッションの取得は、re:Invent のように参加登録が必要なイベントだとサインインが要る。スケジュールまわりは全部サインインが必須で、MCP の場合はどの操作でもサインインが必要になる。
使い方:REST API
イベント一覧の取得
どんなイベントが API の対象になっているかを見てみる。/v1/events を呼ぶと、開催中と開催予定のイベントが返ってくる。この呼び出しにはサインインが要らないので、curl だけで試せる。
レスポンスは項目が多いので、jq でイベント ID、イベント名、サインインが必要かどうかの 3 つに絞っている。
curl -s https://api.awsevents.com/v1/events | jq '.items[] | {eventId, name, authenticationRequired}'
実行すると、イベントごとに次のような結果が出る。ほかのイベントも返ってくるが、ここには re:Invent 2026 の分だけ載せた。
{
"eventId": "reinvent2026",
"name": "re:Invent 2026",
"authenticationRequired": true
}
見るところは 2 つ。eventId は、セッション一覧やスケジュールを取るときの URL に入れる値で、re:Invent 2026 なら reinvent2026 になる。authenticationRequired が true のイベントは、セッションを取るのにサインインが要る。
アクセストークンの取得
re:Invent 2026 は authenticationRequired: true なので、セッション一覧を匿名で取りにいくと 401 が返ってくる。イベントに登録済みの AWS Builder ID でサインインして、アクセストークンを取る必要がある。
ここでは転送先の URL から認可コードを手でコピーする方法で、ターミナルとブラウザだけで取ってみる。
1. PKCE の値を作る
サインインのたびに使い捨てるランダム文字列(verifier)と、それを SHA-256 にかけた値(challenge)を用意する。変数を引き継ぐので、3 までは同じターミナルで続けて実行する。
CODE_VERIFIER=$(openssl rand -base64 96 | tr -d '\n=+/' | cut -c1-64)
CODE_CHALLENGE=$(printf '%s' "$CODE_VERIFIER" | openssl dgst -sha256 -binary | openssl base64 -A | tr '+/' '-_' | tr -d '=')
STATE=$(openssl rand -hex 16)
2. ブラウザでサインインする
1 で作った値を付けた URL をブラウザで開く。open は macOS のコマンドなので、ほかの OS では URL をブラウザに貼り付ける。
open "https://oauth.awsevents.com/oauth2/authorize?response_type=code&client_id=7vmom55m1qstvq8i71ph127bfq&redirect_uri=http://localhost:8484/callback&scope=openid+email+events/access&identity_provider=AWSBuilderID&code_challenge=$CODE_CHALLENGE&code_challenge_method=S256&state=$STATE"
Builder ID でサインインすると、ブラウザが http://localhost:8484/callback?code=...&state=... に移動する。手元で何も待ち受けていないのでページは開けないが、問題ない。アドレスバーに出ている code= の値が認可コードなので、コピーしておく。
redirect_uri に使えるのは localhost のポート 8484〜8489 の /callback だけ。ほかの値にするとサインインに失敗する。
3. 認可コードをトークンに交換する
2 でコピーした認可コードを CODE に入れて、トークンエンドポイントに送る。
CODE=コピーした値
TOKENS=$(curl -s -X POST https://oauth.awsevents.com/oauth2/token \
-d "grant_type=authorization_code" \
-d "client_id=7vmom55m1qstvq8i71ph127bfq" \
-d "redirect_uri=http://localhost:8484/callback" \
-d "code=$CODE" \
-d "code_verifier=$CODE_VERIFIER")
ACCESS_TOKEN=$(echo "$TOKENS" | jq -r .access_token)
レスポンスにはアクセストークン、ID トークン、リフレッシュトークンの 3 つが入っている。このうち API に送るのはアクセストークンだけでいい。
アクセストークンは 60 分で切れる。一緒に返ってくるリフレッシュトークン(30 日有効)を使えば、サインインし直さずに取り直せる。やり方は公式の Keeping the attendee signed in に載っている。
セッション一覧の取得
トークンが取れたら、Authorization ヘッダーに付けて呼ぶ。
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://api.awsevents.com/v1/events/reinvent2026/sessions?includeAbstracts=false" \
| jq '{totalCount, nextToken, first: .items[0].title}'
レスポンスは { items, nextToken, totalCount } の形で返ってくる。続きは nextToken を付けて取りにいく。
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://api.awsevents.com/v1/events/reinvent2026/sessions?nextToken=$NEXT_TOKEN"
1 ページの件数はサーバー側が決めていて、途中で少ないページが返ることもあるらしい。件数で判断せず、nextToken がなくなるまで回すのが正解。
自分のスケジュールは /schedule で取れる。
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
https://api.awsevents.com/v1/events/reinvent2026/schedule
トークンは有効でもイベントに登録していないと 403 になる。サインインし直しても直らないので注意。
使い方:MCP
次のコマンドで、Claude Code に AWS Events の MCP サーバーを追加する。
claude mcp add --transport http --scope user awsevents \
https://api.awsevents.com/mcp \
--callback-port 8484 --client-id 7vmom55m1qstvq8i71ph127bfq
--callback-port 8484 は、サインイン後のコールバックを待ち受けるポートの指定。省略するとサインインに失敗するので必ず付ける。
追加したら Claude Code で /mcp を開いて awsevents を認証する。ブラウザが開くので Builder ID でサインインすれば終わり。以降は、Claude Code から MCP 経由で各種操作ができるようになる。
re:Invent 2026 で AgentCore 関連のセッションを探して
Claude Code が ListSessions や GetSession を呼んで答えてくれる。予約やお気に入り登録のツールもあるので、Claude Code が勝手に実行しないよう、許可設定は気にしておいたほうがいいかも。
まとめ
情報が多くて錯綜しがちなので、これらを使ってAIと相談しながら進めていくのもありだと思いました。