Skip to main content
Glama
README.md
# cloudpanel

Azure subscriptions, resource groups and resources as MCP tools,
talking to the Azure Resource Manager REST API. cloudpanel is a
clean-room rebuild of the core surface of the Azure MCP server,
under a new name: fresh code, no copied branding. The original
azure-mcp carries hundreds of service-specific commands; this
rebuild covers the generic ARM surface only.

## Tools (core subset, 10)

`list_subscriptions`, `get_subscription`, `list_resource_groups`,
`get_resource_group`, `create_resource_group`,
`delete_resource_group`, `list_resources`, `get_resource`,
`list_virtual_machines`, `list_locations`.

Not in this subset: every service-specific command family (storage,
Cosmos DB, Key Vault, AKS, SQL, Monitor and the rest), deployments
and template operations, and role assignments.

## Setup

Provide any valid Azure AD bearer token with access to the target
subscriptions:

```bash
export AZURE_ACCESS_TOKEN=eyJ...
```

Optionally override the ARM base with `AZURE_ARM_BASE_URL`
(default `https://management.azure.com`). Every request carries
`api-version=2021-04-01` unless a tool's endpoint family pins its
own. Without the token, every tool call fails with an error naming
`AZURE_ACCESS_TOKEN`. Unlike the original, there is no Azure CLI or
hosted login flow: this is a plain token REST client.

## CLI

```bash
npx @reneturcios/cloudpanel list_subscriptions '{}'
npx @reneturcios/cloudpanel list_resource_groups '{"subscription_id":"..."}'
npx @reneturcios/cloudpanel mcp        # stdio MCP server
```

Each tool name is a subcommand taking one JSON object argument.

## MCP client config

```json
{
  "mcpServers": {
    "cloudpanel": {
      "command": "npx",
      "args": ["-y", "@reneturcios/cloudpanel", "mcp"],
      "env": { "AZURE_ACCESS_TOKEN": "eyJ..." }
    }
  }
}
```

## Docker

```bash
docker run -i -e AZURE_ACCESS_TOKEN ghcr.io/cloudcorprecords/cloudpanel
```

## Development

```bash
npm install
npm run build
npm test
```

## License

MIT