自作MCPを社内全員のClaudeで使いたい!カスタムコネクタで接続してみた

自作MCPを社内全員のClaudeで使いたい!カスタムコネクタで接続してみた

自作MCPサーバーを社内全員のClaudeで使えるように、Claudeのカスタムコネクタで接続してみました。Amazon Bedrock AgentCore GatewayとCognitoで認証付きのMCPサーバーを用意し、mcp-remoteなしでClaudeから社内FAQを検索できるかを確かめます。
2026.11.11

はじめに

クラスメソッドテクノロジーズの武蔵です。

地元神戸の商業施設 MOSAIC が一時閉館の発表ということで悲しみに暮れています。
思い出をたくさんありがとう。

2030年前後の再開を目指すということで、その頃にはAIやテクノロジーがどれくらい進歩してるのだろうとワクワクもしています。

本日は、ClaudeとAmazon Bedrock AgentCore(以下、AgentCore)の接続について検証を行います。

今回の検証

これまでの検証ではmcp-remoteを使用して、自作MCPサーバーに接続していました。

https://dev.classmethod.jp/articles/claude-connect-agentcore-gateway-mcp-server/

https://dev.classmethod.jp/articles/claude-agentcore-gateway-interceptor-per-user-access-control/

mcp-remoteとは、ローカルのMCPクライアントを、HTTPで提供されるリモートMCPサーバーにつなぐためのローカルプロキシです。Claude Desktopの設定ファイル(claude_desktop_config.json)にはローカル(stdio)のMCPサーバーしか登録できないため、ネット上のMCPサーバーにつなぐ「中継役」として使っていました。

しかし、mcp-remoteは自分のPC上で動くため、Web版やスマホのClaudeからは使えません。別のPCで使うなら、そちらでも同じ設定が必要です。

mcp-remoteで接続する場合

こういった問題を解消するのが、Claudeのカスタムコネクタという機能です。

Claudeのカスタムコネクタとは?

カスタムコネクタとは、Claudeを外部のMCPサーバー(社内ツールや各種サービス)につなげられる公式の機能になります。
一度設定すれば、Web版・デスクトップ版・スマホ版のどこからでも同じように外部のMCPサーバーを使えます。

TeamやEnterpriseプランでは、組織でまとめて管理できるというメリットがあります。

組織用にコネクタを追加できるのはオーナー(またはプライマリオーナー)のみで、認証は各自のアカウントで行います。

カスタムコネクタで接続する場合

https://claude.com/docs/connectors/custom/remote-mcp

構成図

目標

今回は、AgentCoreで検証用のMCPサーバーを構築し、Claudeでカスタムコネクタとして設定した上で、MCPのツールを使用した会話が行えるかを検証します。

処理の流れ

カスタムコネクタの認証の流れ

  1. ClaudeがMCPサーバーURLにアクセスし、AgentCore Gatewayから401と保護リソースメタデータのURLが返る。
  2. Claudeがメタデータを読み、認可サーバー(Cognito)を見つける。
  3. ブラウザでCognitoのログイン画面が開く。
  4. ログイン後、https://claude.ai/api/mcp/auth_callback に認可コードが返る。
  5. Claudeがクライアントシークレットとresource(MCPサーバーURL)を付けてトークンを取得し、以降の呼び出しに付ける。

事前準備

Cognito以外のリソースは、Terraformで作成しました。AgentCore GatewayはCognitoのユーザープールIDとアプリクライアントIDを使うため、Cognitoを作成してから適用します。

リソース 名前
Lambda 関数 saito-sandbox-company-faq
IAM ロール saito-sandbox-company-faq-role
AgentCore Gateway saito-sandbox-gw
AgentCore Gateway ターゲット CompanyFaq
IAM ロール saito-sandbox-gw-role

AgentCore Gatewayのインバウンド認証は、次のとおりです。

項目 設定値
認証方式 JSON Web Tokens(JWT)
検出 URL https://cognito-idp.ap-northeast-1.amazonaws.com/<ユーザープールID>/.well-known/openid-configuration
許可されたクライアント CognitoのアプリクライアントID

ダミーデータ

ダミーデータは、架空の社内FAQ10件です。一般的な知識では答えられない数字にしているので、回答に出てくればMCPのツールから取得したと分かります。

カテゴリ 質問 回答
休暇 リフレッシュ休暇はいつ取得できますか? 勤続3年ごとに5日付与。付与日から1年以内に取得
休暇 有給休暇は時間単位で取得できますか? 年5日分までは1時間単位で取得可能
休暇 誕生日休暇はありますか? 誕生月に1日。翌月への繰り越し不可
経費 経費の申請期限はいつですか? 利用した月の翌月5日まで。過ぎた場合は上長の承認が必要
経費 出張の日当はいくらですか? 国内1日2,000円、海外1日5,000円
働き方 在宅勤務は週に何日までできますか? 週3日まで。前日17時までに申請
働き方 会議室は何日先まで予約できますか? 2週間先まで。1回最大2時間
福利厚生 書籍購入の補助はありますか? 業務に関係する書籍は月5,000円まで
福利厚生 資格取得の支援はありますか? 受験料は全額負担。合格すると祝い金2万円
福利厚生 業務用PCはいつ交換できますか? 貸与から3年経過で申請可能

Lambdaの実装

ツールのLambda saito-sandbox-company-faq は、キーワードとカテゴリでFAQを絞り込んで返します。今回は認証の確認が目的のため、ユーザーごとの制御は行っていません。

ツールのLambdaのコード
FAQ = [
    {"category": "休暇", "question": "リフレッシュ休暇はいつ取得できますか?", "answer": "勤続3年ごとに5日付与されます。付与日から1年以内に取得してください。"},
    {"category": "休暇", "question": "有給休暇は時間単位で取得できますか?", "answer": "年5日分までは1時間単位で取得できます。"},
    {"category": "休暇", "question": "誕生日休暇はありますか?", "answer": "誕生月に1日、特別休暇を取得できます。翌月への繰り越しはできません。"},
    {"category": "経費", "question": "経費の申請期限はいつですか?", "answer": "利用した月の翌月5日までに申請してください。期限を過ぎた場合は上長の承認が必要です。"},
    {"category": "経費", "question": "出張の日当はいくらですか?", "answer": "国内出張は1日2,000円、海外出張は1日5,000円です。"},
    {"category": "働き方", "question": "在宅勤務は週に何日までできますか?", "answer": "週3日までです。前日の17時までに勤怠システムで申請してください。"},
    {"category": "働き方", "question": "会議室は何日先まで予約できますか?", "answer": "2週間先まで予約できます。1回の予約は最大2時間です。"},
    {"category": "福利厚生", "question": "書籍購入の補助はありますか?", "answer": "業務に関係する書籍は、月5,000円まで会社が負担します。"},
    {"category": "福利厚生", "question": "資格取得の支援はありますか?", "answer": "受験料は合否にかかわらず全額会社が負担します。合格すると祝い金2万円が支給されます。"},
    {"category": "福利厚生", "question": "業務用PCはいつ交換できますか?", "answer": "貸与から3年経過すると交換を申請できます。"},
]

def lambda_handler(event, context):
    terms = (event.get("keyword") or "").split()
    category = event.get("category") or ""
    hits = [
        f for f in FAQ
        if (not category or f["category"] == category)
        and all(t in f["question"] + f["answer"] for t in terms)
    ]
    return {"count": len(hits), "items": hits}

ツールの定義

AgentCore Gatewayのターゲットには、次のツールを登録しています。

項目 内容
ツール名 search_faq(MCPのツール名は CompanyFaq___search_faq。Claudeの画面では「CompanyFaq search faq」と表示)
引数 keyword(検索語。空白区切りで複数指定可)、category(休暇 / 経費 / 働き方 / 福利厚生)
説明 社内FAQ(休暇・経費・働き方・福利厚生)を検索する。社内のルールを聞かれたら一般論で答えず、必ずこのツールで調べる。該当がなければ、FAQに載っていないと伝える。

Cognitoを作成する

ユーザープールを作る

Cognitoのユーザープールは、管理コンソールで作成しました。AgentCore Gatewayのインバウンド認証で、このユーザープールを使います。

Cognitoコンソールで「ユーザープールを作成」を押し、次の内容で作る。

項目 設定値
アプリケーションタイプ 従来のウェブアプリケーション
アプリケーション名 saito-sandbox-connector
サインイン識別子のオプション メールアドレス
サインアップのための必須属性 email
自己登録 有効にしない
リターンURL https://claude.ai/api/mcp/auth_callback

Cognitoのアプリケーションタイプと名前の設定

Cognitoのサインイン識別子とリターンURLの設定

作成後に控える値。

名前 確認する場所
ユーザープールID ユーザープールの概要
アプリクライアントID アプリケーションクライアント → {アプリケーション名}
クライアントシークレット 同上(「クライアントシークレットを表示」)

アプリクライアントのログインページを設定する

アプリケーションクライアント → {アプリケーション名} → ログインページ →「編集」。

項目 設定値
許可されているコールバックURL https://claude.ai/api/mcp/auth_callback
ID プロバイダー Cognito ユーザープール(次の記事でGoogleを追加する)
OAuth 2.0 許可タイプ 認証コード付与
OpenID Connect のスコープ OpenID、メールアドレス、プロファイル

マネージドログインページのコールバックURLの設定

マネージドログインページのIDプロバイダーとスコープの設定

リソースサーバーを作る

Claudeはトークンを取得するとき、resource パラメーターにMCPサーバーURLを付けて送ります。

そこで、AgentCore Gatewayを作成した後に、ゲートウェイリソースURLを識別子にしたリソースサーバーを作成しました。

ブランディング → ドメイン →「リソースサーバーを作成」。

項目 設定値
リソースサーバー名 {リソースサーバー名}
リソースサーバー識別子 AgentCore ゲートウェイリソースURL(末尾 /mcp まで含める)
カスタムスコープ invoke

作成後、アプリケーションクライアント → {アプリケーション名} → ログインページ →「編集」で、カスタムスコープ <ゲートウェイリソースURL>/invoke を許可します。OpenID Connectのスコープはそのまま残します。

ユーザーを作る

ユーザー →「ユーザーを作成」。

項目 設定値
招待メッセージ 送信しない
メールアドレス 自分のメールアドレス
メールアドレスを検証済みとしてマーク オン
仮パスワード 設定

Cognitoのユーザー作成画面

カスタムコネクタを追加して接続する

カスタムコネクタの追加

今回は、筆者が個人の設定(「設定」→「コネクタ」)から追加しました。組織全体で使う場合は、オーナーが組織設定から追加します。

Claude Desktop(または、ウェブ版)を開きます。
「設定」→「コネクタ」→「追加」→「カスタムコネクタを追加」で追加します。

Claudeのコネクタ設定からカスタムコネクタを追加

入力内容は以下。

項目 設定値
名前 {カスタムコネクタ名}
リモートMCPサーバーURL AgentCore ゲートウェイリソースURL(末尾 /mcp)
認証 今すぐサインイン
OAuth クライアント 独自の OAuth クライアントを使用する
OAuth クライアント ID アプリクライアントID
OAuth クライアントシークレット クライアントシークレット

カスタムコネクタの名前とURLの入力

カスタムコネクタの認証の設定

カスタムコネクタのOAuthクライアントの設定

接続

  1. 追加されたコネクタの「連携/連携させる」を押す。

    追加したコネクタの連携画面

  2. ブラウザでCognitoのログイン画面が開くので、自分のメールアドレスと仮パスワードでログインし、新しいパスワードを設定する。

    Cognitoのログイン画面でメールアドレスを入力

    Cognitoのログイン画面でパスワードを入力

    Cognitoの新しいパスワードの設定画面

  3. Claudeの画面に戻り、コネクタが「接続済み」になれば完了。

  4. チャット画面の「+」→ コネクタで saito-sandbox が有効になっていることを確認する。

検証

カスタムコネクタを有効にした状態で、Claudeに社内FAQについて質問します。

質問1: リフレッシュ休暇について聞く

リフレッシュ休暇はいつもらえる?

リフレッシュ休暇について尋ねた結果

質問2: 経費の申請期限を聞く

経費の申請期限は?

経費の申請期限について尋ねた結果

質問3: 在宅勤務の申請期限を聞く

在宅勤務の申請はいつまでにすればいい?

在宅勤務の申請期限について尋ねた結果

質問4: FAQに載っていないことを聞く

社員食堂のメニューは?

FAQに載っていないことを尋ねた結果

検証結果

質問 回答
リフレッシュ休暇はいつもらえる? 勤続3年ごとに5日
経費の申請期限は? 利用した月の翌月5日まで
在宅勤務の申請はいつまでにすればいい? 前日の17時まで
社員食堂のメニューは? FAQに載っていない

まとめ

カスタムコネクタを利用することで、設定ファイルやmcp-remoteを用意せずに、自作のMCPサーバーへ手軽に接続できました。
TeamやEnterpriseプランを利用している企業では、組織のオーナーがコネクタを追加すれば、社員それぞれが自分のアカウントで認証して使えるため、社内で展開する場合も便利だと思います。
一方で、今回はログインの際にCognito用のメールアドレスとパスワードが必要でした。普段使っているGoogleやEntra IDのアカウントでログインできれば、より便利になると感じました。
次回は、Googleアカウントでログインできるように検証したいと思います。


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事