ChatStack App Cost Estimator MCP
An MCP server that enables AI agents to estimate development costs, scope MVPs, and generate Product Requirements Documents (PRDs) with user stories and technical specifications through an interview-driven workflow.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.chatstack.app/mcpWhat you can do with it
- Estimate development costs and hours for an app idea
- Scope an MVP and generate user stories
- Create functional and non-functional requirements
- Produce a technical specification for AI coding tools
Source and maintenance
Protocol and capabilities
- Server
- chatstack-app-cost-estimator 0.9.4
- MCP protocol
- 2025-06-18
- Tools
- 5 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
},
"resources": {
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
start_session — Start an app cost estimate
Start a guided session to estimate app development cost, scope an MVP, and generate a software PRD. No portal account or personal access token is required. Call it with no arguments unless the user already named Review each step (clarify_first) or Run it for me (auto_complete). Do not choose an interaction mode on the user's behalf — wanting an estimate or a fast answer is not auto_complete. If interaction_mode_question is returned, show both Review each step and Run it for me, with Review each step as the default, and wait for the user's pick before send_turn. The text result has a Session section with thread_id and interview_handle. Copy those into every later tool. Preserve an explicitly selected mode without asking the user to choose again.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"interaction_mode": {
"enum": [
"auto_complete",
"clarify_first"
],
"type": "string",
"description": "Omit this. Set it only when the user explicitly named a mode (e.g. \"use auto-complete\"): clarify_first reviews every gate, auto_complete advances on its own and reports each decision."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"result": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": {}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}send_turn — Continue app estimate or revise scope
Continue an app cost estimate by sending the user's answers or requested changes to the MVP scope, user stories, requirements, or technical specification. Pass their exact words in input_as_text, even when next_tool is send_action. Compact replies such as "1A, 2B" are valid. Preserve the user's selections; in interaction mode Review each step do not choose answers for them. In interaction mode Review each step, relay the pipe-table and wait for approval. In Run it for me, relay the table and the decision receipt, then continue. After the user picks Review each step or Run it for me, set interaction_mode to clarify_first or auto_complete on this call. Include input_as_text when their reply also contains an idea or an answer. Omit input_as_text only when the reply is just the mode. Do not use send_action or mode_select_* for that choice. If no mode is set yet and the user continues without choosing, omit interaction_mode and the server accepts clarify_first. Phrases like "Run it for me" or "auto-complete" in input_as_text switch the thread to auto_complete.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"thread_id",
"interview_handle"
],
"properties": {
"thread_id": {
"type": "string",
"minLength": 1,
"description": "Interview thread id from start_session."
},
"input_as_text": {
"type": "string",
"minLength": 1,
"description": "User message text; omit for a style-only interaction_mode switch."
},
"interaction_mode": {
"enum": [
"auto_complete",
"clarify_first"
],
"type": "string",
"description": "Interview style: clarify_first (Review each step) or auto_complete (Run it for me). Required for a style-only switch; when omitted with input_as_text, clarify_first is accepted by default."
},
"interview_handle": {
"type": "string",
"minLength": 1,
"description": "Opaque interview handle from start_session. Pass it on every later tool."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"result": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": {}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}send_action — Submit the pending choice
Submit the user's pending choice. Set action_type to a value from pending_gate_payload.allowed_actions. In Review each step, action_type is required; confirmed_by_user=true is preferred and is not a substitute for it. In Run it for me, omit action_type and payload to advance one milestone, and do not ask the user to choose – show the user that milestone's Auto-complete decision receipt and pipe-table. Do not ask them to approve it. Call send_action once per result, and only again on the next result while next_tool is send_action. When next_tool is submit_prd, stop and offer submission. An approve moves one phase: stories to requirements, requirements to the technical spec, then the tech spec to the estimate. In Review each step, stories_reject, requirements_reject, and techspec_reject show the current table again and wait. When the user describes the change, call send_turn with their exact words and show the regenerated table that comes back. mode_select_a, mode_select_b, and mode_select_c are only the How much time pick: Normal, Quick estimate, or Detailed. Do not use them for Review each step or Run it for me. That choice is send_turn with interaction_mode. For clarifying_questions_submit, set payload.answers by question id with the letter only, such as {"q1":"A","q2":"B"}, not "1A". A plain reply such as "1B, 2A, 3C", or any wording that combines options, goes through send_turn. Do not split one question into several letters.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"thread_id",
"interview_handle"
],
"properties": {
"payload": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"thread_id": {
"type": "string",
"minLength": 1,
"description": "Interview thread id from start_session."
},
"action_type": {
"enum": [
"clarifying_questions_submit",
"mode_select_a",
"mode_select_b",
"mode_select_c",
"interview_summary_accept",
"interview_summary_update",
"story_actions_update",
"story_actions_looks_good",
"stories_approve",
"stories_reject",
"requirements_approve",
"requirements_reject",
"techspec_approve",
"techspec_reject"
],
"type": "string",
"description": "Widget action type from allowed_actions. Optional in auto_complete; defaults fill the pending gate."
},
"interview_handle": {
"type": "string",
"minLength": 1,
"description": "Opaque interview handle from start_session. Pass it on every later tool."
},
"confirmed_by_user": {
"type": "boolean",
"description": "Preferred when the user explicitly chose. Not required when action_type is already set to an allowed_actions value with a complete payload."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"result": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": {}
}{
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}get_estimate_status — Get app estimate progress
Read the current app cost estimate without advancing it. Returns flow_stage, pending_gate, and pending_gate_payload. After submission it also returns post_submit_notice and post_submit_links: relay the notice verbatim, keep every URL, and do not add an email-delivery caveat. Pass the thread_id and interview_handle from the Session section. Do not call start_session to recover a session, and do not use this tool to approve, edit, or submit.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"thread_id",
"interview_handle"
],
"properties": {
"thread_id": {
"type": "string",
"minLength": 1,
"description": "Interview thread id from start_session."
},
"interview_handle": {
"type": "string",
"minLength": 1,
"description": "Opaque interview handle from start_session. Pass it on every later tool."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"result": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}submit_prd — Submit PRD and app estimate
Submit the completed software PRD and app development estimate for email delivery and portal project creation. Call it only after user stories, requirements, tech specs, and the estimate exist. (flow_stage estimate). Run it for me stops at this tool. Offer submission and wait for the user. Do not submit it the way an empty send_action advances a milestone. Before calling, tell the user it emails the pack and creates a portal project. Propose first_name, last_name, email, country, and project_name already provided by the user, or a project name suggested by the tool. Show those values for confirmation and ask only for missing fields; if none are known, ask for all five. Set confirmed_by_user=true only after they confirm. Offer optional feedback and omit it if they skip. Never invent a contact field. If they decline, do not call this tool. Omit contact arguments the thread already collected. Pass the thread_id and interview_handle from the Session section. Success is only a ### PRD submitted receipt that includes project_id and version_id. Relay post_submit_notice verbatim, including every URL, and do not add an email-delivery caveat. A missing next_tool, a timeout, or an error is not success. If the result is unclear, call get_estimate_status. Do not call submit_prd again while that check is still unclear. Do not call submit_prd again after a receipt with both ids.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"thread_id",
"interview_handle"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Suggested or confirmed email from user context."
},
"country": {
"type": "string",
"minLength": 1,
"description": "Suggested or confirmed home country from user context."
},
"feedback": {
"type": "string",
"description": "Optional notes from the user (scope, questions, extra context). Ask, but omit if they skip. Never invent this."
},
"last_name": {
"type": "string",
"minLength": 1,
"description": "Suggested or confirmed surname from user context."
},
"thread_id": {
"type": "string",
"minLength": 1,
"description": "Interview thread id from start_session."
},
"first_name": {
"type": "string",
"minLength": 1,
"description": "Suggested or confirmed first name from user context."
},
"project_name": {
"type": "string",
"minLength": 1,
"description": "Suggested or confirmed project name. Prefer values the user stated."
},
"interview_handle": {
"type": "string",
"minLength": 1,
"description": "Opaque interview handle from start_session. Pass it on every later tool."
},
"confirmed_by_user": {
"type": "boolean",
"description": "Set true only after the user confirms the contact details (or corrects them)."
},
"interview_summary": {
"type": "string",
"description": "Optional override; normally loaded from the thread"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"result": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": {}
}{
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": true
}Prompts
Not advertised
Resources
1 advertised
chatstack-app-cost-estimator
Estimate app and AI solution development costs and hours, scope an MVP, and generate a software PRD (Product Requirements Document) with user stories, requirements, and a technical specification. Use when the user asks for an app or software development cost estimate, a software quote, development hours, MVP scope, or a software PRD for an app idea. Do not use for definition-only questions such as “What is a PRD?”, code editing, calendar lookup, general project-management advice, or managing existing ChatStack portal projects.
skill://chatstack-app-cost-estimator/chatstack-app-cost-estimator/SKILL.md30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1834 ms
- 95th percentile latency
- 1834 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1834 ms · metadata changed · 5 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http chatstack-app-cost-estimator-mcp https://mcp.chatstack.app/mcpCodex
codex mcp add chatstack-app-cost-estimator-mcp --url https://mcp.chatstack.app/mcpCursor
{
"mcpServers": {
"chatstack-app-cost-estimator-mcp": {
"url": "https://mcp.chatstack.app/mcp"
}
}
}Cline
{
"mcpServers": {
"chatstack-app-cost-estimator-mcp": {
"type": "streamableHttp",
"url": "https://mcp.chatstack.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"chatstack-app-cost-estimator-mcp": {
"type": "http",
"url": "https://mcp.chatstack.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http chatstack-app-cost-estimator-mcp https://mcp.chatstack.app/mcpClaude Desktop
{
"mcpServers": {
"chatstack-app-cost-estimator-mcp": {
"url": "https://mcp.chatstack.app/mcp"
}
}
}Windsurf
{
"mcpServers": {
"chatstack-app-cost-estimator-mcp": {
"serverUrl": "https://mcp.chatstack.app/mcp"
}
}
}Let your agent find its tools
Find servers like ChatStack App Cost Estimator MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other developer tools servers
Do you run ChatStack App Cost Estimator MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.