Skip to main content
Glama
omardaaboul

US Federal Procurement MCP

by omardaaboul

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_opportunities

Search federal opportunities by keyword / agency / set-aside / NAICS / state / value / deadline

market_snapshot_tool

Set-aside, sector, agency & value overview + urgent deadlines

analyze_solicitation

Evidence-backed small-business fit assessment (insufficient / mismatch / review / potential) + red-flag scan (bonds, turnover, past-performance)

solicitation_review

Phase-3 deep review: fetches full notice + attachments, combines a bidder capability profile with source-linked extraction (instructions, evaluation factors, clauses, amendments)

look_up_naics

Translate a description into NAICS sectors

look_up_set_aside

Explain a set-aside (Small Business, 8(a), HUBZone, WOSB, SDVOSBC…)

federal_thresholds

Micro-purchase, SAT, Miller Act bond, subcontracting-plan thresholds

opportunity_details

Full record (incl. POC, links, award) + state name for one opportunity — live or sample

opportunity_type

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

Connect 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. Set SAM_GOV_API_KEY. The provider (SAMGovProvider) already talks to api.sam.gov/opportunities/v2/search and 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.md

CI 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_solicitation never produces a confident fit from missing evidence: unknown notices and empty text return insufficient_information.

  • Provider results are typed (ProviderResult): ok, no_matches, authentication_error, rate_limited, upstream_error, parse_error, no_key. Asking for sam_gov without a key returns no_key — never a silent, misleading empty list.

  • All data is honestly labeled by source (bundled_sample vs sam_gov).

Available Tools

9 tools
analyze_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
sourceNoauto
notice_idNo
set_asideNo
is_small_businessNo
response_days_leftNo
value_estimate_usdNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
code_or_labelYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNo
set_asideNo
max_resultsNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoauto
notice_idYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
naicsNo
queryNo
stateNo
agencyNo
sourceNoauto
set_asideNo
type_codeNo
max_value_usdNo
min_value_usdNo
due_within_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceNo
statusYes
recordsNo
diagnosticsNo
retrieved_atNo
total_recordsNo

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: '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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNoauto
notice_idYes
capabilitiesNo
certificationsNo
clearance_levelNo
past_fed_primesNo
geographic_reachNo
naics_experienceNo
is_small_businessNo
bonding_capacity_usdNo
insurance_limits_usdNo

TDQS

A3.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 9 tool updatesv0.4.0
    • First observedanalyze_solicitation
    • First observedfederal_thresholds
    • First observedlook_up_naics
    • First observedlook_up_set_aside
    • First observedmarket_snapshot_tool
    • First observedopportunity_details
    • First observedopportunity_type
    • First observedsearch_opportunities
    • First observedsolicitation_review

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Federal 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
    -
  • A
    license
    A
    quality
    B
    maintenance
    Search 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.
    3
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -