Berghain 이벤트 API 및 MCP 구현
프로젝트 구조
지엑스피1
요구 사항
- 파이썬 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/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/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
인수로 전달하지 않는 경우, load_data.py
에서 가져온 app/core/config.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
Dockerfile
이 uv
사용하도록 올바르게 구성되었고 app/main.py
실행했는지 확인하세요.
비. 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로 업데이트합니다.
비. 테스트 실행
프로젝트의 루트(또는 mcp_local.py
저장한 곳)에서:
uv run python mcp_local.py
이렇게 하면 PydanticAI 에이전트가 실행되어 배포된 MCP에 연결하고 쿼리를 수행합니다.
특허
MIT