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)に対して、特定ユーザーだけ実行を許可する制御を追加した。
実装手順:
- Salesforce でカスタム権限を作成(表示ラベル: 商談メモを活動として記録、名前: Log_Opportunity_Meeting_Note)
- Apex クラスに定数 REQUIRED_PERMISSION = ‘Log_Opportunity_Meeting_Note’ と LogOpportunityMeetingNoteException を追加
- Invocable メソッドの冒頭で FeatureManagement.checkPermission(REQUIRED_PERMISSION) を呼び出し、false の場合は例外を throw
- 例外が throw されると MCP クライアント(Claude)側にエラーが返り、Salesforce への Task レコード作成は一切行われない
動作確認: カスタム権限なしの状態でツール実行すると期待通り権限エラーが発生。プロファイルにカスタム権限を付与して再実行すると成功し、Salesforce に Activity(Task)が登録されることを確認した。
設計上の利点:
- カスタム権限はプロファイルにも権限セットにも割り当て可能で、ユーザーグループ単位の柔軟な制御ができる
- MCP レイヤーではなく Apex レイヤーで権限チェックするため、MCP サーバー側の改修なしに Salesforce の既存権限管理の仕組みをそのまま活用できる
- 権限がない場合はデータが一切操作されない安全な失敗(fail-safe)になる