US Federal Procurement MCP
美国联邦采购 MCP
面向小型企业的联邦承包情报 —— 作为一个 MCP 服务器。在 Claude、Cursor 或任何 MCP 客户端中,搜索合同机会、理解预留条款和 NAICS 代码,并分析招标书对小型企业的适配性和风险。
这填补了美国小型企业(SBA)承包领域最大的空白:一个基于公共互联网训练的 LLM 无法知道当前的合同机会,也无法可靠地记住决定投标是否值得进行的预留规则、FAR 阈值和 NAICS 结构。该服务器使这些信息变得真实且可查询。
工具(9 个)
工具 | 功能 |
| 按关键词 / 机构 / 预留 / NAICS / 州 / 金额 / 截止日期搜索联邦机会 |
| 预留、行业、机构和金额概览 + 紧急截止日期 |
| 基于证据的小型企业适配性评估(不足 / 不匹配 / 需审查 / 有潜力)+ 红旗扫描(保证金、营业额、过往业绩) |
| 第 3 阶段深度审查:获取完整通知和附件,结合投标人能力档案与来源链接的提取(说明、评估因素、条款、修正案) |
| 将描述转换为 NAICS 行业 |
| 解释预留条款(小型企业、8(a)、HUBZone、WOSB、SDVOSBC…) |
| 微采购、SAT、米勒法案保证金、分包计划阈值 |
| 单个机会的完整记录(包括联系人、链接、中标)+ 州名 —— 实时或示例 |
| SAM.gov 类型代码的含义(来源寻求、招标、J&A…) |
一切都是确定性的、类型化的,并且如实说明其数据来源。
Related MCP server: GovCon
安装与运行
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连接客户端
Claude Desktop / Claude Code / Cursor → 参见 configs/mcp-config.json
(规范示例:相同的 JSON 适用于 Claude Desktop 和 Cursor;对于 Claude Code,
使用 claude mcp add)。将 PYTHONPATH 设置为此仓库;可选添加 SAM_GOV_API_KEY。
数据
默认: 一组明确标注的示例机会,因此无需密钥即可运行和测试。
实时(SAM.gov): 从您的 SAM.gov 账户获取免费公共 API 密钥 →
Account Details → request a public API key。设置SAM_GOV_API_KEY。提供者(SAMGovProvider)已与api.sam.gov/opportunities/v2/search通信,并针对真实响应结构进行了单元测试。实时数据从不伪造 —— 在设置密钥之前,返回的是标注的示例。
布局
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 运行两个作业:测试(Python 3.10/3.11/3.12)和质量(ruff
lint + 格式检查、mypy、包构建、秘密扫描)。
MIT 许可。非法律建议 —— 投标前务必阅读完整的招标书。
信任与证据规则
analyze_solicitation绝不会在缺少证据的情况下给出自信的适配性结论: 未知通知和空文本返回insufficient_information。提供者结果是类型化的(
ProviderResult):ok、no_matches、authentication_error、rate_limited、upstream_error、parse_error、no_key。在没有密钥的情况下请求sam_gov返回no_key—— 绝不会静默返回误导性的空列表。所有数据都按来源如实标注(
bundled_sample与sam_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.
Search U.S. federal contract opportunities (RFPs, bids, awards) from SAM.gov official data.
B2B, GovCon & LegalTech MCP server for live RFPs, contract parsing, compliance & proposal tools.
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.1-