MCP server that drafts winning proposals in your voice from a client brief
ProposalCraft defines 11 tools with complete schemas and descriptions. All tools have non-empty descriptions (avg ~160 chars, within 10-1024 baseline) and detailed input schemas with type information. However, there are systematic gaps in parameter descriptions, output schema documentation, error handling guidance, and idempotency considerations. Tool names follow verb_noun pattern correctly (draft_proposal, save_proposal, list_proposals, etc.). The server lacks documented output schemas, responses are inferred but not declared in the code review, forcing LLMs to guess field structure. Error handling is minimal; there is no recovery guidance or user-fixable vs. retryable classification. The free-tier enforcement (checkFreeTier) is present but error messages are not machine-parseable for agent self-correction. Security includes path traversal prevention (safeFilepath) for file operations, which is good. Overall, the server is above-average community standard but lacks production-grade polish for enterprise agentic workflows.
Analyze a client brief BEFORE drafting. Extracts budget signals, timeline urgency, red flags, scope creep risks, and suggests clarifying questions to ask the client. Use this first when a brief is vague or the budget is unclear.
Write a follow-up message for a proposal that hasn't received a response. Generates a short, non-pushy follow-up that reopens the conversation without sounding desperate. Provide the original proposal summary and how long it's been since you sent it.
Remove a saved proposal from your reference library
Draft a new client proposal based on a brief. Uses your saved winning proposals as style/voice references. Returns a ready-to-send proposal. Free plan: 5 drafts/month. Upgrade for unlimited.
Read the full content of a saved proposal by filename. Use list_proposals first to see available filenames.
List all saved proposals available as style references
Output schemas completely undocumented. None of the 11 tools have documented return types or field structures. LLMs cannot plan multi-step sequences without knowing what fields are available for downstream tools.
No error recovery guidance. Tools lack descriptions of failure modes, error codes, or how to recover. E.g., draft_proposal fails due to rate limit (free tier exhausted), but error message does not tell LLM to check usage_status or upgrade.
Destructive tool (delete_proposal) lacks confirmation pattern. Description does not warn of irreversibility, no dry-run, no confirmation step. Agents can delete proposals without explicit user consent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
Load bundled example proposals into your library to use as style references immediately. Run this on first use to get started without needing your own past proposals yet.
Convert a formal proposal document into a concise, scannable pitch email. Distills the key points — problem, solution, price, and next step — into a short email the client can read in 60 seconds and forward to decision-makers. Does not count against your monthly draft limit.
Save a winning proposal as a reference example. The more examples you save, the more accurately future drafts match your voice and format.
Generate a formal Scope of Work document from an accepted proposal. Produces a structured SOW with deliverables, timeline, payment schedule, revision policy, and a change-order clause — ready to paste into a contract or send directly to the client.
Check your free tier usage: how many proposal drafts you've used this month and how many remain before hitting the limit. Run this before draft_proposal if you're unsure of your remaining quota.
Parameter constraints missing or incomplete. scope_of_work.start_date accepts flexible formats ('June 17, 2026' or 'two weeks from contract signing') but description does not specify format or parsing rules. proposal_to_email.cta is optional but no guidance on default behavior. days_since_sent is numeric but no range (0 - 365?) documented.
Pagination not addressed. list_proposals returns all proposals with no limit or pagination. If a user has 500+ saved proposals, entire list blows context window. No page/offset/limit parameters documented.
Naming compound/verb-adjacent for two tools. proposal_to_email and scope_of_work could be clearer as convert_proposal_to_email and generate_scope_of_work for stronger verb-first convention. Minor but impacts clarity.