Claude Code 向けの DynamoDB MCP
Claude Code は、呼び出せる MCP サーバーを与えれば、あなたの DynamoDB のスキーマを読み取り、テーブルに対して読み取りを実行し、編集を提案できます。
このガイドでは、正確なコマンド、登録するスコープ、ログイン手順、ツールが読み込まれたかを確かめる方法、そしてエージェントが最終的にどの認証情報を握るのかを扱います。
ローカルの MCP サーバーとして動作する DynoTable に Claude Code を向ければ、
DynoTable はあなたの AWS キーをエージェントに渡しません。それでも Claude Code 自身のシェルは
~/.aws を読めるので、そちらもブロックしましょう。
DynoTable をインストールしない場合は、読み取り専用プロファイルのセットアップへ進んでください。すべての選択肢の比較は
DynamoDB MCP サーバーの概要にあります。
接続すると Claude Code に何ができるか
- テーブルとスキーマの探索: テーブル一覧、キースキーマ、インデックス、そしてアイテムに実際に現れる属性。
- データの読み取り: PartiQL の
SELECT(WHEREでパーティションキーを固定すると Query として、そうでなければ Scan として実行されます)、GetItem、アイテム数のカウント。結果は少量のサンプルに制限されて返ります。生のQueryツールやScanツールはありません。 - 集計: Workbench SQL による件数、合計、グループ化。DynamoDB はネイティブにはこれができません。
- 編集の提案: 編集はあなたのテーブルではなく、レビュー可能なステージングエリアに入ります。コミットするのはあなたです。
始める前に
- DynoTable をインストールする: ダウンロードして、エージェントに見せたい AWS プロファイルを追加します。
- そのプロファイルを公開する: プロファイルの MCP セクションを開き、MCP 経由で公開をオンにします。接続は 1 つのプロファイルの認証情報とリージョンに固定されるため、
devに配線したエージェントはprodを見られません。何も公開していなければ、すべての接続が拒否されます。 - 設定 → MCP で MCP サーバーをオンにする。デフォルトではオフで、
127.0.0.1にのみバインドするため、マシンの外からは何も到達できません。
すると、プロファイルの MCP セクションに実際のポートを含む接続コマンドが表示されます。
Claude Code にサーバーを追加する
プロジェクト内で次を実行します。ポートとプロファイルのスラッグは、そのペインに表示されるものに置き換えてください:
claude mcp add --transport http dynotable-prod "http://127.0.0.1:<port>/mcp?profile=prod"--transport http は重要です。DynoTable は MCP を streamable HTTP で話します。これを省くと、
Claude Code は URL そのものを stdio コマンドとして(警告付きで)登録し、起動に失敗します。
URL は引用符で囲んでください。zsh は引用符のない ? をグロブとして扱います。
末尾の ?profile=prod は、DynoTable の承認プロンプトでそのプロファイルを事前選択します。接続の確認はやはりアプリ内で行います。
どのスコープで登録するか
Claude Code はサーバーを 3 か所のいずれかに書き込みます。今回はデフォルトで問題ありません:
| スコープ | フラグ | 書き込み先 | 使いどころ |
|---|---|---|---|
| Local(デフォルト) | なし | ~/.claude.json の、このプロジェクトのパス下 | 試してみるとき |
| User | --scope user | ~/.claude.json、すべてのプロジェクト向け | すべてのプロジェクトで使いたいとき |
| Project | --scope project | プロジェクトルートの .mcp.json | 今回のケースでは使わない |
--scope project は使わないでください。 そのファイルはコミットされるため、チームメイトが動かしていない 127.0.0.1:<port> のサーバーをプッシュすることになります。Claude Code はチームメイトそれぞれに承認を求め、そのうえで接続に失敗します。
ポートもマシンごとに異なります。local か user に留めましょう:
claude mcp add --scope user --transport http dynotable-prod "http://127.0.0.1:<port>/mcp?profile=prod"ログインして接続を承認する
DynoTable の endpoint は OAuth で保護されているので、新しいサーバーは Needs authentication
と表示されます。Claude Code のセッション内で /mcp を実行し、dynotable-prod を選んで認証します。
シェルからは claude mcp login dynotable-prod で同じことができます。ブラウザが開き、
DynoTable がクライアント名を示す同意プロンプトを表示します。
まずは読み取り専用を付与しましょう。読み取りとステージではステージングした編集が、フルアクセスではビューを開く、フィルター、エクスポートが加わります。それぞれで何ができるか、そしてどれも直接の書き込みではない理由は、概要のスコープの節にあります。
選ぶ前に知っておくべきことが 2 つあります:
- 付与したスコープをその場で狭めることはできません。 MCP ペインにあるのは失効とすべて失効で、失効したクライアントは次のリクエストで失敗します。スコープを変えるには、失効させてから、再接続を希望のスコープで承認します。
- 有効なプランまたはトライアルがない場合、DynoTable は付与した内容にかかわらず、すべての接続を読み取り専用に制限し、Workbench SQL ツールを非表示にします。
実際に読み込まれたかを確認する
claude mcp listこれは各サーバーをヘルスステータス(Connected、Needs authentication、
Failed to connect)付きで一覧します。claude mcp get dynotable-prod を使うと、書き込まれたスコープも表示されます。
dynotable-prod が一覧にない場合、add は別のディレクトリで local スコープに書き込まれており、ここからは claude mcp get でも見えません。このディレクトリで add を実行し直すか、
--scope user を付けて実行してください。
次に、Claude Code のセッション内で:
/mcpこれはライブの接続状態と、サーバーが公開したツールを表示します。
何を尋ねるか
役に立つプロンプトは、あなた自身のデータを必要とするものです:
- 「このプロファイルにはどんなテーブルがあり、それぞれのキースキーマはどうなっていますか?」
- 「アカウント
acmeの直近 30 日間のチケットをすべて見つけて、ステータスの内訳をまとめてください。」 - 「この
Queryが何も返しません。テーブルのキースキーマを読んで、理由を教えてください。」 - 「
ticketsのstatusごとにアイテムを数えてください。」(DynamoDB がネイティブには答えを持たない集計です。) - 「この 3 件のアイテムの
statusをclosedにしてください。」これは確認用に 3 つの差分をステージングし、あなたがコミットするまで何も書き込みません。
データについて尋ねる前に、キースキーマを尋ねましょう。パーティションキーを知っているエージェントはそれを固定できるので、読み取りがテーブル全体の Scan ではなく Query として実行されます。
このサーバーには許可ルールを追加せず、Claude Code の呼び出しごとの承認をオンのままにして、各ステートメントを実行前に確認できるようにしましょう。その他の制御はコストの節にあります。
なぜ Claude Code に AWS 認証情報を渡してはいけないのか?
AWS キーを保持するサーバーは、エージェントのプロセスにそのキーの IAM 権限をフルに与え、その手前にレビューステップはありません。
MCP のツール結果は信頼できない入力です。行、ドキュメント、Web ページには命令が含まれていることがあります。それが プロンプトインジェクションであり、書き込み可能な認証情報に対しては、あなたのテーブルに作用しえます。
DynoTable を経由すれば、エージェントは MCP 経由でキーを受け取らず、書き込みツールもないので、読み取りとステージで操られたエージェントにできるのは、せいぜいあなたが読む差分をステージングすることだけです。全体のモデルは概要で説明しています。
Claude Code を AWS ファイルに近づけない
キーは依然として ~/.aws にあり、Claude Code の Bash ツールはデフォルトで、認証情報ファイルを含めマシンの大部分を読めます。サンドボックスをオンにしてそのディレクトリを拒否し、さらにファイルツールも拒否します。サンドボックスのエントリは Read ツールを止めないからです。
~/.claude/settings.json に:
{
"permissions": {
"deny": ["Read(~/.aws/**)"]
},
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"allowUnsandboxedCommands": false,
"autoAllowBashIfSandboxed": false,
"credentials": {
"files": [{"path": "~/.aws", "mode": "deny"}]
}
}
}サンドボックスは macOS、Linux、WSL2 で動作します。Linux と WSL2 では、先に bubblewrap と
socat をインストールしてください。サンドボックスを起動できない場合、Claude Code はデフォルトでコマンドをサンドボックスなしで実行しますが、failIfUnavailable: true にすると代わりに起動を拒否します。ネイティブの Windows ではサンドボックスが動かないため、このキーがあると Claude Code
は起動しません。WSL2 の中で実行するか、そこでは sandbox ブロックを省いてください(Read の拒否は引き続き適用されます)。
allowUnsandboxedCommands: false は、ブロックされたコマンドを Claude がサンドボックスの外で再試行するのを止めます。サンドボックスをオンにすると、サンドボックス内の Bash コマンドも自動承認されるようになりますが、autoAllowBashIfSandboxed: false でコマンドごとの確認が維持されます。
ローカルの MCP サーバーはサンドボックスの外で動くので、stdio サーバーは引き続き自分のプロファイルを読めます。詳細は Anthropic のサンドボックスのドキュメントにあります。
DynoTable を使わない場合: 読み取り専用プロファイル
別の DynamoDB MCP サーバーを使う場合は、その認証情報を読み取り専用にします。マネージドポリシー
AmazonDynamoDBReadOnlyAccess を持つロール用の AWS プロファイルです(プロファイルのブロックは概要にあります)。キーではなくプロファイル名を渡します:
claude mcp add --env AWS_API_MCP_PROFILE_NAME=dynamodb-readonly --env READ_OPERATIONS_ONLY=true \
--transport stdio aws-api -- uvx awslabs.aws-api-mcp-server@latestこれは AWS API MCP Server で、AWS_API_MCP_PROFILE_NAME を読みます。他のほとんどのサーバーは
AWS_PROFILE を受け取ります。最後の --env とサーバー名の間には --transport のようなオプションを置いてください。そうしないと、CLI はサーバー名をもう 1 つの KEY=value ペアとして読みます。-- 以降はすべてサーバーを起動するコマンドです。
エージェントが試みる書き込みはサーバーの読み取り専用フィルターが拒否し、それをすり抜けたものがあっても IAM が拒否します。
トラブルシューティング
claude mcp list に出てこない。 別のディレクトリから local スコープで追加しています。
--scope user を付けて実行し直してください。
Needs authentication。 /mcp を実行して認証するか、claude mcp login dynotable-prod を実行してください。
Failed to connect、またはログインがアクセス拒否で終わる。 順に確認します。DynoTable は起動していますか、設定 → MCP でサーバーはオンですか、プロファイルは公開されていますか(MCP 経由で公開)、ポートは今も有効なものですか、そして同意プロンプトを承認しましたか?
接続はできているのに、ステージングできない。 接続が読み取り専用で承認されたか、プランが失効して DynoTable が読み取り専用に制限しています。MCP ペインの接続中のクライアント一覧でスコープを確認してください。
Workbench SQL や集計がない。 プランまたはトライアルが失効しています。読み取り専用の付与でも Workbench SQL は使えます。非表示にするのは失効したプランだけです。
見えているテーブルが違う。 接続は ?profile= のヒントに関わらず、あなたが承認したプロファイルに紐づきます。MCP ペインで失効させて、接続し直してください。
アップデート後に何も動かない。 Claude Code を再起動してください。Claude Code はセッションの開始時にツール一覧を読み込みます。
よくある質問
Claude Code を DynamoDB に接続するには?
DynoTable で、使いたいプロファイルの MCP 経由で公開をオンにし、設定 → MCP でサーバーをオンにします。そのプロファイルの MCP セクションにある claude mcp add コマンドを実行し、/mcp
で認証して、接続を承認します。
claude mcp add ではどのスコープを使うべきか?
local(デフォルト)または --scope user を使ってください。--scope project は避けましょう。コミットされる .mcp.json に書き込まれ、チームメイトが動かしていないループバックのポートをプッシュしてしまうからです。
Claude Code に AWS のアクセスキーは必要か?
いいえ。DynoTable があなたのプロファイルで DynamoDB の呼び出しを行い、キーを Claude Code に渡すことはありません。それでもキーは ~/.aws にあるので、Claude Code のシェルをサンドボックスでそこから遠ざけましょう。他のサーバーには認証情報が必要です。生のキーではなく、読み取り専用のプロファイル名を渡してください。
Claude Code は私の DynamoDB テーブルに書き込めるか?
DynoTable 経由では直接には書き込めません。変更をステージングでき、それはあなたがアプリ内でコミットしたときにだけ書き込まれます。書き込み可能な AWS 認証情報を保持するサーバーは直接書き込めますが、読み取り専用の IAM プロファイルならその書き込みは失敗します。サーバーの比較は概要にあります。
関連ページ
- DynamoDB MCP サーバー: 選択肢の比較: スコープ、セキュリティモデル、読み取りコスト、そしてどのサーバーにも使える読み取り専用の経路。
- Cursor と Codex でも同じセットアップができます。
- MCP サーバーのドキュメント: 完全なセットアップ、同意、セキュリティモデル。
- ステージング: 提案された書き込みがどうレビューされ、コミットされるか。
- AI で DynamoDB をクエリする: そもそも外部エージェントを使いたくない場合の、アプリ内アシスタント。
- リクエストを自分で書きたいですか?
DynamoDB Expression Builder が
KeyConditionExpression/FilterExpressionをブラウザ内で生成します。 - DynoTable をダウンロードして、キーを渡さずに Claude Code を接続しましょう。
製品名はそれぞれの所有者の商標であり、識別のためにのみ参照しています。Claude Code のコマンド構文は 2026-10-09 に確認済みです。