DEPLOYMENT.md•4.5 kB
# Personal Resume MCP Server - AWS Deployment Guide
This guide walks you through deploying the Personal Resume MCP Server to AWS for remote access via Claude Desktop.
## Architecture Overview
```
Claude Desktop → HTTP Request → ALB → ECS Fargate → MCP Server → Resume RAG System
```
## Prerequisites
1. AWS CLI configured with appropriate permissions
2. Docker installed and running
3. Your resume files in the `data/` directory
## Quick Start (Local Testing)
Test the HTTP server locally before deploying:
```bash
# Build and run locally
docker-compose up --build
# Test the server
curl http://localhost:8000/health
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
```
## AWS Deployment Options
### Option 1: Automated CloudFormation Deployment
1. **Set environment variables:**
```bash
export AWS_REGION=us-east-1
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
```
2. **Deploy infrastructure:**
```bash
# Build and push image
cd deploy
./deploy.sh
# Deploy infrastructure
aws cloudformation create-stack \
--stack-name personal-resume-mcp-stack \
--template-body file://cloudformation-template.yaml \
--parameters ParameterKey=ImageURI,ParameterValue=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/personal-resume-mcp:latest \
--capabilities CAPABILITY_NAMED_IAM \
--region $AWS_REGION
```
3. **Get the endpoint:**
```bash
aws cloudformation describe-stacks \
--stack-name personal-resume-mcp-stack \
--query 'Stacks[0].Outputs[?OutputKey==`MCPEndpoint`].OutputValue' \
--output text
```
### Option 2: Manual ECS Deployment
1. **Build and push image:**
```bash
cd deploy
./deploy.sh
```
2. **Create ECS cluster and service using AWS Console or CLI**
## Claude Desktop Configuration
Once deployed, update your Claude Desktop configuration:
```json
{
"mcpServers": {
"personal-resume": {
"command": "curl",
"args": [
"-X", "POST",
"http://YOUR_ALB_ENDPOINT/mcp",
"-H", "Content-Type: application/json",
"-d", "@-"
]
}
}
}
```
## Testing the Deployment
1. **Health check:**
```bash
curl http://YOUR_ALB_ENDPOINT/health
```
2. **Test MCP tools:**
```bash
# List available tools
curl -X POST http://YOUR_ALB_ENDPOINT/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
# Query resume
curl -X POST http://YOUR_ALB_ENDPOINT/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "query_resume",
"arguments": {
"query": "What programming languages do I know?"
}
}
}'
```
## Available MCP Tools
- `query_resume`: Ask questions about resume content
- `get_agent_info`: Get agent capabilities and status
- `analyze_skill_match`: Compare skills with job requirements
## Security Considerations
- The ALB is publicly accessible (required for Claude Desktop)
- Consider adding authentication/authorization if needed
- Resume data is processed locally within the container
- No external API calls for embeddings (uses local sentence-transformers)
## Monitoring and Logs
- CloudWatch logs: `/ecs/personal-resume-mcp-server`
- Health check endpoint: `/health`
- Metrics available in ECS console
## Cost Estimation
Approximate monthly costs (us-east-1):
- ECS Fargate (1 task, 1 vCPU, 2GB): ~$30
- Application Load Balancer: ~$18
- CloudWatch Logs (minimal): ~$1
- **Total: ~$50/month**
## Troubleshooting
### Common Issues:
1. **Container fails to start:**
- Check CloudWatch logs
- Verify resume files are present in container
2. **Health check failing:**
- Ensure port 8000 is exposed
- Check security group rules
3. **Claude Desktop can't connect:**
- Verify ALB endpoint is accessible
- Check CORS settings in the HTTP server
### Debug Commands:
```bash
# Check ECS service status
aws ecs describe-services --cluster personal-resume-mcp-cluster --services personal-resume-mcp-service
# View logs
aws logs tail /ecs/personal-resume-mcp-server --follow
# Test connectivity
curl -v http://YOUR_ALB_ENDPOINT/health
```
## Cleanup
To avoid ongoing charges:
```bash
# Delete CloudFormation stack
aws cloudformation delete-stack --stack-name personal-resume-mcp-stack
# Delete ECR repository
aws ecr delete-repository --repository-name personal-resume-mcp --force
```