GovGazette
Server Details
Find federal opportunities, research awards and vendors, and review dated exclusion evidence.
- Status
- Healthy
- Uptime
- 85.2% over 57 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- mooshee/govgazette-mcp
- GitHub Stars
- 0
- Server Listing
- GovGazette
TDQS
Scored across 12 tools
The generic `search` tool overlaps heavily with the specialized `search_opportunities` and `search_exclusions`, leaving an agent unsure which to pick for a given query. Similarly, `detail` and `document` both retrieve records by a known identifier, and four exclusion-related tools (check_exclusions, exclusion_changes, exclusion_context, search_exclusions) require careful reading to separate. Descriptions do help, but real boundary ambiguity remains.
All names are consistently snake_case, which is good. However, the verb pattern is mixed: several are verb_noun (check_exclusions, search_opportunities, explain_match) while others are bare nouns or ambiguous single words (detail, document, freshness, search). Still readable and predictable enough.
12 tools sit squarely in the well-scoped 3-15 range. Each tool maps to a distinct capability (search, exclusion checks, provenance, research briefs, saved searches), so the count feels earned rather than padded.
The surface covers search across collections, exclusion lookup/context/changes, record retrieval, provenance/freshness, research briefs, and saved-search management—broad coverage for a procurement research server. Minor gaps exist (e.g., no dedicated vendor or award detail tool beyond the generic search/detail paths), but core workflows are supported.
Available Tools
17 toolscheck_exclusionsCheck possible exclusion matchesRead-onlyIdempotentInspect
Check 1 to 20 identities against a dated active SAM snapshot. Pass identities as an array of objects, not a record ID or page URL. Each identity needs a name, UEI, CAGE, or NPI. Exact identifier matches and name-only possible matches remain distinct. Read coverage.freshness; stale or unknown-source empty lookups report unavailable with snapshot_status no_match_in_snapshot. No match is not clearance.
| Name | Required | Description | Default |
|---|---|---|---|
| generation | No | Retained snapshot UUID; omit for the current snapshot. | |
| identities | Yes | One to twenty identities to compare with the dated SAM snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| coverage | Yes | |
| generation | Yes |
create_saved_searchCreate a saved searchInspect
Create one private saved opportunity search with the supplied name and criteria. Requires authenticated workspace access and explicit user intent. Creates an account workspace if needed and adds a search without replacing existing searches. Returns a private feed link. The first successful check establishes a baseline; no email or external notification is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the new saved search; 1 to 100 UTF-8 bytes after trimming. | |
| criteria | Yes | Opportunity filters to save; generation, after and limit are reset by the server. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| message | Yes | First successful check establishes a baseline, not delivered changes. |
| feed_path | Yes | Private capability path; do not share it publicly. |
delete_saved_searchDelete a saved searchDestructiveInspect
Permanently delete one saved search owned by the authenticated private workspace, including its baseline, retained change events and feed link. Requires explicit user intent; does not delete other searches or public records.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Saved search UUID returned by create_saved_search or list_saved_searches, owned by this workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes |
delete_saved_search_workspaceDelete the saved search workspaceDestructiveInspect
Permanently delete the authenticated private saved-search workspace and all its searches, baselines, change events and feed links. Requires explicit user intent to delete the entire workspace. Does not delete the GovGazette login account, public records or another workspace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes |
detailRead a federal recordRead-onlyIdempotentInspect
Retrieve a public record using the exact collection and id returned by search, never a page URL, title or slug. Supply the returned generation for a consistent result.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Exact stable record ID returned by search, not a page URL or slug. | |
| collection | Yes | Public collection name returned by search. | |
| generation | No | Retained generation UUID from search for a consistent record snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| data | Yes | |
| text | Yes | |
| title | Yes | |
| coverage | No | Present for exclusions, including explicit source-age warnings. |
| collection | No | Absent for curated reference records. |
| generation | Yes | |
| text_length | No | Total text characters; absent from internal brief notices. |
| text_has_more | No | Whether another text chunk is available. |
| award_coverage | No | Award snapshot age and latest official release evidence. |
documentRead source textRead-onlyIdempotentInspect
Read official record text using the exact collection, id and generation returned by search. Start at offset 0 with length 1 to 16,000 characters, then use next_offset unchanged for the next chunk. Does not fetch arbitrary URLs or paths.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Stable ID of a known public record. | |
| length | No | Characters to return, from 1 to 16,000. Smaller chunks may be needed to fit the response byte budget. | |
| offset | No | Character offset for the next bounded text chunk. | |
| collection | Yes | Public record collection returned by search. | |
| generation | No | Retained snapshot UUID; omit for the current snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| text | Yes | |
| offset | Yes | |
| coverage | No | Present for exclusion text chunks, with the same source-age policy as detail. |
| generation | Yes | |
| provenance | No | Source metadata attached to the retained record. |
| next_offset | No | |
| document_kind | Yes |
exclusion_changesReview exclusion changesRead-onlyIdempotentInspect
Compare two retained snapshots. No longer observed does not mean reinstated; enrichment-only changes are excluded.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum changes to return, up to the service page limit. | |
| cursor | No | Opaque next_cursor from an earlier change page. | |
| to_generation | No | Newer retained snapshot UUID; omit for the current snapshot. | |
| from_generation | Yes | Older retained snapshot UUID to compare. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| meaning | Yes | |
| next_cursor | No | |
| to_coverage | Yes | |
| from_coverage | Yes | |
| to_generation | Yes | |
| from_generation | Yes |
exclusion_contextRead exclusion evidenceRead-onlyIdempotentInspect
Retrieve an exclusion with agency explanation, named restriction references, source evidence, explicit source-age warnings and supported business links.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Stable exclusion record ID returned by search_exclusions or check_exclusions. | |
| generation | No | Retained snapshot UUID; omit for the current snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| data | Yes | |
| text | Yes | |
| title | Yes | |
| coverage | Yes | Dated SAM source coverage. |
| collection | Yes | |
| generation | Yes | |
| text_length | Yes | |
| text_has_more | Yes | |
| business_context | Yes | Supported vendor and award links, with match basis. |
explain_matchExplain a vendor matchARead-onlyIdempotentInspect
Explain deterministic primary NAICS overlap between a registered vendor and opportunity. Not an eligibility determination.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_id | Yes | Stable vendor ID returned by search. | |
| opportunity_id | Yes | Stable opportunity ID returned by search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rules | Yes | |
| vendor_id | Yes | |
| generation | Yes | |
| interpretation | Yes | |
| opportunity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint: true, idempotentHint: true, and destructiveHint: false, covering safety. The description adds value by specifying that it explains 'deterministic primary NAICS overlap' and is not an eligibility determination, which is behavioral context beyond the hints. However, it doesn't detail the exact nature of the explanation (e.g., textual vs visual) but that is partially covered by having an output schema.
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 is front-loaded with the core purpose and ends with a crucial caveat. Every word earns its place, with no filler or redundancy.
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 has an output schema, so return value specifics are covered. Given its simple two-parameter input and the annotations, the description provides sufficient context for an agent to understand what the tool does and when to use it. Minor lack: omission of explicit alternative or exclusion scenarios, but the overarching purpose is clear.
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 description coverage is 100%, meaning both parameters are described in the schema. The description does not add extra meaning beyond what's in the schema, but it does mention 'registered vendor' and 'opportunity' which aligns with the parameter descriptions. This is baseline 3 as schema already carries the semantic load.
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 specific action ('Explain deterministic primary NAICS overlap') and the resources involved ('between a registered vendor and opportunity'). It also provides a crucial scoping caveat ('Not an eligibility determination') that distinguishes it from potential related tools like check_exclusions or research_opportunity, making the tool's specific purpose unmistakable.
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 clear context on when to use the tool: when explaining deterministic primary NAICS overlap between vendor and opportunity. However, it does not explicitly state when NOT to use it or mention alternative tools. The scoping note ('Not an eligibility determination') implies an alternative but does not name it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
freshnessCheck source datesRead-onlyIdempotentInspect
Report actual source dates, coverage, record counts and SHA256 provenance.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| history | Yes | |
| sources | Yes | |
| generation | Yes |
get_saved_search_eventsRead saved search changesRead-onlyIdempotentInspect
Read the latest 100 retained change observations for one saved search owned by the authenticated private workspace. Does not change the search. Retention and missing intermediate observations are explicit; observations are not proof of delivered notifications.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Saved search UUID returned by create_saved_search or list_saved_searches, owned by this workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | Up to the latest 100 observed changes, newest first. |
| retention | Yes |
list_saved_searchesList saved searchesRead-onlyIdempotentInspect
List the saved opportunity searches in the authenticated private workspace, including criteria, status and change counts. Does not change searches. Requires workspace Authorization headers on /mcp or account OAuth on /account/mcp; never accept keys in tool arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| watches | Yes | Each saved search includes its ID, status, criteria and event count. |
research_opportunityResearch an opportunityRead-onlyIdempotentInspect
Build a cited research brief with retained notice requirements, exact award-number candidates and same-industry comparisons. Does not infer an incumbent or eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Stable opportunity ID returned by search_opportunities. | |
| generation | No | Retained generation UUID from search_opportunities. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | Yes | |
| generation | Yes | |
| next_steps | Yes | |
| requirements | Yes | |
| linked_awards | Yes | |
| comparison_awards | Yes | |
| relationship_basis | Yes |
rotate_saved_search_feedReplace a saved search feed linkDestructiveInspect
Replace the private feed link for one saved search owned by the authenticated workspace, immediately revoking its previous link. Requires explicit user intent. Does not delete the search or its events. Keep the replacement link private; a lost response may mean the link changed and cannot be recovered by listing searches.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Saved search UUID returned by create_saved_search or list_saved_searches, owned by this workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| feed_path | Yes | Replacement private capability path; the previous link is revoked. |
searchSearch federal recordsRead-onlyIdempotentInspect
Search public opportunities, vendors, awards, exclusions, or reference collections. Results include provenance and a generation-pinned cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Plain-language search terms; empty lists the selected collection. | |
| limit | No | Maximum records to return, from 1 to 50. | |
| cursor | No | Opaque next_cursor from the preceding search page. | |
| collection | Yes | Public collection name, such as opportunities, vendors, awards, exclusions, or naics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Matching public records. |
| coverage | No | Exclusion-specific source age and freshness warnings, when applicable. |
| collection | Yes | Collection searched, such as opportunities or awards. |
| generation | Yes | UUID of the snapshot used for every result on this page. |
| next_cursor | No | Opaque cursor for the next page, or null at the end. |
| coverage_url | No | Public source-date endpoint, when this collection supplies it. |
| award_coverage | No | Dated award coverage and official release availability, when applicable. |
search_exclusionsSearch exclusionsRead-onlyIdempotentInspect
Filter active exclusion records by agency, program, classification, geography and dates. Limit is a maximum; large records can produce a smaller page with page_size_limited true. Continue with next_cursor and unchanged filters and limit. Preserve generation and read coverage.freshness for source age and warnings; results are dated evidence, not clearance.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Name, identifier, or other text to find in active exclusion records. | |
| limit | No | Maximum records to return, from 1 to 50. Large records may produce a smaller page; continue with next_cursor and unchanged filters and limit. | |
| state | No | US state name or postal code in the exclusion record. | |
| agency | No | Excluding agency name or code. | |
| cursor | No | Opaque next_cursor from a previous search response. | |
| country | No | Country name or code in the exclusion record. | |
| program | No | Exclusion program name or code. | |
| generation | No | Retained snapshot UUID; omit for the current snapshot. | |
| effective_to | No | Include records effective on or before this ISO date. | |
| classification | No | Official SAM exclusion classification code or label. | |
| effective_from | No | Include records effective on or after this ISO date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| coverage | Yes | Dated source coverage, or an unavailable status. |
| generation | Yes | |
| next_cursor | No | |
| page_size_limited | Yes | Whole records were deferred to next_cursor to fit the response budget. Continue with the same filters and requested limit. |
search_opportunitiesFind federal opportunitiesBRead-onlyIdempotentInspect
Find official opportunity records by keywords, industry, set-aside, state, agency and source status. Active does not imply the deadline is open.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Plain-language keywords; empty returns notices matching the other filters. | |
| after | No | Last notice ID from next_after in the preceding page. | |
| limit | No | Maximum notices to return, from 1 to 50; defaults to 25. | |
| naics | No | Two- to six-digit NAICS industry code from a notice or the NAICS reference collection. | |
| state | No | State or territory code for the place of performance. | |
| active | No | Filter by source active status; this does not mean the response deadline is open. | |
| agency | No | Agency code on the source notice. | |
| set_aside | No | Official set-aside code from a notice or the set-asides reference collection. | |
| generation | No | Retained generation UUID from a prior result for a consistent snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| scope | Yes | Limits of this retained official-notice search. |
| filters | Yes | Applied search filters. |
| generation | Yes | |
| next_after | No | Last record ID for the next page, or null at the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, idempotent, open-world search, so the safety profile is covered. The description's one behavioral addition—clarifying that 'active' means source status, not an open deadline—is genuinely useful but largely repeats the schema description for the `active` parameter.
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 tight sentences with the core scope front-loaded in the first clause and the single caveat trailing it. No filler, no redundancy in structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and all nine parameters fully documented, the description needn't explain return values; the annotation set covers safety. It is nearly complete, only missing sibling routing and any mention of pagination intent (after/limit), which the schema handles.
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 100%, so every parameter (q, naics, state, set_aside, agency, generation, after, limit) is already documented. The description only lists filter categories at a high level and adds no syntax, format, or interaction details beyond the 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?
States a specific verb (Find) plus resource (official opportunity records) and enumerates the filterable dimensions, so the agent knows exactly what it returns. However, it does not differentiate itself from sibling tools like 'search' or 'research_opportunity', which likely overlap, leaving the agent to guess which one to pick.
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 only guidance is a caveat ('Active does not imply the deadline is open'), which tells the agent how to interpret a flag, not when to use this tool versus siblings. With 'search', 'research_opportunity', and 'detail' in the sibling set, the absence of any routing advice is a real gap.
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.
2 tool updates
- Changed
check_exclusions2 fields changed- changed
Input schema / $defs / Identity / properties / name / descriptionPrevious value: -"Person or organization name; name-only matches are possible matches."New value: +"Person or organization name, within 256 UTF-8 bytes; name-only matches are possible matches." - changed
Output schema / $defs / Identity / properties / name / descriptionPrevious value: -"Person or organization name; name-only matches are possible matches."New value: +"Person or organization name, within 256 UTF-8 bytes; name-only matches are possible matches."
- Changed
search_exclusions3 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum records to return, up to the service page limit."New value: +"Maximum records to return, from 1 to 50. Large records may produce a smaller page; continue with next_cursor and unchanged filters and limit." - added
Output schema / properties / page_size_limitedAdded value: +{ + "description": "Whole records were deferred to next_cursor to fit the response budget. Continue with the same filters and requested limit.", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "generation", - "items", - "coverage" -]New value: +[ + "generation", + "items", + "page_size_limited", + "coverage" +]
1 tool update
- Changed
document3 fields changed- changed
Input schema / properties / length / descriptionPrevious value: -"Characters to return, up to 16,000."New value: +"Characters to return, from 1 to 16,000. Smaller chunks may be needed to fit the response byte budget." - added
Input schema / properties / length / maximumAdded value: +16000 - changed
Input schema / properties / length / minimumPrevious value: -0New value: +1
7 tool updates
- Added
create_saved_search - Added
delete_saved_search - Added
delete_saved_search_workspace - Added
get_saved_search_events - Added
list_saved_searches - Added
rotate_saved_search_feed - Removed
saved_searches
9 tool updates
- Changed
check_exclusions3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
detail3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
document3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
exclusion_changes3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
exclusion_context3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
freshness7 fields changed- added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceCoverage / properties / exclusion_freshnessAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/SourceFreshness" + }, + { + "type": "null" + } + ] +} - added
Output schema / $defs / SourceCoverage / properties / reference_editionAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / $defs / SourceCoverage / properties / reference_scopeAdded value: +{ + "type": [ + "string", + "null" + ] +} - added
Output schema / $defs / SourceCoverage / properties / source_date_kindAdded value: +{ + "description": "Meaning of the supplied date; not an importer or scheduler timestamp.", + "type": "string" +} - changed
Output schema / $defs / SourceCoverage / requiredPrevious value: -[ - "dataset", - "source_url", - "source_date", - "sha256", - "input_rows", - "public_rows" -]New value: +[ + "dataset", + "source_url", + "source_date", + "sha256", + "input_rows", + "public_rows", + "source_date_kind" +] - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "attention_required": { + "type": "boolean" + }, + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warn_age_seconds": { + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" + ], + "type": "object" +}
- Changed
research_opportunity3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
search3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
- Changed
search_exclusions3 fields changed- added
Output schema / $defs / SourceFreshness / properties / attention_requiredAdded value: +{ + "type": "boolean" +} - added
Output schema / $defs / SourceFreshness / properties / warn_age_secondsAdded value: +{ + "description": "Early-warning boundary, separate from the stale-source boundary.", + "format": "int64", + "type": "integer" +} - changed
Output schema / $defs / SourceFreshness / requiredPrevious value: -[ - "state", - "evaluated_at", - "max_age_seconds" -]New value: +[ + "state", + "evaluated_at", + "max_age_seconds", + "warn_age_seconds", + "attention_required" +]
4 tool updates
- Changed
detail4 fields changed- added
Output schema / $defs / AwardAvailabilityAdded value: +{ + "properties": { + "artifact_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "check_interval_seconds": { + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "checked_at": { + "type": [ + "string", + "null" + ] + }, + "inventory_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "latest_release_date": { + "type": [ + "string", + "null" + ] + }, + "latest_release_url": { + "type": [ + "string", + "null" + ] + }, + "max_check_age_seconds": { + "format": "int64", + "type": "integer" + }, + "state": { + "type": "string" + } + }, + "required": [ + "state", + "check_interval_seconds", + "max_check_age_seconds" + ], + "type": "object" +} - added
Output schema / $defs / AwardCoverageAdded value: +{ + "properties": { + "dataset": { + "type": "string" + }, + "freshness": { + "$ref": "#/$defs/AwardFreshness" + }, + "source_date": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "dataset", + "source_date", + "source_url", + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / AwardFreshnessAdded value: +{ + "properties": { + "age_state": { + "type": "string" + }, + "age_warning_after_days": { + "format": "int64", + "type": "integer" + }, + "effective_source_date": { + "type": [ + "string", + "null" + ] + }, + "source_age_days": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "upstream": { + "$ref": "#/$defs/AwardAvailability" + }, + "warning": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "age_state", + "age_warning_after_days", + "upstream" + ], + "type": "object" +} - added
Output schema / properties / award_coverageAdded value: +{ + "description": "Award snapshot age and latest official release evidence.", + "items": { + "$ref": "#/$defs/AwardCoverage" + }, + "type": [ + "array", + "null" + ] +}
- Changed
freshness3 fields changed- added
Output schema / $defs / AwardAvailabilityAdded value: +{ + "properties": { + "artifact_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "check_interval_seconds": { + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "checked_at": { + "type": [ + "string", + "null" + ] + }, + "inventory_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "latest_release_date": { + "type": [ + "string", + "null" + ] + }, + "latest_release_url": { + "type": [ + "string", + "null" + ] + }, + "max_check_age_seconds": { + "format": "int64", + "type": "integer" + }, + "state": { + "type": "string" + } + }, + "required": [ + "state", + "check_interval_seconds", + "max_check_age_seconds" + ], + "type": "object" +} - added
Output schema / $defs / AwardFreshnessAdded value: +{ + "properties": { + "age_state": { + "type": "string" + }, + "age_warning_after_days": { + "format": "int64", + "type": "integer" + }, + "effective_source_date": { + "type": [ + "string", + "null" + ] + }, + "source_age_days": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "upstream": { + "$ref": "#/$defs/AwardAvailability" + }, + "warning": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "age_state", + "age_warning_after_days", + "upstream" + ], + "type": "object" +} - added
Output schema / $defs / SourceCoverage / properties / award_freshnessAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/AwardFreshness" + }, + { + "type": "null" + } + ], + "description": "Award age and latest official release evidence, independent of publication or scheduler state." +}
- Changed
research_opportunity4 fields changed- added
Output schema / $defs / AwardAvailabilityAdded value: +{ + "properties": { + "artifact_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "check_interval_seconds": { + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "checked_at": { + "type": [ + "string", + "null" + ] + }, + "inventory_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "latest_release_date": { + "type": [ + "string", + "null" + ] + }, + "latest_release_url": { + "type": [ + "string", + "null" + ] + }, + "max_check_age_seconds": { + "format": "int64", + "type": "integer" + }, + "state": { + "type": "string" + } + }, + "required": [ + "state", + "check_interval_seconds", + "max_check_age_seconds" + ], + "type": "object" +} - added
Output schema / $defs / AwardCoverageAdded value: +{ + "properties": { + "dataset": { + "type": "string" + }, + "freshness": { + "$ref": "#/$defs/AwardFreshness" + }, + "source_date": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "dataset", + "source_date", + "source_url", + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / AwardFreshnessAdded value: +{ + "properties": { + "age_state": { + "type": "string" + }, + "age_warning_after_days": { + "format": "int64", + "type": "integer" + }, + "effective_source_date": { + "type": [ + "string", + "null" + ] + }, + "source_age_days": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "upstream": { + "$ref": "#/$defs/AwardAvailability" + }, + "warning": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "age_state", + "age_warning_after_days", + "upstream" + ], + "type": "object" +} - added
Output schema / $defs / RecordDetail / properties / award_coverageAdded value: +{ + "description": "Award snapshot age and latest official release evidence.", + "items": { + "$ref": "#/$defs/AwardCoverage" + }, + "type": [ + "array", + "null" + ] +}
- Changed
search4 fields changed- added
Output schema / $defs / AwardAvailabilityAdded value: +{ + "properties": { + "artifact_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "check_interval_seconds": { + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "checked_at": { + "type": [ + "string", + "null" + ] + }, + "inventory_http_status": { + "format": "uint16", + "maximum": 65535, + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "latest_release_date": { + "type": [ + "string", + "null" + ] + }, + "latest_release_url": { + "type": [ + "string", + "null" + ] + }, + "max_check_age_seconds": { + "format": "int64", + "type": "integer" + }, + "state": { + "type": "string" + } + }, + "required": [ + "state", + "check_interval_seconds", + "max_check_age_seconds" + ], + "type": "object" +} - added
Output schema / $defs / AwardCoverageAdded value: +{ + "properties": { + "dataset": { + "type": "string" + }, + "freshness": { + "$ref": "#/$defs/AwardFreshness" + }, + "source_date": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "dataset", + "source_date", + "source_url", + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / AwardFreshnessAdded value: +{ + "properties": { + "age_state": { + "type": "string" + }, + "age_warning_after_days": { + "format": "int64", + "type": "integer" + }, + "effective_source_date": { + "type": [ + "string", + "null" + ] + }, + "source_age_days": { + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "upstream": { + "$ref": "#/$defs/AwardAvailability" + }, + "warning": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "age_state", + "age_warning_after_days", + "upstream" + ], + "type": "object" +} - added
Output schema / properties / award_coverageAdded value: +{ + "description": "Dated award coverage and official release availability, when applicable.", + "items": { + "$ref": "#/$defs/AwardCoverage" + }, + "type": [ + "array", + "null" + ] +}
8 tool updates
- Changed
check_exclusions7 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / ExclusionMatch / properties / snapshot_statusAdded value: +{ + "description": "Observed lookup outcome in the dated snapshot, even when status is unavailable.", + "type": "string" +} - changed
Output schema / $defs / ExclusionMatch / properties / status / descriptionPrevious value: -"Distinguishes exact-identifier, possible-name and no-match outcomes."New value: +"Exact or possible match, fresh-snapshot no-match, or unavailable. Stale,\nunknown and missing sources never produce a clean no-match status." - changed
Output schema / $defs / ExclusionMatch / requiredPrevious value: -[ - "identity", - "status", - "records", - "truncated" -]New value: +[ + "identity", + "status", + "snapshot_status", + "records", + "truncated" +] - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - changed
Output schema / properties / coverage / $refPrevious value: -"#/$defs/JsonObject"New value: +"#/$defs/ExclusionCoverage"
- Changed
detail4 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - added
Output schema / properties / coverageAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ExclusionCoverage" + }, + { + "type": "null" + } + ], + "description": "Present for exclusions, including explicit source-age warnings." +}
- Changed
document4 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - added
Output schema / properties / coverageAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ExclusionCoverage" + }, + { + "type": "null" + } + ], + "description": "Present for exclusion text chunks, with the same source-age policy as detail." +}
- Changed
exclusion_changes6 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - removed
Output schema / $defs / JsonObjectRemoved value: -{ - "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", - "type": "object" -} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - changed
Output schema / properties / from_coverage / $refPrevious value: -"#/$defs/JsonObject"New value: +"#/$defs/ExclusionCoverage" - changed
Output schema / properties / to_coverage / $refPrevious value: -"#/$defs/JsonObject"New value: +"#/$defs/ExclusionCoverage"
- Changed
exclusion_context4 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - changed
Output schema / properties / coverage / $refPrevious value: -"#/$defs/JsonObject"New value: +"#/$defs/ExclusionCoverage"
- Changed
research_opportunity4 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / RecordDetail / properties / coverageAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ExclusionCoverage" + }, + { + "type": "null" + } + ], + "description": "Present for exclusions, including explicit source-age warnings." +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +}
- Changed
search4 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - added
Output schema / properties / coverageAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/ExclusionCoverage" + }, + { + "type": "null" + } + ], + "description": "Exclusion-specific source age and freshness warnings, when applicable." +}
- Changed
search_exclusions4 fields changed- added
Output schema / $defs / ExclusionCoverageAdded value: +{ + "properties": { + "freshness": { + "$ref": "#/$defs/SourceFreshness", + "description": "Fresh, stale, unknown or unavailable, with age and the 24-hour warning policy." + }, + "observed_at": { + "description": "Observation time does not replace the official source timestamp.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "sha256": { + "type": [ + "string", + "null" + ] + }, + "source_date": { + "type": [ + "string", + "null" + ] + }, + "source_url": { + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present as unavailable when no SAM coverage exists in this generation.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "freshness" + ], + "type": "object" +} - added
Output schema / $defs / FreshnessStateAdded value: +{ + "enum": [ + "fresh", + "stale", + "unknown", + "unavailable" + ], + "type": "string" +} - added
Output schema / $defs / SourceFreshnessAdded value: +{ + "properties": { + "evaluated_at": { + "description": "UTC time when age was evaluated; source and observation dates are unchanged.", + "type": "string" + }, + "max_age_seconds": { + "description": "Explicit warning threshold for this daily snapshot. Not a scheduler promise.", + "format": "int64", + "type": "integer" + }, + "source_age_seconds": { + "description": "Age of the official source timestamp, never the import or enrichment timestamp.", + "format": "int64", + "type": [ + "integer", + "null" + ] + }, + "state": { + "$ref": "#/$defs/FreshnessState" + }, + "warning": { + "description": "User-facing warning, or null when within the warning threshold.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "state", + "evaluated_at", + "max_age_seconds" + ], + "type": "object" +} - changed
Output schema / properties / coverage / $refPrevious value: -"#/$defs/JsonObject"New value: +"#/$defs/ExclusionCoverage"
2 tool updates
- Changed
check_exclusions2 fields changed- added
Input schema / properties / identities / maxItemsAdded value: +20 - added
Input schema / properties / identities / minItemsAdded value: +1
- Changed
detail1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Stable record ID returned by search."New value: +"Exact stable record ID returned by search, not a page URL or slug."
5 tool updates
- Changed
exclusion_changes2 fields changed- added
Input schema / properties / limit / maximumAdded value: +50 - changed
Input schema / properties / limit / minimumPrevious value: -0New value: +1
- Changed
saved_searches2 fields changed- added
Input schema / $defs / OpportunityQuery / properties / limit / maximumAdded value: +50 - changed
Input schema / $defs / OpportunityQuery / properties / limit / minimumPrevious value: -0New value: +1
- Changed
search2 fields changed- added
Input schema / properties / limit / maximumAdded value: +50 - changed
Input schema / properties / limit / minimumPrevious value: -0New value: +1
- Changed
search_exclusions2 fields changed- added
Input schema / properties / limit / maximumAdded value: +50 - changed
Input schema / properties / limit / minimumPrevious value: -0New value: +1
- Changed
search_opportunities4 fields changed- added
Input schema / properties / limit / maximumAdded value: +50 - changed
Input schema / properties / limit / minimumPrevious value: -0New value: +1 - added
Output schema / $defs / OpportunityQuery / properties / limit / maximumAdded value: +50 - changed
Output schema / $defs / OpportunityQuery / properties / limit / minimumPrevious value: -0New value: +1
12 tool updates
- Changed
check_exclusions7 fields changed- added
Input schema / $defs / Identity / properties / cage / descriptionAdded value: +"Exact five-character CAGE code, when known." - added
Input schema / $defs / Identity / properties / name / descriptionAdded value: +"Person or organization name; name-only matches are possible matches." - added
Input schema / $defs / Identity / properties / npi / descriptionAdded value: +"Exact ten-digit National Provider Identifier, when known." - added
Input schema / $defs / Identity / properties / uei / descriptionAdded value: +"Exact 12-character Unique Entity ID, when known." - added
Input schema / properties / generation / descriptionAdded value: +"Retained snapshot UUID; omit for the current snapshot." - added
Input schema / properties / identities / descriptionAdded value: +"One to twenty identities to compare with the dated SAM snapshot." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "ExclusionMatch": { + "properties": { + "identity": { + "$ref": "#/$defs/Identity" + }, + "records": { + "description": "Candidate exclusion records with match basis; not a clearance decision.", + "items": { + "$ref": "#/$defs/JsonObject" + }, + "type": "array" + }, + "status": { + "description": "Distinguishes exact-identifier, possible-name and no-match outcomes.", + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "required": [ + "identity", + "status", + "records", + "truncated" + ], + "type": "object" + }, + "Identity": { + "additionalProperties": false, + "properties": { + "cage": { + "description": "Exact five-character CAGE code, when known.", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Person or organization name; name-only matches are possible matches.", + "type": [ + "string", + "null" + ] + }, + "npi": { + "description": "Exact ten-digit National Provider Identifier, when known.", + "type": [ + "string", + "null" + ] + }, + "uei": { + "description": "Exact 12-character Unique Entity ID, when known.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "coverage": { + "$ref": "#/$defs/JsonObject" + }, + "generation": { + "type": "string" + }, + "results": { + "items": { + "$ref": "#/$defs/ExclusionMatch" + }, + "type": "array" + } + }, + "required": [ + "generation", + "results", + "coverage" + ], + "type": "object" +}
- Changed
detail4 fields changed- added
Input schema / properties / collection / descriptionAdded value: +"Public collection name returned by search." - added
Input schema / properties / generation / descriptionAdded value: +"Retained generation UUID from search for a consistent record snapshot." - added
Input schema / properties / id / descriptionAdded value: +"Stable record ID returned by search." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "collection": { + "description": "Absent for curated reference records.", + "type": [ + "string", + "null" + ] + }, + "data": { + "$ref": "#/$defs/JsonObject" + }, + "generation": { + "type": "string" + }, + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "text_has_more": { + "description": "Whether another text chunk is available.", + "type": [ + "boolean", + "null" + ] + }, + "text_length": { + "description": "Total text characters; absent from internal brief notices.", + "format": "uint", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "title": { + "type": "string" + } + }, + "required": [ + "generation", + "id", + "title", + "text", + "data" + ], + "type": "object" +}
- Changed
document6 fields changed- added
Input schema / properties / collection / descriptionAdded value: +"Public record collection returned by search." - added
Input schema / properties / generation / descriptionAdded value: +"Retained snapshot UUID; omit for the current snapshot." - added
Input schema / properties / id / descriptionAdded value: +"Stable ID of a known public record." - added
Input schema / properties / length / descriptionAdded value: +"Characters to return, up to 16,000." - added
Input schema / properties / offset / descriptionAdded value: +"Character offset for the next bounded text chunk." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "document_kind": { + "type": "string" + }, + "generation": { + "type": "string" + }, + "id": { + "type": "string" + }, + "next_offset": { + "format": "uint", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "offset": { + "format": "uint64", + "minimum": 0, + "type": "integer" + }, + "provenance": { + "anyOf": [ + { + "$ref": "#/$defs/JsonObject" + }, + { + "type": "null" + } + ], + "description": "Source metadata attached to the retained record." + }, + "text": { + "type": "string" + } + }, + "required": [ + "generation", + "id", + "text", + "offset", + "document_kind" + ], + "type": "object" +}
- Changed
exclusion_changes5 fields changed- added
Input schema / properties / cursor / descriptionAdded value: +"Opaque next_cursor from an earlier change page." - added
Input schema / properties / from_generation / descriptionAdded value: +"Older retained snapshot UUID to compare." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum changes to return, up to the service page limit." - added
Input schema / properties / to_generation / descriptionAdded value: +"Newer retained snapshot UUID; omit for the current snapshot." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "ExclusionChange": { + "properties": { + "change": { + "type": "string" + }, + "id": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "change" + ], + "type": "object" + }, + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "from_coverage": { + "$ref": "#/$defs/JsonObject" + }, + "from_generation": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/$defs/ExclusionChange" + }, + "type": "array" + }, + "meaning": { + "type": "string" + }, + "next_cursor": { + "type": [ + "string", + "null" + ] + }, + "to_coverage": { + "$ref": "#/$defs/JsonObject" + }, + "to_generation": { + "type": "string" + } + }, + "required": [ + "from_generation", + "to_generation", + "from_coverage", + "to_coverage", + "items", + "meaning" + ], + "type": "object" +}
- Changed
exclusion_context3 fields changed- added
Input schema / properties / generation / descriptionAdded value: +"Retained snapshot UUID; omit for the current snapshot." - added
Input schema / properties / id / descriptionAdded value: +"Stable exclusion record ID returned by search_exclusions or check_exclusions." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "business_context": { + "$ref": "#/$defs/JsonObject", + "description": "Supported vendor and award links, with match basis." + }, + "collection": { + "type": "string" + }, + "coverage": { + "$ref": "#/$defs/JsonObject", + "description": "Dated SAM source coverage." + }, + "data": { + "$ref": "#/$defs/JsonObject" + }, + "generation": { + "type": "string" + }, + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "text_has_more": { + "type": "boolean" + }, + "text_length": { + "format": "uint", + "minimum": 0, + "type": "integer" + }, + "title": { + "type": "string" + } + }, + "required": [ + "generation", + "collection", + "id", + "title", + "text", + "data", + "text_length", + "text_has_more", + "coverage", + "business_context" + ], + "type": "object" +}
- Changed
explain_match3 fields changed- added
Input schema / properties / opportunity_id / descriptionAdded value: +"Stable opportunity ID returned by search." - added
Input schema / properties / vendor_id / descriptionAdded value: +"Stable vendor ID returned by search." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "MatchRule": { + "properties": { + "matched": { + "type": "boolean" + }, + "opportunity_value": { + "type": [ + "string", + "null" + ] + }, + "rule": { + "type": "string" + }, + "vendor_value": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "rule", + "matched" + ], + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "generation": { + "type": "string" + }, + "interpretation": { + "type": "string" + }, + "opportunity_id": { + "type": "string" + }, + "rules": { + "items": { + "$ref": "#/$defs/MatchRule" + }, + "type": "array" + }, + "vendor_id": { + "type": "string" + } + }, + "required": [ + "generation", + "vendor_id", + "opportunity_id", + "rules", + "interpretation" + ], + "type": "object" +}
- Changed
freshness1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "SourceCoverage": { + "properties": { + "dataset": { + "type": "string" + }, + "input_rows": { + "format": "int64", + "type": "integer" + }, + "public_rows": { + "format": "int64", + "type": "integer" + }, + "sha256": { + "type": "string" + }, + "source_date": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "dataset", + "source_url", + "source_date", + "sha256", + "input_rows", + "public_rows" + ], + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "generation": { + "type": "string" + }, + "history": { + "type": "string" + }, + "sources": { + "items": { + "$ref": "#/$defs/SourceCoverage" + }, + "type": "array" + } + }, + "required": [ + "generation", + "sources", + "history" + ], + "type": "object" +}
- Changed
research_opportunity3 fields changed- added
Input schema / properties / generation / descriptionAdded value: +"Retained generation UUID from search_opportunities." - added
Input schema / properties / id / descriptionAdded value: +"Stable opportunity ID returned by search_opportunities." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "AwardSummary": { + "properties": { + "data": { + "$ref": "#/$defs/JsonObject" + }, + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "vendor_url": { + "description": "Vendor path when an exact recipient UEI is available.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "title", + "data", + "url" + ], + "type": "object" + }, + "BriefRequirements": { + "properties": { + "scope": { + "type": "string" + }, + "source": { + "anyOf": [ + { + "$ref": "#/$defs/JsonObject" + }, + { + "type": "null" + } + ], + "description": "Notice provenance for the retained text." + }, + "text": { + "type": "string" + } + }, + "required": [ + "text", + "scope" + ], + "type": "object" + }, + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + }, + "RecordDetail": { + "properties": { + "collection": { + "description": "Absent for curated reference records.", + "type": [ + "string", + "null" + ] + }, + "data": { + "$ref": "#/$defs/JsonObject" + }, + "generation": { + "type": "string" + }, + "id": { + "type": "string" + }, + "text": { + "type": "string" + }, + "text_has_more": { + "description": "Whether another text chunk is available.", + "type": [ + "boolean", + "null" + ] + }, + "text_length": { + "description": "Total text characters; absent from internal brief notices.", + "format": "uint", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "title": { + "type": "string" + } + }, + "required": [ + "generation", + "id", + "title", + "text", + "data" + ], + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "comparison_awards": { + "items": { + "$ref": "#/$defs/AwardSummary" + }, + "type": "array" + }, + "generation": { + "type": "string" + }, + "linked_awards": { + "items": { + "$ref": "#/$defs/AwardSummary" + }, + "type": "array" + }, + "next_steps": { + "items": { + "type": "string" + }, + "type": "array" + }, + "notice": { + "$ref": "#/$defs/RecordDetail" + }, + "relationship_basis": { + "type": "string" + }, + "requirements": { + "$ref": "#/$defs/BriefRequirements" + } + }, + "required": [ + "generation", + "notice", + "linked_awards", + "comparison_awards", + "relationship_basis", + "requirements", + "next_steps" + ], + "type": "object" +}
- Changed
saved_searches14 fields changed- added
Input schema / $defs / OpportunityQuery / properties / active / descriptionAdded value: +"Filter by source active status; this does not mean the response deadline is open." - added
Input schema / $defs / OpportunityQuery / properties / after / descriptionAdded value: +"Last notice ID from next_after in the preceding page." - added
Input schema / $defs / OpportunityQuery / properties / agency / descriptionAdded value: +"Agency code on the source notice." - added
Input schema / $defs / OpportunityQuery / properties / generation / descriptionAdded value: +"Retained generation UUID from a prior result for a consistent snapshot." - added
Input schema / $defs / OpportunityQuery / properties / limit / descriptionAdded value: +"Maximum notices to return, from 1 to 50; defaults to 25." - added
Input schema / $defs / OpportunityQuery / properties / naics / descriptionAdded value: +"Two- to six-digit NAICS industry code from a notice or the NAICS reference collection." - added
Input schema / $defs / OpportunityQuery / properties / q / descriptionAdded value: +"Plain-language keywords; empty returns notices matching the other filters." - added
Input schema / $defs / OpportunityQuery / properties / set_aside / descriptionAdded value: +"Official set-aside code from a notice or the set-asides reference collection." - added
Input schema / $defs / OpportunityQuery / properties / state / descriptionAdded value: +"State or territory code for the place of performance." - added
Input schema / properties / criteria / descriptionAdded value: +"Opportunity filters for create; the server chooses the current generation." - added
Input schema / properties / id / descriptionAdded value: +"Saved search UUID for events, delete, or rotate_feed." - added
Input schema / properties / name / descriptionAdded value: +"Human-readable name for a new saved search; at most 100 characters." - added
Input schema / properties / operation / descriptionAdded value: +"Action to perform: list, create, events, delete, rotate_feed, or delete_workspace." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "deleted": { + "description": "Present for deletion.", + "type": [ + "boolean", + "null" + ] + }, + "events": { + "description": "Present for events.", + "items": { + "$ref": "#/$defs/JsonObject" + }, + "type": [ + "array", + "null" + ] + }, + "feed_path": { + "description": "Present for create or feed rotation.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Present for create.", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Present for create.", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Present for create.", + "type": [ + "string", + "null" + ] + }, + "watches": { + "description": "Present for list; each watch includes status, criteria and event count.", + "items": { + "$ref": "#/$defs/JsonObject" + }, + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
search5 fields changed- added
Input schema / properties / collection / descriptionAdded value: +"Public collection name, such as opportunities, vendors, awards, exclusions, or naics." - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque next_cursor from the preceding search page." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum records to return, from 1 to 50." - added
Input schema / properties / q / descriptionAdded value: +"Plain-language search terms; empty lists the selected collection." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + }, + "RecordSummary": { + "properties": { + "data": { + "$ref": "#/$defs/JsonObject", + "description": "Source-specific fields, including provenance and official identifiers." + }, + "id": { + "description": "Stable identifier for a record in this generation.", + "type": "string" + }, + "summary": { + "description": "Short searchable text, when returned by this operation.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "Human-readable record title.", + "type": "string" + }, + "url": { + "description": "Public canonical path for the record.", + "type": "string" + } + }, + "required": [ + "id", + "title", + "url", + "data" + ], + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "collection": { + "description": "Collection searched, such as opportunities or awards.", + "type": "string" + }, + "coverage_url": { + "description": "Public source-date endpoint, when this collection supplies it.", + "type": [ + "string", + "null" + ] + }, + "generation": { + "description": "UUID of the snapshot used for every result on this page.", + "type": "string" + }, + "items": { + "description": "Matching public records.", + "items": { + "$ref": "#/$defs/RecordSummary" + }, + "type": "array" + }, + "next_cursor": { + "description": "Opaque cursor for the next page, or null at the end.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "generation", + "collection", + "items" + ], + "type": "object" +}
- Changed
search_exclusions12 fields changed- added
Input schema / properties / agency / descriptionAdded value: +"Excluding agency name or code." - added
Input schema / properties / classification / descriptionAdded value: +"Official SAM exclusion classification code or label." - added
Input schema / properties / country / descriptionAdded value: +"Country name or code in the exclusion record." - added
Input schema / properties / cursor / descriptionAdded value: +"Opaque next_cursor from a previous search response." - added
Input schema / properties / effective_from / descriptionAdded value: +"Include records effective on or after this ISO date." - added
Input schema / properties / effective_to / descriptionAdded value: +"Include records effective on or before this ISO date." - added
Input schema / properties / generation / descriptionAdded value: +"Retained snapshot UUID; omit for the current snapshot." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum records to return, up to the service page limit." - added
Input schema / properties / program / descriptionAdded value: +"Exclusion program name or code." - added
Input schema / properties / q / descriptionAdded value: +"Name, identifier, or other text to find in active exclusion records." - added
Input schema / properties / state / descriptionAdded value: +"US state name or postal code in the exclusion record." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + }, + "RecordSummary": { + "properties": { + "data": { + "$ref": "#/$defs/JsonObject", + "description": "Source-specific fields, including provenance and official identifiers." + }, + "id": { + "description": "Stable identifier for a record in this generation.", + "type": "string" + }, + "summary": { + "description": "Short searchable text, when returned by this operation.", + "type": [ + "string", + "null" + ] + }, + "title": { + "description": "Human-readable record title.", + "type": "string" + }, + "url": { + "description": "Public canonical path for the record.", + "type": "string" + } + }, + "required": [ + "id", + "title", + "url", + "data" + ], + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "coverage": { + "$ref": "#/$defs/JsonObject", + "description": "Dated source coverage, or an unavailable status." + }, + "generation": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/$defs/RecordSummary" + }, + "type": "array" + }, + "next_cursor": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "generation", + "items", + "coverage" + ], + "type": "object" +}
- Changed
search_opportunities10 fields changed- added
Input schema / properties / active / descriptionAdded value: +"Filter by source active status; this does not mean the response deadline is open." - added
Input schema / properties / after / descriptionAdded value: +"Last notice ID from next_after in the preceding page." - added
Input schema / properties / agency / descriptionAdded value: +"Agency code on the source notice." - added
Input schema / properties / generation / descriptionAdded value: +"Retained generation UUID from a prior result for a consistent snapshot." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum notices to return, from 1 to 50; defaults to 25." - added
Input schema / properties / naics / descriptionAdded value: +"Two- to six-digit NAICS industry code from a notice or the NAICS reference collection." - added
Input schema / properties / q / descriptionAdded value: +"Plain-language keywords; empty returns notices matching the other filters." - added
Input schema / properties / set_aside / descriptionAdded value: +"Official set-aside code from a notice or the set-asides reference collection." - added
Input schema / properties / state / descriptionAdded value: +"State or territory code for the place of performance." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$defs": { + "JsonObject": { + "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.", + "type": "object" + }, + "OpportunityQuery": { + "additionalProperties": false, + "properties": { + "active": { + "description": "Filter by source active status; this does not mean the response deadline is open.", + "type": [ + "boolean", + "null" + ] + }, + "after": { + "description": "Last notice ID from next_after in the preceding page.", + "type": [ + "string", + "null" + ] + }, + "agency": { + "description": "Agency code on the source notice.", + "type": [ + "string", + "null" + ] + }, + "generation": { + "description": "Retained generation UUID from a prior result for a consistent snapshot.", + "type": [ + "string", + "null" + ] + }, + "limit": { + "description": "Maximum notices to return, from 1 to 50; defaults to 25.", + "format": "uint", + "minimum": 0, + "type": [ + "integer", + "null" + ] + }, + "naics": { + "description": "Two- to six-digit NAICS industry code from a notice or the NAICS reference collection.", + "type": [ + "string", + "null" + ] + }, + "q": { + "default": "", + "description": "Plain-language keywords; empty returns notices matching the other filters.", + "type": "string" + }, + "set_aside": { + "description": "Official set-aside code from a notice or the set-asides reference collection.", + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "State or territory code for the place of performance.", + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "OpportunitySummary": { + "properties": { + "content_hash": { + "description": "Hash of retained notice content for change detection.", + "type": "string" + }, + "data": { + "$ref": "#/$defs/JsonObject" + }, + "id": { + "type": "string" + }, + "summary": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "summary", + "content_hash", + "data", + "url" + ], + "type": "object" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "properties": { + "filters": { + "$ref": "#/$defs/OpportunityQuery", + "description": "Applied search filters." + }, + "generation": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/$defs/OpportunitySummary" + }, + "type": "array" + }, + "next_after": { + "description": "Last record ID for the next page, or null at the end.", + "type": [ + "string", + "null" + ] + }, + "scope": { + "description": "Limits of this retained official-notice search.", + "type": "string" + } + }, + "required": [ + "generation", + "items", + "filters", + "scope" + ], + "type": "object" +}
7 tool updates
- Added
check_exclusions - Added
exclusion_changes - Added
exclusion_context - Added
research_opportunity - Added
saved_searches - Added
search_exclusions - Added
search_opportunities
46 tool updates
- Removed
apply_business_profile_update - Removed
assess_opportunity_for_business - Removed
check_business_exclusions - Added
detail - Added
document - Added
explain_match - Removed
export_opportunities - Removed
find_recompetes - Removed
find_recompetes_for_business - Added
freshness - Removed
get_award - Removed
get_award_evidence - Removed
get_business_awards - Removed
get_business_defaults - Removed
get_business_market - Removed
get_business_profile - Removed
get_market_summary - Removed
get_opportunity - Removed
get_opportunity_brief - Removed
get_opportunity_changes - Removed
get_opportunity_comps - Removed
get_opportunity_documents - Removed
get_opportunity_extracted - Removed
get_vendor - Removed
get_vendor_awards - Removed
get_watch_status - Removed
lookup_reference - Removed
preview_business_profile_update - Removed
resolve_identifier - Removed
review_opportunity - Removed
save_opportunity_search - Removed
save_recompete_radar - Added
search - Removed
search_awards - Removed
search_exclusions - Removed
search_extracted_facts - Removed
search_opportunities - Removed
search_opportunities_for_business - Removed
search_vendors - Removed
track_opportunity - Removed
update_award_watch - Removed
update_recompete_radar - Removed
update_saved_search - Removed
update_tracked_opportunity - Removed
watch_award - Removed
watch_vendor
2 tool updates
- Added
export_opportunities - Added
review_opportunity
17 tool updates
- Added
apply_business_profile_update - Added
assess_opportunity_for_business - Added
check_business_exclusions - Added
find_recompetes_for_business - Added
get_award_evidence - Added
get_business_awards - Added
get_business_defaults - Added
get_business_market - Added
get_business_profile - Added
get_opportunity_brief - Added
preview_business_profile_update - Added
save_recompete_radar - Added
search_opportunities_for_business - Added
update_award_watch - Added
update_recompete_radar - Added
watch_award - Added
watch_vendor
22 tool updates
- Added
find_recompetes - Added
get_award - Added
get_market_summary - Changed
get_opportunity1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
get_opportunity_changes - Changed
get_opportunity_comps1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
get_opportunity_documents - Added
get_opportunity_extracted - Changed
get_vendor1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_vendor_awards1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_watch_status1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
lookup_reference - Added
resolve_identifier - Changed
save_opportunity_search5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / delivery_channels / defaultRemoved value: -[ - "email", - "in_app" -] - removed
Input schema / properties / search_spec / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / search_spec / propertyNamesRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / search_spec / typeRemoved value: -"object"
- Added
search_awards - Added
search_exclusions - Added
search_extracted_facts - Changed
search_opportunities15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / agency / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / awarded_contractor_name / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / awardee_cage / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / awardee_uei / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - added
Input schema / properties / cursor / minLengthAdded value: +1 - added
Input schema / properties / deadline_preset / minLengthAdded value: +1 - changed
Input schema / properties / naics / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / notice_type / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - added
Input schema / properties / posted_preset / minLengthAdded value: +1 - changed
Input schema / properties / psc / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - added
Input schema / properties / q / minLengthAdded value: +1 - changed
Input schema / properties / set_aside / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - added
Input schema / properties / sort / minLengthAdded value: +1 - changed
Input schema / properties / state / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array" - } -]New value: +[ + { + "minLength": 1, + "type": "string" + }, + { + "items": { + "minLength": 1, + "type": "string" + }, + "minItems": 1, + "type": "array" + } +]
- Added
search_vendors - Changed
track_opportunity2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / delivery_channels / defaultRemoved value: -[ - "email", - "in_app" -]
- Changed
update_saved_search8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / cadence / defaultRemoved value: -"daily" - removed
Input schema / properties / delivery_channels / defaultRemoved value: -[ - "email", - "in_app" -] - removed
Input schema / properties / enabled / defaultRemoved value: -true - removed
Input schema / properties / search_spec / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / search_spec / propertyNamesRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / search_spec / typeRemoved value: -"object" - changed
Input schema / requiredPrevious value: -[ - "id", - "name", - "search_spec" -]New value: +[ + "id" +]
- Changed
update_tracked_opportunity9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / alert_cadence / defaultRemoved value: -"immediate" - removed
Input schema / properties / delivery_channels / defaultRemoved value: -[ - "email", - "in_app" -] - removed
Input schema / properties / enabled / defaultRemoved value: -true - removed
Input schema / properties / next_action / defaultRemoved value: -null - removed
Input schema / properties / next_action_due_at / defaultRemoved value: -null - removed
Input schema / properties / notes / defaultRemoved value: -null - removed
Input schema / properties / pursuit_state / defaultRemoved value: -"watching" - removed
Input schema / properties / source_profile_id / defaultRemoved value: -null
10 tool updates
- First observed
get_opportunity - First observed
get_opportunity_comps - First observed
get_vendor - First observed
get_vendor_awards - First observed
get_watch_status - First observed
save_opportunity_search - First observed
search_opportunities - First observed
track_opportunity - First observed
update_saved_search - First observed
update_tracked_opportunity
Publisher details
- Operator
- Daniel Hallman · Publisher source
- Operator website
- https://govgazette.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://govgazette.com/agents · Publisher source
- Trust center
- Not available
- Restrictions
- Public research needs no account or API key. Managing private saved searches requires a workspace key. · Publisher source
Related MCP Connectors
Government contract search and federal procurement data: SAM.gov opportunities + USASpending awards.
Search U.S. federal contract opportunities (RFPs, bids, awards) from SAM.gov official data.
51- GovTribeOAuthcom.govtribe
Search U.S. federal, state, and local government procurement data and intelligence.
US federal contracting data: open solicitations, buying agencies, contractors, price history.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables searching and filtering federal contract opportunities by keyword, agency, set-aside, NAICS, and more from any MCP client. Analyzes solicitations for small-business fit and risk, and provides reference lookups for NAICS codes, set-asides, and federal thresholds.9MIT

GovCon API MCPofficial
AlicenseAqualityBmaintenanceEnables agents to search and analyze US federal procurement data across SAM.gov opportunities, FPDS awards, SAM entities, FFATA subawards, exclusions, and full-text solicitation attachments, with 6 tools for market research, opportunity discovery, teaming, pricing, and compliance.5352 PyPIMIT- 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-
- 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.-
Glama MCP Gateway
Add one secure layer between your agents and this server.