🌐 Overview
The Cloudamize MCP Server is a containerized MCP gateway that exposes Cloudamize APIs to AI tools it connects Cloudamize to AI assistants, AI agents, and large-scale agentic systems through the Model Context Protocol (MCP).
It enables external systems to securely access and use Cloudamize data such as:
📦 Migration Plans
View migration plans, statuses, and provider-specific plan details.
Example Questions
-
“What migration plans do I have for AWS?”
-
“Show my active plans”
💰 Cost (TCO) Insights
Analyze migration costs and TCO summaries.
Example Questions
-
“What is the total cost of my migration plan?”
-
“TCO for plan 12345”
🖥 Infrastructure Insights
Explore discovered infrastructure, applications, and assessment data.
Example Questions
-
“Summarize my infrastructure”
-
“Show unmanaged servers”
-
“What applications are running?”
💡 Workload Recommendations
Get cloud sizing and migration recommendations.
Example Questions
-
“What instance recommendations do you suggest?”
-
“Show AWS recommendations”
🧭 Migration Planning & Connectivity
Understand migration groups, waves, and server dependencies.
Example Questions
-
“How are servers grouped for migration?”
-
“Show server connectivity for Machine HOST-123”
Cloudamize MCP allows AI systems and agentic workflows to programmatically retrieve and act on Cloudamize assessment and migration data.
🔗 Hosted MCP Endpoints
There are two hosted endpoints. Pick the one that matches how your tool signs in — both expose the same tools and the same data, and neither replaces the other.
|
Endpoint |
How you sign in |
Use it for |
|---|---|---|
|
OAuth — a browser window opens and you sign in to Cloudamize |
Claude Desktop and other clients that support “custom connectors” / remote OAuth MCP servers |
|
|
Bearer token or API key you paste into a config file |
Cursor, config-file MCP clients, AI agents, CI, AWS Transform / Kiro |
💡 Not sure which to use? If your tool has an “Add custom connector” button and asks only for a URL, use connect.cloudamize.com. If your tool wants you to edit a JSON config file with headers, use mcp.cloudamize.com.
🧠 Supported Consumers
Cloudamize MCP can be used by:
🤖 AI Assistants
-
Cursor
-
Claude Desktop
-
IDE copilots
⚙️ AI Agents
-
Custom automation agents
-
Workflow agents
-
Internal orchestration tools
🏗️ Agentic Systems (Enterprise Scale)
-
AWS Transform
-
Kiro agent
-
Internal enterprise migration agents
-
Multi-step autonomous workflows
-
Cloud optimisation pipelines
💡 What MCP enables
AI systems can:
-
Query Cloudamize assessment data
-
Retrieve migration plans
-
Generate cost and TCO insights
-
Fetch workload recommendations
-
Understand migration grouping strategies
-
Use data inside multi-step automated workflows
🔁 Typical Usage Flow
-
System requests migration or assessment data
-
MCP server fetches Cloudamize data securely
-
Response is returned in structured format
-
AI agent/assistant uses it in reasoning or automation
🌐 Access Modes
|
Mode |
Endpoint |
Auth |
Use Case |
|---|---|---|---|
|
🔐 Hosted MCP (OAuth) |
OAuth browser sign-in |
Claude Desktop and other OAuth-capable clients — no token to copy or refresh |
|
|
🌍 Hosted MCP (token) |
|
Cursor, config-file clients, agents, automation |
|
|
🐳 Local MCP |
|
Restricted / offline environments |
❤️ Health check
GET /healthz
Response:
204 No Content
📡 MCP endpoint
POST https://mcp.cloudamize.com/
or local:
POST http://localhost:8080/
🔐 Authentication Methods
The MCP server supports three ways to authenticate. Which ones are available depends on the endpoint you connect to.
1. OAuth browser sign-in — connect.cloudamize.com
Your MCP client opens a Cloudamize sign-in page in your browser. You sign in with your Cloudamize email and password, or your email and API key. The client receives an access token automatically — you never copy or paste a token. This is the recommended method for Claude Desktop; see Connect via OAuth below.
2. Bearer Token — mcp.cloudamize.com
Authorization: Bearer <access_token>
A per-user, 12-hour token you generate yourself (see Generate Access Token below) and paste into your client’s configuration.
🔑 Generate Access Token
#!/usr/bin/env bash
#===============================================================================
# cmz-auth.sh
#
# Retrieves a scoped bearer token from the Cloudamize PreCloud API. Exchanges
# Basic-auth credentials for an access token and — when the account spans
# multiple engagements — prompts for a customer ID and returns a
# customer-scoped token.
#
# Copyright (c) 2026 Cloudamize. All rights reserved.
# Proprietary and confidential. Internal use only — do not distribute.
#
# Product : Cloudamize — Cloud Migration, Analytics & FinOps Platform
# Component : PreCloud API / Authentication
# Maintainer : Platform Engineering <platform@cloudamize.com>
# Version : 1.0.0
# Updated : 2026-08-06
#
# Usage:
# API_USER='<email>' API_PASS='<password>' ./cmz-auth.sh
# TOKEN=$(API_USER='<email>' API_PASS='<password>' ./cmz-auth.sh)
#
# Credentials are read from the environment — never hardcode them here.
#
# Requirements : bash 4+, curl 7.76+ (--fail-with-body), jq 1.6+
#
# Exit codes:
# 0 success — token written to stdout
# 1 missing credentials, auth failure, or malformed API response
#===============================================================================
set -euo pipefail
API_BASE="https://precloud-api.cloudamize.com"
CLOUDAMIZE_USER="${API_USER:-your-email@email.com}"
CLOUDAMIZE_PASS="${API_PASS:-your password}"
CURL=(curl --fail-with-body --silent --show-error --location
--connect-timeout 5 --max-time 30)
log() { printf '%s\n' "$*" >&2; }
die() { log "ERROR: $*"; exit 1; }
api_get() { # url token
"${CURL[@]}" "$1" -H "Authorization: Bearer $2"
}
log "Requesting initial token..."
auth_json=$("${CURL[@]}" --user "$CLOUDAMIZE_USER:$CLOUDAMIZE_PASS" \
"$API_BASE/auth/token?termsAccepted=true") \
|| die "auth/token failed"
token=$(jq -er '.access_token' <<<"$auth_json") \
|| die "no access_token: $auth_json"
log "Initial token received."
user_json=$(api_get "$API_BASE/user/data" "$token") \
|| die "user/data failed"
has_multi=$(jq -r '(.hasMultipleEngagements // false)' <<<"$user_json")
if [[ "$has_multi" == "true" ]]; then
log "Multiple engagements found."
eng_json=$(api_get "$API_BASE/engagements" "$token") \
|| die "engagements failed"
# tolerate bare array or {engagements:[...]}
jq -r '(if type=="array" then . else .engagements end)[]
| "\(.customerId)\t\(.company // .customerName // .name)"' \
<<<"$eng_json" | column -t -s $'\t' >&2
read -rp "Enter Customer ID: " customer_id
[[ -n "$customer_id" ]] || die "no customer ID entered"
final_json=$(api_get "$API_BASE/auth/token?customerId=${customer_id}" "$token") \
|| die "customer token failed"
final_token=$(jq -er '.access_token' <<<"$final_json") \
|| die "no access_token for $customer_id: $final_json"
else
log "Single engagement found."
final_token="$token"
fi
printf '%s\n' "$final_token"
How to Use cmz-auth.sh
-
Save the script as
cmz-auth.shin your working directory. -
Make it executable:
bash
chmod +x cmz-auth.sh
-
Run the script with your credentials:
bash
API_USER='your-email@example.com' API_PASS='your-password' ./cmz-auth.sh
-
If multiple engagements are found, the script lists available Customer IDs — enter the relevant Customer ID when prompted.
-
Token is returned on stdout
⏳ Token Info
-
Token validity: 12 hours
-
Expired token → returns
401 Unauthorized -
Must be refreshed periodically
🔐 Connect via OAuth (Claude Desktop and other connector-based clients)
connect.cloudamize.com lets you connect without generating, pasting, or refreshing a token. You sign in to Cloudamize in your browser, and your MCP client handles the rest.
Prerequisites
-
A Cloudamize assessment account (email + password, or email + API key)
-
An MCP client that supports remote OAuth MCP servers — e.g. Claude Desktop custom connectors
Step 1 — Add the connector
In Claude Desktop: Settings → Connectors → Add custom connector. Enter the URL:
https://connect.cloudamize.com
⚠️ Leave the OAuth Client ID and Client Secret fields blank. The server registers your client automatically. If you fill these in, the connection fails with “Invalid client.”
Step 2 — Sign in
Click Connect. A browser window opens on the Cloudamize sign-in page:
-
Email — your Cloudamize account email
-
Password or API key — either works
Step 3 — Choose an engagement (only if you have more than one)
If your account has access to multiple engagements, you’ll see a Choose an engagement page. Pick the engagement you want this connection to use, and the session is scoped to it. If you have exactly one engagement, this page is skipped automatically.
To connect to a different engagement later, disconnect the connector and reconnect — you’ll be asked to choose again.
Step 4 — Start using Cloudamize tools
The browser hands control back to your client, which discovers the Cloudamize tools automatically. Ask questions like:
-
“Show my infrastructure assessment”
-
“What is the TCO for my migration plan?”
-
“Get migration recommendations”
⏳ Re-authentication
Your Cloudamize session lasts about 12 hours. When it expires, your client prompts you to sign in again and the browser window reopens. There is no token to refresh manually — this is by design: Cloudamize never stores your password, so a fresh sign-in is required.
⚠️ OAuth troubleshooting
|
What you see |
Why |
Fix |
|---|---|---|
|
“Invalid client” when connecting |
Client ID / Secret were filled in |
Remove the connector, re-add it with only the URL |
|
Sign-in page rejects your credentials |
Wrong email, or password/API key mismatch |
Confirm the account works in the Cloudamize portal; try your API key instead of your password |
|
“No associated customer” |
Your account isn’t attached to an engagement |
Contact your Cloudamize administrator |
|
Repeated sign-in failures start being blocked |
Sign-in is rate-limited per IP to protect accounts |
Wait a minute and try again |
|
Asked to sign in again after ~12 hours |
Session expired — expected |
Sign in again when prompted |
|
Client won’t accept the URL / no browser opens |
Client doesn’t support remote OAuth MCP servers |
Use |
🔑 Connect with a token (Cursor, config-file clients, agents)
Use this path when your client doesn’t support OAuth connectors, or when you’re wiring up automation.
Prerequisites
You need:
-
A Cloudamize API bearer token (see Generate Access Token), or an API key for automation
-
An MCP client that accepts a server URL plus headers — e.g. Cursor, Claude Code, custom agents
Step 1 — Obtain Your Access Token
As mentioned above in Authentication Methods Section
Example token:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Keep this token secure. It provides access to Cloudamize MCP tools and APIs.
Step 2 — Configure Your MCP Client
Add the Cloudamize MCP server to your MCP client configuration:
{
"mcpServers": {
"cloudamize": {
"url": "https://mcp.cloudamize.com",
"headers": {
"Authorization": "Bearer $TOKEN"
}
}
}
}
Replace $TOKEN with your actual bearer token.
For non-interactive automation, use an API key instead of a bearer token:
{
"mcpServers": {
"cloudamize": {
"url": "https://mcp.cloudamize.com",
"headers": {
"X-API-Key": "$API_KEY",
"X-Customer-Id": "$CUSTOMER_ID"
}
}
}
}
💡 This JSON-with-headers pattern is for Cursor / Claude Code / custom clients. Claude Desktop does not use it — connect through Connectors against connect.cloudamize.com instead.
Step 3 — Restart Your MCP Client
After saving the configuration:
-
Restart Cursor / Claude Code / your AI assistant
-
The MCP client will automatically:
-
initialize the session
-
negotiate capabilities
-
discover available tools
-
No manual protocol calls are required.
Step 4 — Start Using Cloudamize Tools
You can now ask natural-language questions such as:
-
“Show my infrastructure assessment”
-
“Get migration recommendations”
-
“Show observed infrastructure”
-
“Fetch application dependency data”
-
“Get server connectivity details”
⚠️ Troubleshooting
|
Issue |
Meaning |
Fix |
|---|---|---|
|
No data returned |
MCP not connected |
Check integration / MCP connection |
|
Unauthorized |
Token expired |
Regenerate token, or re-sign-in (OAuth) |
|
Wrong plan |
Invalid ID |
Fetch the plan list first, then verify the plan ID |
|
|
That endpoint expects an OAuth token, not a per-user JWT |
Use |
🔐 Security
-
Data stays within your Cloudamize account; no external data is used
-
Tokens must not be shared or embedded in code
-
Do not store credentials in chat
-
Use API keys or tokens securely
-
With OAuth, your Cloudamize password is never stored by the MCP server — it’s used once at sign-in to obtain a short-lived token
🧭 Decision Guide
👉 Use connect.cloudamize.com (OAuth) if:
-
You’re on Claude Desktop or another connector-based client
-
You’d rather sign in with a browser than manage a token
-
You don’t want to re-paste a token every 12 hours
👉 Use mcp.cloudamize.com (token / API key) if:
-
Your client configures MCP servers via a JSON file with headers (Cursor, Claude Code)
-
You’re building an agent, pipeline, or CI job with no human to sign in
-
You’re integrating AWS Transform, Kiro, or another agentic system
👉 Use Local MCP if:
-
Remote MCP is blocked by your network
-
You need offline / internal-network support
-
You want full control over the deployment