Skip to main content
Glama
aparajithn

agent-deploy-dashbaord

by aparajithn
README.md
# Agent Deploy Dashboard MCP Server

**Unified deployment management** for AI agents — manage Vercel, Render, Railway, and Fly.io services from a single MCP + REST API.

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Features

šŸš€ **Multi-Platform Support** — Manage Vercel, Render, Railway, and Fly.io from one interface  
šŸ“Š **Deployment Status** — Check deploy status and health across all platforms  
šŸ“ **Unified Logging** — Tail logs and view build logs  
āš™ļø **Environment Management** — List, update, and manage env vars  
šŸ”„ **Redeploy Operations** — Trigger redeployments and rollbacks  
šŸ’° **x402 Micropayments** — Built-in payment middleware for API monetization  
šŸ”’ **Rate Limiting** — 50 free requests/IP/day with paid tier support

## Quick Start

### MCP Configuration

Add to your MCP settings file (`cline_mcp_settings.json` or similar):

```json
{
  "mcpServers": {
    "agent-deploy-dashboard": {
      "url": "https://agent-deploy-dashboard-mcp.onrender.com/mcp"
    }
  }
}
```

### REST API

Base URL: `https://agent-deploy-dashboard-mcp.onrender.com`

#### List All Services

```bash
curl -X GET https://agent-deploy-dashboard-mcp.onrender.com/api/v1/list_all_services
```

Response:
```json
{
  "success": true,
  "services": [
    {
      "id": "prj_abc123",
      "name": "my-app",
      "platform": "vercel",
      "url": "https://my-app.vercel.app",
      "framework": "nextjs"
    },
    {
      "id": "srv_xyz789",
      "name": "api-service",
      "platform": "render",
      "type": "web_service",
      "region": "oregon"
    }
  ],
  "count": 2
}
```

#### Get Deploy Status

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/get_deploy_status \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "vercel",
    "service_id": "prj_abc123"
  }'
```

Response:
```json
{
  "success": true,
  "platform": "vercel",
  "service_id": "prj_abc123",
  "deployment_id": "dpl_xyz",
  "status": "READY",
  "url": "https://my-app.vercel.app",
  "created_at": 1709823600000
}
```

#### Tail Logs

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/tail_logs \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "render",
    "service_id": "srv_xyz789",
    "lines": 50
  }'
```

#### Get Environment Variables

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/get_env_vars \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "vercel",
    "service_id": "prj_abc123"
  }'
```

Response:
```json
{
  "success": true,
  "platform": "vercel",
  "service_id": "prj_abc123",
  "env_vars": {
    "DATABASE_URL": {
      "value": "[ENCRYPTED]",
      "target": ["production"],
      "type": "encrypted"
    },
    "API_KEY": {
      "value": "abc123",
      "target": ["production", "preview"],
      "type": "plain"
    }
  },
  "count": 2
}
```

#### Set Environment Variable

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/set_env_var \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "render",
    "service_id": "srv_xyz789",
    "key": "NEW_FEATURE_FLAG",
    "value": "true"
  }'
```

#### Trigger Redeploy

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/trigger_redeploy \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "vercel",
    "service_id": "prj_abc123"
  }'
```

#### Get Build Logs

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/get_build_logs \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "vercel",
    "deploy_id": "dpl_xyz"
  }'
```

#### Check Health

```bash
curl -X POST https://agent-deploy-dashboard-mcp.onrender.com/api/v1/check_health \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://my-app.vercel.app/health"
  }'
```

Response:
```json
{
  "success": true,
  "url": "https://my-app.vercel.app/health",
  "status_code": 200,
  "healthy": true,
  "response_time_ms": 142,
  "headers": {
    "content-type": "application/json",
    "x-vercel-id": "sfo1::abc123"
  }
}
```

## Pricing

### Free Tier
- **50 requests per IP per day**
- All tools included
- All platforms supported
- No credit card required

### Paid Tier (HTTP 402 Payment)
After free tier exhausted:
- **$0.01 per request**
- Payment via HTTP 402 with crypto wallet
- Wallet address: `0x8E844a7De89d7CfBFe9B4453E65935A22F146aBB`
- Include `X-Payment` header with payment proof

## Platform Support

| Platform | List Services | Deploy Status | Logs | Env Vars | Redeploy | Build Logs |
|----------|--------------|---------------|------|----------|----------|------------|
| **Vercel** | āœ… Full | āœ… Full | āš ļø Build only | āœ… Full | āœ… Full | āœ… Full |
| **Render** | āœ… Full | āœ… Full | āœ… Full | āœ… Full | āœ… Full | āœ… Full |
| **Railway** | āœ… Basic | ā³ Planned | ā³ Planned | ā³ Planned | ā³ Planned | ā³ Planned |
| **Fly.io** | āœ… Basic | ā³ Planned | ā³ Planned | ā³ Planned | ā³ Planned | ā³ Planned |

āœ… = Fully implemented  
āš ļø = Partial implementation  
ā³ = Planned/stub implementation  

## Tools Reference

### 1. `list_all_services()`
List all services across all platforms.

**Parameters:** None

**Returns:**
```json
{
  "success": true,
  "services": [...],
  "count": 10,
  "errors": null
}
```

---

### 2. `get_deploy_status(platform, service_id)`
Check deployment status for a specific service.

**Parameters:**
- `platform` (string): Platform name — `vercel`, `render`, `railway`, or `fly`
- `service_id` (string): Service/project ID

**Returns:**
```json
{
  "success": true,
  "platform": "vercel",
  "service_id": "prj_abc",
  "deployment_id": "dpl_xyz",
  "status": "READY",
  "url": "https://...",
  "created_at": 1709823600000
}
```

---

### 3. `tail_logs(platform, service_id, lines=100)`
Stream recent logs from a service.

**Parameters:**
- `platform` (string): Platform name
- `service_id` (string): Service/project ID
- `lines` (integer, optional): Number of log lines (default: 100)

**Returns:**
```json
{
  "success": true,
  "platform": "render",
  "service_id": "srv_xyz",
  "logs": [...],
  "count": 100
}
```

---

### 4. `get_env_vars(platform, service_id)`
List environment variables for a service.

**Parameters:**
- `platform` (string): Platform name
- `service_id` (string): Service/project ID

**Returns:**
```json
{
  "success": true,
  "platform": "vercel",
  "env_vars": {"KEY": "value"},
  "count": 5
}
```

---

### 5. `set_env_var(platform, service_id, key, value)`
Update an environment variable.

**Parameters:**
- `platform` (string): Platform name
- `service_id` (string): Service/project ID
- `key` (string): Environment variable name
- `value` (string): Environment variable value

**Returns:**
```json
{
  "success": true,
  "message": "Environment variable set successfully"
}
```

---

### 6. `trigger_redeploy(platform, service_id)`
Force redeploy a service.

**Parameters:**
- `platform` (string): Platform name
- `service_id` (string): Service/project ID

**Returns:**
```json
{
  "success": true,
  "deployment_id": "dpl_new",
  "message": "Redeploy triggered successfully"
}
```

---

### 7. `get_build_logs(platform, deploy_id)`
Fetch build logs for a deployment.

**Parameters:**
- `platform` (string): Platform name
- `deploy_id` (string): Deployment ID

**Returns:**
```json
{
  "success": true,
  "logs": [...],
  "count": 50
}
```

---

### 8. `check_health(url)`
Ping a health endpoint.

**Parameters:**
- `url` (string): URL to check

**Returns:**
```json
{
  "success": true,
  "status_code": 200,
  "healthy": true,
  "response_time_ms": 142
}
```

---

### 9. `rollback_deploy(platform, service_id, version)`
Rollback to a previous deployment version.

**Parameters:**
- `platform` (string): Platform name
- `service_id` (string): Service/project ID
- `version` (string): Version/deployment ID to rollback to

**Returns:**
```json
{
  "success": false,
  "error": "Rollback not yet implemented for this platform"
}
```

---

## Environment Variables

Configure platform API access via environment variables:

```bash
# Vercel
VERCEL_TOKEN=your_vercel_token

# Render
RENDER_API_KEY=your_render_api_key

# Railway
RAILWAY_TOKEN=your_railway_token

# Fly.io
FLY_API_TOKEN=your_fly_api_token

# Payment (optional)
X402_WALLET_ADDRESS=0x8E844a7De89d7CfBFe9B4453E65935A22F146aBB
```

Get your API tokens:
- **Vercel**: https://vercel.com/account/tokens
- **Render**: https://dashboard.render.com/u/settings#api-keys
- **Railway**: https://railway.app/account/tokens
- **Fly.io**: Run `flyctl auth token`

## Development

### Local Setup

```bash
# Clone repo
git clone https://github.com/aparajithn/agent-deploy-dashboard-mcp.git
cd agent-deploy-dashboard-mcp

# Create virtual environment
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -e ".[dev]"

# Set environment variables
export VERCEL_TOKEN=your_token
export RENDER_API_KEY=your_key

# Run server
uvicorn src.main:app --reload --port 8080
```

### Test Endpoints

```bash
# Health check
curl http://localhost:8080/health

# List services (requires platform tokens)
curl http://localhost:8080/api/v1/list_all_services

# Test MCP protocol
curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'

# List MCP tools
curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
```

### Docker

```bash
# Build
docker build -t agent-deploy-dashboard-mcp .

# Run
docker run -p 8080:8080 \
  -e VERCEL_TOKEN=your_token \
  -e RENDER_API_KEY=your_key \
  -e PUBLIC_HOST=localhost \
  agent-deploy-dashboard-mcp
```

## Deployment on Render

### Via Web UI

1. Fork this repo to your GitHub account
2. Go to [Render Dashboard](https://dashboard.render.com)
3. Click **New** → **Web Service**
4. Connect your GitHub repo: `aparajithn/agent-deploy-dashboard-mcp`
5. Configure:
   - **Name**: `agent-deploy-dashboard-mcp`
   - **Runtime**: Docker
   - **Region**: Oregon (or closest)
   - **Instance Type**: Free
6. Add environment variables:
   - `VERCEL_TOKEN`
   - `RENDER_API_KEY`
   - `RAILWAY_TOKEN` (optional)
   - `FLY_API_TOKEN` (optional)
   - `X402_WALLET_ADDRESS` (optional)
   - `PUBLIC_HOST` = `agent-deploy-dashboard-mcp.onrender.com`
7. Click **Create Web Service**

### Via Render API

```bash
curl -X POST https://api.render.com/v1/services \
  -H "Authorization: Bearer $RENDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "web_service",
    "name": "agent-deploy-dashboard-mcp",
    "repo": "https://github.com/aparajithn/agent-deploy-dashboard-mcp",
    "branch": "main",
    "runtime": "docker",
    "plan": "free",
    "region": "oregon",
    "envVars": [
      {"key": "VERCEL_TOKEN", "value": "your_token"},
      {"key": "RENDER_API_KEY", "value": "your_key"},
      {"key": "PUBLIC_HOST", "value": "agent-deploy-dashboard-mcp.onrender.com"}
    ]
  }'
```

## Architecture

```
agent-deploy-dashboard-mcp/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ main.py              # FastMCP server + REST API
│   ā”œā”€ā”€ tools/
│   │   ā”œā”€ā”€ platforms.py     # Platform API clients (Vercel, Render, etc)
│   │   └── deploy_tools.py  # Tool implementations
│   └── middleware/
│       ā”œā”€ā”€ rate_limit.py    # Rate limiting
│       └── x402.py          # Payment middleware
ā”œā”€ā”€ Dockerfile
ā”œā”€ā”€ pyproject.toml
└── README.md
```

## Tech Stack

- **Python 3.11** — Modern async/await
- **FastAPI** — REST API framework
- **FastMCP** — MCP protocol implementation (Streamable HTTP)
- **httpx** — Fast async HTTP client
- **Pydantic** — Data validation

## API Reference Docs

Once deployed, view interactive API docs at:
- Swagger UI: `https://agent-deploy-dashboard-mcp.onrender.com/docs`
- OpenAPI JSON: `https://agent-deploy-dashboard-mcp.onrender.com/openapi.json`

## License

MIT License — see [LICENSE](LICENSE) for details.

## Support

- Issues: [GitHub Issues](https://github.com/aparajithn/agent-deploy-dashboard-mcp/issues)
- Email: aparajith@dabaracoffee.com

---

**Built for AI agents by Forge (Aparajith's coding agent)** šŸ¤–