AWS LambdaでClaudeのカスタムコネクタを実装する方法
はじめに
Claudeに独自の機能を追加したいと思ったことはありませんか?
この記事では、初心者でも分かるように、Claudeからカスタムコネクタを追加して、独自の機能を使用する方法を解説します。
具体的には、AWS Lambdaを使ってMCP(Model Context Protocol)を構築し、Claudeに新しいツールを提供します。
カスタムコネクタとは?
カスタムコネクタは、Claudeに独自の機能やツールを追加できる機能です。これにより、以下のようなことが可能になります。
- 独自ツールの追加: 自分だけの便利な機能を作成
- 外部APIとの連携: ウェブサービスやデータベースとの接続
- 業務効率化: 日常的な作業を自動化
なぜAWS Lambdaを使うのか?
サーバを常駐させると管理の手間がかかるので、サーバレスで呼び出すようにしたいと考えました。さらに、個人での利用はコストが気になるので、毎月100万リクエストかつ毎月40万GB秒の実行時間が無料のLambdaを利用することにしました。
- サーバレス: サーバ管理が不要
- コスト効率: 使用した分だけ課金
- 簡単デプロイ: コードをアップロードするだけ
前提・準備
カスタムコネクタを使うには、以下の準備が必要です。
- Claude アカウント: 有料プランが必要
- AWSアカウント: Lambdaを使用するため
- 基本的なプログラミング知識: Pythonの基礎
構築手順
今回実施するにあたり、私が作ったサンプルのリモートMCPのプロジェクトをGithubに置きました。よければ参考にしてください。
1. MCPサーバの実装
基本的なMCPサーバ
今回、MCPサーバはLambdaで実装するので、コードをのせておきます。
MCPハンドラーの初期化について:
mcp = MCPLambdaHandler(name="custom-connector", version="1.0.0")
MCPLambdaHandler
は、MCPプロトコルの通信を管理する重要なコンポーネントです。このハンドラーがClaudeからのリクエストを受け取り、適切なツールに振り分けて処理を行います。
Lambda関数のエントリーポイントについて:
return mcp.handle_request(event, context)
この行は、AWS Lambdaが受け取ったリクエストをMCPハンドラーに渡して処理する重要な部分です。MCPプロトコルに従ってリクエストを解析し、適切なツールを呼び出してレスポンスを返します
実際の処理の流れ(hello_worldツールの例):
-
Claudeがリクエスト送信
-
Lambda Function URL → Lambda関数
- Lambda Function URLがHTTPリクエストを直接受信
- Lambda関数の
lambda_handler
が呼び出される -
event
にリクエスト内容が格納される
-
MCPハンドラーが処理
-
mcp.handle_request(event, context)
が実行される - リクエストを解析して
hello_world
ツールを特定 - パラメータ
{"name": "test"}
を取得
-
-
ツール関数の実行
def hello_world(name: str = "World") -> str: return f"Hello, {name}! これはカスタムコネクタからのメッセージです。"
-
name="test"
で関数が実行される - 戻り値:
"Hello, test! これはカスタムコネクタからのメッセージです。"
-
-
レスポンス返却
-
Claudeが結果を表示
- レスポンスを受信してユーザーに結果を表示
2. Lambda Layerの作成
依存関係の設定
Lambda Layerとしてインストールし、関数から参照するために、以下のライブラリを使用する。
-
awslabs-mcp-lambda-handler
: AWS公式のMCPハンドラーライブラリ -
pytz
: タイムゾーン処理のためのライブラリ(日本時間取得に必要)
Layer用ライブラリのインストール
cd layer/python
# 必要なライブラリをインストール
pip3 install -r ../../app/code/requirements.txt -t .
3. デプロイとテスト
デプロイ手順
デプロイは以下の2つの主要なステップで構成されています:
- 依存関係のインストール: Lambda Layer用のPythonライブラリとCDK用の依存関係を準備
- CDKデプロイ: AWS CDKを使用してLambda関数、Layer、その他のAWSリソースをデプロイ
CDKを使用することで、インフラストラクチャをコードとして管理し、一貫性のあるデプロイが可能になります。
1. 依存関係のインストール
Lambda Layerは、Lambda関数で使用するライブラリやカスタムコードを別途管理するための仕組みです。これにより以下のメリットがあります:
- 依存関係の分離: 関数本体とライブラリを分けて管理できる
- 再利用性の向上: 複数のLambda関数で同じLayerを共有できる
- デプロイサイズの削減: 関数本体のサイズを小さく保てる
- 管理の簡素化: ライブラリの更新を一箇所で行える
# Lambda Layer用
cd app && mkdir -p layer/python
cd layer/python
pip3 install -r ../../code/requirements.txt -t .
CDKを利用するための仮想環境を作成します。仮想環境を使用することで、プロジェクト固有の依存関係を分離し、他のプロジェクトとの競合を避けることができます。
# CDK用
cd ../../infra
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
2. デプロイ
デプロイは2段階で実行する。
-
CDK Bootstrap(初回のみ): CDKが使用する基盤リソース(S3バケット、IAMロール、CloudFormationスタック)を作成する。これにより、CDKがアプリケーションのデプロイに必要なリソースを管理できる。
-
アプリケーションデプロイ: Lambda関数、Layer、その他のAWSリソースをデプロイする。CDKはCloudFormationテンプレートを生成し、リソースを作成・更新する。
初回以降のデプロイでは、cdk bootstrap
は不要で、cdk deploy
のみを実行する。
cdk bootstrap
# 特定のプロファイルを使用する場合
cdk bootstrap --profile your-profile-name
cdk deploy
# 特定のプロファイルを使用する場合
cdk deploy --profile your-profile-name
動作確認
カスタムコネクタ用のLambdaが作成できたかを下記のコマンドを叩いて確認してみる。
# 利用可能なツール一覧の確認
curl -X POST https://{url-id}.lambda-url.{region}.on.aws/ \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {}
}'
Claudeでの設定
Claudeからカスタムコネクタを追加することで、リモートMCPサーバで独自の機能が使用できるようになります。
- Claudeにアクセス
- 設定 → コネクタを選択
- カスタムコネクタを追加をクリック
- 名前を入力
- リモートMCPサーバURLに作成したLambda Function URLを入力
- 追加をクリック
- 連携/連携させるをクリック
- エラーが出力されず、連携されること
モバイルアプリでも自動的に使える
2025/07/26から、Claude モバイルアプリからもリモートMCPが使えるようになりました。
画像のようにモバイルアプリに追加されたカスタムコネクタが表示されていれば、特に何もする必要はありません。
実際にモバイルアプリからチャットで関数を実行してみます。
添付した画像のようにプロンプトを投げることで、Lambdaの関数を実行できます。
まとめ
カスタムコネクタを使うことで、Claudeに独自の機能を追加し、業務効率化や自動化が実現できます。Lambdaを利用することで、コストを気にせず個人でも使えるため、ぜひ活用してみてください。
この記事がClaudeのカスタムコネクタの活用に役立てば幸いです。質問やフィードバックがあれば、コメントでお気軽にお聞かせください。
Discussion