📘 Cloudamize MCP Server – Admin & Setup Guide


🧩 Overview

Cloudamize MCP Server is a secure integration layer that connects Cloudamize APIs with:

  • AI assistants (Cursor, Claude Desktop, etc.)

  • AI agents

  • Enterprise agentic systems (AWS Transform, Kiro, workflows)

It provides access to:

  • Migration plans

  • Infrastructure assessment

  • Cost (TCO) insights

  • Recommendations

  • Migration grouping


🌐 Deployment Options

Mode

Endpoint

Use

🌍 Hosted

https://mcp.cloudamize.com

Recommended

🐳 Local

http://localhost:8080

Restricted environments


🌍 Hosted MCP Setup

🔑 Generate Token (Valid for 12 hours)

#!/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

  1. Save the script as cmz-auth.sh in your working directory.

  2. Make it executable:

bash

   chmod +x cmz-auth.sh
  1. Run the script with your credentials:

bash

   API_USER='your-email@example.com' API_PASS='your-password' ./cmz-auth.sh
  1. If multiple engagements are found, the script lists available Customer IDs — enter the relevant Customer ID when prompted.

  2. Token is returned on stdout


🐳 Local MCP Setup (Docker)

Pull image from ECR
docker pull public.ecr.aws/m5z6i3j5/cloudamize/cloudamize-mcp/prod
docker run -d \
  --name cmz-mcp-server \
  -p 8080:8080 \
  -e MODE=http \
  -e PRECLOUD_BASE_URL=https://precloud-api.cloudamize.com \
  -e GRAPH_BASE_URL=https://mp-api.cloudamize.com/api/v1 \
  -e MIGRATOR_BASE_URL=https://migrator-api.cloudamize.com \
  720780545726.dkr.ecr.eu-central-1.amazonaws.com/cmz-mcp-server/prod:latest


🧪 Example MCP Call (Hosted)

1. Initialize

Bash
curl -i https://mcp.cloudamize.com \
  -H 'Authorization: Bearer $TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-11-25",
      "capabilities": {},
      "clientInfo": { "name": "curl", "version": "1.0.0" }
    }
  }'
  • Save the response header Mcp-Session-Id (example: mcp-session-xxxxxxxx-...).

  • Response body is JSON-RPC with server capabilities.

2. Initialized notification (recommended for spec-compliant clients)

Many MCP clients send this once after a successful initialize:

Bash
SESSION_ID='<Mcp-Session-Id from step 1>'

curl -i https://mcp.cloudamize.com \
  -H 'Authorization: Bearer $TOKEN' \
  -H "Mcp-Session-Id: ${SESSION_ID}" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "method": "notifications/initialized"
  }'
  • Expect 202 Accepted (no JSON-RPC result body).

  • The cmz-mcp-server does not require this for basic tools/list / tools/call in manual tests, but production MCP clients typically send it.

3. List tools

Bash
curl -i https://mcp.cloudamize.com \
  -H 'Authorization: Bearer $TOKEN' \
  -H "Mcp-Session-Id: ${SESSION_ID}" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list"
  }'

Registered tools include (non-exhaustive): getRecommendations, getInfrastructureAssessment, getPlanInsights, getTCO, getAIGroupingDetails, getApplicationData, getObservedInfrastructure, getServerConnectivity.

4. Call a tool

Bash
curl -i https://mcp.cloudamize.com \
  -H 'Authorization: Bearer $TOKEN' \
  -H "Mcp-Session-Id: ${SESSION_ID}" \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "getInfrastructureAssessment",
      "arguments": {}
    }
  }'

📡 Local Endpoint

http://localhost:8080/

⏳ Token Info

  • Token validity: 12 hours

  • Expired token → returns 401 Unauthorized

  • Must be refreshed periodically


🔐 Auth Methods

  • Bearer Token


🧠 Architecture

AI Assistant / AI Agent
        ↓
MCP Server (Hosted / Local)
        ↓
Cloudamize APIs

⚙️ Admin Configuration

Variable

Description

MODE

http / stdio

PRECLOUD_BASE_URL

Cloudamize API endpoint

GRAPH_BASE_URL

Graph API endpoint

MIGRATOR_BASE_URL

Migration UI data API endpoint

AUTH_TOKEN

Bearer token (stdio mode)

📌 Summary

  • Hosted MCP is recommended: https://mcp.cloudamize.com

  • Local Docker available for restricted environments

  • Token expires every 12 hours

  • Supports AI assistants, AI agents, and enterprise agentic systems