Skip to main content
Glama
cliwant

mcp-sam-gov

by cliwant

opengov_search_solicitations

Read-only

Search public solicitations from any OpenGov Procurement portal by government code. Returns details including status, deadlines, and links to live bid opportunities.

Instructions

List a government's public solicitations on OpenGov Procurement (keyless; api.procurement.opengov.com, POST /project/list with the required publicView gate). Input governmentCode (the portal slug from opengov_list_governments, e.g. 'santacruzca', 'orlando', 'u-46'; REQUIRED), limit(1..100)/offset. Returns { governmentCode, solicitations:[{ id, title, solicitationNumber, status, type, department, releaseDate, proposalDeadline, contactName, link }] } + honest _meta. ★STATUS: status is surfaced VERBATIM — open = currently ACCEPTING responses; pending/evaluation/closed are ALSO returned (publicView shows all public projects), so filter status==='open' for live bids. link is the public portal page. HONESTY: totalAvailable = the API's count = the org's TOTAL public-project count (all statuses), NEVER the page length and NOT an open-only count (a note discloses this); pagination is the API's fixed page (offset is snapped to the page boundary, disclosed); a genuine no-match ⇒ complete:true/returned:0; a 429/5xx/timeout THROWS (never a fake empty); a non-array projects ⇒ schema_drift; a bad governmentCode ⇒ invalid_input pre-fetch. Genuinely keyless (the key-gated official API is NOT used).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoSolicitations per page, 1..100, default 50 (→ API page size).
offsetNo0-based offset (snapped to the API's fixed page boundary). Page with _meta.pagination.nextOffset.
governmentCodeYesThe OpenGov portal slug (from opengov_list_governments `code`), e.g. 'santacruzca', 'orlando', 'u-46'. REQUIRED. Lowercase alnum/hyphen; a bad slug ⇒ invalid_input pre-fetch.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, openWorldHint), the description adds rich behavioral details: it explains the `status` field is surfaced verbatim, the `link` field points to the public portal, the `totalAvailable` (count) is the org's total public project count, pagination behavior (offset snapped to page boundary), error handling (429/5xx throws, bad governmentCode triggers invalid_input pre-fetch), and ensures trustworthiness. This goes far beyond the minimal annotation information.

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 relatively long but well-structured with clear sections, line breaks, and emphasis (e.g., ★STATUS, HONESTY). While every sentence earns its place, some redundancy could be trimmed, but the level of detail justifies the length. The structure aids readability.

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's complexity (no output schema, many edge cases), the description covers the return structure (governmentCode, solicitations array with fields, _meta), error conditions, and honest behavior. It fully accounts for what the agent needs to use the tool correctly and interpret results.

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 schema descriptions cover all parameters (100% coverage). The description adds extra value by specifying that governmentCode comes from opengov_list_governments, that limit defaults to 50 and offset is snapped to the API's page boundary, and mentioning _meta.pagination.nextOffset for pagination. This enhances understanding beyond the raw 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 clearly states it lists public solicitations on OpenGov Procurement, specifying the verb 'List', the resource 'public solicitations', and includes the endpoint details, required parameters, and return structure. It distinguishes itself from sibling tools like opengov_list_governments (which lists governments) and bonfire_search_opportunities (different platform).

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 provides explicit usage guidance: governmentCode is required, sourced from opengov_list_governments, and explains limit/offset parameters. It also advises filtering status='open' for live bids and explains the significance of different statuses. It could be clearer about when not to use this tool versus alternatives, but it does give context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/cliwant/mcp-sam-gov'

If you have feedback or need assistance with the MCP directory API, please join our Discord server