company_gov_opportunities next channel
Status: Modified (additive output fields
resolutionStatus+matchedEntityName, plus description fixes; parameters and existing output fields unchanged) This tool is on the privatenextMCP channel for allow-listed orgs. When promoted, this file moves tomcp-tools/company-gov-opportunities.md.
Find open federal solicitations where a specific company is the incumbent contractor or a likely bidder, based on its NAICS codes and existing contract portfolio. Resolves the company via SAM.gov, then searches for matching opportunities. Use when a user names ONE specific company and asks whether it holds or could win federal contracts, is an incumbent, or has open solicitations to bid on.
Result interpretation: check resolutionStatus. "resolved" means the company was found in SAM.gov (matchedEntityName holds its canonical legal name); a "resolved" company with totalOpportunities: 0 is NORMAL and expected for most companies — do not retry or invent a reason. "not_found" (matchedEntityName null) means the company is not registered in SAM.gov, so no opportunity search ran.
Integration required: datagov (SAM.gov / Data.gov)
Cache schema version: super.getCacheSchemaVersion() + 1 (differs from base — the output envelope gained fields, so a next caller will not be served a v1-shaped cached payload that lacks resolutionStatus / matchedEntityName)
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
companyDomain | string | Required | — | The company domain to look up (e.g. "boozallen.com"), 1–253 chars. Protocol prefixes (http://, https://), leading www., and trailing paths/queries/fragments are accepted and stripped automatically; case is normalized. |
includeIncumbentOnly | boolean | Optional | false | Only show opportunities where the company is the incumbent. |
daysUntilDeadline | number | Optional | — | Filter by deadline (e.g. 90 = opportunities closing in the next 90 days). Range 1–365. |
limit | number | Optional | 25 | Maximum number of opportunities to return (1–50). |
Response Format
{
"companyName": "BOOZ ALLEN HAMILTON INC.",
"companyDomain": "boozallen.com",
"resolutionStatus": "resolved",
"matchedEntityName": "BOOZ ALLEN HAMILTON INC.",
"samEntity": {
"uei": "ABC123DEF456",
"cageCode": "1ABC2",
"legalBusinessName": "BOOZ ALLEN HAMILTON INC."
},
"opportunities": [
{
"opportunityId": "SOL-2026-00123",
"title": "Enterprise IT Modernization Services",
"agency": "Department of Defense",
"responseDeadline": "2026-10-15T17:00:00Z",
"daysUntilDeadline": 64,
"incumbentStatus": "incumbent",
"matchReason": "Existing contracts with Department of Defense in NAICS 541512",
"link": "https://sam.gov/opp/SOL-2026-00123"
}
],
"totalOpportunities": 1
}
Response fields
| Field | Meaning |
|---|---|
resolutionStatus | New in next. Whether the company was resolved in the SAM.gov registry. "resolved" = found (matchedEntityName populated); "not_found" = could not resolve (no opportunity search ran). |
matchedEntityName | New in next. Canonical SAM.gov legal business name when resolved; null when the company could not be resolved. Distinct from the companyDomain echo. |
companyName | Resolved company name from SAM.gov (when resolved) or the name derived from the domain (when not found). |
companyDomain | The normalized company domain that was looked up. |
samEntity | SAM.gov entity registration details; omitted when the company was not found. Contains uei, optional cageCode, and legalBusinessName. |
opportunities | Array of matching federal opportunities with incumbent status. Empty when none match or the company was not resolved. |
opportunities[].opportunityId | Solicitation identifier. |
opportunities[].title | Solicitation title. |
opportunities[].agency | Contracting agency. |
opportunities[].responseDeadline | Response deadline (ISO 8601); may be absent. |
opportunities[].daysUntilDeadline | Days remaining until the response deadline; may be absent. |
opportunities[].incumbentStatus | One of incumbent, likely_bidder, or unknown. |
opportunities[].matchReason | Human-readable explanation of why the opportunity matched (agency and/or NAICS overlap). |
opportunities[].link | Link to the opportunity on SAM.gov. |
totalOpportunities | Total number of matching opportunities (before limit truncation). A "resolved" company with 0 here is normal. |
Example Usage
{
"tool": "company_gov_opportunities",
"parameters": {
"companyDomain": "boozallen.com",
"daysUntilDeadline": 90,
"limit": 25
}
}
Related Tools
search_gov_opportunities— use for cross-company keyword/agency/NAICS opportunity searches (not tied to one company). (Nonext-channel variant; links to the stable page.)company_gov_relationships— use for prime/subcontractor teaming relationships. (Nonext-channel variant; links to the stable page.)company_contracts— use for a company's existing awarded contracts (not open opportunities).
Changelog
2026-08-12 — Resolution status output fields + description fixes (PR 1/2)
Availability: Live on
nextonly (allow-listed orgs viaPOST /api/mcp/next). This entry graduates to the public channel when promoted in PR 2/2.
Why this changed: A live audit found the tool returned totalOpportunities: 0 for every company tried — including federal heavyweights (Booz Allen, Palantir, Cisco, Microsoft) — with the EXACT same empty shape as a fabricated domain. A caller could not distinguish "company resolved in SAM.gov but has no open matching solicitations" (normal, expected for most companies) from "the domain could not be resolved". The description also lacked when-NOT-to-use guidance and neighbor cross-references, so a model could equally reach for search_gov_opportunities or company_gov_relationships.
Additive changes
- Added
resolutionStatus+matchedEntityNameoutput fields.resolutionStatusis"resolved"(found in the SAM.gov registry) or"not_found"(could not resolve — no opportunity search ran).matchedEntityNameis the canonical SAM.gov legal business name when resolved, ornullwhen not. Together they let callers attribute atotalOpportunities: 0result to "resolved, no open matches" vs "could not resolve", which v1 could not express. - Added when-to-use / when-NOT-to-use with neighbor cross-references. Use when a user names ONE specific company and asks whether it holds or could win federal contracts, is an incumbent, or has open solicitations. Do NOT use for cross-company keyword/agency/NAICS searches (use
search_gov_opportunities) or for prime/subcontractor teaming relationships (usecompany_gov_relationships); for a company's existing awarded contracts usecompany_contracts. - Documented that
totalOpportunities: 0on a resolved company is normal. The description now states that a"resolved"company withtotalOpportunities: 0is expected for most companies and is NOT an error to retry or rationalize.
What stayed the same
- All parameters (
companyDomain,includeIncumbentOnly,daysUntilDeadline,limit) are unchanged. - The existing envelope fields (
companyName,companyDomain,samEntity,opportunities[],totalOpportunities) are unchanged — the two new fields are additive. - Tool key (
company_gov_opportunities), credit cost, and the SAM.gov/USAspending resolution + scoring logic are identical to v1.
Cache schema version: super.getCacheSchemaVersion() + 1 — the output envelope gained fields, so a next caller must not be served a v1-shaped cached payload.