Run Model Context Protocol (MCP) servers with AWS Lambda について
既存の stdio 形式 MCP サーバーを AWS Lambda 関数としてラップするプロジェクトです。呼び出しごとにサーバーの起動、初期化、終了をLambdaが行います。ローカルの子プロセスを使わずにクラウドや分散システムからMCP サーバーを利用したい開発者に適しています。
主な機能
- 01stdio MCP サーバーを Lambda 関数としてラップ
- 02呼び出しごとにサーバープロセスを起動と終了
- 03API Gateway と Bedrock AgentCore Gateway に対応
- 04SigV4 の Lambda 関数URL と直接 Invoke に対応
- 05サンプルで Secrets Manager から機密情報を取得
活用シーン
- 01分散クラウドシステムから MCP サーバーを呼び出す
- 02API Gateway 経由で複数のクライアントにサービスを提供する
- 03AgentCore Gateway で MCP サーバーの認証を構成する
MCP 対応
stdio 形式の MCP サーバーを、Streamable HTTP や Lambda 呼び出しで利用できるリモートサーバーとして公開し、MCP クライアントが HTTPS で接続できるようにします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
AWS Lambda で Model Context Protocol(MCP)サーバーを実行する
このプロジェクトを使うと、標準入出力(stdio)ベースのModel Context Protocolサーバーを AWS Lambda 関数で実行できます。
現在、MCP サーバーとクライアントの実装の多くは、単一のマシン上で完全にローカルに動作します。 IDE や Claude Desktop などのデスクトップアプリケーションは、MCP サーバーを子プロセスとしてローカルで起動し、 長時間接続される stdio ストリームを介して各サーバーと通信します。
flowchart LR
subgraph "Your Laptop"
Host["Desktop Application<br>with MCP Clients"]
S1["MCP Server A<br>(child process)"]
S2["MCP Server B<br>(child process)"]
Host <-->|"MCP Protocol<br>(over stdio stream)"| S1
Host <-->|"MCP Protocol<br>(over stdio stream)"| S2
end
このライブラリを使うと、既存の stdio MCP サーバーを Lambda 関数でラップできます。 アプリケーションから、短時間の HTTPS 接続を介して MCP プロトコルを使い、 関数ベースのこれらの MCP サーバーを呼び出せます。 アプリケーションはデスクトップアプリ、クラウドで稼働する分散システム、 またはその他のアーキテクチャにできます。
flowchart LR
subgraph "Distributed System"
App["Your Application<br>with MCP Clients"]
S3["MCP Server A<br>(Lambda function)"]
S4["MCP Server B<br>(Lambda function)"]
App <-->|"MCP Protocol<br>(over HTTPS connection)"| S3
App <-->|"MCP Protocol<br>(over HTTPS connection)"| S4
end
このライブラリを使うと、Lambda 関数が stdio MCP サーバーのライフサイクルを管理します。 Lambda 関数が呼び出されるたびに、次の処理が行われます。
- stdio MCP サーバーを子プロセスとして起動する
- MCP サーバーを初期化する
- 受信リクエストをローカルサーバーに転送する
- サーバーの応答を関数の呼び出し元に返す
- MCP サーバーの子プロセスをシャットダウンする
このライブラリでは、Lambda ベースの MCP サーバーへの接続方法として、次の 4 つをサポートしています。
- Amazon API Gateway を使用するMCP Streamable HTTP transport。通常は OAuth で認証します。
- Amazon Bedrock AgentCore Gateway を使用する MCP Streamable HTTP transport。OAuth で認証します。
- Lambda 関数 URL を使用する、SigV4 をサポートしたカスタムの Streamable HTTP transport。AWS IAM で認証します。
- Lambda Invoke API を直接使用する、カスタムの Lambda 呼び出し transport。AWS IAM で認証します。
サーバーのパラメーターを決定する
stdio ベースの多くの MCP サーバーのドキュメントでは、サーバーをオンデマンドでダウンロードして実行するツールの使用を推奨しています。
たとえば、uvx my-mcp-server や npx my-mcp-server などです。
これらのツールは Lambda 環境にあらかじめパッケージされていないことが多く、
Lambda が呼び出されるたびにサーバーを再ダウンロードすると効率が悪くなる可能性があります。
その代わり、このリポジトリの例では、MCP サーバーを Lambda 関数のコードと一緒にパッケージし、
python または node(あるいは npx --offline)で直接起動する方法を示しています。
MCP サーバーのパッケージに応じて、適切なパラメーターを決める必要があります。 MCP サーバーのパッケージ方法はさまざまなため、多くの場合、ローカルで試行錯誤することになります。
Python サーバーの例
基本的な例:
from mcp.client.stdio import StdioServerParameters
server_params = StdioServerParameters(
command=sys.executable,
args=[
"-m",
"my_mcp_server_python_module",
"--my-server-command-line-parameter",
"some_value",
],
)
ローカルでは、次のようにしてこのモジュールを実行します。
python -m my_mcp_server_python_module --my-server-command-line-parameter some_value
その他の例:
python -m mcpdoc.cli # Note the sub-module
python -c "from mcp_openapi_proxy import main; main()"
python -c "import asyncio; from postgres_mcp.server import main; asyncio.run(main())"
Lambda レイヤーを使用する場合は、Python のサブプロセスに対して PYTHONPATH も設定する必要があります。
lambda_paths = ["/opt/python"] + sys.path
env_config = {"PYTHONPATH": ":".join(lambda_paths)}
server_params = StdioServerParameters(
command=sys.executable,
args=[
"-c",
"from mcp_openapi_proxy import main; main()",
],
env=env_config,
)
Typescript サーバーの例
基本的な例:
const serverParams = {
command: "npx",
args: [
"--offline",
"my-mcp-server-typescript-module",
"--my-server-command-line-parameter",
"some_value",
],
};
ローカルでは、次のようにしてこのモジュールを実行します。
npx --offline my-mcp-server-typescript-module --my-server-command-line-parameter some_value
その他の例:
node /var/task/node_modules/@ivotoby/openapi-mcp-server/bin/mcp-server.js
このライブラリには、ラップされた MCP サーバーで必要なシークレットを管理する仕組みは標準で用意されていません。たとえば、GitHub MCP サーバーやBrave 検索 MCP サーバーでは、サードパーティー API へのリクエストに API キーが必要です。 これらの API キーは、Lambda 関数の設定で暗号化された環境変数として設定するか、Lambda 関数のコード内で Secrets Manager から取得できます(以下に例を示します)。 ただし、Lambda 関数の呼び出し権限を持つユーザーは、関数を呼び出すことで API キーを使用してサードパーティー API を呼び出せるようになる点にご注意ください。 最小権限の IAM ポリシーを使用して、Lambda 関数へのアクセスを制限することをおすすめします。 OAuth などの ID ベースの認証メカニズムを使用する場合は、ユーザーごとに API キーを保存して取得することもできますが、このリポジトリには実装例がありません。
Secrets Manager から API キーを取得する Python サーバーの例
import sys
import boto3
from mcp.client.stdio import StdioServerParameters
# Retrieve API key from Secrets Manager
secrets_client = boto3.client("secretsmanager")
api_key = secrets_client.get_secret_value(SecretId="my-api-key-secret")["SecretString"]
server_params = StdioServerParameters(
command=sys.executable,
args=["-m", "my_mcp_server"],
env={
"API_KEY": api_key,
},
)
Secrets Manager から API キーを取得する Typescript サーバーの例
import { SecretsManagerClient, GetSecretValueCommand } from "@aws-sdk/client-secrets-manager";
const secretsClient = new SecretsManagerClient({});
const secret = await secretsClient.send(
new GetSecretValueCommand({ SecretId: "my-api-key-secret" })
);
const apiKey = secret.SecretString;
const serverParams = {
command: "npx",
args: ["--offline", "my-mcp-server"],
env: {
API_KEY: apiKey,
},
};
MCP サーバーから AWS API(AWS 向け MCP サーバーなど)を呼び出す必要がある場合は、Lambda 関数の AWS 認証情報を環境変数経由でラップされた MCP サーバーに渡せます。 ラップされた MCP サーバーの子プロセスは、Lambda 実行ロールの認証情報を自動的には継承しません。 繰り返しになりますが、Lambda 関数の呼び出し権限を持つユーザーは、関数を呼び出すことで関数の AWS 認証情報を使用して AWS API を呼び出せるようになる点にご注意ください。 最小権限の IAM ポリシーを使用して、Lambda 関数へのアクセスを制限することをおすすめします。
環境変数経由で AWS 認証情報を使用する Python サーバーの例
import os
import sys
import boto3
from mcp.client.stdio import StdioServerParameters
# Get AWS credentials from Lambda execution role to pass to subprocess
session = boto3.Session()
credentials = session.get_credentials()
if credentials is None:
raise RuntimeError("Unable to retrieve AWS credentials from the execution environment")
resolved = credentials.get_frozen_credentials()
server_params = StdioServerParameters(
command=sys.executable,
args=["-m", "my_mcp_server"],
env={
"AWS_REGION": os.environ.get("AWS_REGION", "us-west-2"),
"AWS_DEFAULT_REGION": os.environ.get("AWS_REGION", "us-west-2"),
"AWS_ACCESS_KEY_ID": resolved.access_key,
"AWS_SECRET_ACCESS_KEY": resolved.secret_key,
"AWS_SESSION_TOKEN": resolved.token or "",
},
)
認証情報ファイル経由で AWS 認証情報を使用する Python サーバーの例
一部の MCP サーバーでは AWS プロファイルが必要で、環境変数経由で渡された認証情報をサポートしていません。 この場合は、認証情報をファイルに書き込み、そのファイルを MCP サーバーに指定できます。
import os
import sys
import boto3
from mcp.client.stdio import StdioServerParameters
# Get AWS credentials from Lambda execution role to pass to subprocess
session = boto3.Session()
credentials = session.get_credentials()
if credentials is None:
raise RuntimeError("Unable to retrieve AWS credentials from the execution environment")
resolved = credentials.get_frozen_credentials()
# Write credentials to disk as default profile
aws_dir = "/tmp/.aws"
os.makedirs(aws_dir, exist_ok=True)
with open(f"{aws_dir}/credentials", "w") as f:
f.write("[default]\n")
f.write(f"aws_access_key_id = {resolved.access_key}\n")
f.write(f"aws_secret_access_key = {resolved.secret_key}\n")
if resolved.token:
f.write(f"aws_session_token = {resolved.token}\n")
server_params = StdioServerParameters(
command=sys.executable,
args=["-m", "my_mcp_server"],
env={
"AWS_REGION": os.environ.get("AWS_REGION", "us-west-2"),
"AWS_DEFAULT_REGION": os.environ.get("AWS_REGION", "us-west-2"),
"AWS_SHARED_CREDENTIALS_FILE": f"{aws_dir}/credentials",
},
)
デプロイ可能な完全な例はこちらをご覧ください。
API Gateway を使用する
flowchart LR
App["MCP Client"]
T1["MCP Server<br>(Lambda function)"]
T2["API Gateway"]
T3["OAuth Server<br>(Cognito or similar)"]
App -->|"MCP Streamable<br>HTTP Transport"| T2
T2 -->|"Invoke"| T1
T2 -->|"Authorize"| T3
このソリューションは、ストリーム可能な HTTP トランスポートをサポートするほとんどの MCP クライアントと互換性があります。 このアーキテクチャでデプロイされた MCP サーバーは、通常、Cursor、Cline、Claude Desktop などの既製の MCP 対応アプリケーションで使用できます。
このソリューションでは、任意の OAuth サーバープロバイダーを選択できます。このリポジトリの例では Amazon Cognito を使用していますが、API Gateway のカスタム認可を使って Okta や Auth0 などのサードパーティープロバイダーを使用することもできます。
Python サーバーの例
import sys
from mcp.client.stdio import StdioServerParameters
from mcp_lambda import APIGatewayProxyEventHandler, StdioServerAdapterRequestHandler
server_params = StdioServerParameters(
command=sys.executable,
args=[
"-m",
"my_mcp_server_python_module",
"--my-server-command-line-parameter",
"some_value",
],
)
request_handler = StdioServerAdapterRequestHandler(server_params)
event_handler = APIGatewayProxyEventHandler(request_handler)
def handler(event, context):
return event_handler.handle(event, context)
デプロイ可能な完全な例はこちらをご覧ください。
Typescript サーバーの例
import {
Handler,
Context,
APIGatewayProxyWithCognitoAuthorizerEvent,
APIGatewayProxyResult,
} from "aws-lambda";
import {
APIGatewayProxyEventHandler,
StdioServerAdapterRequestHandler,
} from "@aws/run-mcp-servers-with-aws-lambda";
const serverParams = {
command: "npx",
args: [
"--offline",
"my-mcp-server-typescript-module",
"--my-server-command-line-parameter",
"some_value",
],
};
const requestHandler = new APIGatewayProxyEventHandler(
new StdioServerAdapterRequestHandler(serverParams)
);
export const handler: Handler = async (
event: APIGatewayProxyWithCognitoAuthorizerEvent,
context: Context
): Promise<APIGatewayProxyResult> => {
return requestHandler.handle(event, context);
};
デプロイ可能な完全な例はこちらをご覧ください。
Python クライアントの例
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
# Create OAuth client provider here
async with streamablehttp_client(
url="https://abc123.execute-api.us-west-2.amazonaws.com/prod/mcp",
auth=oauth_client_provider,
) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tool_result = await session.call_tool("echo", {"message": "hello"})
サンプルチャットボットに含まれる完全な例はこちらをご覧ください。
Typescript クライアントの例
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const client = new Client(
{
name: "my-client",
version: "0.0.1",
},
{
capabilities: {
sampling: {},
},
}
);
// Create OAuth client provider here
const transport = new StreamableHTTPClientTransport(
"https://abc123.execute-api.us-west-2.amazonaws.com/prod/mcp",
{
authProvider: oauthProvider,
}
);
await client.connect(transport);
サンプルチャットボットに含まれる完全な例はこちらをご覧ください。
flowchart LR
App["MCP Client"]
T1["MCP Server<br>(Lambda function)"]
T2["Bedrock AgentCore Gateway"]
T3["OAuth Server<br>(Cognito or similar)"]
App -->|"MCP Streamable<br>HTTP Transport"| T2
T2 -->|"Invoke"| T1
T2 -->|"Authorize"| T3
このソリューションは、ストリーム可能な HTTP トランスポートをサポートするほとんどの MCP クライアントと互換性があります。 このアーキテクチャでデプロイされた MCP サーバーは、通常、Cursor、Cline、Claude Desktop などの市販の MCP 互換アプリケーションで使用できます。
Bedrock AgentCore Gateway では、Amazon Cognito、Okta、Auth0 など、使用する OAuth サーバープロバイダーを選択できます。
stdio ベースの MCP サーバーの前段で Bedrock AgentCore Gateway を使用するには、 MCP サーバーのツールスキーマを取得し、 AgentCore Gateway Lambda ターゲット設定に指定する必要があります。 その後、AgentCore Gateway はそのスキーマを HTTP クライアントに通知し、リクエストの入力と出力を検証できます。
stdio ベースの MCP サーバーのツールスキーマを取得してファイルに保存するには、次を実行します。
npx @modelcontextprotocol/inspector --cli --method tools/list <your MCP server command and arguments> > tool-schema.json
# For example:
npx @modelcontextprotocol/inspector --cli --method tools/list uvx mcp-server-time > tool-schema.json
一部の MCP サーバーでは、"items": {}、"default": null、{"type": "null"} を含む anyOf など、AgentCore Gateway が厳密な検証で拒否するツールスキーマが生成されます。
使用する前にスキーマを整理する必要がある場合があります。
python3 scripts/clean-tool-schema.py tool-schema.json
Python サーバーの例
import sys
from mcp.client.stdio import StdioServerParameters
from mcp_lambda import BedrockAgentCoreGatewayTargetHandler, StdioServerAdapterRequestHandler
server_params = StdioServerParameters(
command=sys.executable,
args=[
"-m",
"my_mcp_server_python_module",
"--my-server-command-line-parameter",
"some_value",
],
)
request_handler = StdioServerAdapterRequestHandler(server_params)
event_handler = BedrockAgentCoreGatewayTargetHandler(request_handler)
def handler(event, context):
return event_handler.handle(event, context)
デプロイ可能な完全な例については、こちらを参照してください。
Typescript サーバーの例
import { Handler, Context } from "aws-lambda";
import {
BedrockAgentCoreGatewayTargetHandler,
StdioServerAdapterRequestHandler,
} from "@aws/run-mcp-servers-with-aws-lambda";
const serverParams = {
command: "npx",
args: [
"--offline",
"my-mcp-server-typescript-module",
"--my-server-command-line-parameter",
"some_value",
],
};
const requestHandler = new BedrockAgentCoreGatewayTargetHandler(
new StdioServerAdapterRequestHandler(serverParams)
);
export const handler: Handler = async (
event: Record<string, unknown>,
context: Context
): Promise<Record<string, unknown>> => {
return requestHandler.handle(event, context);
};
デプロイ可能な完全な例については、こちらを参照してください。
Python クライアントの例
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
# Create OAuth client provider here
async with streamablehttp_client(
url="https://abc123.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp",
auth=oauth_client_provider,
) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tool_result = await session.call_tool("echo", {"message": "hello"})
サンプルチャットボットの一部としての完全な例については、こちらを参照してください。
Typescript クライアントの例
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const client = new Client(
{
name: "my-client",
version: "0.0.1",
},
{
capabilities: {
sampling: {},
},
}
);
// Create OAuth client provider here
const transport = new StreamableHTTPClientTransport(
"https://abc123.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp",
{
authProvider: oauthProvider,
}
);
await client.connect(transport);
サンプルチャットボットの一部としての完全な例については、こちらを参照してください。
Lambda 関数 URL を使用する
flowchart LR
App["MCP Client"]
T1["MCP Server<br>(Lambda function)"]
T2["Lambda function URL"]
App -->|"Custom Streamable HTTP<br>Transport with AWS Auth"| T2
T2 -->|"Invoke"| T1
このソリューションでは認証に AWS IAM を使用し、IAM ユーザーおよびロールに Lambda InvokeFunctionUrl 権限を付与して、 MCP サーバーへのアクセスを可能にします。クライアントは、リクエストに AWS SigV4 で署名する MCP Streamable HTTP トランスポートの拡張機能を使用する必要があります。 市販の MCP 互換アプリケーションは、このカスタムトランスポートをサポートしていない可能性が高いため、 このソリューションはエンドユーザー向けではなく、サービス間通信に適しています。
Python サーバーの例
import sys
from mcp.client.stdio import StdioServerParameters
from mcp_lambda import LambdaFunctionURLEventHandler, StdioServerAdapterRequestHandler
server_params = StdioServerParameters(
command=sys.executable,
args=[
"-m",
"my_mcp_server_python_module",
"--my-server-command-line-parameter",
"some_value",
],
)
request_handler = StdioServerAdapterRequestHandler(server_params)
event_handler = LambdaFunctionURLEventHandler(request_handler)
def handler(event, context):
return event_handler.handle(event, context)
デプロイ可能な完全な例については、こちらを参照してください。
Typescript サーバーの例
import {
Handler,
Context,
APIGatewayProxyEventV2WithIAMAuthorizer,
APIGatewayProxyResultV2,
} from "aws-lambda";
import {
LambdaFunctionURLEventHandler,
StdioServerAdapterRequestHandler,
} from "@aws/run-mcp-servers-with-aws-lambda";
const serverParams = {
command: "npx",
args: [
"--offline",
"my-mcp-server-typescript-module",
"--my-server-command-line-parameter",
"some_value",
],
};
const requestHandler = new LambdaFunctionURLEventHandler(
new StdioServerAdapterRequestHandler(serverParams)
);
export const handler: Handler = async (
event: APIGatewayProxyEventV2WithIAMAuthorizer,
context: Context
): Promise<APIGatewayProxyResultV2> => {
return requestHandler.handle(event, context);
};
デプロイ可能な完全な例については、こちらを参照してください。
Python クライアントの例
from mcp import ClientSession
from mcp_proxy_for_aws.client import aws_iam_streamablehttp_client
async with aws_iam_streamablehttp_client(
endpoint="https://url-id-12345.lambda-url.us-west-2.on.aws",
aws_service="lambda",
aws_region="us-west-2",
) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tool_result = await session.call_tool("echo", {"message": "hello"})
サンプルチャットボットの一部としての完全な例については、こちらを参照してください。
Typescript クライアントの例
import { StreamableHTTPClientWithSigV4Transport } from "@aws/run-mcp-servers-with-aws-lambda";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const client = new Client(
{
name: "my-client",
version: "0.0.1",
},
{
capabilities: {
sampling: {},
},
}
);
const transport = new StreamableHTTPClientWithSigV4Transport(
new URL("https://url-id-12345.lambda-url.us-west-2.on.aws"),
{
service: "lambda",
region: "us-west-2",
}
);
await client.connect(transport);
サンプルチャットボットの一部としての完全な例については、こちらを参照してください。
flowchart LR
App["MCP Client"]
T1["MCP Server<br>(Lambda function)"]
App -->|"Custom MCP Transport<br>(Lambda Invoke API)"| T1
Lambda 関数 URL の方法と同様に、このソリューションでは認証に AWS IAM を使用します。 MCP サーバーへのアクセスを有効にするには、IAM ユーザーとロールに Lambda InvokeFunction 権限 を付与します。 クライアントは、 Lambda Invoke API を直接呼び出すカスタム MCP トランスポートを使用する必要があります。 一般的な MCP 対応アプリケーションは、このカスタムトランスポートをサポートしていない可能性が高いため、 このソリューションはエンドユーザー向けではなく、サービス間通信に適しています。
Python サーバーの例
import sys
from mcp.client.stdio import StdioServerParameters
from mcp_lambda import stdio_server_adapter
server_params = StdioServerParameters(
command=sys.executable,
args=[
"-m",
"my_mcp_server_python_module",
"--my-server-command-line-parameter",
"some_value",
],
)
def handler(event, context):
return stdio_server_adapter(server_params, event, context)
デプロイ可能な完全な例はこちらをご覧ください。
Typescript サーバーの例
import { Handler, Context } from "aws-lambda";
import { stdioServerAdapter } from "@aws/run-mcp-servers-with-aws-lambda";
const serverParams = {
command: "npx",
args: [
"--offline",
"my-mcp-server-typescript-module",
"--my-server-command-line-parameter",
"some_value",
],
};
export const handler: Handler = async (event, context: Context) => {
return await stdioServerAdapter(serverParams, event, context);
};
デプロイ可能な完全な例はこちらをご覧ください。
Python クライアントの例
from mcp import ClientSession
from mcp_lambda import LambdaFunctionParameters, lambda_function_client
server_params = LambdaFunctionParameters(
function_name="my-mcp-server-function",
region_name="us-west-2",
)
async with lambda_function_client(server_params) as (
read_stream,
write_stream,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tool_result = await session.call_tool("echo", {"message": "hello"})
サンプルチャットボットに含まれる完全な例はこちらをご覧ください。
Typescript クライアントの例
import {
LambdaFunctionParameters,
LambdaFunctionClientTransport,
} from "@aws/run-mcp-servers-with-aws-lambda";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
const serverParams: LambdaFunctionParameters = {
functionName: "my-mcp-server-function",
regionName: "us-west-2",
};
const client = new Client(
{
name: "my-client",
version: "0.0.1",
},
{
capabilities: {
sampling: {},
},
}
);
const transport = new LambdaFunctionClientTransport(serverParams);
await client.connect(transport);
サンプルチャットボットに含まれる完全な例はこちらをご覧ください。
関連プロジェクト
- Lambda 関数でカスタム MCP サーバーを作成する方法については、 MCP Lambda Handler プロジェクトをご覧ください。
- 既存の Lambda 関数を stdio MCP サーバー経由でツールとして呼び出す方法については、 AWS Lambda Tool MCP Server プロジェクトをご覧ください。
検討事項
- このライブラリは現在、Python と Typescript で記述された MCP サーバーとクライアントをサポートしています。 Kotlin など、その他の言語はサポートされていません。
- このライブラリが Lambda 向けに適応するのは stdio MCP サーバーのみであり、SSE などの他のプロトコル向けに記述されたサーバーは対象外です。
- このライブラリは、Lambda 関数の呼び出しをまたいで MCP サーバーの状態やセッションを維持しません。 このライブラリの利用に適しているのは、ステートレスな MCP サーバーのみです。たとえば、 time MCP serverのような ステートレスなツールを呼び出すサーバーや、fetch MCP serverのように ステートレスな Web リクエストを行うサーバーです。 ステートフルな MCP サーバーは、リクエストごとに状態が失われるため適していません。 たとえば、sqlite MCP server、 filesystem MCP server、 git MCP serverのように、 ディスク上やメモリ内のデータを管理する MCP サーバーです。
例をデプロイして実行する
このリポジトリの例をデプロイして実行する手順については、開発ガイドをご覧ください。
セキュリティ
詳しくはCONTRIBUTINGをご覧ください。
ライセンス
このプロジェクトは Apache-2.0 License の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。