Skip to main content
Glama
govconapi

io.github.govconapi/govconapi

Official

Search Protests

search_protests
Read-onlyIdempotent

Find GAO bid protests by protester, agency, solicitation, or case number to see who filed, when, and whether the award was sustained, denied, or dismissed.

Instructions

Search GAO bid protests: who protested, on which solicitation, when, and the outcome.

Award & Compliance tool. status=Open is the live set (still pending before GAO, the award may be under a performance stay); filter to outcome=Sustained for protests that actually disturbed an award.

  • protester: the firm that FILED the protest (use this, not search, for competitor research, search also matches the agency column)

  • search: full-text over protester, agency, solicitation number, file number

  • case_number: GAO case, e.g. "B-424433", returns every docket on that case

  • outcome: Denied | Dismissed | Sustained | Withdrawn | Granted

  • status: Open | Closed

  • sort: recent (default) | oldest | filed | due (due = soonest statutory deadline first)

  • limit: max 100

Factual, never scored. Returns each protest's solicitation number, pass to get_protests_on_solicitation for every protest on that same procurement.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNorecent
limitNo
agencyNo
offsetNo
searchNo
statusNo
outcomeNo
filed_toNo
case_typeNo
protesterNo
filed_fromNo
case_numberNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as read-only and idempotent, and the description meaningfully adds behavior beyond that: status=Open implies a possible performance stay, outcome=Sustained means an award was disturbed, case_number returns every docket on the case, search is full-text over specific fields, and limit is capped at 100. It also notes the tool is never scored.

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 well-structured: a punchy opener, a short context paragraph, and scannable bullets for parameter semantics. It front-loads the core purpose before details, and every section adds information rather than padding.

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?

The description is largely complete for a read-only search tool, especially since an output schema exists and the key behavioral distinctions are covered. The main gap is that a few optional parameters are left implicit, but the overall guidance is sufficient for an agent to correctly invoke the tool and route to its sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the burden and does explain protester, search, case_number, outcome, status, sort, and limit with concrete values and semantics. However, agency, offset, filed_from, filed_to, and case_type receive no explanation, leaving a noticeable gap for some parameters an agent might need for filtering.

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?

Description opens with a specific verb-resource pairing: 'Search GAO bid protests' and enumerates the core returned dimensions (who protested, solicitation, when, outcome). It clearly distinguishes itself from the related get_protests_on_solicitation tool by framing this as the search entry point.

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 guidance on when to use which filter: status=Open for live pending protests, outcome=Sustained for protests that disturbed an award, and protester instead of search for competitor research because search also matches agency. It also tells the agent to pass the returned solicitation number to get_protests_on_solicitation for related protests.

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

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/govconapi/govconapi-mcp'

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