Metadata-Version: 2.4
Name: pluglayer-mcp
Version: 0.1.0
Summary: PlugLayer MCP server — deploy and manage infrastructure via AI
License: MIT
Keywords: deployment,infrastructure,kubernetes,mcp,pluglayer
Requires-Python: >=3.11
Requires-Dist: httpx>=0.27.0
Requires-Dist: mcp[cli]>=1.3.0
Requires-Dist: pydantic-settings>=2.4.0
Requires-Dist: pydantic>=2.8.0
Requires-Dist: uvicorn[standard]>=0.30.0
Description-Content-Type: text/markdown

# PlugLayer MCP Server

Deploy and manage your infrastructure through natural language with any MCP-compatible AI assistant.

## Installation

### Option 1: uvx (recommended — no install needed)
```bash
PLUGLAYER_API_KEY=your-pluglayer-api-token uvx pluglayer-mcp
```

Optional:
```bash
PLUGLAYER_API_BASE_URL=https://api.pluglayer.com
```

### Option 2: pip
```bash
pip install pluglayer-mcp
PLUGLAYER_API_KEY=your-pluglayer-api-token pluglayer-mcp
```

## Configuration

### Claude Desktop
Add to `~/.config/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "pluglayer": {
      "command": "uvx",
      "args": ["pluglayer-mcp"],
      "env": {
        "PLUGLAYER_API_KEY": "your-pluglayer-api-token",
        "PLUGLAYER_API_BASE_URL": "https://api.pluglayer.com"
      }
    }
  }
}
```

### Cursor
Add to `~/.cursor/mcp.json`:
```json
{
  "pluglayer": {
    "command": "uvx",
    "args": ["pluglayer-mcp"],
    "env": {
      "PLUGLAYER_API_KEY": "your-pluglayer-api-token",
      "PLUGLAYER_API_BASE_URL": "https://api.pluglayer.com"
    }
  }
}
```

### Remote HTTP (hosted)
The remote MCP server runs at `mcp.pluglayer.com`. Pass your token as:
```
Authorization: Bearer your-pluglayer-api-token
```

### API base URL behavior

- `PLUGLAYER_API_BASE_URL` is the preferred environment variable for the backend API origin.
- If it is unset or empty, the MCP defaults to `https://api.pluglayer.com`.
- `PLUGLAYER_API_URL` is still accepted as a legacy fallback during migration.

## Available Tools

The MCP calls the PlugLayer FastAPI backend instead of re-implementing backend business logic. Auth, roles, ownership, compute guards, k3s orchestration, and admin checks remain in the backend. MCP and editor plugins should authenticate with a **PlugLayer API token** created in the PlugLayer Settings page, not the browser/session auth token.

Managed registries are configured by PlugLayer admins in the platform UI/API. When `deploy_image` uses mirroring, the backend picks a registry the current user is allowed to use and keeps Kubernetes pull secrets in sync automatically.

| Tool | Description |
|------|-------------|
| `get_current_user` | Show the Authentik-backed user and `roles` |
| `list_projects` | List authenticated user's projects |
| `create_project` | Create a new project namespace |
| `get_project` | Get project details |
| `get_compute_summary` | Show account-level personal + shared compute capacity |
| `list_nodes` | List accessible compute nodes |
| `add_node_ssh` | Add a personal SSH node usable by all of the user's projects |
| `list_registries` | List the registries currently available to the user |
| `deploy_image` | Mirror a Docker image into PlugLayer's managed Docker Hub namespace, then deploy it after backend compute checks |
| `deploy_compose` | Deploy from docker-compose.yml after backend compute checks |
| `list_deployments` | List running apps/deployments |
| `get_deployment_status` | Check app status and URL |
| `get_logs` | Get app logs |
| `redeploy` | Redeploy an app |
| `rollback` | Roll back to previous version |
| `delete_deployment` | Delete an app |
| `list_project_domains` | List custom domains for a project |
| `add_custom_domain` | Add a single or wildcard custom domain and return DNS records |
| `verify_custom_domain` | Verify TXT/CNAME DNS and activate if attached |
| `attach_custom_domain` | Attach a verified custom domain to an app |
| `detach_custom_domain` | Detach a domain while keeping verification |
| `remove_custom_domain` | Remove a domain and its route |
| `get_task_status` | Poll async operation progress |
| `admin_get_overview` | Admin-only platform summary |
| `admin_set_compute_defaults` | Admin-only default compute quota metadata |
| `admin_set_node_shared` | Admin-only mark node shared/private |
| `admin_add_shared_ssh_node` | Admin-only add shared PlugLayer SSH compute |
| `generate_github_actions` | Get CI/CD pipeline YAML |
| `get_cluster_health` | Check cluster status |

## Example Conversations

**Deploy your first app:**
> "I have a FastAPI app at `ghcr.io/myorg/api:latest` that runs on port 8000. Deploy it to my `production` project."

**Convert docker-compose:**
> "Here's my docker-compose.yml: [paste]. Deploy this to PlugLayer."

**Add a node:**
> "Add my server at 192.168.1.100 as personal compute. Here's my SSH key: [paste]"

**CI/CD setup:**
> "Generate a GitHub Actions workflow for my `api` deployment so it auto-deploys on push to main."

**Add a custom domain:**
> "Add `api.example.com` to my production project, show me the DNS records, then verify it and attach it to my API app."

## Getting Your API Key

1. Go to PlugLayer Settings
2. Create a **PlugLayer API token**
3. Copy it once and store it safely
4. Use it as `PLUGLAYER_API_KEY` for MCP, editor plugins, and CI/CD webhook deploys
