Skip to main content
Glama
poad

aws-mcp-lambda-server

by poad
README.md
# 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/)