An open API service indexing awesome lists of open source software.

https://github.com/poad/aws-mcp-lambda-server


https://github.com/poad/aws-mcp-lambda-server

aws-cdk-typescript aws-lambda awscdk awscdk-app-ts mcp-server typescript

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

          

# AWS MCP Lambda Server

AWS Lambda上で動作するModel Context Protocol (MCP) サーバーの実装です。このプロジェクトは、MCPサーバーをAWSのサーバーレス環境で実行し、Claude DesktopなどのMCPクライアントと連携できるようにします。

## プロジェクト構成

```text
aws-mcp-lambda-server/
├── platform/ # AWS CDKインフラストラクチャとLambda関数
│ ├── bin/ # CDKアプリケーションエントリーポイント
│ ├── lib/ # CDKスタック定義
│ ├── lambda/ # Lambda関数のソースコード
│ │ ├── mcp-server/ # MCPサーバー実装
│ │ │ ├── tools/ # MCPツール(WeatherTool等)
│ │ │ ├── index.ts # Lambda関数エントリーポイント
│ │ │ ├── mcp-server.ts # MCPサーバー設定
│ │ │ └── server.ts # 開発用サーバー
│ │ ├── authorize.ts # OAuth認証処理
│ │ ├── token.ts # トークン管理
│ │ ├── revoke.ts # トークン無効化
│ │ ├── clients.ts # クライアント管理
│ │ └── utils.ts # ユーティリティ関数
│ └── package.json
├── example/ # サンプルクライアントアプリケーション
│ └── client/ # Next.jsベースのWebクライアント
│ ├── src/ # クライアントソースコード
│ └── package.json
├── .github/workflows/ # GitHub Actions CI/CD設定
│ ├── ci.yml # ビルド・テスト
│ ├── deploy.yml # AWS デプロイ
│ ├── codeql-analysis.yml # セキュリティ分析
│ └── auto-merge.yml # 自動マージ
└── package.json # ルートパッケージ設定
```

## 主な機能

### MCPサーバー機能

- **天気予報ツール**: 指定した都市の天気情報を取得
- **HTTP API**: Hono.jsベースのRESTful API
- **認証**: AWS Cognito OAuth 2.0認証
- **サーバーレス**: AWS Lambda上で動作

### インフラストラクチャ

- **AWS CDK**: Infrastructure as Code
- **AWS Lambda**: サーバーレス実行環境
- **AWS Cognito**: ユーザー認証・認可
- **AWS DynamoDB**: データストレージ
- **AWS API Gateway**: HTTPエンドポイント

### 開発・運用

- **TypeScript**: 型安全な開発
- **ESLint**: コード品質管理
- **Vitest**: テストフレームワーク
- **GitHub Actions**: CI/CD パイプライン

## 前提条件

- Node.js 22.x
- pnpm 10.14.0+
- AWS CLI設定済み
- AWS CDK CLI

## セットアップ

### 1. リポジトリのクローン

```bash
git clone https://github.com/poad/aws-mcp-lambda-server.git
cd aws-mcp-lambda-server
```

### 2. 依存関係のインストール

```bash
pnpm install
```

### 3. プロジェクトのビルド

```bash
pnpm run build
```

## デプロイ

### AWS環境へのデプロイ

```bash
cd platform
npx cdk deploy --all
```

### 設定オプション

CDKコンテキストで以下の設定が可能です:

```bash
# プロジェクト名の設定
npx cdk deploy -c project-name=my-mcp-server

# 認証の有効化
npx cdk deploy -c use-auth=true

# ドメインの設定
npx cdk deploy -c domain=my-domain
```

## 開発

### ローカル開発サーバーの起動

```bash
cd platform
pnpm run dev
```

### テストの実行

```bash
pnpm run test
```

### リンティング

```bash
pnpm run lint
pnpm run lint-fix # 自動修正
```

## MCPツールの追加

新しいMCPツールを追加するには:

1. `platform/lambda/mcp-server/tools/` に新しいツールファイルを作成
2. `platform/lambda/mcp-server/mcp-server.ts` でツールを登録

例:

```typescript
// tools/MyTool.ts
interface MyToolInput {
message: string;
}

async function handler(args: MyToolInput): Promise<{
content: { type: 'text', text: string }[]
}> {
return {
content: [
{
type: 'text',
text: `処理結果: ${args.message}`,
},
],
};
}

export default handler;
```

```typescript
// mcp-server.ts
import myTool from './tools/MyTool.js';

server.tool(
'my_tool',
'カスタムツールの説明',
{ message: z.string().describe('メッセージ') },
myTool,
);
```

## Claude Desktopとの連携

### 設定ファイルの場所

- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

### 設定例

```json
{
"mcpServers": {
"aws-mcp-lambda-server": {
"command": "node",
"args": ["/path/to/aws-mcp-lambda-server/platform/lambda/mcp-server/dist/index.js"]
}
}
}
```

## サンプルクライアント

`example/client/` にNext.jsベースのWebクライアントが含まれています。

### クライアントの起動

```bash
cd example/client
pnpm install
pnpm run dev
```

## 認証設定

AWS Cognitoを使用したOAuth 2.0認証をサポートしています。

### 認証フロー

1. クライアントがCognitoの認証エンドポイントにリダイレクト
2. ユーザーがログイン
3. 認証コードを取得してアクセストークンと交換
4. MCPサーバーAPIへのアクセス時にトークンを使用

## CI/CD

GitHub Actionsを使用した自動化:

- **CI**: プルリクエスト時の自動ビルド・テスト
- **CD**: mainブランチへのマージ時の自動デプロイ
- **セキュリティ**: CodeQL分析
- **依存関係**: Dependabot自動更新

## ライセンス

MIT License

## 作者

Kenji Saito

## コントリビューション

1. このリポジトリをフォーク
2. フィーチャーブランチを作成 (`git checkout -b feature/amazing-feature`)
3. 変更をコミット (`git commit -m 'Add some amazing feature'`)
4. ブランチにプッシュ (`git push origin feature/amazing-feature`)
5. プルリクエストを作成

## 参考資料

- [Model Context Protocol](https://modelcontextprotocol.io/)
- [AWS CDK Documentation](https://docs.aws.amazon.com/cdk/)
- [Hono.js Documentation](https://hono.dev/)
- [AWS Lambda Documentation](https://docs.aws.amazon.com/lambda/)