cloudcraft-mcp
The cloudcraft-mcp server provides an MCP interface to Cloudcraft.co, letting you manage cloud architecture blueprints and perform AWS live-scan snapshots from Claude Desktop or any MCP client.
User profile (
whoami): Retrieve the authenticated user's profile to verify your API key.List blueprints (
list_blueprints): Get a summary of all blueprints in your account (id, name, tags, last updated).Get a blueprint (
get_blueprint): Fetch the full JSON details of a specific blueprint by UUID, including nodes, edges, groups, and layout.Create a blueprint (
create_blueprint): Create a new cloud architecture diagram from a JSON payload (EC2, S3, RDS, etc.).Update a blueprint (
update_blueprint): Replace the entire data payload of an existing blueprint.Delete a blueprint (
delete_blueprint): Permanently and irreversibly delete a blueprint by UUID.Export a blueprint (
export_blueprint_image): Render a blueprint to disk as PNG, SVG, PDF, or mxgraph, with optional scale and transparency settings.List AWS accounts (
list_aws_accounts): View all AWS accounts connected to Cloudcraft for live infrastructure scanning.Snapshot AWS resources (
snapshot_aws): Take a live-scan snapshot of a specific AWS service (e.g., EC2, S3, RDS, Lambda, VPC) in a given region from a connected AWS account.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cloudcraft-mcpList my Cloudcraft blueprints"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cloudcraft-mcp
Model Context Protocol (MCP) server for Cloudcraft.co — list, read, export, and build cloud-architecture blueprints from Claude Desktop and other MCP clients.
Features
Nine tools exposed to the MCP host:
Tool | Description |
| Return the Cloudcraft user profile for the configured key. |
| List every blueprint in the account. |
| Fetch a blueprint's full node / edge JSON. |
| Create a new blueprint from a JSON payload. |
| Replace an existing blueprint's payload. |
| Delete a blueprint (irreversible). |
| Render a blueprint to PNG / SVG / PDF / mxgraph on disk. |
| List AWS accounts connected for live-scan snapshots. |
| Take a live-scan snapshot of one AWS service. |
Requirements
Python 3.10+
uv (
brew install uv)Cloudcraft API key — generate one at https://app.cloudcraft.co/ → User settings → API keys
Install
Clone the repo and let uv resolve dependencies on first run — no explicit install step required.
git clone https://github.com/hypark5540/cloudcraft-mcp.git
cd cloudcraft-mcp
export CLOUDCRAFT_API_KEY='your-key-here'
uv run cloudcraft-mcp # smoke test — Ctrl+C to exitClaude Desktop integration
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on your platform:
{
"mcpServers": {
"cloudcraft": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/cloudcraft-mcp",
"run",
"cloudcraft-mcp"
],
"env": {
"CLOUDCRAFT_API_KEY": "your-key-here"
}
}
}
}Restart Claude Desktop. The Developer tab should show cloudcraft as connected.
Environment variables
Name | Required | Default | Purpose |
| yes | — | API key (Bearer). Generated in Cloudcraft User settings. |
| no |
| Override for proxies or future API versions. |
| no |
| Stderr log verbosity ( |
Usage examples (in Claude)
Once the server is connected, ask Claude things like:
"List my Cloudcraft blueprints and summarize what each represents."
"Export blueprint
f0086b32-...as PNG and save it to my Desktop."
"Take the architecture I just designed and create a new Cloudcraft blueprint called 'Prod 2026'."
"Snapshot the EC2 instances in
ap-northeast-2for my connected AWS account."
Blueprint payload shape
create_blueprint / update_blueprint accept the full Cloudcraft data object. A minimal payload:
{
"grid": "infinite",
"projection": "isometric",
"theme": {"base": "light"},
"version": 6,
"nodes": [
{"id": "...", "type": "ec2", "mapPos": [3, 3], "region": "ap-northeast-2",
"instanceType": "m7g", "instanceSize": "large", "platform": "linux"},
{"id": "...", "type": "s3", "mapPos": [1, 8], "region": "ap-northeast-2",
"volumeType": "Standard", "dataGb": 100}
],
"edges": [
{"from": "...ec2-id...", "to": "...s3-id...", "type": "edge",
"width": 2, "dashed": false, "endCap": "arrow"}
],
"groups": [], "surfaces": [], "text": [], "icons": [],
"connectors": [], "images": [], "disabledLayers": [],
"shareDocs": false
}Refer to Cloudcraft's API docs for the full node-type catalog and service-specific fields.
Development
uv sync --extra dev
uv run pytest # unit tests (no network)
uv run ruff check . # lint
uv run mypy src # type checkTests mock the HTTP layer with respx so no API key is required.
Coverage
CI uploads coverage.xml from the Python 3.12 matrix cell to
Codecov. The project gate
is 80% or higher — a PR that drops overall or patch coverage by more
than 1 percentage point below that line fails the Codecov check
(codecov.yml).
Run the same report locally:
uv run pytest --cov=cloudcraft_mcp --cov-report=term-missing --cov-report=xmlProject layout
cloudcraft-mcp/
├── src/cloudcraft_mcp/
│ ├── __init__.py
│ ├── __main__.py # python -m cloudcraft_mcp
│ ├── server.py # MCP tool definitions (FastMCP)
│ ├── client.py # CloudcraftClient — async httpx wrapper
│ ├── types.py # TypedDicts for blueprint payloads
│ └── py.typed
├── tests/
│ └── test_client.py
├── server.py # back-compat shim -> cloudcraft_mcp.server:main
├── pyproject.toml
├── LICENSE
└── README.mdDesign notes
Transport / logic split.
client.pyis a plain async HTTP client you can import from scripts or CLI tools without pulling the MCP runtime.server.pyonly owns the MCP tool surface.Bearer-token auth. Cloudcraft's API expects
Authorization: Bearer <key>(notApikey). The client sets this automatically.No secrets in process args. The API key is read from
CLOUDCRAFT_API_KEY; never pass it on the command line.Error surface. Non-2xx responses raise
CloudcraftErrorwith status and body preserved, re-wrapped asRuntimeErrorat the MCP boundary so Claude sees a readable message.
Security
API keys grant full read / write over your Cloudcraft account. Treat them as secrets and rotate regularly.
delete_blueprintis irreversible — when asking Claude to delete, be explicit about the target id.For read-heavy setups, create a dedicated Cloudcraft user with read-only scope (if/when Cloudcraft adds scoped keys) and use that key for MCP.
Contributing
Issues and PRs welcome at https://github.com/hypark5540/cloudcraft-mcp. Please run ruff, mypy, and pytest before submitting.
License
MIT — see LICENSE.
Related
awslabs/mcp — AWS's collection of MCP servers
modelcontextprotocol/servers — reference MCP server implementations
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hypark5540/cloudcraft-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server