326 lines
5.2 KiB
Markdown
326 lines
5.2 KiB
Markdown
# Deployment Guide
|
|
|
|
Guide to deploying MCPEngine servers in various environments.
|
|
|
|
## Local Development
|
|
|
|
### Claude Desktop
|
|
|
|
1. Build the server:
|
|
```bash
|
|
cd servers/servicetitan
|
|
npm install && npm run build
|
|
```
|
|
|
|
2. Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"servicetitan": {
|
|
"command": "node",
|
|
"args": ["/absolute/path/to/mcpengine/servers/servicetitan/dist/index.js"],
|
|
"env": {
|
|
"SERVICETITAN_API_KEY": "your_api_key",
|
|
"SERVICETITAN_TENANT_ID": "your_tenant"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
3. Restart Claude Desktop
|
|
|
|
### Cursor IDE
|
|
|
|
Add to `.cursor/mcp.json`:
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"servicetitan": {
|
|
"command": "node",
|
|
"args": ["../mcpengine/servers/servicetitan/dist/index.js"],
|
|
"env": {
|
|
"SERVICETITAN_API_KEY": "your_key"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Production Deployment
|
|
|
|
### Docker
|
|
|
|
Create `Dockerfile`:
|
|
```dockerfile
|
|
FROM node:20-slim
|
|
|
|
WORKDIR /app
|
|
|
|
COPY servers/servicetitan/package.json .
|
|
RUN npm install
|
|
|
|
COPY servers/servicetitan/src ./src
|
|
COPY servers/servicetitan/tsconfig.json .
|
|
|
|
RUN npm run build
|
|
|
|
CMD ["node", "dist/index.js"]
|
|
```
|
|
|
|
Build and run:
|
|
```bash
|
|
docker build -t mcpengine-servicetitan .
|
|
docker run -e SERVICETITAN_API_KEY=your_key mcpengine-servicetitan
|
|
```
|
|
|
|
### Docker Compose (Multiple Servers)
|
|
|
|
`docker-compose.yml`:
|
|
```yaml
|
|
version: '3.8'
|
|
|
|
services:
|
|
servicetitan:
|
|
build:
|
|
context: .
|
|
dockerfile: servers/servicetitan/Dockerfile
|
|
environment:
|
|
- SERVICETITAN_API_KEY=${SERVICETITAN_API_KEY}
|
|
restart: unless-stopped
|
|
|
|
mailchimp:
|
|
build:
|
|
context: .
|
|
dockerfile: servers/mailchimp/Dockerfile
|
|
environment:
|
|
- MAILCHIMP_API_KEY=${MAILCHIMP_API_KEY}
|
|
restart: unless-stopped
|
|
```
|
|
|
|
Run:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
---
|
|
|
|
## Cloud Deployment
|
|
|
|
### Railway
|
|
|
|
1. Connect GitHub repo
|
|
2. Add environment variables
|
|
3. Deploy:
|
|
```bash
|
|
railway up
|
|
```
|
|
|
|
### Heroku
|
|
|
|
```bash
|
|
heroku create mcpengine-servicetitan
|
|
heroku config:set SERVICETITAN_API_KEY=your_key
|
|
git push heroku main
|
|
```
|
|
|
|
### Vercel (Serverless)
|
|
|
|
Create `vercel.json`:
|
|
```json
|
|
{
|
|
"builds": [
|
|
{
|
|
"src": "servers/servicetitan/dist/index.js",
|
|
"use": "@vercel/node"
|
|
}
|
|
],
|
|
"routes": [
|
|
{
|
|
"src": "/",
|
|
"dest": "servers/servicetitan/dist/index.js"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
Deploy:
|
|
```bash
|
|
vercel --prod
|
|
```
|
|
|
|
---
|
|
|
|
## Managed Hosting (Coming Soon)
|
|
|
|
MCPEngine managed hosting will offer:
|
|
- One-click deployment
|
|
- Auto-scaling
|
|
- 99.9% uptime SLA
|
|
- Monitoring & alerts
|
|
- Automatic updates
|
|
|
|
**Pricing:**
|
|
- Starter: $49/month (5 servers)
|
|
- Pro: $99/month (15 servers)
|
|
- Enterprise: Custom pricing
|
|
|
|
Sign up for early access at [mcpengine.com](https://mcpengine.com)
|
|
|
|
---
|
|
|
|
## Security Best Practices
|
|
|
|
### Never Commit Secrets
|
|
Use environment variables or secret managers:
|
|
```bash
|
|
# Good
|
|
export SERVICETITAN_API_KEY=$(cat secrets/servicetitan.key)
|
|
|
|
# Bad (never do this)
|
|
const API_KEY = "sk_live_abc123";
|
|
```
|
|
|
|
### Use Secret Managers
|
|
|
|
**AWS Secrets Manager:**
|
|
```bash
|
|
aws secretsmanager get-secret-value --secret-id mcpengine/servicetitan
|
|
```
|
|
|
|
**HashiCorp Vault:**
|
|
```bash
|
|
vault kv get secret/mcpengine/servicetitan
|
|
```
|
|
|
|
### Rotate Keys Regularly
|
|
Set calendar reminders to rotate API keys every 90 days.
|
|
|
|
### Restrict Permissions
|
|
Only grant the minimum required API scopes.
|
|
|
|
---
|
|
|
|
## Monitoring
|
|
|
|
### Health Checks
|
|
|
|
Add to your server:
|
|
```typescript
|
|
server.setRequestHandler('health', async () => {
|
|
return {
|
|
status: 'healthy',
|
|
timestamp: new Date().toISOString(),
|
|
};
|
|
});
|
|
```
|
|
|
|
### Logging
|
|
|
|
Use structured logging:
|
|
```typescript
|
|
console.error(JSON.stringify({
|
|
level: 'info',
|
|
tool: 'get_contacts',
|
|
duration_ms: 150,
|
|
timestamp: new Date().toISOString(),
|
|
}));
|
|
```
|
|
|
|
### Metrics
|
|
|
|
Track:
|
|
- Request count
|
|
- Error rate
|
|
- Response time
|
|
- API quota usage
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Server won't start
|
|
```bash
|
|
# Check logs
|
|
npm start 2>&1 | tee server.log
|
|
|
|
# Verify environment variables
|
|
env | grep SERVICETITAN
|
|
|
|
# Test TypeScript compilation
|
|
npm run build
|
|
```
|
|
|
|
### API authentication fails
|
|
- Verify API key is valid
|
|
- Check key has required permissions
|
|
- Confirm base URL is correct
|
|
|
|
### Claude Desktop doesn't see server
|
|
- Restart Claude Desktop
|
|
- Check config file path
|
|
- Verify JSON syntax
|
|
- Look at Claude logs: `~/Library/Logs/Claude/`
|
|
|
|
---
|
|
|
|
## Performance Tuning
|
|
|
|
### Connection Pooling
|
|
Reuse HTTP connections:
|
|
```typescript
|
|
const agent = new https.Agent({
|
|
keepAlive: true,
|
|
maxSockets: 50,
|
|
});
|
|
```
|
|
|
|
### Caching
|
|
Cache frequently accessed data:
|
|
```typescript
|
|
const cache = new Map();
|
|
const TTL = 300000; // 5 minutes
|
|
```
|
|
|
|
### Rate Limiting
|
|
Respect API limits:
|
|
```typescript
|
|
const rateLimiter = new Bottleneck({
|
|
maxConcurrent: 10,
|
|
minTime: 100,
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
## Updates
|
|
|
|
### Manual Updates
|
|
```bash
|
|
cd servers/servicetitan
|
|
git pull origin main
|
|
npm install
|
|
npm run build
|
|
# Restart server
|
|
```
|
|
|
|
### Auto-Updates (Docker)
|
|
Use Watchtower:
|
|
```yaml
|
|
watchtower:
|
|
image: containrrr/watchtower
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
command: --interval 3600
|
|
```
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
- **Deployment issues:** [GitHub Issues](https://github.com/yourusername/mcpengine/issues)
|
|
- **Enterprise support:** enterprise@mcpengine.com
|
|
- **Community:** [Discord](https://discord.gg/mcpengine)
|