Skip to main content
Glama

Server Details

Pick a tech stack from a PRD and see what it costs now and at scale, after startup perks.

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP
URL
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 29 tools

Disambiguation3/5

Several clusters overlap heavily: recommend_stack, plan_stack, audit_stack, compare_architectures and extract_requirements all produce or feed stack recommendations, and get_pricing, estimate_cost, compare_vendors and find_cost_cliffs all answer 'what does vendor X cost'. The descriptions do explicitly route between them (recommend_stack says 'start here', plan_stack says 'use recommend_stack instead when you only have a plain-language description'), so an agent can resolve the conflict, but only by reading long guidance text. Boundaries like plan_stack vs project_stack and check_build vs get_build_pack remain fuzzier than ideal.

Naming Consistency5/5

Every one of the 29 names is snake_case with a leading verb (list_, get_, check_, compare_, plan_, find_, delete_, update_), and nouns are reused consistently (stack, saved_stack, vendors, capabilities). No camelCase or vague one-word names anywhere.

Tool Count2/5

29 tools is above the comfortable ceiling, and the surface is split by narrow variations rather than distinct capabilities (four pricing tools, four stack-recommendation tools, three saved-stack mutation tools). Several could be merged or folded into parameters, which would cut selection errors substantially.

Completeness4/5

Coverage is genuinely broad: catalogue discovery (list_vendors, search_directory, get_pricing), recommendation/planning, audit and drift detection, cost projection and cliffs, migration planning, build packs, saved-stack lifecycle, billing reconciliation and account deletion. Gaps are minor — there is no way to update or annotate catalogue data and no single-item lookup for showcase products, but agents can work around these via search_showcase and the share URLs.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 29 tool updates
    • Changedaudit_stack3 fields changed
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • changedInput schema / properties / stack / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Addedcheck_build
    • Changedcheck_fit14 fields changed
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedcompare_architectures3 fields changed
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedcompare_vendors15 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changeddelete_account1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changeddelete_saved_stack1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changeddetect_stack1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changeddiff_stack2 fields changed
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedestimate_cost24 fields changed
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / usage / description
        Previous value: -"Exact monthly usage by unit (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); overrides values derived from mau."New value: +"Exact monthly usage by unit (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); overrides values derived from mau."
      • addedInput schema / properties / usage / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / usage / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedevaluate_change16 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedInput schema / properties / migration_features
        Added value: +{
        +  "description": "Features of the current host the app uses (feature ids from plan_migration or detect_stack's netlify_features), so a migration playbook prices the work. Leave switching.hours out to use them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 30,
        +  "type": "array"
        +}
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedextract_requirements1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedfind_cost_cliffs13 fields changed
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedfind_perks1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Addedget_build_pack
    • Changedget_pricing1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedget_saved_stack1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedlist_capabilities1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedlist_saved_stacks1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedlist_vendors2 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Addedplan_migration
    • Changedplan_stack21 fields changed
      • addedInput schema / properties / accounts
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "For a business product counted in customers (\"50 clinics now, 500 next year\"): customers now and at the forecast, and people using it at each (default 10). Users are worked out from these when mau_now is not given.",
        +  "properties": {
        +    "forecast": {
        +      "maximum": 10000000,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "now": {
        +      "maximum": 10000000,
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "users_per_account": {
        +      "maximum": 100000,
        +      "minimum": 1,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / build_tool
        Added value: +{
        +  "description": "The build tool the user named, as a coding vendor id (lovable, bolt, replit, base44, v0, cursor, claude-code, github-copilot…): the plan uses it. An app builder that hosts the app and runs its database and sign-in (Lovable, Bolt, Replit, Base44) covers those, so they are not planned separately.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • addedInput schema / properties / builder_profile
        Added value: +{
        +  "description": "Who builds it. developer picks an AI coding agent, non_developer an app builder (and counts setup work double). Given without categories, the plan adds the build tool (coding).",
        +  "enum": [
        +    "developer",
        +    "non_developer",
        +    "unknown"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedInput schema / properties / confirmed
        Added value: +{
        +  "description": "Ids of questions whose assumption the user confirmed as right (e.g. [\"region\", \"builder\"]), so the plan stops asking them. A question answered with a figure goes in its own argument instead (per_user, revenue_per_mau_usd…).",
        +  "items": {
        +    "maxLength": 40,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / needs
        Added value: +{
        +  "description": "Needs the plan should list even though they are not priced (directory category ids such as maps, vector_db, speech), from recommend_stack's requirements_read.needs.",
        +  "items": {
        +    "properties": {
        +      "id": {
        +        "maxLength": 40,
        +        "type": "string"
        +      },
        +      "label": {
        +        "maxLength": 80,
        +        "type": "string"
        +      },
        +      "source": {
        +        "maxLength": 500,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / ranking
        Added value: +{
        +  "description": "balanced (default): monthly cost plus a small monthly weight for lock-in, setup work before first use and unverified seed prices, so a slightly cheaper vendor that is hard to leave or slow to set up can lose. cost: price alone. simplest: fewest vendors and least setup (one vendor covering several categories wins unless the others are much cheaper). Each plan lists the other two as alternatives when their picks differ.",
        +  "enum": [
        +    "balanced",
        +    "cost",
        +    "simplest"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedproject_stack14 fields changed
      • changedInput schema / properties / per_1k_mau / description
        Previous value: -"Override 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."New value: +"Override 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."
      • addedInput schema / properties / per_1k_mau / properties / file_egress_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_read
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_storage_gb
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / file_write
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / job_run
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_record
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / search_request
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / sms
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_delivered
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_1k_mau / properties / video_min_stored
        Added value: +{
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / vendors / maxItems
        Previous value: -12New value: +20
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedrecommend_stack8 fields changed
      • addedInput schema / properties / build_tool
        Added value: +{
        +  "description": "The build tool the user named, as a coding vendor id (lovable, bolt, replit, base44, v0, cursor, claude-code, github-copilot…): the plan uses it. An app builder that hosts the app and runs its database and sign-in (Lovable, Bolt, Replit, Base44) covers those, so they are not planned separately.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • addedInput schema / properties / builder_profile
        Added value: +{
        +  "description": "Who builds it. developer picks an AI coding agent, non_developer an app builder (and counts setup work double). Given without categories, the plan adds the build tool (coding).",
        +  "enum": [
        +    "developer",
        +    "non_developer",
        +    "unknown"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / categories / description
        Previous value: -"Plan these categories. Default: what the description needs (a web app gets hosting, database, sign-in, email, payments and observability; an on-device app only what it names)."New value: +"Plan these categories. Default: a build tool (an AI app builder or coding agent) plus what the description needs (a web app gets hosting, database, sign-in, email, payments and observability; an on-device app only what it names; a one-sentence idea such as a pantry tracker what that kind of app usually needs)."
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store",
        -  "coding"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding",
        +  "storage",
        +  "video",
        +  "sms",
        +  "push",
        +  "jobs",
        +  "search"
        +]
      • addedInput schema / properties / confirmed
        Added value: +{
        +  "description": "Ids of questions whose assumption the user confirmed as right (e.g. [\"region\", \"builder\"]), so the plan stops asking them. A question answered with a figure goes in its own argument instead (per_user, revenue_per_mau_usd…).",
        +  "items": {
        +    "maxLength": 40,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedInput schema / properties / per_user
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Usage 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.",
        +  "properties": {
        +    "ai_input_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ai_output_ktok": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "bandwidth_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "ci_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "compute_hour": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "db_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "email": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "error_event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "event": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_egress_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_storage_gb": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "file_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "job_run": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_read": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "kv_write": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "request_million": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "revenue_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_record": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "search_request": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "seat": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "sms": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transaction": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_delivered": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "video_min_stored": {
        +      "minimum": 0,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / ranking
        Added value: +{
        +  "description": "balanced (default): monthly cost plus a small monthly weight for lock-in, setup work before first use and unverified seed prices, so a slightly cheaper vendor that is hard to leave or slow to set up can lose. cost: price alone. simplest: fewest vendors and least setup (one vendor covering several categories wins unless the others are much cheaper). Each plan lists the other two as alternatives when their picks differ.",
        +  "enum": [
        +    "balanced",
        +    "cost",
        +    "simplest"
        +  ],
        +  "type": "string"
        +}
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedrecord_bills1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedsave_stack1 field changed
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedsearch_directory2 fields changed
      • addedInput schema / properties / include_closed
        Added value: +{
        +  "description": "true: include services that have shut down (left out by default; an exact id always finds one).",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedsearch_showcase2 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "ai",
        -  "productivity",
        -  "developer_tools",
        -  "finance",
        -  "health",
        -  "education",
        -  "commerce",
        -  "social",
        -  "design",
        -  "media",
        -  "travel",
        -  "marketing",
        -  "other"
        -]New value: +[
        +  "ai",
        +  "commerce",
        +  "customer_support",
        +  "data_analytics",
        +  "design",
        +  "developer_tools",
        +  "education",
        +  "energy",
        +  "finance",
        +  "government",
        +  "hardware",
        +  "health",
        +  "hr",
        +  "industrial",
        +  "legal",
        +  "marketing",
        +  "media",
        +  "productivity",
        +  "sales",
        +  "security",
        +  "social",
        +  "travel",
        +  "other"
        +]
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
    • Changedupdate_saved_stack5 fields changed
      • addedInput schema / properties / answers
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Answers to the plan's questions (from get_saved_stack), kept with the stack so a re-plan doesn't ask again. Plans only. Re-prices the stack.",
        +  "properties": {
        +    "builder_profile": {
        +      "enum": [
        +        "developer",
        +        "non_developer"
        +      ],
        +      "type": "string"
        +    },
        +    "confirmed": {
        +      "description": "Question ids whose assumption is right, e.g. [\"region\", \"builder\"].",
        +      "items": {
        +        "maxLength": 40,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "type": "array"
        +    },
        +    "data_in_eu": {
        +      "description": "true: user data has to stay in the EU. false: no region requirement.",
        +      "type": "boolean"
        +    },
        +    "per_user": {
        +      "additionalProperties": false,
        +      "description": "Usage 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.",
        +      "properties": {
        +        "ai_input_ktok": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "ai_output_ktok": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "bandwidth_gb": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "ci_hour": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "compute_hour": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "db_storage_gb": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "egress_gb": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "email": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "error_event": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "event": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "file_egress_gb": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "file_read": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "file_storage_gb": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "file_write": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "job_run": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "kv_read": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "kv_write": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "mau": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "request_million": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "revenue_usd": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "search_record": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "search_request": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "seat": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "sms": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "transaction": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "video_min_delivered": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "video_min_stored": {
        +          "minimum": 0,
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "revenue_per_mau_usd": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "transactions_per_mau": {
        +      "minimum": 0,
        +      "type": "number"
        +    },
        +    "users_per_account": {
        +      "description": "People who use it at each business customer.",
        +      "maximum": 100000,
        +      "minimum": 1,
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / build_progress
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Tick build-pack steps done (true) or not done (false), by step id from get_build_pack: domain or the step's category (hosting, database, auth…). Plans only.",
        +  "properties": {
        +    "ai": {
        +      "type": "boolean"
        +    },
        +    "app_store": {
        +      "type": "boolean"
        +    },
        +    "auth": {
        +      "type": "boolean"
        +    },
        +    "coding": {
        +      "type": "boolean"
        +    },
        +    "database": {
        +      "type": "boolean"
        +    },
        +    "domain": {
        +      "type": "boolean"
        +    },
        +    "edge": {
        +      "type": "boolean"
        +    },
        +    "email": {
        +      "type": "boolean"
        +    },
        +    "hosting": {
        +      "type": "boolean"
        +    },
        +    "jobs": {
        +      "type": "boolean"
        +    },
        +    "observability": {
        +      "type": "boolean"
        +    },
        +    "payments": {
        +      "type": "boolean"
        +    },
        +    "push": {
        +      "type": "boolean"
        +    },
        +    "search": {
        +      "type": "boolean"
        +    },
        +    "sms": {
        +      "type": "boolean"
        +    },
        +    "storage": {
        +      "type": "boolean"
        +    },
        +    "video": {
        +      "type": "boolean"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / migration_progress
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Tick a host move's features and cutover steps done (true) or not done (false), by id from plan_migration (e.g. forms, redirects, lower-ttl, switch). Audits only.",
        +  "type": "object"
        +}
      • addedInput schema / properties / unlink_repo
        Added value: +{
        +  "description": "Forget the repo linked with check_build, and its last check.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / disclosures / description
        Added value: +"Always includes the neutrality note: no vendor pays for a place in the answer. Link its url when you mention how Kong Reviews is paid."
  2. 1 tool update
    • Changedsearch_directory1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Words to match, e.g. \"sms\", \"vector\", \"merchant of record\", \"Supabase\"."New value: +"Words to match, e.g. \"sms\", \"vector\", \"merchant of record\", \"Supabase\", or a company such as \"Amazon\" for all its services."
  3. 1 tool update
    • Changedrecord_bills2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"The saved stack or audit. Leave out to keep the bills on the account."
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
  4. 2 tool updates
    • Addedcompare_architectures
    • Changedplan_stack3 fields changed
      • addedInput schema / properties / answers
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Interview answers by question id, each an option id from compare_architectures, e.g. {\"server\":\"dynamic\",\"logins\":\"consumers\",\"threat\":\"public\",\"ops\":\"managed\"}.",
        +  "properties": {
        +    "background": {
        +      "enum": [
        +        "none",
        +        "jobs",
        +        "realtime"
        +      ],
        +      "type": "string"
        +    },
        +    "data": {
        +      "enum": [
        +        "little",
        +        "lots"
        +      ],
        +      "type": "string"
        +    },
        +    "logins": {
        +      "enum": [
        +        "none",
        +        "consumers",
        +        "teams",
        +        "enterprise"
        +      ],
        +      "type": "string"
        +    },
        +    "media": {
        +      "enum": [
        +        "none",
        +        "images",
        +        "video"
        +      ],
        +      "type": "string"
        +    },
        +    "ops": {
        +      "enum": [
        +        "managed",
        +        "some",
        +        "admin"
        +      ],
        +      "type": "string"
        +    },
        +    "sensitivity": {
        +      "enum": [
        +        "low",
        +        "eu",
        +        "business",
        +        "health"
        +      ],
        +      "type": "string"
        +    },
        +    "server": {
        +      "enum": [
        +        "static",
        +        "mixed",
        +        "dynamic",
        +        "none",
        +        "proxy",
        +        "full"
        +      ],
        +      "type": "string"
        +    },
        +    "threat": {
        +      "enum": [
        +        "low",
        +        "public",
        +        "target"
        +      ],
        +      "type": "string"
        +    },
        +    "uptime": {
        +      "enum": [
        +        "fine",
        +        "costly",
        +        "critical"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / architecture
        Added value: +{
        +  "description": "Plan with only this architecture's vendors, from compare_architectures (e.g. serverless_nextjs, cloudflare_edge, vps_cloudflare).",
        +  "enum": [
        +    "static_cdn",
        +    "frontend_baas",
        +    "serverless_nextjs",
        +    "cloudflare_edge",
        +    "managed_containers",
        +    "single_vps",
        +    "vps_cloudflare",
        +    "firebase",
        +    "on_device"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / platforms
        Added value: +{
        +  "description": "Where the app runs; with architecture, a phone-only app leaves out web hosting.",
        +  "items": {
        +    "enum": [
        +      "web",
        +      "ios",
        +      "android",
        +      "desktop"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  5. 1 tool update
    • Changedrecord_bills2 fields changed
      • addedInput schema / properties / invoice_text
        Added value: +{
        +  "description": "One invoice's text, copied from the PDF or the email.",
        +  "maxLength": 60000,
        +  "type": "string"
        +}
      • addedInput schema / properties / preview
        Added value: +{
        +  "description": "With invoice_text: read it and show what was found, without saving.",
        +  "type": "boolean"
        +}
  6. 5 tool updates
    • Addeddiff_stack
    • Changedget_saved_stack1 field changed
      • addedInput schema / properties / bills_month
        Added value: +{
        +  "description": "Month (YYYY-MM) for the bills comparison; default the newest with bills.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
    • Addedrecord_bills
    • Changedsave_stack1 field changed
      • changedInput schema / properties / share_url / description
        Previous value: -"share_url returned by recommend_stack or plan_stack."New value: +"share_url returned by recommend_stack, plan_stack or audit_stack."
    • Addedupdate_saved_stack
  7. 1 tool update
    • Changedsearch_showcase3 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "ai",
        -  "productivity",
        -  "developer_tools",
        -  "finance",
        -  "health",
        -  "education",
        -  "commerce",
        -  "social",
        -  "design",
        -  "travel",
        -  "marketing",
        -  "other"
        -]New value: +[
        +  "ai",
        +  "productivity",
        +  "developer_tools",
        +  "finance",
        +  "health",
        +  "education",
        +  "commerce",
        +  "social",
        +  "design",
        +  "media",
        +  "travel",
        +  "marketing",
        +  "other"
        +]
      • addedInput schema / properties / sort / description
        Added value: +"stars: most GitHub stars first."
      • changedInput schema / properties / sort / enum
        Previous value: -[
        -  "featured",
        -  "newest",
        -  "name"
        -]New value: +[
        +  "featured",
        +  "newest",
        +  "name",
        +  "stars"
        +]
  8. 11 tool updates
    • Changedaudit_stack2 fields changed
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
      • changedInput schema / properties / stack / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
    • Changedcheck_fit2 fields changed
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
    • Changedcompare_vendors3 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
    • Changedestimate_cost1 field changed
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
    • Changedevaluate_change3 fields changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
    • Changedfind_cost_cliffs1 field changed
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
    • Changedlist_vendors1 field changed
      • changedInput schema / properties / category / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
    • Changedplan_stack6 fields changed
      • addedInput schema / properties / app_type
        Added value: +{
        +  "description": "Kind of app, from Product Hunt's categories: productivity, engineering_development, design_creative, finance, marketing_sales, data_analysis, platforms, no_code, product_addons, llms, ai_agents, voice_ai, social_community, health_fitness, family, lifestyle, web3, ecommerce, travel, physical_products, booking_marketplace, content_site, ios_on_device. Sets the usage profile and, when users are not given, typical users at launch and after the forecast period.",
        +  "type": "string"
        +}
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
      • addedInput schema / properties / mau_now / description
        Added value: +"Monthly active users now. Without it, a new product of the app type at launch."
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
      • changedInput schema / properties / requirements / items / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
      • removedInput schema / required
        Removed value: -[
        -  "mau_now"
        -]
    • Changedproject_stack1 field changed
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
    • Changedrecommend_stack3 fields changed
      • addedInput schema / properties / app_type
        Added value: +{
        +  "description": "Kind of app, from Product Hunt's categories: productivity, engineering_development, design_creative, finance, marketing_sales, data_analysis, platforms, no_code, product_addons, llms, ai_agents, voice_ai, social_community, health_fitness, family, lifestyle, web3, ecommerce, travel, physical_products, booking_marketplace, content_site, ios_on_device. Sets the usage profile and, when users are not given, typical users at launch and after the forecast period.",
        +  "type": "string"
        +}
      • changedInput schema / properties / categories / items / enum
        Previous value: -[
        -  "hosting",
        -  "database",
        -  "auth",
        -  "email",
        -  "payments",
        -  "observability",
        -  "ai",
        -  "edge",
        -  "app_store"
        -]New value: +[
        +  "hosting",
        +  "database",
        +  "auth",
        +  "email",
        +  "payments",
        +  "observability",
        +  "ai",
        +  "edge",
        +  "app_store",
        +  "coding"
        +]
      • changedInput schema / properties / profile_id / description
        Previous value: -"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site."New value: +"Usage profile: b2b_saas (default), consumer_app, booking_marketplace, content_site, ios_on_device. Defaults to the app type's profile."
    • Addedsearch_showcase
  9. 1 tool update
    • Addedsearch_directory
  10. 2 tool updates
    • Addedaudit_stack
    • Addeddetect_stack
  11. 18 tool updates
    • First observedcheck_fit
    • First observedcompare_vendors
    • First observeddelete_account
    • First observeddelete_saved_stack
    • First observedestimate_cost
    • First observedevaluate_change
    • First observedextract_requirements
    • First observedfind_cost_cliffs
    • First observedfind_perks
    • First observedget_pricing
    • First observedget_saved_stack
    • First observedlist_capabilities
    • First observedlist_saved_stacks
    • First observedlist_vendors
    • First observedplan_stack
    • First observedproject_stack
    • First observedrecommend_stack
    • First observedsave_stack

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to fetch live, dated prices for LLM models and cloud compute instances across providers, compare and recommend models, and estimate monthly costs based on workload-specific token shapes and constraints.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Search and compare free tiers, credits, and pricing changes across 1,500+ developer tools. 8 MCP tools for infrastructure decisions, cost estimation, and vendor comparison.
    4
    4 npm
    24
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources