
自作MCPを社内全員のClaudeで使いたい!カスタムコネクタで接続してみた
はじめに
クラスメソッドテクノロジーズの武蔵です。
地元神戸の商業施設 MOSAIC が一時閉館の発表ということで悲しみに暮れています。
思い出をたくさんありがとう。
2030年前後の再開を目指すということで、その頃にはAIやテクノロジーがどれくらい進歩してるのだろうとワクワクもしています。
本日は、ClaudeとAmazon Bedrock AgentCore(以下、AgentCore)の接続について検証を行います。
今回の検証
これまでの検証ではmcp-remoteを使用して、自作MCPサーバーに接続していました。
mcp-remoteとは、ローカルのMCPクライアントを、HTTPで提供されるリモートMCPサーバーにつなぐためのローカルプロキシです。Claude Desktopの設定ファイル(claude_desktop_config.json)にはローカル(stdio)のMCPサーバーしか登録できないため、ネット上のMCPサーバーにつなぐ「中継役」として使っていました。
しかし、mcp-remoteは自分のPC上で動くため、Web版やスマホのClaudeからは使えません。別のPCで使うなら、そちらでも同じ設定が必要です。

こういった問題を解消するのが、Claudeのカスタムコネクタという機能です。
Claudeのカスタムコネクタとは?
カスタムコネクタとは、Claudeを外部のMCPサーバー(社内ツールや各種サービス)につなげられる公式の機能になります。
一度設定すれば、Web版・デスクトップ版・スマホ版のどこからでも同じように外部のMCPサーバーを使えます。
TeamやEnterpriseプランでは、組織でまとめて管理できるというメリットがあります。
組織用にコネクタを追加できるのはオーナー(またはプライマリオーナー)のみで、認証は各自のアカウントで行います。


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

- ClaudeがMCPサーバーURLにアクセスし、AgentCore Gatewayから401と保護リソースメタデータのURLが返る。
- Claudeがメタデータを読み、認可サーバー(Cognito)を見つける。
- ブラウザでCognitoのログイン画面が開く。
- ログイン後、
https://claude.ai/api/mcp/auth_callbackに認可コードが返る。 - 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 |
| サインイン識別子のオプション | メールアドレス |
| サインアップのための必須属性 | |
| 自己登録 | 有効にしない |
| リターンURL | https://claude.ai/api/mcp/auth_callback |


作成後に控える値。
| 名前 | 確認する場所 |
|---|---|
| ユーザープールID | ユーザープールの概要 |
| アプリクライアントID | アプリケーションクライアント → {アプリケーション名} |
| クライアントシークレット | 同上(「クライアントシークレットを表示」) |
アプリクライアントのログインページを設定する
アプリケーションクライアント → {アプリケーション名} → ログインページ →「編集」。
| 項目 | 設定値 |
|---|---|
| 許可されているコールバックURL | https://claude.ai/api/mcp/auth_callback |
| ID プロバイダー | Cognito ユーザープール(次の記事でGoogleを追加する) |
| OAuth 2.0 許可タイプ | 認証コード付与 |
| OpenID Connect のスコープ | OpenID、メールアドレス、プロファイル |


リソースサーバーを作る
Claudeはトークンを取得するとき、resource パラメーターにMCPサーバーURLを付けて送ります。
そこで、AgentCore Gatewayを作成した後に、ゲートウェイリソースURLを識別子にしたリソースサーバーを作成しました。
ブランディング → ドメイン →「リソースサーバーを作成」。
| 項目 | 設定値 |
|---|---|
| リソースサーバー名 | {リソースサーバー名} |
| リソースサーバー識別子 | AgentCore ゲートウェイリソースURL(末尾 /mcp まで含める) |
| カスタムスコープ | invoke |
作成後、アプリケーションクライアント → {アプリケーション名} → ログインページ →「編集」で、カスタムスコープ <ゲートウェイリソースURL>/invoke を許可します。OpenID Connectのスコープはそのまま残します。
ユーザーを作る
ユーザー →「ユーザーを作成」。
| 項目 | 設定値 |
|---|---|
| 招待メッセージ | 送信しない |
| メールアドレス | 自分のメールアドレス |
| メールアドレスを検証済みとしてマーク | オン |
| 仮パスワード | 設定 |

カスタムコネクタを追加して接続する
カスタムコネクタの追加
今回は、筆者が個人の設定(「設定」→「コネクタ」)から追加しました。組織全体で使う場合は、オーナーが組織設定から追加します。
Claude Desktop(または、ウェブ版)を開きます。
「設定」→「コネクタ」→「追加」→「カスタムコネクタを追加」で追加します。

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



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

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



-
Claudeの画面に戻り、コネクタが「接続済み」になれば完了。
-
チャット画面の「+」→ コネクタで
saito-sandboxが有効になっていることを確認する。
検証
カスタムコネクタを有効にした状態で、Claudeに社内FAQについて質問します。
質問1: リフレッシュ休暇について聞く
リフレッシュ休暇はいつもらえる?

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

質問3: 在宅勤務の申請期限を聞く
在宅勤務の申請はいつまでにすればいい?

質問4: FAQに載っていないことを聞く
社員食堂のメニューは?

検証結果
| 質問 | 回答 |
|---|---|
| リフレッシュ休暇はいつもらえる? | 勤続3年ごとに5日 |
| 経費の申請期限は? | 利用した月の翌月5日まで |
| 在宅勤務の申請はいつまでにすればいい? | 前日の17時まで |
| 社員食堂のメニューは? | FAQに載っていない |
まとめ
カスタムコネクタを利用することで、設定ファイルやmcp-remoteを用意せずに、自作のMCPサーバーへ手軽に接続できました。
TeamやEnterpriseプランを利用している企業では、組織のオーナーがコネクタを追加すれば、社員それぞれが自分のアカウントで認証して使えるため、社内で展開する場合も便利だと思います。
一方で、今回はログインの際にCognito用のメールアドレスとパスワードが必要でした。普段使っているGoogleやEntra IDのアカウントでログインできれば、より便利になると感じました。
次回は、Googleアカウントでログインできるように検証したいと思います。








