コンテンツにスキップ
Dev Classmethod Jp Articles Restrict Custom Mcp Tool by Custom Permission

カスタム権限でカスタムMCPツールの実行を特定ユーザーだけに制限してみた

  • URL: https://dev.classmethod.jp/articles/restrict-custom-mcp-tool-by-custom-permission
  • 日付: 2026-06-26
  • Tier: Tier 2
  • 要旨: Salesforce のカスタム MCP サーバーツール(Apex Invocable メソッド)の実行権限を、Salesforce のカスタム権限(Custom Permission)で制御する手法を検証した記事。FeatureManagement.checkPermission() を Invocable メソッドの冒頭で呼び出し、権限がない場合は例外を throw して MCP クライアント側にエラーを返すことで、プロファイルまたは権限セット単位の実行制限を実現した。

詳細

対象環境: Salesforce 上にカスタム MCP サーバーを構築し、Apex Invocable メソッドをツールとして公開している構成。前回記事で実装した商談メモ記録ツール(SfOpportunityNotes)に対して、特定ユーザーだけ実行を許可する制御を追加した。

実装手順:

  1. Salesforce でカスタム権限を作成(表示ラベル: 商談メモを活動として記録、名前: Log_Opportunity_Meeting_Note)
  2. Apex クラスに定数 REQUIRED_PERMISSION = ‘Log_Opportunity_Meeting_Note’ と LogOpportunityMeetingNoteException を追加
  3. Invocable メソッドの冒頭で FeatureManagement.checkPermission(REQUIRED_PERMISSION) を呼び出し、false の場合は例外を throw
  4. 例外が throw されると MCP クライアント(Claude)側にエラーが返り、Salesforce への Task レコード作成は一切行われない

動作確認: カスタム権限なしの状態でツール実行すると期待通り権限エラーが発生。プロファイルにカスタム権限を付与して再実行すると成功し、Salesforce に Activity(Task)が登録されることを確認した。

設計上の利点:

  • カスタム権限はプロファイルにも権限セットにも割り当て可能で、ユーザーグループ単位の柔軟な制御ができる
  • MCP レイヤーではなく Apex レイヤーで権限チェックするため、MCP サーバー側の改修なしに Salesforce の既存権限管理の仕組みをそのまま活用できる
  • 権限がない場合はデータが一切操作されない安全な失敗(fail-safe)になる