ChatStack - App Cost Estimator
app.chatstack/app-cost-estimatorchatstack.appstreamable-httpv1.0.0Scanned
Estimate development costs and hours, scope an MVP, and write a PRD with user stories and specs.
5 tools: 1 can delete or cancel things, 2 do something that can't be undone, 1 change things and 1 only read.
- Reads private data · 0
- Reads text others write · 1
- Can send data out · 2
- No findings
Anlyon alternative
4 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
5 tools
Deletes or cancels 1Claude Code: deny
submit_prdSubmit the completed software PRD and app development estimate for email delivery and portal project creation.Reads text others writeNo findings
Why it is in this group
- The name "submit_prd" says "submit": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
Can't be undone 2Claude Code: ask
send_actionSubmit the user's pending choice.Can send data outNo findings
Why it is in this group
- The name "send_action" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_action" says "send": it sends or publishes something to other people.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
send_turnContinue an app cost estimate by sending the user's answers or requested changes to the MVP scope, user stories, requirements, or technical specification.Can send data outNo findings
Why it is in this group
- The name "send_turn" says "send": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "send_turn" says "send": it sends or publishes something to other people.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
Changes things 1Claude Code: ask
start_sessionStart a guided session to estimate app development cost, scope an MVP, and generate a software PRD.No findings
Why it is in this group
- The name "start_session" says "start": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
Only reads 1Show 1 read-only tool
get_estimate_statusRead the current app cost estimate without advancing it.No findings
Why it is in this group
- The name "get_estimate_status" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write1
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out2
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http app-cost-estimator https://mcp.chatstack.app/mcpclaude mcp add --transport http app-cost-estimator https://mcp.chatstack.app/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__app-cost-estimator__get_estimate_status"
],
"ask": [
"mcp__app-cost-estimator__start_session",
"mcp__app-cost-estimator__send_turn",
"mcp__app-cost-estimator__send_action"
],
"deny": [
"mcp__app-cost-estimator__submit_prd"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as app-cost-estimator. Review it before you use it.
Capability tags behind 3 rules
- mcp__app-cost-estimator__send_turn outbound
- mcp__app-cost-estimator__send_action outbound
- mcp__app-cost-estimator__submit_prd untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/app.chatstack/app-cost-estimator/verify?hash=529eef7857519ff461f18813ffd4a6495daaaa8eb20db35453250ebbaa528569" | jq -e '.changed == false'Pinned hash 529eef785751, from Oct 29, 2026, 10:18 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/app.chatstack/app-cost-estimator/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/app.chatstack/app-cost-estimator)Source: MCP Registry. Synced Oct 29, 2026, 10:17 UTC.