proposal-generator-mcp
Reads proposal templates, company profile, and rate card data from specified Google Drive folders, and uploads the generated branded .docx proposal back to an output folder.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@proposal-generator-mcpMake a proposal for XYZ Bank who wants to switch to cloud technology. Country: India."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Proposal Generator MCP Server
Autonomous proposal-generation server for Claude Desktop. Reads your company's templates, service profile, and rate card from Google Drive, and produces a fully branded, chart-and-table-rich .docx proposal — with zero manual formatting.
1. Install dependencies
cd proposal-mcp-server
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .Related MCP server: MCP Dataset Onboarding Server
2. Create the Google Service Account (one-time, ~5 min)
Go to console.cloud.google.com → create/select a project.
Enable the Google Drive API (APIs & Services → Library → search "Drive API" → Enable).
APIs & Services → Credentials → Create Credentials → Service Account.
Give it a name (e.g.
proposal-bot) → Create → Done (no roles needed at project level).Click the new service account → Keys tab → Add Key → JSON → downloads a file.
Rename it
service_account.jsonand place it inproposal-mcp-server/secrets/.Note the service account's email — looks like:
proposal-bot@your-project.iam.gserviceaccount.com
3. Share your 3 Drive folders with the service account
In Google Drive, right-click each of Template, Resources, Output → Share → paste the service account email → give Editor access (Output needs write access; Template/Resources only need Viewer, but Editor is simplest). This is the only manual Drive step — no OAuth login needed after this.
4. Configure environment
cp .env.example .envFill in TEMPLATE_FOLDER_ID, RESOURCES_FOLDER_ID, OUTPUT_FOLDER_ID
(the string in each folder's URL after /folders/).
Confirm/rename your Resources files to match COMPANY_PROFILE_FILENAME
and RATE_CARD_FILENAME in .env (or just edit those variables to match
your actual filenames).
5. Register the server with Claude Desktop
Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"proposal-generator": {
"command": "/absolute/path/to/proposal-mcp-server/venv/bin/python",
"args": ["-m", "proposal_mcp.server"],
"cwd": "/absolute/path/to/proposal-mcp-server/src",
"env": {
"SERVICE_ACCOUNT_FILE": "/absolute/path/to/proposal-mcp-server/secrets/service_account.json",
"TEMPLATE_FOLDER_ID": "...",
"RESOURCES_FOLDER_ID": "...",
"OUTPUT_FOLDER_ID": "..."
}
}
}
}Restart Claude Desktop. You should see "proposal-generator" listed under the 🔌 connectors/tools icon.
6. Use it
Just ask, in a fresh chat:
Make a proposal for XYZ Bank who wants to switch to cloud technology. Country: India.
Claude will, on its own:
Call
get_mandatory_sectionsto see what's required.Call
get_company_profileto ground the content in real capabilities.Confirm the proposed company's country from the brief or trusted company research, then call
resolve_rate_card_country(country).Call
get_rate_card(country, [...])for the relevant roles only. The response includes the exact selected tab and currency; if the workbook has no country tab, it clearly reports the Constants/USD day-rate fallback.Draft each of the 9 sections (with real tables/bullets/charts and a concise technical workflow).
Call
generate_proposal(...)once, which renders the branded .docx and uploads it to your Output folder — returning a Drive link.
Adding new templates later
Upload a new .docx (e.g. template_rfp.docx) into the Template folder,
and add an entry to template_registry.json (see
assets/template_registry.example.json) in that same folder, e.g.:
{ "default": "template.docx", "rfp": "template_rfp.docx" }Claude can then call list_templates() and pass template_id: "rfp".
Project layout
src/proposal_mcp/
config.py # env config + the 9 mandatory sections (hardcoded)
drive_client.py # Google Drive service-account wrapper
cache.py # TTL cache to avoid redundant Drive downloads
rate_card.py # multi-sheet (per-country) rate card parser
company_profile.py # extracts condensed text from services doc
charts.py # bar / pie / gantt chart and workflow-diagram PNG generation
proposal_sections.py # Pydantic schema Claude's content must follow
docx_generator.py # merges content into the branded template
server.py # MCP tool definitions (the public API)Token-efficiency notes
Every tool returns only the specific data requested (filtered rate rows, a condensed profile) — never a whole file's raw bytes/rows.
Chart/table/document rendering happens entirely in Python; Claude never needs to reason about layout, XML, or image encoding.
Rate-card selection is exact or an explicit country alias (for example,
United Kingdom→UK); it never uses a risky substring match. Countries without a dedicated table automatically use the Constants sheet's USD base day rates and are labelled as such in the result.Rate card / profile downloads are cached for
CACHE_TTL_SECONDS, so generating several proposals in one session doesn't re-hit Drive each time.generate_proposalis a single call — Claude doesn't need multiple round-trips to assemble the document piece by piece.
Available Tools
9 toolscreate_project_rate_cardA
STAGE 1: Create a project-specific rate card from the master rate card.
This tool MUST be called BEFORE generate_proposal. It:
Reads the master/company rate card for the specified country
Analyzes the project requirements and required roles
Creates a new 5-sheet workbook (Rate Card, Effort Model, Milestones, Retainer, Assumptions)
Validates the workbook for internal consistency
Saves it locally and uploads to the Output Drive folder
Args: client_name: Client company name (e.g., "ABC Company") project_name: Project name (e.g., "Cloud Transformation") country: Project country (e.g., "Nepal", "United Kingdom") project_scope: Brief description of project scope and requirements timeline_months: Project duration in months budget: Budget indication (e.g., "NPR 25,00,000" or "GBP 150,000") required_roles: List of dicts with keys: role, discipline, seniority, estimated_days Example: [ {"role": "Backend Engineer", "discipline": "Backend Developer", "seniority": "Senior", "estimated_days": 60}, {"role": "Frontend Engineer", "discipline": "Frontend Developer", "seniority": "Mid Senior", "estimated_days": 45}, ]
Returns JSON with the local path, Drive link, and validation status. The generated rate card becomes the authoritative source for all proposal costing.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | Yes | ||
| country | Yes | ||
| client_name | Yes | ||
| project_name | Yes | ||
| project_scope | Yes | ||
| required_roles | Yes | ||
| timeline_months | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It details the entire workflow (reads master, analyzes requirements, creates 5-sheet workbook, validates, saves locally, uploads to Drive, returns JSON) and states the consequential outcome that the rate card becomes the authoritative source for costing. It does not mention permissions, reversibility, or error conditions, but for a create operation this level of transparency is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with stages and numbered steps, and every sentence adds value (process, parameters, return, and impact). It could be slightly tighter, but the structure aids readability and the detail is necessary for a complex tool with 7 parameters and no schema descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 required parameters, no schema descriptions, no annotations, and a return value explained in the description, the information is fairly complete. It covers the process, inputs with examples, output (JSON path, Drive link, validation status), and its relationship to generate_proposal. Minor gaps like error handling or rate limits are not critical given the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so admirably by listing every parameter with type hints and examples, including the nested required_roles structure with a concrete array of objects. This adds significant semantic meaning beyond the bare schema and ensures an agent understands how to format the input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Create a project-specific rate card from the master rate card,' which states a specific verb and resource. It also clearly distinguishes this tool from siblings by explicitly stating 'This tool MUST be called BEFORE generate_proposal,' and the stage label 'STAGE 1' reinforces its unique role in the proposal workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'This tool MUST be called BEFORE generate_proposal.' It also establishes the context of being stage 1 of a process, and the detailed steps explain when it is appropriate to invoke. No alternatives are mentioned, but the explicit precondition and sequencing make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_proposalA
Generates the final branded proposal .docx and uploads it to the Output Drive folder. This is the LAST step, called once per proposal.
proposal_json must be a JSON string matching this shape: { "title": "Cloud Modernisation Proposal", "client_name": "XYZ Bank", "country": "India", "template_id": "default", "rate_card_path": "/path/to/project_rate_card.xlsx", // optional: path to project-specific rate card "sections": [ { "section_id": "executive_summary", // must match one of get_mandatory_sections() ids "blocks": [ {"type": "paragraph", "text": "..."}, {"type": "bullets", "items": ["...", "..."]}, {"type": "sub_heading", "text": "..."}, {"type": "table", "headers": ["Role","Rate"], "rows": [["Cloud Architect","..."]]}, {"type": "bar_chart", "title": "...", "categories": ["Q1","Q2"], "values": [3,5], "y_label": "FTEs"}, {"type": "pie_chart", "title": "...", "labels": ["Cloud","Security"], "values": [60,40]}, {"type": "gantt_chart", "title": "Engagement Timeline", "tasks": [{"name":"Discovery","start":"2026-08-01","duration_days":14}]}, {"type": "workflow_diagram", "title": "Illustrative Digital-Service Workflow", "workflow_steps": [ {"label":"Users", "detail":"Submit secure requests"}, {"label":"AWS WAF + ALB", "detail":"Protect and route traffic"}, {"label":"Amazon EC2", "detail":"Run application services"}, {"label":"Amazon RDS", "detail":"Store transactional data"}, {"label":"CloudWatch", "detail":"Monitor and alert"} ]} ] }, ... one entry for EACH of the 9 mandatory section ids ... ] }
Authoring standard (important): write as a senior pre-sales consultant. Make every point specific to the supplied client brief and verified tool data. Use concise, complete prose: usually one 50-90 word paragraph per idea and 3-5 parallel bullets where bullets are more scannable. Use tables for comparisons, pricing, roles, assumptions, and milestones; use charts only when the supplied numbers make a decision easier. Avoid filler, repeated claims, unsupported superlatives, and invented numbers. Preserve uncertainty as an assumption or validation item. Return only valid JSON in the required shape—no Markdown, commentary, or duplicated narrative.
The required Illustrative Technical Workflow section must be immediately before Conclusion. Include one workflow_diagram plus, where helpful, one short framing paragraph. Make the components specific to the client domain and selected platform; only use named services (for example Amazon EC2) when they are in scope or clearly labelled illustrative. Keep the diagram to its end-to-end path, rather than a detailed design.
All 9 mandatory sections (see get_mandatory_sections) must be present or this call will fail with a clear error listing what's missing. This compact structure produces a high-quality proposal without wasting output tokens. Returns the Drive link to the finished document.
| Name | Required | Description | Default |
|---|---|---|---|
| proposal_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the .docx generation, Drive upload, failure condition (missing mandatory sections), return of the Drive link, and detailed authoring standards. It also specifies structural requirements like the workflow section placement. This is exceptional transparency exceeding typical tool descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but each section earns its place: purpose, JSON shape, authoring standard, workflow requirements, and failure condition. It is structured with headings and code blocks, making it scannable. Slightly verbose, but the complexity of the input justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single-parameter tool with a complex input shape, the description is thoroughly complete. It covers input structure, optional fields, standards, mandatory sections, and return behavior. An output schema exists (per signal), so not explaining return format is acceptable. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully compensate. It provides a complete JSON shape with field names, types, optional markers, and examples for every block type and chart. This far exceeds what any schema description would provide and gives the agent everything needed to construct valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Generates the final branded proposal .docx and uploads it to the Output Drive folder' – a specific verb, resource, and outcome. It also positions itself as 'the LAST step, called once per proposal,' distinguishing it from sibling tools that retrieve or validate data (e.g., get_mandatory_sections, list_templates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says this is the final step used once per proposal and references get_mandatory_sections with the requirement that all 9 sections be present. It doesn't name alternatives to exclude, but given the siblings are supporting tools, the usage context is clear. It could have explicitly instructed to call get_mandatory_sections first, but the reference is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_profileA
Returns a condensed summary of the company's services, capabilities and differentiators, to be used for writing the Executive Summary and Understanding sections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description itself must convey behavior. It states 'returns' implying a read-only operation, and 'condensed summary' indicates the output is a digest. However, it does not explicitly state safety, side effects, or any prerequisites. The description is sufficient for a simple getter but lacks explicit assurance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and result, efficiently conveying both what it returns and its intended use. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is complete. It explains the content and purpose sufficiently for an agent to decide when to call it. No missing essential information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description does not need to explain parameters. Schema coverage is 100% trivially, and no additional meaning is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a condensed summary of the company's services, capabilities, and differentiators, with a specific use case for executive sections. It is a distinct resource but does not explicitly differentiate from siblings; however the resource type is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear context for use: 'to be used for writing the Executive Summary and Understanding sections.' This gives a specific scenario but does not mention when not to use it or name alternative tools. It is clear enough for an agent to know the intended purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mandatory_sectionsA
Returns the fixed list and order of sections every proposal MUST contain.
Call this first. Draft all sections from the client brief and tool results, then make one generate_proposal call. Prefer decision-ready, client-specific content over generic marketing language; do not invent facts, pricing, timelines, certifications, or customer commitments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds useful behavioral context: the list is fixed, mandatory, and must be used first. It also gives content guidelines (no inventing facts, etc.). However, it does not explicitly disclose read-only status, authentication requirements, or error behavior, which would be expected for a tool with no annotation support. The content guidance is more about the downstream generate_proposal, so it adds some but not complete behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the core purpose in the first sentence and usage guidance in the second. It is front-loaded, contains zero fluff, and every sentence contributes actionable information. This is a model of concise tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, output schema exists), the description covers the essential context: what is returned, its mandatory nature, and the usage workflow. It also adds valuable content guidelines. It could mention error conditions or output format details, but an output schema presumably covers the latter. Overall, it is complete for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the baseline rule the score is 4. The description adds meaning beyond the empty schema by clarifying the return value's structure (fixed list and order), which is the only semantic content needed. No parameter explanations are necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and resource ('the fixed list and order of sections every proposal MUST contain'), clearly distinguishing it from siblings like list_templates or get_company_profile. It precisely defines the tool's scope without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to 'Call this first' and lays out the workflow: draft sections from client brief and tool results, then make one generate_proposal call. This provides clear when-to-use context and differentiates from the generate_proposal sibling by sequencing the calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rate_cardA
Look up quote-ready manpower rates for the verified client country. Args: country: The proposed company's verified country (e.g. "India" or "United Kingdom"). Country aliases such as UK are resolved safely; this tool never uses an ambiguous substring match. roles: optional list of role names to filter to (e.g. ["Cloud Architect", "Senior Engineer"]). Omit to get all roles for that country. level: optional exact seniority filter, for example "Junior", "Mid Senior", or "Senior". Returns compact JSON with the selected country sheet/fallback metadata and the exact quote rows. If no country sheet exists, the Constants sheet is used automatically and clearly identified as USD day-rate fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | ||
| roles | No | ||
| country | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors: country aliases are resolved safely ('never uses an ambiguous substring match'), fallback to Constants sheet occurs when no country sheet exists ('clearly identified as USD day-rate fallback'), and it states the return format ('compact JSON with the selected country sheet/fallback metadata and the exact quote rows'). The read-only nature is implied by 'look up' but not explicit; still, it provides solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured as a docstring with clear sections: a one-line purpose, Args bullet points with concise explanations, and a Returns note. It is front-loaded with the main purpose and every sentence adds value. Slightly verbose due to parameter details, but efficiently organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read/lookup tool with three parameters and an output schema, the description covers all critical aspects: parameter semantics, fallback behavior, and return format. It does not discuss error handling for invalid countries or authentication, but these are minor for a read-only tool. The description is complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so thoroughly: country explains expected format ('verified country') and alias resolution; roles explains it's optional, provides an example, and states omission yields all roles; level explains exact seniority filter with examples ('Junior', 'Mid Senior', 'Senior'). This adds meaning beyond the bare schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Look up quote-ready manpower rates for the verified client country.' This is a specific verb and resource (look up rates for a country). It does not explicitly name alternative tools, so it doesn't fully distinguish from siblings like list_rate_card_countries, but the purpose is unambiguous enough for an agent to select it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: the tool is used when needing rates for a verified country. It does not explicitly state when NOT to use it or mention alternative tools (e.g., list_rate_card_countries for listing countries, create_project_rate_card for creation). There are no exclusions or comparisons, so guidance is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rate_card_countriesA
Returns which countries/sheets exist in the rate card, in case the exact country name needs to be confirmed before calling get_rate_card.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the operation returns a list of countries/sheets, implying a read-only, side-effect-free action. However, it does not explicitly state safety (e.g., that it makes no changes) or any potential caveats like pagination or response structure. For a simple listing tool, the disclosure is adequate but not rich; it does not contradict any hooks since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no waste. The main action ('Returns which countries/sheets exist') is front-loaded, and the use-case clause ('in case the exact country name needs to be confirmed...') provides context without redundancy. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an available output schema, the description covers the core function and the scenario in which it should be used. It doesn't describe output formatting, but that is presumably handled by the output schema. The description is complete enough for an agent to decide when to call it and what to expect in general terms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is effectively 100% (no parameters to document). With 0 parameters, the baseline is 4. The description correctly implies that no inputs are needed, and nothing is missing from the parameter side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Returns') and resource ('countries/sheets in the rate card'), and explicitly ties it to a downstream purpose ('before calling get_rate_card'). It differentiates itself from at least one sibling by indicating this is the pre-step for confirming exact names, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear usage condition: use this when the exact country name needs to be confirmed before calling get_rate_card. This implicitly tells the agent when it is appropriate (when names might be uncertain) and when it might be unnecessary (if names are already known). It does not mention alternatives like resolve_rate_card_country, but the guidance is explicit enough for a zero-parameter listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesA
List available proposal templates (e.g. 'default', 'rfp', 'sow'). Call this before generate_proposal if you're unsure which template_id to use.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It clearly implies a read-only listing operation, but does not explicitly state it is non-destructive or free of side effects. Given the tool's simplicity, the description sufficiently covers expected behavior, though it could be more explicit about being read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The purpose is front-loaded, and the usage hint is succinctly included in the second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with an output schema, the description covers the essential purpose, usage timing, and examples. Nothing an agent needs to call it correctly is missing. The empty schema and output schema cover the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds value by showing example template names, which helps agents anticipate the output format and understand what 'available' means. This is a bonus beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('available proposal templates') with concrete examples ('default', 'rfp', 'sow'). It is clearly distinct from siblings like generate_proposal, which is the only related tool that consumes template_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Call this before generate_proposal if you're unsure which template_id to use.' This directly tells an agent when to invoke this tool instead of guessing, making the usage context unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_rate_card_countryA
Preview the rate-card selection for a verified client country before creating a proposal. This returns the exact sheet that will be used, or a clearly marked Constants/USD fallback if the country has no dedicated tab.
Pass the client's country as supplied in the brief or confirmed by trusted company research. A company name alone is intentionally not guessed: that could quote the wrong legal entity or geography.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states this is a preview operation with no side effects, returns either the exact sheet or a clearly marked fallback, and explicitly discloses that it does not guess company names—a key behavioral constraint. It could add details about error handling or authentication, but the core behavior is well-covered for a simple preview tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short paragraphs, front-loaded with the primary purpose in the first sentence. Each sentence adds necessary information: purpose, return behavior, input guidance, and a rationale for not guessing. There is no filler or redundancy—every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and an output schema exists (though not shown), the description sufficiently covers the essential context: what the tool does, what it returns, and how to supply input. It could mention edge cases (e.g., unknown countries not in the fallback) or authentication requirements, but for a straightforward preview resolver with a clear fallback mechanism, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage for the 'country' parameter, so the description must compensate and does so excellently. It clarifies that 'country' means a geographical country, not a company name, and provides sourcing guidance (from the brief or trusted research). It also explains why a company name is insufficient, adding semantic depth beyond the schema's bare type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Preview'), a specific resource ('rate-card selection'), and a context ('before creating a proposal'). It distinguishes from sibling tools by explaining it resolves which rate card applies to a country, rather than simply listing or fetching rate cards. The return type (exact sheet or fallback) is also specified, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on what input to pass ('client's country as supplied in the brief or confirmed by trusted company research') and what not to pass ('A company name alone is intentionally not guessed'), which is strong usage direction. It also frames the tool as a pre-proposal step ('before creating a proposal'), implying when to use it. However, it does not explicitly name alternative tools for when this tool is not appropriate, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_and_reload_project_rate_cardA
STAGE 1b: Validate and reload a project rate card from disk.
This tool reads the generated .xlsx file back into memory to ensure Stage 2 (proposal generation) uses the actual generated workbook as the source of truth, not the in-memory master rate card data.
Args: local_path: Path to the generated project rate card .xlsx file
Returns the parsed ProjectRateCardData as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| local_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the tool reads a file and returns parsed JSON, and explains the purpose (ensuring the actual generated workbook is used). It does not detail validation checks or error handling, but the read-only nature is clear from the context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a stage label, a brief rationale, argument explanation, and return type. Every sentence earns its place with no redundancy, and the purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and an output schema exists, the description adequately covers the why, what, parameter, and return. It provides enough context for an agent to use it correctly without needing additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the parameter. It clearly states 'local_path: Path to the generated project rate card .xlsx file', adding meaning beyond the schema's bare 'Local Path' label. It could include more format details, but it is sufficient for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('reads the generated .xlsx file back into memory') and a clear resource (project rate card from disk). It distinguishes itself from siblings by explicitly tying it to Stage 1b and ensuring Stage 2 uses the actual generated workbook, differentiating it from get_rate_card or create_project_rate_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context on when to use: after generation and before proposal generation, to load the generated workbook as source of truth. However, it does not explicitly mention alternatives or conditions when not to use it, leaving slight inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
create_project_rate_card - First observed
generate_proposal - First observed
get_company_profile - First observed
get_mandatory_sections - First observed
get_rate_card - First observed
list_rate_card_countries - First observed
list_templates - First observed
resolve_rate_card_country - First observed
validate_and_reload_project_rate_card
TDQS
Each tool has a clearly distinct purpose: retrieving mandatory sections, listing templates, fetching company profile, querying rate cards, verifying countries, creating/validating project rate cards, and generating the final proposal. Even the three rate-card-related tools are well separated: get_rate_card fetches rates, list_rate_card_countries enumerates available countries, and resolve_rate_card_country previews selection. No two tools overlap in function.
All tool names follow a consistent snake_case verb_noun pattern with clear verbs (get, list, resolve, create, validate_and_reload, generate). Rate-card tools share the descriptive 'rate_card' suffix, and the overall naming is predictable and scannable. Deviations are none—even the longer validate_and_reload_project_rate_card is internally consistent.
With 9 tools, the server is well-scoped for its purpose of generating branded proposals. Each tool earns its place in a logical pipeline—from fetching requirements to creating and validating a project-specific rate card to producing the final document. The count is within the ideal 3-15 range and neither feels sparse nor bloated.
The tool surface covers the full proposal-generation lifecycle: mandatory section structure, template selection, company profile retrieval, rate card lookup and creation, validation, and final generation. There are no obvious dead ends—every step required to produce a proposal is supported, and the workflow is clearly documented via tool descriptions and stage markers.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate on-brand proposals, reports, and contracts instantly. Auto-extracts brand from any URL.
- emplusxOAuthcom.emplusx
Finished, on-brand .pptx and .docx from a brief - quality-gated by an agentic consulting team.
Create real Word .docx files from your AI chat: proposals, quotes, contracts, statements of work.
Turn sales-call transcripts into traced proposals, contracts, and NDAs.
Related MCP Servers
- -licenseBqualityNot gradedmaintenanceAutomates the creation of standardized documentation by extracting information from source files and applying templates, with integration capabilities for GitHub, Google Drive, and Perplexity AI.33-
- AlicenseNot gradedqualityDmaintenanceEnables automated dataset processing and onboarding using Google Drive integration. Provides metadata extraction, data quality assessment, and contract generation for CSV/Excel files through natural language interactions.1MIT
- FlicenseBqualityNot gradedmaintenanceGenerates professional, AI-powered freelance project proposals including executive summaries, scopes of work, and pricing structures. It leverages Claude to create tailored proposals based on specific project descriptions, budgets, and timelines.1-
- FlicenseBqualityCmaintenanceEnables creating professional Word documents from markdown or structured content with fast, customized formatting via natural language.71-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Shiva-Matangulu/proposal-generator-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server