Skip to main content
Glama

Plan a move to another host

plan_migration
Read-only

Plan moving an existing app from one host to another (playbooks so far: netlify → digitalocean-app-platform). Reads the repo (files, pasted text or a GitHub repo, as detect_stack does) for the features the app uses on the current host. Returns, in this order: the verdict (monthly cost before and after, one-off hours low to high, the month the move pays off, and whether staying is cheaper; staying is a valid answer), the features (those with no equivalent or that need another service first, each with its effort, risk, steps and sources), what to check in the current host's dashboard because the repo can't show it, a draft .do/app.yaml, and a cutover runbook that keeps the old site live until the new one is proven. Pass features the person confirms from their dashboard (e.g. netlify-dns, forms, deploy-previews) in features. Nothing is deployed or stored; the person deploys the spec themselves. How to present: lead with the verdict and say plainly when staying is cheaper; then the features with no equivalent or needing a service; then the rest, the checks, the spec and the runbook. Show every caveat word for word.

Input Schema

NameRequiredDescriptionDefault
idNoA saved audit id (list_saved_stacks; needs sign-in): uses its users and plan, and shows the steps ticked so far.
toNoTarget host vendor id. Default digitalocean-app-platform.
fromNoCurrent host vendor id. Default netlify.
repoNoGitHub repo: owner/name or its github.com address.
textNo
filesNonetlify.toml, _redirects, _headers, package.json, .env.example (names only), files in netlify/functions and netlify/edge-functions, and pages with forms.
seatsNoTeam members on per-seat plans. Default 1.
branchNo
domainNoThe site's domain, for the draft spec.
monthsNo
mau_nowNoMonthly active users today. Default 1,000, and the result says it was assumed.
featuresNoFeature ids the person confirms the app uses, including what only the dashboard shows (netlify-dns, forms, deploy-previews, custom-domain).
per_userNoUsage per active user a month, e.g. {"sms": 2, "file_storage_gb": 0.2, "ai_input_ktok": 30}. Replaces the profile and the filled-in defaults for those units; a plan's questions say which unit each answer sets. Units: mau, seat, request_million, bandwidth_gb, db_storage_gb, egress_gb, email, event, error_event, compute_hour, revenue_usd, transaction, ai_input_ktok, ai_output_ktok, kv_read, kv_write, ci_hour, file_storage_gb, file_egress_gb, file_write, file_read, video_min_stored, video_min_delivered, sms, job_run, search_request, search_record.
per_1k_mauNoOverride usage per 1,000 MAU. Units: mau, seat, request_million, bandwidth_gb, db_storage_gb, egress_gb, email, event, error_event, compute_hour, revenue_usd, transaction, ai_input_ktok, ai_output_ktok, kv_read, kv_write, ci_hour, file_storage_gb, file_egress_gb, file_write, file_read, video_min_stored, video_min_delivered, sms, job_run, search_request, search_record.
profile_idNoUsage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile.
monthly_growthNo
current_plan_idNoThe current host plan, if known; otherwise the cheapest that serves today's users is assumed.
hourly_rate_usdNoWhat an hour of work costs. Default $100.
revenue_per_mau_usdNoAverage monthly revenue per active user (for payment fees).
transactions_per_mauNoPayments per active user per month.

Output Schema

NameRequiredDescriptionDefault
dataYesThe tool result. Its shape depends on the tool.
staleYes
caveatsYesShow to the user word for word.
sourcesYes
confidenceYes
assumptionsYesUsage and pricing assumptions behind the numbers.
disclosuresYesAlways includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid.
generated_atYes
engine_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond readOnlyHint/openWorldHint: states that nothing is deployed or stored, that the person deploys the spec themselves, that the old site stays live until cutover is proven, and that verdicts may legitimately recommend staying. It also dictates output ordering and the 'word for word' caveat rule, which is real behavioral context an annotation cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then the returned artifacts in order, then the presentation rules. Dense but each clause carries information; the 'How to present' section is long and arguably agent-instruction rather than definition, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter, read-only, open-world analysis tool with an output schema, the description covers inputs sources (repo, text, files, saved id), key defaults, the ordered artifacts, and the no-side-effects contract. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 80%, so baseline is 3; the description adds meaning on top by explaining that `features` carries dashboard-only capabilities (netlify-dns, forms, deploy-previews) and that `id` reuses a saved audit's users and plan. The remaining 20 params (per_user, per_1k_mau, seats, months, growth) are left entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource (plan moving an app from one host to another), states the supported playbook (netlify → digitalocean-app-platform), and references the sibling it shares an input mode with ('as detect_stack does'). An agent can distinguish it from detect_stack, estimate_cost, or plan_stack without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear about the trigger context (the person wants to move hosts) and tells the caller to pass dashboard-confirmed feature ids in `features`, plus notes 'staying is a valid answer'. It does not explicitly exclude or route to adjacent tools such as estimate_cost or plan_stack, so the when-not guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources