Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/LOGO_CLOUD_B_RGB.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 0 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ make lint # Run golangci-lint (read-only)
make lintfix # Run golangci-lint with --fix
make vuln # Run govulncheck against all packages
make docker # Build local Docker image (IMAGE= to override tag)
make deps # go mod download + tidy
make clean # Remove build artifacts and dist/
```

Pass `VERSION=<tag>` to `make build` or `make docker` to override the version string (defaults to `dev`).
Expand Down
5 changes: 2 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ Thank you for your interest in contributing to the IONOS CLOUD MCP Server!
## Development Setup

1. Fork and clone the repository
2. Install Go 1.20 or higher
3. Install dependencies: `make deps`
4. Build the project: `make build`
2. Install Go 1.25.11 or higher (the version declared in `go.mod`)
3. Build the project: `make build`

## Code Style

Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: help build install clean test test-e2e fmt vet deps lint lintfix vuln docker
.PHONY: help build install test test-e2e fmt vet lint lintfix vuln docker
Comment thread
cavramoniu-ionos marked this conversation as resolved.

.DEFAULT_GOAL := help

Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
# IONOS CLOUD MCP Server

![Official IONOS Cloud](https://img.shields.io/badge/IONOS%20Cloud-Official-00BFFF.svg)
[![Apache 2.0](https://img.shields.io/github/license/ionos-cloud/ionoscloud-mcp)](LICENSE)
[![Go reference](https://pkg.go.dev/badge/github.com/ionos-cloud/ionoscloud-mcp.svg)](https://pkg.go.dev/github.com/ionos-cloud/ionoscloud-mcp)

![Alt text](.github/LOGO_CLOUD_B_RGB.svg?raw=true "Title")

# IONOS CLOUD MCP Server

A **read-only-by-default** [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server that connects your IONOS CLOUD account to any MCP-compatible AI assistant or autonomous AI agent: Claude Desktop, Cursor, VS Code (GitHub Copilot), Windsurf, Cline, Continue, OpenCode, and 5+ others. **118 read-only tools across 7 IONOS CLOUD products** — list, inspect, and audit your infrastructure through natural-language prompts or programmatic agentic loops. Write operations across Compute (servers, volumes, networking, load balancing), Managed Kubernetes (clusters, node pools, nodes) and DNS (zones, records, reverse records, DNSSEC) are strictly opt-in and create real, billable resources — see [Write operations](#write-operations).

Built and maintained by the IONOS Cloud team. The server runs as a local binary on your workstation, a CI runner, or inside a container. IONOS CLOUD API calls go directly to IONOS over HTTPS; no third-party AI provider sits in the data path.
Expand Down Expand Up @@ -72,7 +74,7 @@ Read tools are named `list_*`, `get_*` and `head_*`; the opt-in write tools are
| [Certificate Manager](docs/cert/) | 6 | Certificates, auto-certificates, providers |
| [Activity Log](docs/activitylog/) | 2 | Contracts, events |

**120 read-only tools** (118 product + 2 loader), plus **93 opt-in write tools** on Compute Engine, Kubernetes and DNS — see [Write operations](#write-operations). For per-tool input/output schemas, see the [per-product docs](docs/) or the full [Tool Reference](https://docs.ionos.com/cloud/ai/mcp-server/tool-reference) at docs.ionos.com.
**118 read-only tools**, plus **93 opt-in write tools** on Compute Engine, Kubernetes and DNS — see [Write operations](#write-operations). For per-tool input/output schemas, see the [per-product docs](docs/) or the full [Tool Reference](https://docs.ionos.com/cloud/ai/mcp-server/tool-reference) at docs.ionos.com.

## Installation

Expand Down Expand Up @@ -215,7 +217,7 @@ The server speaks stdio by default — the mode every subprocess-spawning MCP cl
```

- `--transport <stdio|http>` (or `IONOS_MCP_TRANSPORT`) — selects the transport. Unrecognised values fall back to `stdio` with a warning.
- `--http-addr <addr>` (or `IONOS_MCP_HTTP_ADDR`) — listen address for the HTTP transport. Default `:8080` (all interfaces); use `127.0.0.1:8080` for local-only. Ignored for stdio.
- `--http-addr <addr>` (or `IONOS_MCP_HTTP_ADDR`) — listen address for the HTTP transport. Default `127.0.0.1:8080` (local-only); use `:8080` to listen on all interfaces. Ignored for stdio.

The server logs the effective transport and its source to stderr at startup, e.g. `transport: http (source: --transport flag)`.

Expand Down Expand Up @@ -246,8 +248,6 @@ Unrecognised values fall back to read-only, and the effective scope is logged to
| Kubernetes | clusters, node pools (scale, upgrade, autoscaling, LANs, labels, annotations), single nodes (recreate, delete) |
| DNS | primary zones (+ BIND zone-file import), records, secondary zones (+ zone transfer), reverse records, DNSSEC enable/disable |

Not available, because the Go SDK cannot build the request the API accepts: renaming an IP block, attaching a CD-ROM to a server, attaching a NIC to a classic load balancer, and detaching a LAN from a cross connect. Use `ionosctl`, the Terraform provider or the [DCD](https://dcd.ionos.com/) for those.

93 tools in total. The server exposes 118 at the default read-only scope, 175 with `write`, and 211 with `destructive`. Reads are unaffected and always available.

**Two-phase confirmation.** Every `create_*` and `delete_*`, plus the disruptive actions (`stop_`, `reboot_`, `suspend_`, `upgrade_`, `restore_`, `detach_`, `recreate_`), is confirmation-gated, along with the DNS zone-file import. The first call performs no mutation: it returns a preview — for a delete, a blast-radius summary of what will be destroyed — plus a single-use `confirmation_token` (5-minute TTL, bound to that exact target and operation). Only a second call carrying that token executes. This keeps a human in the loop and limits the agent to one resource per call. Reversible single-field changes (`update_*`, `start_`, `attach_`, `assign_`) are a single call.
Expand Down
8 changes: 7 additions & 1 deletion server.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "io.github.ionos-cloud/ionoscloud-mcp",
"title": "IONOS CLOUD MCP Server",
"description": "Inspect IONOS CLOUD infrastructure via MCP",
"version": "0.1.0",
"version": "1.1.0",
"repository": {
"url": "https://github.com/ionos-cloud/ionoscloud-mcp",
"source": "github"
Expand Down Expand Up @@ -39,6 +39,12 @@
"description": "Tool registration strategy (the --load-mode flag overrides this). 'eager' (default): register all tools at startup. 'lazy': defer Compute and Object Storage behind 'ionos_load_compute_tools' / 'ionos_load_objectstorage_tools' sentinel tools (requires MCP client support for notifications/tools/list_changed). 'dynamic' (alias 'search'): expose only the ionos_search_tools / ionos_describe_tools / ionos_call_tool meta-tools and browse the full catalog through them — for clients with hard tool caps and no tool search of their own (Cursor, Windsurf).",
"isRequired": false,
"isSecret": false
},
{
"name": "IONOS_MCP_TOOL_SCOPE",
"description": "Opt in to write operations. Unset (default) leaves the server read-only: only list_/get_/head_ tools are registered. 'write' additionally registers create_/update_ tools and the non-disruptive actions (start_, resume_, attach_, assign_); 'destructive' also registers delete_ and the disruptive actions (stop_, reboot_, suspend_, upgrade_, restore_, detach_, recreate_, import_) and implies 'write'. Comma-separated, case-insensitive, hierarchical; unrecognised values stay read-only. WARNING: enabling this lets an AI model provision, modify and delete billable resources in a live IONOS CLOUD account. Every create and delete requires a two-phase confirmation, but that cannot stop a client configured to approve tool calls automatically. Leave unset unless writes are needed.",
"isRequired": false,
"isSecret": false
}
]
}
Expand Down
4 changes: 2 additions & 2 deletions smithery/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"manifest_version": "0.3",
"name": "ionoscloud-mcp",
"display_name": "IONOS CLOUD MCP Server",
"version": "0.1.1",
"version": "1.1.0",
"description": "Inspect IONOS CLOUD infrastructure via MCP",
"author": {
"name": "IONOS CLOUD",
Expand Down Expand Up @@ -66,7 +66,7 @@
"ionos_mcp_load_mode": {
"type": "string",
"title": "Tool Loading Mode",
"description": "Tool registration strategy. 'eager' (default): all tools at startup. 'lazy': defer Compute and Object Storage behind sentinel loaders (requires MCP client support for notifications/tools/list_changed).",
"description": "Tool registration strategy. 'eager' (default): all tools at startup — best for clients with their own tool search, such as Claude Code. 'lazy': defer Compute and Object Storage behind sentinel loaders (requires MCP client support for notifications/tools/list_changed). 'dynamic' (alias 'search'): expose only the ionos_search_tools / ionos_describe_tools / ionos_call_tool meta-tools and browse the full catalog through them — for clients with hard tool caps and no tool search of their own (Cursor, Windsurf).",
"required": false,
"sensitive": false,
"default": "eager"
Expand Down
Loading