Skip to main content
Glama

Plan a stack from a product brief

plan_stack_from_spec
Read-onlyIdempotent

Use when the user shares a product brief or spec and asks what to build it with or what it will cost. Works out the jobs the brief needs (what it rules out, plans for later or already has is never priced), the volumes from its numbers or listed default rates, and its budget; prices the stack at several scales with choose_stack; and returns SPEC.md, AGENTS.md and a manifest for a coding agent. Keyword rules over the brief, no model call: when total.hypothetical is true, confirm the assumed jobs and volumes with the user before quoting the cost. Stackcut stores the arguments of tool calls to improve its recommendations (vendor names, prices, seats, features, usage numbers, billing amounts and project descriptions; account keys only as a one-way hash, billing and validation sources not at all; never IP addresses): don't send personal data or secrets.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
specYesThe product brief (markdown or plain text, up to 20,000 characters): what it does, who uses it, how it makes money, any numbers you know (users, conversion, prices, volumes). Never paste secrets or personal data.
preferNocheapest
scalesNoMAU targets to price, default [1000, 20000, 200000]
add_jobsNoJobs to add that the brief doesn't mention
overridesNoEdit the derived assumptions: a volume per MAU per month (per_user) or a fixed monthly total for a job
exclude_jobsNoDerived jobs to drop (job ids)
limit_per_jobNo
unit_economicsNoRevenue model for gross margin per scale: price_usd with conversion_rate, or revenue_per_mau

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / overrides / items / properties / basis / maxLength
      Added value: +2000
    • addedInput schema / properties / overrides / items / properties / unit / maxLength
      Added value: +2000
    • addedInput schema / properties / prefer / maxLength
      Added value: +2000
    • addedInput schema / properties / unit_economics / properties / billing / maxLength
      Added value: +2000
  2. Changed1 schema field changed
    • changedInput schema / properties / overrides / items / properties / unit / enum
      Previous value: -[
      -  "seats",
      -  "members",
      -  "mau",
      -  "emails_per_month",
      -  "emails_per_day",
      -  "contacts",
      -  "domains",
      -  "events_per_month",
      -  "pageviews_per_month",
      -  "errors_per_month",
      -  "requests_per_month",
      -  "requests_per_day",
      -  "searches_per_month",
      -  "cpu_ms_per_request",
      -  "db_gb",
      -  "storage_gb",
      -  "bandwidth_gb",
      -  "projects",
      -  "sites",
      -  "videos",
      -  "video_minutes",
      -  "responses_per_month",
      -  "tasks_per_month",
      -  "keywords_tracked",
      -  "credits_per_month",
      -  "history_days",
      -  "apps",
      -  "files",
      -  "event_types",
      -  "monitors",
      -  "tokens_per_month",
      -  "images_per_month",
      -  "audio_minutes_per_month",
      -  "characters_per_month",
      -  "transactions_per_month",
      -  "sandbox_hours_per_month",
      -  "concurrent_sessions",
      -  "session_minutes",
      -  "call_participants",
      -  "meeting_minutes",
      -  "records",
      -  "inboxes",
      -  "tokens_in_per_month",
      -  "tokens_out_per_month",
      -  "cached_tokens_per_month",
      -  "video_minutes_stored",
      -  "video_minutes_delivered_per_month",
      -  "gmv_usd_per_month",
      -  "payouts_per_month",
      -  "active_accounts",
      -  "verifications_per_month",
      -  "browser_hours_per_month",
      -  "proxy_gb_per_month",
      -  "job_executions_per_month",
      -  "sso_connections",
      -  "sso_users",
      -  "inbound_emails_per_month",
      -  "stream_hours_per_month",
      -  "vcpu_hours_per_month",
      -  "credits_usd_per_month",
      -  "disputes_per_month",
      -  "payout_volume_usd_per_month",
      -  "object_writes_per_month",
      -  "object_reads_per_month",
      -  "job_executions_per_day",
      -  "scim_connections",
      -  "MAU",
      -  "tokens",
      -  "tokens_in",
      -  "tokens_out",
      -  "cached_tokens",
      -  "images",
      -  "video_minutes_delivered",
      -  "gb_stored",
      -  "gb_egress",
      -  "transactions",
      -  "gmv_usd",
      -  "sandbox_seconds",
      -  "sandbox_hours",
      -  "vm_hours",
      -  "vcpu_hours",
      -  "browser_hours",
      -  "proxy_gb",
      -  "job_executions",
      -  "verifications",
      -  "inbound_emails",
      -  "emails",
      -  "events",
      -  "errors",
      -  "exceptions",
      -  "requests",
      -  "pageviews",
      -  "searches",
      -  "payouts",
      -  "credits_usd",
      -  "stream_hours",
      -  "audio_minutes",
      -  "characters",
      -  "payout_volume_usd",
      -  "disputes",
      -  "object_writes",
      -  "object_reads"
      -]New value: +[
      +  "seats",
      +  "members",
      +  "mau",
      +  "emails_per_month",
      +  "emails_per_day",
      +  "contacts",
      +  "domains",
      +  "events_per_month",
      +  "pageviews_per_month",
      +  "errors_per_month",
      +  "requests_per_month",
      +  "requests_per_day",
      +  "searches_per_month",
      +  "cpu_ms_per_request",
      +  "db_gb",
      +  "storage_gb",
      +  "bandwidth_gb",
      +  "projects",
      +  "sites",
      +  "videos",
      +  "video_minutes",
      +  "responses_per_month",
      +  "tasks_per_month",
      +  "keywords_tracked",
      +  "credits_per_month",
      +  "history_days",
      +  "apps",
      +  "files",
      +  "event_types",
      +  "monitors",
      +  "tokens_per_month",
      +  "images_per_month",
      +  "audio_minutes_per_month",
      +  "characters_per_month",
      +  "transactions_per_month",
      +  "sandbox_hours_per_month",
      +  "concurrent_sessions",
      +  "session_minutes",
      +  "call_participants",
      +  "meeting_minutes",
      +  "records",
      +  "inboxes",
      +  "tokens_in_per_month",
      +  "tokens_out_per_month",
      +  "cached_tokens_per_month",
      +  "video_minutes_stored",
      +  "video_minutes_delivered_per_month",
      +  "gmv_usd_per_month",
      +  "payouts_per_month",
      +  "active_accounts",
      +  "verifications_per_month",
      +  "browser_hours_per_month",
      +  "proxy_gb_per_month",
      +  "job_executions_per_month",
      +  "sso_connections",
      +  "sso_users",
      +  "inbound_emails_per_month",
      +  "stream_hours_per_month",
      +  "vcpu_hours_per_month",
      +  "credits_usd_per_month",
      +  "disputes_per_month",
      +  "payout_volume_usd_per_month",
      +  "object_writes_per_month",
      +  "object_reads_per_month",
      +  "job_executions_per_day",
      +  "scim_connections",
      +  "searches_per_hour",
      +  "sms_per_month",
      +  "vectors_stored",
      +  "vector_queries_per_month",
      +  "cache_commands_per_month",
      +  "mtu",
      +  "gpu_seconds_per_month",
      +  "revenue_usd_per_month",
      +  "phone_minutes_per_month",
      +  "vector_read_units_per_month",
      +  "vector_write_units_per_month",
      +  "MAU",
      +  "tokens",
      +  "tokens_in",
      +  "tokens_out",
      +  "cached_tokens",
      +  "images",
      +  "video_minutes_delivered",
      +  "gb_stored",
      +  "gb_egress",
      +  "transactions",
      +  "gmv_usd",
      +  "sandbox_seconds",
      +  "sandbox_hours",
      +  "vm_hours",
      +  "vcpu_hours",
      +  "browser_hours",
      +  "proxy_gb",
      +  "job_executions",
      +  "verifications",
      +  "inbound_emails",
      +  "emails",
      +  "events",
      +  "errors",
      +  "exceptions",
      +  "requests",
      +  "pageviews",
      +  "searches",
      +  "payouts",
      +  "credits_usd",
      +  "stream_hours",
      +  "audio_minutes",
      +  "characters",
      +  "payout_volume_usd",
      +  "disputes",
      +  "object_writes",
      +  "object_reads",
      +  "sms",
      +  "vectors",
      +  "vector_queries",
      +  "cache_commands",
      +  "gpu_seconds",
      +  "gpu_hours",
      +  "revenue_usd",
      +  "phone_minutes"
      +]
  3. Added

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, the description discloses rich behavioral traits: it runs on keyword rules with no model call, requires user confirmation before quoting when total.hypothetical is true, explains that ruled-out/deferred/existing jobs are never priced, and details Stackcut's data-retention policy (one-way key hashes, no billing/validation sources, no IP addresses). This is exactly the kind of operational context annotations cannot convey.

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

Conciseness4/5

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

Longer than typical, but every clause earns its place: trigger, process pipeline, exclusion rule, no-model-call behavior, confirmation rule, and privacy policy. The content is front-loaded with the use case and becomes progressively more operational. Slightly dense, but there is no filler or repetition of schema text.

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

Completeness4/5

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

For a high-complexity tool (8 params, nested objects, huge unit enum, 16 siblings, no output schema), the description covers the trigger, the internal pipeline, the safety-relevant confirmation flow, the privacy boundary, and the return artifacts. It does not describe what SPEC.md/AGENTS.md/manifest contain or how scales interact, but that gap is acceptable given the schema documents the parameters and the description covers the behavioral essentials.

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

Parameters4/5

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

Schema coverage is 75%, so the baseline is 3; the description adds value by explaining the pricing-exclusion semantics ('what it rules out, plans for later or already has is never priced'), which clarifies how overrides/exclude_jobs relate to derived jobs, and it reinforces the spec parameter's call to avoid personal data and secrets. However, prefer and limit_per_job remain undocumented in both schema and description, and the description doesn't map parameters to the workflow steps.

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

Purpose5/5

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

The description opens with a precise trigger ('Use when the user shares a product brief or spec and asks what to build it with or what it will cost') and names the verb+resource (plan a stack from a product brief). It differentiates from siblings by naming choose_stack as the internal pricing engine it calls and by listing concrete deliverables (SPEC.md, AGENTS.md, manifest), so an agent can distinguish it from choose_stack and get_build_packet without opening schemas.

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

Usage Guidelines4/5

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

Provides a clear, explicit entry condition: the user shares a brief/spec and asks what to build with or what it will cost. It does not, however, state exclusions or name the alternative for when the brief is already priced (e.g., go straight to choose_stack or audit_stack), so it stops short of full when-not guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.