ベルグハインイベントAPIとMCP実装
プロジェクト構造
berghain-api/
├── app/ # Aplicación principal FastAPI
│ ├── api/ # Rutas de la API
│ ├── core/ # Configuración y componentes centrales
│ ├── db/ # Capa de acceso a datos (DynamoDB)
│ └── main.py # Punto de entrada de la aplicación y FastMCP server
├── scripts/ # Scripts para creación de tabla y carga de datos en DynamoDB
│ ├── create_table.py
│ └── load_data.py
├── events/ # Directorio para los JSON extraídos de Firecrawl
├── Dockerfile # Dockerfile para despliegue
├── requirements.txt # Dependencias del proyecto (para uv)
└── README.md # Este archivo
要件
- Python 3.10以上
- uv (依存関係管理と仮想環境用)
- AWS アカウント (DynamoDB および App Runner 用)
- Firecrawl APIキー
施設
- このリポジトリをクローンします:
git clone <repository-url>
cd berghain-api
uv
を使用して仮想環境を作成し、アクティブ化します。uv venv
source .venv/bin/activate # En Linux/macOS
# .venv\\Scripts\\activate # En Windows
uv
を使用して依存関係をインストールします。uv pip install -r requirements.txt
詳細なプロセス
1. Firecrawlによるデータ抽出
- Firecrawl MCP をカーソルに設定します。Firecrawl API キーがあることを確認します。カーソル MCP 構成で、以下を追加します。
"firecrawl-mcp": {
"command": "npx",
"args": [
"-y",
"firecrawl-mcp"
],
"env": {
"FIRECRAWL_API_KEY": "fc-YOUR_FIRECRAWL_API_KEY"
}
}
- 抽出を実行します。Cursorのエージェント (または同様のツール) を使用して、Firecrawl MCP を呼び出し、
https://www.berghain.berlin/en/program/
からイベントを抽出するように要求します。 - **データを保存する:**抽出されたデータは、
events/
ディレクトリに JSON ファイルとして保存する必要があります。たとえば、 events/berghain_events_YYYY-MM-DD.json
。
2. DynamoDBへのデータのロード
- DynamoDB にテーブルを作成します。scripts
scripts/create_table.py
スクリプトがこれを処理します。実行します(必要に応じてパラメータを調整します)。uv run python scripts/create_table.py --table berghain_events --region tu-region-aws
# Para desarrollo local con DynamoDB Local (ej. docker run -p 8000:8000 amazon/dynamodb-local):
# uv run python scripts/create_table.py --table berghain_events --region localhost --endpoint-url http://localhost:8000
- テーブルにデータをロードします。scripts
scripts/load_data.py
スクリプトは、JSON ファイルからイベントをロードします。uv run python scripts/load_data.py --table berghain_events --region tu-region-aws --path events
# Para desarrollo local:
# uv run python scripts/load_data.py --table berghain_events --region localhost --endpoint-url http://localhost:8000 --path events
引数として渡さない場合はapp/core/config.py
( load_data.py
によってインポート) に必要な構成があることを確認してください。
3. FastAPIとMCPサーバーを使用したAPI
- API ロジックは
app/
ディレクトリにあり、エンドポイントが定義されています (例: app/api/endpoints/events.py
)。 app/main.py
ファイルは、FastAPI アプリケーションと FastMCP サーバーを起動するように構成され、API エンドポイントを AI モデルのツールとして公開します。 app/main.py
のcustom_maps
をチェックして、 GET ルートがRouteType.TOOL
にどのようにマップされるかを確認します。
AWS へのデプロイメント
に。 Dockerfile
uv
を使用し、 app/main.py
を実行するようにDockerfile
が正しく構成されていることを確認します。
b.イメージをビルドして Amazon ECR (Elastic Container Registry) にアップロードする
- ECR を使用して Docker を認証します。
aws ecr get-login-password --region tu-region-aws | docker login --username AWS --password-stdin tu-aws-account-id.dkr.ecr.tu-region-aws.amazonaws.com
- ECR にリポジトリを作成します (存在しない場合)。
aws ecr create-repository --repository-name berghain-mcp-api --region tu-region-aws
- Docker イメージをビルドします。
docker build -t berghain-mcp-api .
- 画像にタグを付けます:
docker tag berghain-mcp-api:latest tu-aws-account-id.dkr.ecr.tu-region-aws.amazonaws.com/berghain-mcp-api:latest
- 画像を ECR にアップロードします。
docker push tu-aws-account-id.dkr.ecr.tu-region-aws.amazonaws.com/berghain-mcp-api:latest
tu-region-aws
とtu-aws-account-id
実際の値に置き換えます。
- Terraform ファイルを準備します。Terraform構成ファイル (例:
main.tf
、 variables.tf
、 outputs.tf
) がディレクトリ (例: terraform/
) にあることを確認します。これらのファイルでは、ECR イメージが使用する AWS App Runner サービスや DynamoDB テーブル (Terraform でも管理されている場合) などの必要な AWS リソースを定義する必要があります。 Terraform の App Runner 構成では、ECR にアップロードされたイメージを参照する必要があります。 - Terraform ディレクトリに移動します。
- Terraform を初期化します。
- Terraform 構成を適用します。計画を確認し、申請を確定します。 Terraform がリソースをプロビジョニングします。
- **サービス URL を取得します。**適用すると、Terraform によって、App Runner サービス URL を含む定義済みの出力が表示されます。この URL (例:
https://<id-servicio>.<region>.awsapprunner.com
) をメモします。
展開したソリューションをテストする
に。ローカルテストスクリプトを調整する ( mcp_local.py
)
mcp_local.py
ファイルをプロジェクトのルートに設定します。
重要: mcp_local.py
のmcp_server_url
変数を、Terraform 出力から取得した URL に更新します。
b.テストを実行
プロジェクトのルート (またはmcp_local.py
保存した場所) から:
uv run python mcp_local.py
これにより、PydanticAI エージェントが実行され、デプロイされた MCP に接続してクエリを実行しようとします。
ライセンス
マサチューセッツ工科大学