GovCon API MCP
OfficialA single MCP server that puts US federal procurement data — opportunities, contracts, companies, subawards, exclusions, protests, wage rates and market analytics — behind one set of tools already joined on UEI, CAGE, PIID and NAICS.
Find opportunities: search SAM.gov notices by NAICS/PSC, agency, keywords, state, set-aside, notice type, dates and value; fetch one by
notice_id; sync changes incrementally withrecent_changes.Research markets: NAICS discovery, curated leaderboards, market size/competition/positioning, simplified-acquisition value bands, plus agency org-tree browsing and contracting-office buying profiles.
Vet and target companies: search firms that have won awards vs. all SAM-registered entities, get profiles/awards/peers, expiring registrations, and decision-maker contacts (vs. contracting-officer contacts on the buyer side).
Chase recompetes: find contracts ending in a window, with incumbent-vulnerability signals like cert lapse and single-agency dependence.
Price and bid: contract-value percentile benchmarks, where your number ranks, GSA CALC awarded labor rates, and SCA/Davis-Bacon wage determinations by location, occupation and rate floor.
Team and subcontract: find partners with real past performance, check SAM exclusions, and run a 7-signal vendor risk report.
Analyze awards: search 10.6M+ FPDS prime transactions and DPAS-style SAM award notices, then pull contract roll-ups, every modification, the vehicle behind an order, vehicle ceilings/holders vs. earners, and FFATA subawards in both directions.
Screen for risk: GAO bid protests by protester, case, outcome or status, and every protest on a single solicitation.
Resolve identifiers: agency names to filter strings, DUNS to UEI, and cross-links between UEI, CAGE and PIID.
Caveats: FPDS-backed data starts FY2025; opportunities refresh daily, not real-time; several tools are Pro-only and return HTTP 402 on the Developer plan.
Click on "Deploy 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., "@GovCon API MCPFind DoD cybersecurity solicitations over $1M posted this month."
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.
GovCon API MCP
Most SAM.gov MCP servers wrap one dataset behind six to ten tools. This is six tools that reach 53 operations across five federal sources, already joined on the identifiers they share.
US federal procurement data for agents: 668K SAM.gov opportunities, 10.6M FPDS prime contract transactions, 880K SAM-registered entities, 226K FFATA subawards, 164K exclusions, 14K decided GAO protests, and ~262K GSA CALC labor rates. Cross-linked on UEI, CAGE, PIID and NAICS, so one question does not become five integrations.
Counts as of 2026-08-31, rounded. The corpus grows daily, so this file is a snapshot: current per-source totals and freshness dates are always live at /api/v1/status, no key required.
Free 14-day trial, no credit card. Get a key, then
pipx install govconapi-mcp.
Why this, and not the next SAM.gov wrapper
Most federal-contracting MCP servers are thin proxies over the official SAM.gov API. Three concrete differences.
Five sources, already joined. SAM.gov opportunities and entities, FPDS contract transactions, USAspending/FFATA subawards, SAM exclusions, SBA DSBS certifications and GSA CALC rates, resolved onto shared identifiers. A wrapper hands your agent one dataset and leaves the joins to it.
No SAM.gov entity registration and no company UEI required. GSA documents 10 requests/day for a non-federal user without a SAM role, and 1,000/day with one. Access here is an email and a key.
Six tools, each named for a job.
resolve,search,get,market,price,contactreach every dataset and record: a model picks the right one more reliably from six than from fifty, and their definitions take about a sixth of the context. The 53 single-purpose tools behind them are one setting away (GOVCONAPI_TOOLS=all).
Related MCP server: GovCon
Connect
Claude, no install. In Claude (web, desktop or mobile), add a custom connector with the address https://mcp.govconapi.com/mcp and sign in with your email. Steps: govconapi.com/mcp/tools#claude-connector.
ChatGPT, no install. In ChatGPT on the web, add a custom MCP server with the same address, authentication OAuth, and sign in with your email. Steps: govconapi.com/mcp/tools#chatgpt.
Local install, for Claude Code, Cursor, VS Code, Zed, Claude Desktop config files and custom agents:
pipx install govconapi-mcppipx puts the binary somewhere Claude Desktop's sandbox can spawn it. On macOS, brew install pipx first. With uv, use uvx --from govconapi-mcp govconapi-mcp. Python 3.10+.
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"govconapi": {
"command": "govconapi-mcp",
"env": { "GOVCONAPI_KEY": "gca_your_key_here" }
}
}
}Restart Claude. For Claude Code, Cursor, VS Code, Zed and custom Python agents, see the install reference. To get the 53 single-purpose tools instead of the six, add "GOVCONAPI_TOOLS": "all" to the same env block.
Ask it things like
Find DoD cybersecurity solicitations posted this month over $1M.
Who are the entrenched incumbents in NAICS 541512, and how competitive is that market?
Is this contract entering recompete, and is the incumbent's set-aside certification expiring first?
Turn this UEI into a contractor profile: registration, awards, subcontracting activity, exclusions.
Has this vendor ever been excluded from federal contracts?
The six tools
Tool | What you ask it |
| Names to IDs: an agency to its filter value, title words to NAICS codes, a company to its UEI, a DUNS to a UEI |
| One of 17 datasets: opportunities, forecasts, contracts, vehicles, subawards, recompetes, companies, entities, partners, protests, exclusions, wage determinations and more |
| One record by ID: an opportunity, contract, vehicle and its holders, recompete, company profile, vendor risk report, protests on a solicitation, wage determination |
| A NAICS market: size, competition, solicitation language, small buys, leaderboards |
| Contract value benchmarks, where a bid ranks, GSA labor rates, SCA and Davis-Bacon wage rates |
| A company's decision-maker, or a contracting officer |
They call the 53 single-purpose tools below, so each capability keeps its plan.
The 53 single-purpose tools (GOVCONAPI_TOOLS=all)
Full reference with parameters: TOOLS.md.
Stage | Tools | Answers |
Market research | 12 | where a NAICS gets bought, by whom, how contested |
Opportunity discovery | 3 | what is live now that matches my capability |
Capture and teaming | 12 | who is winning, who to team with, who to call |
Bid, price and negotiate | 9 | what it should cost, labor rates, is my team clean |
Award and compliance | 13 | who won, on what terms, was it protested |
Agencies, awards, exclusions, identifiers | 4 | name resolution, award notices, screening, DUNS to UEI |
15 tools require Pro and return HTTP 402 on Developer. 3 more work on Developer with specific fields gated, and the labor-rate benchmark needs any paid plan. The other 34 have no plan distinction. Each is marked in TOOLS.md.
What it is not
Not a replacement for SAM.gov as the system of record. We normalize public federal data and preserve source provenance. For the authoritative record, or for a submission, go to SAM.gov.
Not real-time. Opportunities refresh daily. If your use case turns on minute-level freshness, this is the wrong tool and we would rather you knew now.
Not state or local. US federal procurement only.
Not a proposal writer, CRM, or BD platform. It is a data layer. If you want an end-to-end capture suite, buy one of those instead and point it here.
FPDS coverage starts 2024-10-01 (FY2025 onward). Deep multi-year historical market research is a real limitation, not an oversight.
Source defects pass through. SAM and FPDS contain impossible dates, $0 amounts and null UEIs. We surface them as they are and document the gotchas rather than silently cleaning them, because the corruption belongs to the system of record.
Plans
Plan | Price | Limits |
Free trial | $0, 14 days | 50 requests/day |
Developer | $19/mo | 1,000 requests/hour |
Pro | $39/mo | adds the 15 Pro tools and richer fields on 3 more |
MCP access is included with every plan, including the trial. No separate tier.
Troubleshooting
GOVCONAPI_KEY environment variable is not set , add it to the MCP config above and restart the client.
Invalid API key , keys start with gca_. Get one at govconapi.com.
Rate limited (429) , free trial is 50 calls/day, Developer 1,000/hour.
A 402 , that tool is Pro. TOOLS.md marks which.
Privacy Policy
Full policy: https://govconapi.com/privacy
What this server does with your data, in short:
Your API key is read from
GOVCONAPI_KEYin your own client's config and sent tohttps://govconapi.comin theAuthorizationheader. This server process does not write it to disk or transmit it anywhere else.Your tool calls become ordinary GovCon API requests. As with any request to the API, we log the timestamp, endpoint, query parameters, response status, response time and which key made the call, for billing, rate-limit enforcement and abuse detection. Usage logs are retained for 90 days.
No conversation content leaves your machine. Only the tool parameters your client fills in are sent, never the surrounding chat, and we log the status a request returned, not the contents of the response.
We do not sell your data.
The data returned is public US federal procurement data from SAM.gov, FPDS, USAspending, SBA DSBS and GSA CALC.
Links
API reference: https://govconapi.com/api-guide
Tool reference: https://govconapi.com/mcp/tools
Live coverage and freshness: https://govconapi.com/api/v1/status
Machine-readable docs: https://govconapi.com/llms.txt and https://govconapi.com/openapi.json
Privacy: https://govconapi.com/privacy · Terms: https://govconapi.com/terms
Support: support@govconapi.com
MIT licensed. Data sourced from SAM.gov, FPDS, USAspending, SBA DSBS and GSA CALC, all public federal data.
Available Tools
6 toolscontactFind who to contactARead-onlyIdempotentInspect
Who to talk to. Both need the Pro plan.
company_decision_maker: a company's decision-maker, from its UEI (resolve(company) finds one); SAM registration agents are filtered out
contracting_officer: a contracting officer's details from their name or email; agency and state narrow it
| Name | Required | Description | Default |
|---|---|---|---|
| uei | No | ||
| kind | Yes | ||
| name | No | ||
| No | |||
| state | No | ||
| agency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the Pro-plan requirement and the fact that SAM registration agents are filtered out of decision-maker results.
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 terse opener is immediately followed by a clean two-bullet breakdown of modes, so the key routing information is front-loaded and easy to scan. The resolve(company) parenthetical is slightly cryptic but earns its place as a hint.
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?
An output schema exists so return values needn't be described, and the description maps most of the six parameters plus the Pro-plan prerequisite. It doesn't state what happens if kind and supplied params disagree, a minor gap.
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?
With 0% schema coverage, the description must carry parameter meaning, and it does: uei maps to company_decision_maker, name/email to contracting_officer, and state/agency narrow the search. It leaves format details (e.g., state abbreviation) unstated, but otherwise compensates well for the coverage gap.
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 bullet list names the two specific things the tool returns – a company's decision-maker and a contracting officer's details – which is more than the vague 'Who to talk to' opener. It clearly separates the two modes but does not differentiate itself from siblings like resolve or search beyond the resolve(company) reference.
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 states a prerequisite ('Both need the Pro plan') and gives per-kind input guidance: UEI for company_decision_maker (with resolve(company) to obtain one) and name/email for contracting_officer, with agency/state as narrowing filters. No explicit when-not or alternative sibling is named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getGet one recordARead-onlyIdempotentInspect
Fetch one record by its ID. IDs come from search results or resolve. (Pro) needs the Pro plan.
opportunity: notice_id from search(opportunities)
contract (Pro fields), contract_modifications, contract_vehicle, recompete (Pro): a PIID from search(contracts) or search(recompetes). contract_vehicle is the IDIQ or schedule the contract was ordered under
vehicle, vehicle_holders (Pro): a vehicle PIID from search(vehicles) or get(contract_vehicle)
entity: a UEI (12 characters) or CAGE code (5); company_profile, company_awards, company_peers, vendor_risk (all Pro), prime_subawards, prime_relationships: a UEI from resolve(company)
subaward: subaward_sam_report_id from search(subawards)
protests_on_solicitation (Pro): a solicitation number from an opportunity or contract
wage_determination: wd_id from search(wage_determinations)
office: office_code from search(offices)
organization, organization_relationships: organization_id from resolve(organization); options.direction = children or ancestors for relationships
optionstakes the record's extra arguments: company_awards {limit, offset, sort_by, sort_order}, vehicle_holders {limit}, contract_modifications {limit, offset}, organization_relationships {direction}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| kind | Yes | ||
| options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real value beyond them: plan-gated kinds ((Pro)) and a disclosed behavior for options.direction on organization_relationships. Missing are failure behavior for a bad ID and any note about record-not-found.
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?
Front-loaded: the core operation is the first sentence, then the ID-sourcing detail follows as a scannable per-kind list. Dense but nearly every clause carries information. Slightly hurt by the compact run-on formatting where kind lists and options notes are jammed into single lines.
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 20-way polymorphic getter with a 0%-documented schema, it covers kind meaning, ID provenance, plan gating, and per-kind options; output schema exists so return shape needn't be explained. The remaining gap is edge-case behavior (invalid ID, missing record, whether omitted ids error).
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 carries the full burden and does: it defines id semantics per kind (notice_id, PIID, UEI of 12 chars, CAGE of 5, subaward_sam_report_id, wd_id, office_code, organization_id) and enumerates the valid keys inside options for each kind that uses them. This is exactly the compensation the schema lacks.
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?
Opens with a specific verb+resource: fetch a single record by ID, and immediately distinguishes itself from siblings by stating IDs come from search results or resolve. The per-kind list makes the resource scope concrete. It stops just short of 5 because the first line alone is generic and only the follow-on list reveals what 'record' means.
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?
Explicitly routes the agent: IDs for each kind come from search(...) or resolve(...), and each kind is mapped to its source call. It also flags which kinds require the Pro plan. It does not state the inverse case (e.g., use search instead when you have no ID / want multiple records), which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketAnalyze a NAICS marketARead-onlyIdempotentInspect
How big a NAICS market is, who wins it, and how it buys, across every agency. A 6-digit naics for the
per-code views, which take no filters (for one agency: search(contracts) with naics and agency).
size: obligated dollars, award count and concentration
competition: offers per award, single-bidder share, set-aside mix
solicitation_language: the phrases contracting officers use in that market's notices
small_buys: how much is bought under the micro-purchase and simplified-acquisition thresholds
leaderboard: ranked NAICS codes;
board= biggest, least_crowded, most_open (no naics needed)find_codes: NAICS codes by market traits; filters: keywords (matches NAICS titles, not topics: use "computer", not "cybersecurity"), sector, prefix, min_market, max_competitors, set_aside_family (total_small_business | 8a | sdvosb | wosb | hubzone), sort_by (market | competitors | setaside_pct)
| Name | Required | Description | Default |
|---|---|---|---|
| view | Yes | ||
| board | No | ||
| naics | No | ||
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, non-destructive, so the bar is lower; the description still adds real behavior: per-code views reject filters, leaderboard requires no naics, and keywords match NAICS titles rather than topics. It doesn't discuss cost, pagination, or limits on aggregate queries, but the added constraint detail exceeds typical.
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?
Front-loaded summary sentence followed by a tight bulleted enumeration of views – no wasted prose. The compressed line-wrapping and cramming the find_codes filter spec into one bullet makes it slightly denser than ideal, but nothing is extraneous.
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?
With an output schema present, return values need not be described, and the annotations cover safety. The description supplies the missing pieces: view semantics, which views need naics, which accept filters, and the full filter vocabulary – everything an agent needs 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 coverage is 0%, so the description must carry all parameter meaning and largely does: naics is 6-digit, board takes biggest/least_crowded/most_open, and the find_codes filters keys (keywords, sector, prefix, min_market, max_competitors, set_aside_family with its five enum values, sort_by with its three values) are all spelled out. It even flags the keyword-matching gotcha ('computer', not 'cybersecurity').
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?
Starts with a specific verb and resource – 'How big a NAICS market is, who wins it, and how it buys, across every agency' – then enumerates the six views and the exact metrics each returns. It also explicitly distinguishes itself from the sibling search tool for agency-scoped queries, so an agent can route without opening the schema.
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?
Gives per-view guidance on what each view answers, states that per-code views take no filters, states that leaderboard needs no naics, and names an explicit alternative ('for one agency: search(contracts) with naics and agency'). The when-to-use and how-to-scope conditions are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricePrice a bidARead-onlyIdempotentInspect
Price evidence for a bid. (Pro) needs the Pro plan.
benchmark (Pro): the distribution of comparable contract values. naics (required), psc, agency, date_from, date_to, pricing_type (shorthand: FFP | T&M | CPFF | CPAF | LH), set_aside (code: 8A | SBA | SDVOSBC | WOSB | HZC | NONE), value_basis (current | potential | obligated)
position (Pro): where a value ranks against comparable contracts. naics and value (a string, e.g. "2200000"), required; same optional filters as benchmark
labor_rates: GSA CALC ceiling hourly rates. labor_category (required), match (contains | exact), education_level (HS | AA | BA | MA | PHD), min_experience, max_experience, naics, vendor, worksite, business_size, security_clearance
wage_rates: SCA or Davis-Bacon hourly rates for an occupation. classification (title words, e.g. "Electrician"), occupation_code (SCA 5-digit), type (SCA | DBA), state, wd_number; sort_by: base_rate | classification | wd_number. For one place, get the WD first and read its rates
wage_summary: the spread of those rates. classification or occupation_code, type, state
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| filters | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds plan gating that annotations cannot express — benchmark and position require the Pro plan — which is genuinely decision-relevant. Return shapes are not described, but an output schema exists, so that burden is lifted.
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?
Front-loaded with the one-line purpose, then organized as one bullet per `kind` so an agent can jump straight to its mode. Dense but every line carries parameter or mode information. The heavy abbreviation and tight line-wrapping cost some readability without adding real waste.
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 two-parameter dispatcher over five sub-operations with an opaque filters object, the description covers mode selection, required filters per mode, enum vocabularies, plan gating, and one cross-tool prerequisite. With an output schema present, return values need not be explained. An agent has enough to call this 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 coverage is 0% and `filters` is an open additionalProperties object, so the schema supplies essentially nothing; the description carries the full burden and does so well, naming filter keys and decoding enums (FFP | T&M | CPFF | CPAF | LH, 8A | SBA | SDVOSBC | WOSB | HZC | NONE, HS | AA | BA | MA | PHD, SCA | DBA, contains | exact, current | potential | obligated). It falls short of 5 because types, defaults, and whether filters are mutually compatible across modes are left implicit.
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?
States the resource (pricing/rate evidence for a bid) and then enumerates five distinct sub-operations with the specific artifact each returns (contract value distribution, rank of a value, GSA CALC ceiling rates, SCA/DBA rates, rate spread). An agent can tell what each `kind` value yields. It does not, however, distinguish this from the `market` sibling, so differentiation is incomplete.
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?
Per-mode requirements are spelled out (e.g. benchmark/position need `naics`, position needs `value` as a string, labor_rates needs `labor_category`), and it routes cross-tool for one case: "For one place, get the WD first and read its rates." That is real when-to-use guidance. What is missing is any explicit rule for choosing between `benchmark` vs `position` vs `market` when several could apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolveResolve names to IDsARead-onlyIdempotentInspect
Turn what the user said into the IDs and codes the other tools take. Start here when the user names an agency, describes their work, or names a company.
agency: an agency name or acronym ("Navy", "FEMA") -> the exact
agencyvalue search filters expectnaics: words from NAICS titles ("computer", "engineering", "construction") -> matching codes with market size. It matches titles, not topics: for "cybersecurity" try "computer"
company: a company name -> SAM registrations with their UEI (a large firm has several; pick by name and location, or use search(companies), Pro, which ranks by award history)
identifier: a legacy 9-digit DUNS number -> the matching UEI and company (a CAGE code goes to get(entity))
organization: an agency or sub-agency name -> its organization_id in the federal hierarchy
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this tool as read-only, idempotent, open-world, and non-destructive. The description adds valuable behavioral context beyond those annotations, including that NAICS matching works on titles rather than topics and that large companies may have multiple registrations requiring name/location disambiguation. It does not cover no-match or error behavior, so it falls just short of the highest score.
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 front-loaded with the core purpose and then uses concise bullets for each resolution mode. Despite its length, every bullet explains a distinct enum mode and 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 two required parameters, the enum, the presence of an output schema, and rich annotations, the description supplies everything an agent needs to select the correct mode and interpret the query. It also covers ambiguous company matches and routes unsupported identifiers to the correct sibling tool.
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 carries the full burden of explaining the parameters. It does this thoroughly by explaining what each enum value of `kind` means, how `query` should be interpreted for each kind, and what each mode returns.
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 action and scope: it turns user-mentioned names into the IDs and codes that other tools accept. It also distinguishes itself from siblings by positioning itself as the starting point before using search, get, or other tools, and it names alternatives for specific cases.
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 when to start here: when the user names an agency, describes their work, or names a company. It also gives alternatives and exceptions, such as using search(companies) for ranking by award history and get(entity) for CAGE codes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch federal contracting dataARead-onlyIdempotentInspect
Search one dataset. filters holds that dataset's filters; an unknown filter returns the full list.
Agency values come from resolve(agency), NAICS codes from resolve(naics), UEIs from resolve(company).
Dates are YYYY-MM-DD. (Pro) marks datasets that need the Pro plan. Keep limit small (20-50) and page with
offset: rows are large. Only opportunities, forecasts and partners take keywords.
opportunities: SAM.gov notices. naics, psc, agency, keywords, state, set_aside (HUBZone, WOSB, 8(a), Veteran, Small Business), notice_type (Solicitation, Combined Synopsis/Solicitation, Presolicitation, Sources Sought, Award Notice), posted_after, due_before, due_after, value_min, value_max; sort_by: posted_date | due_date | award_amount | title | agency | relevance
opportunity_changes: notices added or changed since a time. since (ISO timestamp, required); no other filters
forecasts: work agencies plan to buy. agency, naics, set_aside, state, est_award_fy, keywords, is_recompete, source (fco | dhs | hhs); sort_by: est_award_fy | est_solicitation_date | value_high | agency
award_notices: SAM.gov award announcements. awardee, uei, naics, agency, value_min, value_max, date_from, date_to
contracts: FPDS awards. naics, agency, uei, piid, award_type_code (A | B | C | D), date_from, date_to, amount_min, amount_max; sort_by: action_date | current_total_value_of_award | federal_action_obligation | recipient_name. Find a named vehicle's orders with parent_piid
vehicles: IDIQs, GWACs, GSA Schedules. Needs one of uei, piid, agency, naics, idv_type (IDC | FSS | BPA | GWAC | BOA); active_only, ceiling_min. No name search: find a vehicle's PIID via contracts or the notice
subawards: who subcontracts to whom. prime_uei, sub_uei, sub_name, naics, agency, piid, date_from, date_to, amount_min; sort_by: subaward_action_date | subaward_amount
recompetes (Pro): contracts ending soon. naics, agency, set_aside, state, ends_within_months, amount_min; sort_by: ends_soonest | value | mod_churn | de_obligated
companies (Pro): firms with award history. q (name, REQUIRED), naics, agency, naics_small
entities: every SAM registration. q (name), naics, state, business_type (SAM code: "8W" WOSB, "QF" SDVOSB), naics_small (a NAICS the firm is SBA-small for), active_only
expiring_registrations (Pro): SAM registrations about to lapse. within_days, state, naics
partners (Pro): teaming partners with past performance. naics, agency, state, psc, keywords, set_aside (sdvosb | vosb | wosb | hubzone | 8a | sdb | minority_owned)
protests: GAO bid protests. agency, protester, status (Open | Closed), outcome (Denied | Dismissed | Sustained | Withdrawn), filed_from, filed_to; sort: recent | oldest | filed | due
exclusions: debarred or suspended parties. name, uei, cage_code
wage_determinations: type (SCA | DBA | CBA), state (2 letters), county, wd_number, active_only
wage_determinations_by_location: every determination for a place. state (2 letters, required), county, type
offices: contracting offices that buy a NAICS. naics (required); sort: biggest | most_open
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| dataset | Yes | ||
| filters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond annotations: unknown filters return the full filter list, Pro datasets require a paid plan, result rows are large so limit should be kept small and offset used for paging, and some datasets have required filters.
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 necessarily so for a 17-dataset search tool. General rules are front-loaded, followed by a structured bulleted dataset reference, and each sentence provides actionable information without filler.
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 complex dataset surface and filters object, the description supplies the dataset-specific semantics needed to call the tool correctly. Annotations cover safety, and an output schema exists, so return-value details are appropriately omitted.
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 carries the full burden. It does so thoroughly by documenting the dataset enum, listing filters and required filters per dataset, explaining limit/offset usage, and noting special cases like opportunity_changes requiring since and companies requiring q.
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 a specific verb and resource: 'Search one dataset,' then names every dataset available. It also distinguishes this tool from sibling resolve by explaining that agency, NAICS, and UEI values should come from resolve(agency), resolve(naics), and resolve(company).
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 provides explicit per-dataset guidance: which filters each dataset accepts, which filters are required, which datasets support keywords, and when to use alternatives such as resolving identifiers through resolve or finding vehicle PIIDs through contracts/notices. This leaves little ambiguity about when and how to use the tool.
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.
59 tool updates
v0.2.4- Removed
check_exclusion - Added
contact - Removed
discover_offices - Removed
find_naics_codes - Added
get - Removed
get_company_awards - Removed
get_company_contact - Removed
get_company_peers - Removed
get_company_profile - Removed
get_contract - Removed
get_contract_modifications - Removed
get_contract_vehicle - Removed
get_entities_expiring - Removed
get_entity - Removed
get_labor_rate_benchmark - Removed
get_naics_competition - Removed
get_naics_leaderboard - Removed
get_naics_market - Removed
get_naics_positioning - Removed
get_naics_simplified_acquisition - Removed
get_office_profile - Removed
get_opportunity - Removed
get_org_relationships - Removed
get_organization - Removed
get_price_benchmark - Removed
get_price_position - Removed
get_prime_relationships - Removed
get_prime_subawards - Removed
get_protests_on_solicitation - Removed
get_recompete - Removed
get_subaward - Removed
get_vehicle - Removed
get_vehicle_holders - Removed
get_vendor_risk_report - Removed
get_wage_determination - Removed
get_wage_rate_summary - Removed
get_wage_rates - Removed
get_wds_by_location - Removed
list_organizations - Removed
lookup_agency - Added
market - Added
price - Removed
recent_changes - Added
resolve - Removed
resolve_identifier - Added
search - Removed
search_awards - Removed
search_companies - Removed
search_contacts - Removed
search_contracts - Removed
search_entities - Removed
search_forecasts - Removed
search_opportunities - Removed
search_partners - Removed
search_protests - Removed
search_recompetes - Removed
search_subawards - Removed
search_vehicles - Removed
search_wage_determinations
53 tool updates
- First observed
check_exclusion - First observed
discover_offices - First observed
find_naics_codes - First observed
get_company_awards - First observed
get_company_contact - First observed
get_company_peers - First observed
get_company_profile - First observed
get_contract - First observed
get_contract_modifications - First observed
get_contract_vehicle - First observed
get_entities_expiring - First observed
get_entity - First observed
get_labor_rate_benchmark - First observed
get_naics_competition - First observed
get_naics_leaderboard - First observed
get_naics_market - First observed
get_naics_positioning - First observed
get_naics_simplified_acquisition - First observed
get_office_profile - First observed
get_opportunity - First observed
get_org_relationships - First observed
get_organization - First observed
get_price_benchmark - First observed
get_price_position - First observed
get_prime_relationships - First observed
get_prime_subawards - First observed
get_protests_on_solicitation - First observed
get_recompete - First observed
get_subaward - First observed
get_vehicle - First observed
get_vehicle_holders - First observed
get_vendor_risk_report - First observed
get_wage_determination - First observed
get_wage_rate_summary - First observed
get_wage_rates - First observed
get_wds_by_location - First observed
list_organizations - First observed
lookup_agency - First observed
recent_changes - First observed
resolve_identifier - First observed
search_awards - First observed
search_companies - First observed
search_contacts - First observed
search_contracts - First observed
search_entities - First observed
search_forecasts - First observed
search_opportunities - First observed
search_partners - First observed
search_protests - First observed
search_recompetes - First observed
search_subawards - First observed
search_vehicles - First observed
search_wage_determinations
TDQS
Scored across 6 tools
The six top-level tools have clearly distinct roles: resolve converts names to IDs, search queries datasets, get fetches records by ID, contact finds people, market provides market analytics, and price provides pricing evidence. Overlaps like search(contracts) vs market(size) and resolve(company) vs search(companies) are explicitly differentiated by descriptions and workflows.
Top-level tool names are all lowercase and readable, but they mix verb-style names (resolve, search, get) with noun-style names (contact, market, price). Sub-operations are grouped consistently within resolve/search/get, though the overall surface uses a mix of singular, plural, and compound names.
Six top-level tools is well within the ideal range and matches the gateway-style design needed for a broad GovCon dataset. Each tool earns its place as a distinct capability area, even though search and get internally expose many dataset-specific operations.
The surface covers the full GovCon research lifecycle: ID resolution, opportunity and award discovery, contract and vehicle lookup, entity and contact details, market analytics, and pricing evidence. No obvious read-only workflow dead ends are present for the stated domain.
Maintenance
Related MCP Connectors
- BidSparqOAuthcom.bidsparq
55 tools for federal/state/local RFPs, awards, vendors, contact graph, contract vehicles, pursuits.
Government contract search and federal procurement data: SAM.gov opportunities + USASpending awards.
- GovTribeOAuthcom.govtribe
Search U.S. federal, state, and local government procurement data and intelligence.
Search U.S. federal contract opportunities (RFPs, bids, awards) from SAM.gov official data.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables research of federal contract awards, market opportunities, and competitive landscapes using the USASpending.gov API. It provides specialized tools for AI agents to analyze government spending trends, identify incumbents, and search contractor details.MIT
- FlicenseNot gradedqualityDmaintenanceFederal procurement intelligence toolkit that searches SAM.gov contract opportunities, analyzes agency spending patterns, tracks competitor wins, and monitors small business set-aside programs (8a, HUBZone, SDVOSB, WOSB). 4 tools using SAM.gov and USASpending.gov data.3-
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to search and analyze federal government contract opportunities and awards from SAM.gov and USASpending.gov, with tools for contract search, detail, agency spending, and trending sectors.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search federal contracts, analyze agency spending, track competitor wins, and monitor small business set-aside opportunities using SAM.gov, USASpending.gov, and FPDS data.-