速報

JAL・JTAの予約情報約9万2千人分に外部参照の形跡|対象項目と利用者対応

CATEGORY

Sanity MCP 2.45.2の更新点|文書改変のスキーマ検証と権限を点検

※本ページのリンクにはプロモーションが含まれています。

AIエージェントの文書変更をスキーマで検証し不正な変更を遮断する概念イラスト

目次

Sanityは2026年10月28日、 Server v2.45.0でによる文書の作成・・公開を配備済みに照らして検証し、不正な変更を遮断する機能を追加しました。翌29日にはv2.45.2を公開し、MCPクライアントの探索に関係するドキュメント向け条件も修正しています。

Sanity MCP ServerをClaude Code、Cursor、VS Code、Codex などから使い、Content Lakeの文書を変更しているチームが対象です。今回の更新はコンテンツ整合性を高めますが、配備済みスキーマを一意に選べない場合は警告付きで変更を続け、スキーマ自体が配備されていないプロジェクトでは警告も出ません。したがって、更新確認だけで終えず、スキーマの選択、権限、警告時の停止、での拒否試験を合わせて点検する必要があります。

スポンサーリンク

v2.45.0で変わった文書改変の境界

v2.45.0では、作成、パッチ、公開の各変更について、対象データセットに配備されたスキーマを明確に特定できる場合、そのスキーマで検証してから処理します。必須項目の欠落、型の不一致、値の範囲、カスタム検証などに反する変更は遮断されます。AIエージェントが自然言語の指示を誤解したり、古いフィールド名を使ったりしたときに、壊れた文書をそのまま保存・公開する可能性を下げる更新です。

背景にはSanity Content Lakeの設計があります。Content Lakeは意図的にスキーマレスで、Sanity Studioの検証ルールはサーバー側ではなくStudio内で動きます。 、@sanity/client、データ移行、インポートによる一般的な書き込みは、通常はStudioの検証規則を通りません。今回のMCP Serverの検証は、Content Lake全体の保存方式がスキーマ強制型へ変わったという意味ではなく、MCPツール経由の変更前に追加された保護層です。

一意に選べない場合は失敗ではなく警告になる

運用で最も重要なのは例外条件です。v2.45.0は、候補となるスキーマが複数あり、対象を一意に決められない場合、警告を返したうえで変更処理を続けます。プロジェクトに配備済みスキーマがない場合も変更は続き、こちらは警告なしです。「検証機能が追加された」ことを、常に拒否される強制境界と解釈すると、検証されていない変更を見逃します。

複数のStudioやworkspaceが同じデータセットを参照する構成では、どのスキーマを使うべきかが曖昧になりやすくなります。MCP Serverのget_schemaは、workspace名を省略した場合、単一の有効なスキーマ、または複数ある場合の既定workspaceを選びます。厳密な対象が必要な場合はlist_workspace_schemasで候補を確認し、提示されたschemaIdを使って明示的に取得します。

警告が出たまま変更を許すかどうかは、MCPクライアントやエージェント側の運用判断です。本番データセットでは、スキーマが一意に決まらない警告を成功扱いにせず、workspaceとschemaIdを確認するまで次のツール呼び出しを止めるルールにします。警告文をチャット画面に表示するだけでは、自律実行中のエージェントが続行する可能性を除けません。

スポンサーリンク

liveEdit文書は公開IDへ直接変更される

v2.45.0は、liveEditが有効な文書タイプを作成・変更するとき、公開済みIDへ直接書き込むよう改善しました。通常の文書操作では下書きやリリース内のversionを使い、patch_documentsも下書きまたは指定したリリース版へ保存します。しかしliveEditは下書きと公開版を分けないため、変更の影響が公開コンテンツへ直結します。

この違いは承認フローに反映すべきです。通常文書なら「下書きを作る権限」と「公開する権限」を分けられますが、liveEditでは作成・パッチ自体が公開状態を変えます。エージェント用のロールが更新権限を持つ文書タイプにliveEditが含まれていないかを確認し、含まれる場合は人の承認後だけツールを実行するか、対象データセットを分離します。

スキーマ検証と認可は別の制御

スキーマ検証が判断するのは、変更後の文書が定義に適合するかです。誰がどの文書を作成・更新・公開できるかは、SanityのロールとContent permissionsが決めます。正しい形式の悪意ある変更や、権限を持つアカウントの誤操作は、スキーマ検証だけでは防げません。

  • Viewerは全データセットの読み取り専用
  • Contributorは下書きを作成・更新できるが公開できない
  • EditorやDeveloperはデータセットへ読み書きできる
  • Enterpriseのカスタムロールではデータセットや文書条件を絞れる

MCP ServerはOAuthを既定とし、認証した利用者の権限で操作します。代わりにAPIトークンを指定した場合は、そのトークンに付与されたロールと権限が境界になります。個人用の強いトークンを共有設定へ埋め込まず、エージェント専用の主体とを使います。公開が不要ならContributor相当、特定タイプだけ扱うならカスタムリソースで対象文書を限定します。

権限は加算される点にも注意が必要です。限定ロールと広いEditorロールを同じ主体へ付与すると、限定側の条件で広い権限を打ち消せません。エージェント用トークンが複数ロールを持つ場合、個々の設定ではなく合成後の実効権限を確認します。

スポンサーリンク

専用MCPツールをCLI代替より優先する

同じ操作について専用MCPツールとSanity CLIコマンドの両方が利用できる場合、v2.45.0は専用ツールを優先するよう改善されました。スキーマを理解するMCPツールを使うことで、検証、下書き、リリースID、liveEditなどの規則を適用しやすくなります。エージェントがターミナルから汎用CLIや独自スクリプトを呼べる構成では、専用ツールの検証を迂回して直接APIへ書き込む経路が残ります。

本番セッションでは、Sanityの変更に必要な専用ツールだけを許可し、任意のシェル実行を同じ承認範囲へ入れないようにします。読み取り、下書き変更、公開、スキーマ配備、データセット設定を別のツール群として扱い、公開や管理系の操作は常時承認対象にします。ツール名や説明の安全注釈は運用の補助であり、Sanity側のを置き換えません。

v2.45.2のOAuth探索修正を誤解しない

10月29日のv2.45.2では、ドキュメントへ誘導するリダイレクトを、ブラウザーのナビゲーションとHTMLまたはMarkdownを要求するリクエストに限定しました。MCPクライアントがOAuthのメタデータを探索するとき、機械向けリクエストまでドキュメントへ転送される状況を避ける修正です。

公式変更履歴は、この修正をやトークン漏えいとして説明していません。脆弱性や実害を推測せず、接続できないクライアントの互換性修正として扱います。接続障害があった環境ではMCPクライアントを再接続し、OAuthの認可先、付与されたSanityアカウント、利用可能ツールを確認します。古い手動トークン設定へ安易に切り替えると、OAuthより強い権限を長期保持する可能性があります。

更新後に行う拒否試験

  1. 非本番データセットに本番と同じ配備済みスキーマを用意する
  2. list_workspace_schemasとget_schemaで対象を一意に確認する
  3. 必須項目の欠落、誤った型、禁止値を含む作成・パッチを試し、遮断されることを確認する
  4. 複数スキーマで一意に選べない状態を再現し、警告時にエージェントが停止することを確認する
  5. 配備済みスキーマがない環境で警告が出ない条件を把握し、本番へ持ち込まない
  6. Contributor相当の主体で下書きは変更できても公開は拒否されることを確認する
  7. liveEditタイプへのパッチが公開IDへ反映されることを確認し、承認対象へ追加する

既存文書全体の確認には、Studioプロジェクトのディレクトリからnpx sanity documents validateを実行できます。このコマンドは下書きやContent Release内のversionも含めて検証します。公開済み文書だけを確認したい場合は、下書きを除外してデータセットをエクスポートし、そのファイルを検証します。MCPの1回の変更が拒否されたことと、データセット全体が健全であることを分けて確認してください。

検証で既存文書の別項目に問題が見つかった場合、MCP Serverは警告として報告することがあります。今回変更した項目が通ったことだけを根拠に警告を消さず、文書ID、規則名、既存データか今回の差分かを分けて修正計画へ登録します。公開時に止まる問題は、下書き作成の段階で解消してから人のレビューへ渡します。

本番運用で残す証跡

各セッションについて、利用したMCPクライアント、Sanityの主体、対象project・dataset・workspace、選択したschemaId、呼び出したツール、変更対象の文書ID、警告と拒否結果を記録します。公開操作では、下書きの差分と人の承認者も残します。想定外の変更が見つかったとき、モデルの応答だけでは実際にどの権限とスキーマで書き込んだかを再現できないためです。

今回の更新で、Sanity MCP ServerはStudio外からのAI書き込みにスキーマ検証を持ち込みました。運用上の結論は「最新なら安全」ではなく、検証できた変更だけを通し、検証できなかった警告は止め、公開権限は別の主体へ分けることです。スキーマ選択、認可、承認、証跡の4つを合わせて初めて、本番コンテンツの改変境界になります。

スポンサーリンク

参考資料

関連記事

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

認証

アクセスしてきた相手が本人であることを確かめる仕組み。パスワードや生体情報、電子証明書などを使う。

詳しく見る

認証回避

ログインなどの認証の仕組みの不備を突き、パスワードを知らなくても認証を通り抜けてしまう脆弱性、またはその攻撃。

詳しく見る

認可

認証で確認した利用者に、どの情報や機能へのアクセスを許すかを決める仕組み。

詳しく見る

最小権限

利用者やプログラムに、作業に必要な最小限の権限だけを与えるという考え方。被害の範囲を小さくできる。

詳しく見る

API

ソフトウェアやサービスの機能を、ほかのプログラムから決まった方法で呼び出して使えるようにした窓口。

詳しく見る

HTTP

ブラウザとWebサーバーがやりとりするための決まりごと(プロトコル)。暗号化したものはHTTPSと呼ぶ。

詳しく見る

ステージング

本番とほぼ同じ構成で用意する検証用の環境。更新や変更を本番に反映する前に、動作を確かめるために使う。

詳しく見る

CLI

コマンドラインインターフェース。文字のコマンドを入力してコンピューターやツールを操作する方法、またはそのためのツール。

詳しく見る

リダイレクト

あるURLにアクセスしたとき、自動的に別のURLへ転送すること。サイトの移転やURLの変更で使う。

詳しく見る

OAuth

パスワードを渡さずに、外部のアプリにアカウントの一部の操作を許可するための仕組み(認可の標準)。

詳しく見る

スキーマ

データの構造や型、決まりごとを定義したもの。データベースのテーブルの設計や、JSONの形式の定義などに使う。

詳しく見る

パッチ

ソフトウェアの不具合や脆弱性を修正するための更新プログラム。適用することで既知の問題を解消する。

詳しく見る

AIエージェント

目標を与えると、計画を立て、ツールを使いながら作業を自律的に進めるAIの仕組み。

詳しく見る

MCP

AIアプリケーションと外部のツールやデータをつなぐための共通の仕組み(プロトコル)。Anthropicが公開した。

詳しく見る