US Federal Procurement MCP
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., "@US Federal Procurement MCPfind open HUBZone contracts in Maryland under $250,000"
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.
US Federal Procurement MCP
Federal contracting intelligence for small businesses — as an MCP server. Search contract opportunities, understand set-asides and NAICS codes, and analyze solicitations for small-business fit and risk — from inside Claude, Cursor, or any MCP client.
This fills the biggest gap in US small-business (SBA) contracting: an LLM trained on the public internet cannot know current contract opportunities or reliably recall the set-aside rules, FAR thresholds, and NAICS structure that determine whether a bid is even worth pursuing. This server makes that real and queryable.
Tools (9)
Tool | What it does |
| Search federal opportunities by keyword / agency / set-aside / NAICS / state / value / deadline |
| Set-aside, sector, agency & value overview + urgent deadlines |
| Evidence-backed small-business fit assessment (insufficient / mismatch / review / potential) + red-flag scan (bonds, turnover, past-performance) |
| Phase-3 deep review: fetches full notice + attachments, combines a bidder capability profile with source-linked extraction (instructions, evaluation factors, clauses, amendments) |
| Translate a description into NAICS sectors |
| Explain a set-aside (Small Business, 8(a), HUBZone, WOSB, SDVOSBC…) |
| Micro-purchase, SAT, Miller Act bond, subcontracting-plan thresholds |
| Full record (incl. POC, links, award) + state name for one opportunity — live or sample |
| What a SAM.gov type code means (sources sought, solicitation, J&A…) |
Everything is deterministic, typed, and honest about its data source.
Related MCP server: GovCon
Install & run
python3 -m venv .venv
.venv/bin/pip install -e ".[test]"
.venv/bin/pytest tests/ -q # 84 tests incl. real MCP stdio integration
.venv/bin/us-gov-mcp # or: .venv/bin/python -m usgovmcp.serverConnect a client
Claude Desktop / Claude Code / Cursor → see configs/mcp-config.json
(canonical example: same JSON works for Claude Desktop and Cursor; for Claude Code,
use claude mcp add). Set PYTHONPATH to this repo; optionally add a SAM_GOV_API_KEY.
Data
Default: a bundled set of clearly-labeled sample opportunities so it works and is tested with no key.
Live (SAM.gov): get a free public API key from your SAM.gov account →
Account Details → request a public API key. SetSAM_GOV_API_KEY. The provider (SAMGovProvider) already talks toapi.sam.gov/opportunities/v2/searchand is unit-tested against the real response shape. Live data is never faked — until a key is set, labeled samples are returned.
Layout
us-gov-mcp/
├── usgovmcp/
│ ├── server.py ← FastMCP server wiring all tools
│ ├── knowledge.py ← NAICS, set-asides, FAR thresholds, red-flag rules
│ ├── analyzer.py ← evidence-backed fit assessment + red-flag scan
│ ├── solicit.py ← bidder capability profile + source-linked extraction (Phase 3)
│ ├── providers.py ← bundled + SAM.gov live providers
│ ├── models.py ← typed Opportunity / search params / ProviderResult
│ ├── intel.py ← market-snapshot aggregation
│ └── sample_data.py ← labeled demo opportunities
├── configs/
├── scripts/smoke.py ← CI startup check (fails pipeline on broken server)
├── scripts/secret_scan.sh ← CI gate: blocks committed credentials
├── cache.py ← bounded TTL cache (protects SAM.gov quota)
├── tests/ ← 84 tests incl. real stdio protocol integration
├── constraints.txt ← tested/locked dependency set for releases
├── CONTRIBUTING.md SECURITY.md LICENSE CHANGELOG.md
├── pyproject.toml ← also ruff + mypy config
└── README.mdCI runs two jobs: test (Python 3.10/3.11/3.12) and quality (ruff
lint + format check, mypy, package build, secret scan).
MIT licensed. Not legal advice — always read the full solicitation before bidding.
Trust & evidence rules
analyze_solicitationnever produces a confident fit from missing evidence: unknown notices and empty text returninsufficient_information.Provider results are typed (
ProviderResult):ok,no_matches,authentication_error,rate_limited,upstream_error,parse_error,no_key. Asking forsam_govwithout a key returnsno_key— never a silent, misleading empty list.All data is honestly labeled by source (
bundled_samplevssam_gov).
Available Tools
9 toolsanalyze_solicitationA
Evidence-backed small-business fit assessment + red-flag scan.
Provide either a notice_id (looked up from live SAM.gov or the sample
pool) or pasted text of a solicitation. Returns one of:
insufficient_information / likely_mismatch / requires_capability_review /
potential_fit, with the evidence reviewed, gates, and what's missing.
Effortless proof rule: missing evidence can NEVER produce a confident fit.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| source | No | auto | |
| notice_id | No | ||
| set_aside | No | ||
| is_small_business | No | ||
| response_days_left | No | ||
| value_estimate_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the data lookup behavior, the possible return classifications, the evidence/gates output, and the key proof rule that missing evidence can never produce a confident fit. It does not cover edge cases like both text and notice_id being provided, but the core behavior is well disclosed.
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 compact and well structured: purpose first, then input modes, then output and behavior. Every sentence adds useful information, and there is no repetition of the tool name or schema boilerplate.
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?
The description covers the main call flow, input alternatives, output taxonomy, and core behavioral rule even without an output schema. However, it leaves several parameters unexplained and does not clarify how they influence the assessment or what happens when conflicting inputs are supplied. It is usable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to explain the parameters. It only clarifies text and notice_id, while source, set_aside, is_small_business, response_days_left, and value_estimate_usd are left to inference from their names and types. This is a significant gap for a tool with seven parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as an evidence-backed small-business fit assessment and red-flag scan for solicitations. It names the exact output categories, making the tool's function and value unmistakable. It also differentiates itself from siblings by focusing on fit classification rather than general search or review.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit input guidance: provide either a notice_id or pasted solicitation text, with notice_id sourced from live SAM.gov or the sample pool. This clearly implies when to use the tool, but it does not explicitly compare it to solicitation_review or state when not to use it, so it falls just 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.
federal_thresholdsA
Return federal procurement thresholds (USD) with source provenance (citation, effective date, superseded value). Names: micro_purchase_general, simplified_acquisition_threshold, miller_act_bond, subcontracting_plan_services, subcontracting_plan_construction.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must carry the burden of behavioral disclosure. It discloses that results are in USD and include provenance (citation, effective date, superseded value), which is useful. However, it does not explain error behavior for invalid names, whether all thresholds are returned when no name is given, or any access requirements. No annotations exist, so this is a partial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste: the first states the purpose and return content, the second lists the valid names. Information is front-loaded and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema, the description covers the main elements: it explains what is returned (thresholds with provenance) and enumerates valid inputs. It omits the optionality of the 'name' parameter and the behavior when omitted, which an agent would have to infer from the schema default. That is a minor but real 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?
Schema coverage is 0% with only a generic 'name' parameter. The description directly compensates by enumerating the five valid names, giving the agent concrete allowed values. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Return'), a concrete resource ('federal procurement thresholds (USD)'), and clarifies the output includes source provenance. It lists the valid threshold names, distinguishing this from sibling tools focused on opportunities, NAICS, and solicitations.
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?
No explicit guidance on when to use this tool versus alternatives is provided. The purpose is implied by the name and content, but there is no statement such as 'use when you need threshold amounts' or 'instead of market_snapshot_tool'. Thus it relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
look_up_naicsA
Map a goods/services description to NAICS sectors (note: curated 2-digit sectors).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose an important limitation: only curated 2-digit sectors are returned, not full NAICS detail. However, it does not describe return format, matching behavior, or whether multiple sectors may be returned, which leaves some uncertainty for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. The primary action is front-loaded and the important curated-sector caveat is included parenthetically without disrupting clarity.
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?
The tool is simple, with one optional-looking parameter and no output schema, so the description carries responsibility for explaining both input and output. It explains the input and high-level output, and adds a scope limitation. It still lacks detail about the response structure and how results should be interpreted, but it is minimally sufficient for a simple lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the single 'query' parameter, so the description must compensate. It does indicate that the query should be a goods/services description, which adds meaning beyond the schema. But it does not clarify formatting, requiredness, or expected length, and the schema shows a default empty string, which is ambiguous.
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 uses a specific verb ('Map') and identifies both the input (goods/services description) and the output (NAICS sectors). The note about curated 2-digit sectors adds useful scope. However, it does not explicitly distinguish itself from siblings like look_up_set_aside, though the focus on NAICS sectors makes it reasonably distinct.
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 implies the tool should be used when an agent has a goods/services description and needs related NAICS sectors. It does not provide explicit when-to-use vs. alternatives, exclusions, or mention of the curated 2-digit scope as a reason to prefer other tools for more granular NAICS lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
look_up_set_asideB
Explain a SAM.gov set-aside (official codes: SBA, SBP, 8A, 8AN, HZC, HZS, WOSB, WOSBSS, EDWOSB, EDWOSBSS, SDVOSBC, SDVOSBS, VSA ...).
| Name | Required | Description | Default |
|---|---|---|---|
| code_or_label | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. 'Explain' makes it clear this is a read-only lookup, and the official-code list defines the accepted domain. However, it does not disclose behavior for unknown codes, whether labels are accepted, or whether the ellipsis means the list is non-exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that states the action before listing valid codes. It contains no filler, and the code list is directly useful for callers. The ellipsis is mildly vague but does not make the description bloated.
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 one-parameter lookup tool with no output schema, this is minimally adequate: an agent can infer the call shape and likely value domain. It is incomplete because it lacks usage guidance, validation behavior, sample labels, and clarification that the visible code list is not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially does by enumerating accepted code values and including '...' to suggest more exist. It does not explain what a 'label' means, case sensitivity, or input formatting, leaving the sole parameter partly underspecified.
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 clear verb and resource: 'Explain a SAM.gov set-aside' with an explicit list of official codes. It distinguishes the tool from siblings by resource (set-aside codes vs NAICS, opportunities, etc.), though it does not explicitly name any sibling to differentiate from.
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?
There is no guidance about when to use this tool versus alternatives such as look_up_naics or opportunity_type. The description implies a lookup use case, but it never states when this tool is the right choice or when a sibling would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_snapshot_toolC
Overview of available federal opportunities: set-asides, NAICS sectors, agencies, typical values, and urgent deadlines.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | ||
| set_aside | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure. It states the content categories included but does not explain how the optional state or set_aside filters affect results, whether the output is aggregate counts or individual opportunities, how 'urgent deadlines' are determined, or whether any side effects exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core purpose and lists key content areas. It is efficient, though it reads more like a noun-phrase summary than an actionable tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is too sparse for an agent to fully understand invocation behavior. It does not clarify how the filters interact, what 'typical values' or 'urgent deadlines' mean in output terms, or how this tool compares to closely related siblings.
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%, and the description only loosely hints at 'set-asides' corresponding to the set_aside parameter. The state and max_results parameters are not explained at all, including what values are expected or how the result limit behaves.
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 conveys that the tool provides an 'Overview of available federal opportunities' and lists meaningful content dimensions such as set-asides, NAICS sectors, agencies, typical values, and urgent deadlines. It is clear as a summary/overview function, though it lacks a direct action verb and does not explicitly differentiate itself from search_opportunities.
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?
There is no guidance on when to use this snapshot tool versus the sibling tools like search_opportunities, look_up_naics, or federal_thresholds. The word 'overview' implies a high-level starting point, but no explicit when-to-use or when-not-to-use conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opportunity_detailsA
Full structured record for one opportunity by notice id (live SAM.gov if available, else sample pool). Sensitive/noisy fields are behind detail=true.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | auto | |
| notice_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses two behavioral traits: live SAM.gov fallback to sample pool and sensitive/noisy fields gated behind detail=true. However, it leaves ambiguity around how detail is set since the input schema does not include a detail parameter, and it says nothing about error behavior or response shape.
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 entire description is a single focused sentence that front-loads the core purpose and then adds relevant caveats. Every phrase earns its place, with no filler or repetition.
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 no output schema and no annotations, the description carries the full burden of explaining behavior. It fails to clarify the detail=true mechanism, the accepted values of source, what happens when a notice_id has no match, or what the full structured record looks like. This leaves an agent with important gaps for correct invocation.
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?
Notice_id is clearly explained as the lookup key, and the live/sample pool note vaguely relates to the source parameter. But the source parameter itself is never explicitly described, and detail=true is mentioned without being a property in the input schema, creating confusion about whether it is a request parameter or a response characteristic.
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 uses a specific phrase 'Full structured record for one opportunity by notice id' that clearly identifies both the resource type and the lookup scope. It also differentiates itself from the sibling search_opportunities tool by emphasizing a single record rather than a search result set.
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 implies a clear use case: use this tool when you need a complete record for a specific opportunity identified by notice_id. It does not explicitly name alternatives or exclusions, but the 'by notice id' qualifier provides enough context to distinguish it from search-oriented siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opportunity_typeA
Explain a SAM.gov opportunity type (ptype) code. Official: o=Solicitation, k=Combined Synopsis/Solicitation, r=Sources Sought, p=Presolicitation, u=J&A, a=Award, s=Special Notice, g=Surplus, i=Intent to Bundle.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and mostly succeeds by enumerating all supported code mappings. It does not specify behavior for unknown or case-variant codes or the return format, but the mapping itself makes the tool's behavior largely transparent.
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 purpose is front-loaded in one sentence, followed by a compact table of code mappings. Every line carries information, and there is no filler or repetition.
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 single-parameter lookup tool with no output schema, the description is nearly complete. It could add a note about return format or invalid-code handling, but the low complexity means an agent can invoke it correctly with the information provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides zero description coverage for the single 'code' parameter, so the description must compensate. It does so fully by listing every accepted code and its meaning, which gives the agent everything it needs to construct a valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Explain a SAM.gov opportunity type (ptype) code.' It then supplies the full code-to-label map, which clearly distinguishes this lookup tool from siblings like search_opportunities or look_up_naics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent should use this tool when it has a ptype code and needs its official meaning. However, the description does not explicitly state when not to use it or name alternatives for related lookups such as NAICS or set-aside codes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_opportunitiesA
Search federal contract opportunities (beta.SAM.gov).
Filters: free-text query, agency, set-aside (small/8a/hubzone/wosb/sdvosb), NAICS (sector or 2-6 digit code), performance state (2-letter), opportunity type code, value range (USD), and response-deadline window. Returns typed results distinguishing no-match from an upstream failure.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| naics | No | ||
| query | No | ||
| state | No | ||
| agency | No | ||
| source | No | auto | |
| set_aside | No | ||
| type_code | No | ||
| max_value_usd | No | ||
| min_value_usd | No | ||
| due_within_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | |
| status | Yes | |
| records | No | |
| diagnostics | No | |
| retrieved_at | No | |
| total_records | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds a valuable behavioral note: 'Returns typed results distinguishing no-match from an upstream failure,' which helps an agent interpret failures correctly. It also notes the beta.SAM.gov source, but does not cover rate limits, authentication, or pagination.
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 concise and front-loaded, starting with the core action and source before enumerating filters. Every sentence adds value, and the filter list is dense without being padded. It avoids repeating schema field names verbatim and stays appropriately short for its complexity.
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 11 parameters and zero schema descriptions, the description covers most essential invocation concerns: what is searched, the source, available filters, and result behavior. The 'source' parameter is left unexplained and limit behavior is not described, but the presence of an output schema partially reduces the need to document return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful format and unit context for many parameters: set-aside values, NAICS code length, state as 2-letter, value range in USD, and response-deadline window. It omits semantics for 'limit' and 'source,' which remain ambiguous aside from their schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search federal contract opportunities (beta.SAM.gov).' It names a specific verb, resource, and lists the major filter dimensions. It does not explicitly differentiate from sibling tools like opportunity_details or market_snapshot_tool, but the search framing is distinguishable enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives, and it does not mention exclusions or prerequisites. It lists filters but does not explain when a search would be preferred over look_up_naics, opportunity_details, or market_snapshot_tool. This leaves usage context entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solicitation_reviewA
Phase-3 evidence-backed solicitation review.
Looks up the notice (live SAM.gov by notice id, else sample), fetches the full description and attachment metadata (bounded, content-type checked), then combines BIDDER CAPABILITY facts with source-linked extraction of submission instructions, evaluation factors, mandatory clauses, period/place, and amendment history.
Missing bidder facts or missing documents surface as findings — a gap can never inflate the result toward 'potential_fit'.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | auto | |
| notice_id | Yes | ||
| capabilities | No | ||
| certifications | No | ||
| clearance_level | No | ||
| past_fed_primes | No | ||
| geographic_reach | No | ||
| naics_experience | No | ||
| is_small_business | No | ||
| bonding_capacity_usd | No | ||
| insurance_limits_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does this well. It discloses live SAM.gov lookup with sample fallback, bounded and content-type-checked attachment metadata fetching, source-linked extraction, and a clear missing-data policy: gaps surface as findings and can never inflate the result toward 'potential_fit'.
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 dense but efficient, with no filler. It front-loads the purpose, then explains the process and closes with a behavioral guardrail. Every sentence adds relevant information.
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?
The description explains the overall behavior and result philosophy well, but with 11 parameters, no output schema, and no annotations, it leaves important gaps: individual parameter semantics, output format, and explicit use-case boundaries. It is usable but not fully complete for a complex 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%, and the description only groups the many inputs under 'BIDDER CAPABILITY facts' without explaining individual parameters such as source, certifications, clearance_level, past_fed_primes, or bonding_capacity_usd. The parameter names provide some self-evident meaning, but the description does not compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a solicitation review operation that looks up a notice and combines bidder capability facts with extracted solicitation data. It is specific about the resource and actions, though it does not explicitly distinguish itself from the sibling analyze_solicitation tool.
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?
There is no explicit guidance about when to use this tool versus analyze_solicitation or other siblings. The 'Phase-3' label suggests a stage in a workflow, and the description implies evidence-backed review, but it never states conditions, exclusions, or alternatives.
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.
9 tool updates
v0.4.0- First observed
analyze_solicitation - First observed
federal_thresholds - First observed
look_up_naics - First observed
look_up_set_aside - First observed
market_snapshot_tool - First observed
opportunity_details - First observed
opportunity_type - First observed
search_opportunities - First observed
solicitation_review
TDQS
Scored across 9 tools
Most tools have distinct purposes: search vs details vs analysis vs reference lookups are clearly separated. However, analyze_solicitation and solicitation_review overlap in solicitation-focused assessment, and market_snapshot_tool could be confused with search_opportunities by agents looking for an overview.
Most tools use verb_noun patterns like search_opportunities, look_up_naics, analyze_solicitation, and federal_thresholds. This is inconsistent with market_snapshot_tool and opportunity_details, which use noun_phrase naming, and the mix of 'look_up' vs 'lookup' style is not fully predictable.
Nine tools is a well-scoped size for a federal procurement domain, covering search, reference, and analysis workflows without bloat. Each tool serves a distinct functional area, and the count feels neither thin nor overwhelming.
The server covers core workflows: searching opportunities, viewing details, understanding codes/classifications, and analyzing solicitation fit. Minor gaps exist, such as no direct tool for listing agencies or saving/tracking opportunities, but the main user journey is supported end-to-end.
Maintenance
Related MCP Connectors
MCP access to the U.S. federal procurement graph: contracts, opportunities, entities, and more.
Federal+SLED govcon MCP: SAM, USASpending, recompete, hearings, policy intel, search. Private AI.
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.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables research of federal contract awards and competitive landscape analysis using the USASpending.gov API. Supports searching for contracts, analyzing recipients, tracking spending trends, and identifying market opportunities in government contracting.2MIT
- 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-
- AlicenseAqualityBmaintenanceSearch and analyze U.S. federal government contracts and opportunities from SAM.gov. Tools for keyword search, contract details, competitive analysis, and capability statement drafting — built for AI agents via x402 USDC micropayments.32MIT
- 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.-