# aerostack mcp

> Convert any NPM/stdio MCP server to a Cloudflare Worker and deploy it to Aerostack. Get a permanent HTTP endpoint in one command.

Convert any NPM/stdio MCP server into a Cloudflare Worker and deploy it to Aerostack. Once deployed, your MCP server is accessible over HTTP from any LLM tool.

## Usage

```bash
aerostack mcp convert [flags]
```

Exactly one source flag is required.

## Flags

| Flag | Description |
|------|-------------|
| `--package <name>` | NPM package name (e.g., `@notionhq/notion-mcp-server`) |
| `--github <url>` | GitHub repository URL |
| `--dir <path>` | Local directory path |
| `-o, --output` | Output directory (default: `.`) |
| `--slug` | Server slug for deployment (auto-derived from package name) |
| `--deploy` | Deploy to Aerostack after conversion |

## Examples

```bash
# Convert from NPM package
aerostack mcp convert --package @notionhq/notion-mcp-server

# Convert and deploy immediately
aerostack mcp convert --package @notionhq/notion-mcp-server --deploy --slug notion-mcp

# Convert from GitHub
aerostack mcp convert --github https://github.com/user/my-mcp-server

# Convert from local directory
aerostack mcp convert --dir ./my-mcp-server --slug my-mcp
```

## What it does

1. Downloads or clones the MCP server source
2. Analyzes MCP tool definitions
3. Detects required environment variables
4. Generates a Cloudflare Worker wrapper
5. Flags any incompatible Node.js APIs
6. Optionally deploys to Aerostack

## After conversion

```bash
# The generated output contains:
my-mcp-worker/
├── src/index.ts      # Worker wrapper
├── aerostack.toml    # Project config
└── package.json
```

Deploy manually:

```bash
cd my-mcp-worker
aerostack deploy mcp dist/index.js --slug my-notion-mcp
```

After deployment, your MCP server is available at a `workers.dev` subdomain and can be used in Aerostack workspaces. See [Deploy an MCP Server](/mcp/deploy-mcp) for the full workflow.
