Skip to main content
Glama

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)

  1. Go to console.cloud.google.com → create/select a project.

  2. Enable the Google Drive API (APIs & Services → Library → search "Drive API" → Enable).

  3. APIs & Services → Credentials → Create Credentials → Service Account.

  4. Give it a name (e.g. proposal-bot) → Create → Done (no roles needed at project level).

  5. Click the new service account → Keys tab → Add Key → JSON → downloads a file.

  6. Rename it service_account.json and place it in proposal-mcp-server/secrets/.

  7. 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 .env

Fill 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.json

  • Windows: %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:

  1. Call get_mandatory_sections to see what's required.

  2. Call get_company_profile to ground the content in real capabilities.

  3. Confirm the proposed company's country from the brief or trusted company research, then call resolve_rate_card_country(country).

  4. 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.

  5. Draft each of the 9 sections (with real tables/bullets/charts and a concise technical workflow).

  6. 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 KingdomUK); 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_proposal is a single call — Claude doesn't need multiple round-trips to assemble the document piece by piece.

Available Tools

9 tools
create_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:

  1. Reads the master/company rate card for the specified country

  2. Analyzes the project requirements and required roles

  3. Creates a new 5-sheet workbook (Rate Card, Effort Model, Milestones, Retainer, Assumptions)

  4. Validates the workbook for internal consistency

  5. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
budgetYes
countryYes
client_nameYes
project_nameYes
project_scopeYes
required_rolesYes
timeline_monthsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
proposal_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
rolesNo
countryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
local_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 9 tool updatesv0.1.0
    • First observedcreate_project_rate_card
    • First observedgenerate_proposal
    • First observedget_company_profile
    • First observedget_mandatory_sections
    • First observedget_rate_card
    • First observedlist_rate_card_countries
    • First observedlist_templates
    • First observedresolve_rate_card_country
    • First observedvalidate_and_reload_project_rate_card

TDQS

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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