Search US government contracts, grants and jobs from matchawards.com. Read-only, no key.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user asks whether to bid on one opportunity, or wants a qualification brief on it: days left, set-aside, AI fit notes, similar past awards, the firms that typically win such work and the usual award value. Pass the id from a search result, and optionally my_naics (up to 10 codes) and my_set_aside to check the fit. Similar awards come from MatchAwards' award records for the same NAICS at the same agency, or at all agencies when that agency has none (basis says which); sample gives the dates covered and whether every matching record was read, so state that span rather than a longer one. Award records may be incomplete, so say so; ai text is AI-generated, so label it. Never call a firm the incumbent: these are firms that won similar work. Example: id="117412688283576625". Print url, sam_url and each award's url and source_url as markdown links. Do not use for searching (search_contracts, search_grants), for finding partners (find_teaming_partners) or for job postings.
The id field of a search result.
Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored.
The user's set-aside code, e.g. 'SBA' or 'SDVOSBC', to compare with the opportunity's.
Use this when the user asks whether to bid on one opportunity, or wants a qualification brief on it: days left, set-aside, AI fit notes, similar past awards, the firms that typically win such work and the usual award value. Pass the id from a search result, and optionally my_naics (up to 10 codes) and my_set_aside to check the fit. Similar awards come from MatchAwards' award records for the same NAICS at the same agency, or at all agencies when that agency has none (basis says which); sample gives the dates covered and whether every matching record was read, so state that span rather than a longer one. Award records may be incomplete, so say so; ai text is AI-generated, so label it. Never call a firm the incumbent: these are firms that won similar work. Example: id="117412688283576625". Print url, sam_url and each award's url and source_url as markdown links. Do not use for searching (search_contracts, search_grants), for finding partners (find_teaming_partners) or for job postings.
| Argument | Type | Description |
|---|---|---|
| id* | string | The id field of a search result. |
| my_naics | any | Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored. |
| my_set_aside | any | The user's set-aside code, e.g. 'SBA' or 'SDVOSBC', to compare with the opportunity's. |
{
"type": "object",
"title": "assess_opportunityArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"pattern": "^[A-Za-z0-9_-]{1,128}$",
"description": "The id field of a search result."
},
"my_naics": {
"anyOf": [
{
"type": "string",
"pattern": "^\\s*\\d{6}(\\s*,\\s*\\d{6}){0,9}\\s*$"
},
{
"type": "null"
}
],
"title": "My Naics",
"default": null,
"description": "Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored."
},
"my_set_aside": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
],
"title": "My Set Aside",
"default": null,
"description": "The user's set-aside code, e.g. 'SBA' or 'SDVOSBC', to compare with the opportunity's."
}
}
}Use this when the user wants possible teaming partners, subcontractors or primes for one opportunity: firms that won similar awards in the same state or at the same agency. Pass the id from a search result, and optionally role (sub, prime or any). Returns up to 10 firms from MatchAwards' award records (same NAICS in the opportunity's state, then at its agency, else anywhere; sample gives the dates covered and whether every matching record was read), ranked by how many similar awards they won, each with a why line; get_company(uei) shows the history of a firm with a uei. No contact details. Award records may be incomplete, so say so; ai_subcontracting is AI-generated, so label it. Never call a firm the incumbent. Example: id="117412688283576625". Print the opportunity's url and sam_url as markdown links. Do not use for searching awards in general (search_awards), for one firm's history (get_company) or for job postings.
| Argument | Type | Description |
|---|---|---|
| id* | string | The id field of a search result. |
| role | string | sub: the user looks for subcontractors (smaller typical awards first among equals); prime: for a prime to join (larger first); any (default). |
{
"type": "object",
"title": "find_teaming_partnersArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"pattern": "^[A-Za-z0-9_-]{1,128}$",
"description": "The id field of a search result."
},
"role": {
"enum": [
"sub",
"prime",
"any"
],
"type": "string",
"title": "Role",
"default": "any",
"description": "sub: the user looks for subcontractors (smaller typical awards first among equals); prime: for a prime to join (larger first); any (default)."
}
}
}Use this when the user wants one firm's government award history and its UEI is known, e.g. from a search_awards row. Returns the firm's name and other spellings, location (city, state, country), totals for contract and grant awards, first and last award dates, top NAICS codes and agencies, and its 10 most recent awards. No contact details. Award records may be incomplete, so say so. Example: uei="C3KXNLTAAY98". Print each recent award's url and source_url as markdown links. Do not use for finding firms by name or NAICS (search_awards) or for contact details (none are available).
| Argument | Type | Description |
|---|---|---|
| uei* | string | 12-character UEI, e.g. 'C3KXNLTAAY98'. |
{
"type": "object",
"title": "get_companyArguments",
"required": [
"uei"
],
"properties": {
"uei": {
"type": "string",
"title": "Uei",
"pattern": "^[A-Za-z0-9]{12}$",
"description": "12-character UEI, e.g. 'C3KXNLTAAY98'."
}
}
}Use this when the user wants the details of one search result, or who to contact about it. Pass the id from a search result. Returns the result's row plus its description (up to 2000 characters), published points of contact (name and title only) and, when MatchAwards has them, ai: AI-generated notes on fit, subcontracting and large-prime angles and a summary. AI text is AI-generated: label it as such whenever you quote it. Example: id="117402307943537453". Print url, and sam_url for federal notices, as markdown links. Do not use for searching (search_contracts, search_grants, search_jobs) or for contact details beyond the published names and titles.
| Argument | Type | Description |
|---|---|---|
| id* | string | The id field of a search result. |
{
"type": "object",
"title": "get_opportunityArguments",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"title": "Id",
"pattern": "^[A-Za-z0-9_-]{1,128}$",
"description": "The id field of a search result."
}
}
}Use this when the user describes a line of work in words and a NAICS code is needed, or asks what a code or code prefix covers. query is words (2 to 100 characters; common terms such as cybersecurity or janitorial list their usual codes first) or 2 to 6 digits (every six-digit code starting with them). limit is 1 to 25, default 10. Pass the codes as naics to search_contracts, search_grants, search_jobs or search_awards. Print each opportunities_url that is set as a markdown link. Do not use for searching opportunities or awards themselves (the search tools take the codes).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of codes to return, 1 to 25. |
| query* | string | Words, e.g. 'cybersecurity', or the first 2 to 6 digits of a code, e.g. '5415'. |
{
"type": "object",
"title": "lookup_naicsArguments",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Number of codes to return, 1 to 25."
},
"query": {
"type": "string",
"title": "Query",
"maxLength": 100,
"minLength": 2,
"description": "Words, e.g. 'cybersecurity', or the first 2 to 6 digits of a code, e.g. '5415'."
}
}
}Use this when the user asks who won government contracts or grants: past awards by NAICS, agency, state, awardee name or UEI, with amounts and dates. Filters: type (contract_award, grant_award or any), naics (up to 10 codes), agency (a name; the note says which agency it matched), state, awardee (part of a name), uei, keyword (matched in the title; a grant award's title is its recipient's name), awarded_within_days (1 to 1095, default 365), limit (1 to 50, default 20). If has_more is true, call again with cursor=next_cursor and the same filters. Example: naics="541512", agency="Department of Veterans Affairs". Pass several NAICS codes in one call. Award records may be incomplete, so say so. Head a grant award with its awardee name and CFDA number, not its title. Pass an awardee's uei to get_company for its full history. Print each award's url and source_url as markdown links. Do not use for open opportunities to bid on (search_contracts, search_grants) or for one firm's history when its UEI is known (get_company).
| Argument | Type | Description |
|---|---|---|
| uei | any | The awardee's 12-character UEI. |
| type | string | contract_award (federal contracts), grant_award, or any (both). |
| limit | integer | Number of results to return, 1 to 50. |
| naics | any | Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored. |
| state | any | Two-letter US state code of the place of performance. |
Use this when the user wants US federal or state government contract opportunities to bid on: bids, RFPs, solicitations, set-asides. Filters: naics (up to 10 codes), state, keyword (title only), set_aside (federal only), type (federal or state), posted_within_days (1 to 180), open (default true), agency (a name; the note says which agency it matched), limit (1 to 50, default 20). If has_more is true, call again with cursor=next_cursor and the same filters. Example: naics="238160", state="VA", keyword="roof". Pass several NAICS codes in one call. Print each result's url, and sam_url for federal notices, as markdown links. Do not use for grants (search_grants), jobs (search_jobs) or one result's details (get_opportunity). When you are done searching, call show_results once with the best ids; it shows them as a card the user can pick from.
| Argument | Type | Description |
|---|---|---|
| open | any | true (the default): only items with a response deadline of today or later, US Eastern; an item with no deadline counts as closed. false: include closed ones. |
| type | any | Narrow to federal or to state contracts. Leave empty for both. |
| limit | integer | Number of results to return, 1 to 50. |
| naics | any | Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A notice matches on its own codes (matched_naics says which), or through a code MatchAwards' AI suggested: that one is listed in ai_matched_naics, so call the match AI-suggested. Unknown codes are ignored. |
| state |
Use this when the user wants US federal grants or funding opportunities. Filters: naics (up to 10 codes), keyword (title only), posted_within_days (1 to 180), open (default true: open grants of any age), limit (1 to 50, default 20). Grant notices carry no state. If has_more is true, call again with cursor=next_cursor and the same filters. Example: keyword="broadband". Pass several NAICS codes in one call. Open status may lag for grants that closed recently, so check response_deadline. Print each result's url as a markdown link. Do not use for contracts to bid on (search_contracts) or jobs (search_jobs). When you are done searching, call show_results once with the best ids; it shows them as a card the user can pick from.
| Argument | Type | Description |
|---|---|---|
| open | any | true (the default): only items with a response deadline of today or later, US Eastern; an item with no deadline counts as closed. false: include closed ones. |
| limit | integer | Number of results to return, 1 to 50. |
| naics | any | Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored. |
| cursor | any | next_cursor from the previous response. Pass it with the same filters to get the next page. |
| keyword | any | 2 to 100 characters matched against the title only. |
| posted_within_days |
Use this when the user is looking for a job, or for hiring signals, among postings from the last 30 days. Filters: naics (up to 10 codes), state, keyword (title only), posted_within_days (posted within the last 1 to 30 days, default 30), limit (1 to 50, default 20). Rows carry title, agency (the employer), state, city, posted_at and url. If has_more is true, call again with cursor=next_cursor and the same filters. Example: keyword="electrician", state="TX". Pass several NAICS codes in one call. Print each result's url as a markdown link. Do not use for contracts (search_contracts) or grants (search_grants).
| Argument | Type | Description |
|---|---|---|
| limit | integer | Number of results to return, 1 to 50. |
| naics | any | Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored. |
| state | any | Two-letter US state code, e.g. 'VA'. Many federal notices have no state, so this filter skips them. |
| cursor | any | next_cursor from the previous response. Pass it with the same filters to get the next page. |
| keyword | any | 2 to 100 characters matched against the title only. |
| posted_within_days | integer | Only jobs posted within the last N days, 1 to 30 (default 30). |
Use this last, after searching, to show the user the opportunities you picked as a card. Pass up to 10 ids from search_contracts or search_grants results, best first. Keep your reply to a short summary; the card shows the rows. Ids from search_jobs or search_awards are not shown. Do not use to search (search_contracts, search_grants) or for one result's details (get_opportunity).
| Argument | Type | Description |
|---|---|---|
| ids* | array | Ids from search results, in the order to show them. |
{
"type": "object",
"title": "show_resultsArguments",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,128}$",
"description": "The id field of a search result."
},
"title": "Ids",
"maxItems": 10,
"minItems": 1,
"description": "Ids from search results, in the order to show them."
}
}
}| agency | any | Agency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names. |
| cursor | any | next_cursor from the previous response. Pass it with the same filters to get the next page. |
| awardee | any | Part of the awardee's name, 2 to 100 characters. |
| keyword | any | 2 to 100 characters matched against the title only. |
| awarded_within_days | integer | Only awards from the last N days, 1 to 1095 (default 365). |
{
"type": "object",
"title": "search_awardsArguments",
"properties": {
"uei": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z0-9]{12}$"
},
{
"type": "null"
}
],
"title": "Uei",
"default": null,
"description": "The awardee's 12-character UEI."
},
"type": {
"enum": [
"contract_award",
"grant_award",
"any"
],
"type": "string",
"title": "Type",
"default": "any",
"description": "contract_award (federal contracts), grant_award, or any (both)."
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Number of results to return, 1 to 50."
},
"naics": {
"anyOf": [
{
"type": "string",
"pattern": "^\\s*\\d{6}(\\s*,\\s*\\d{6}){0,9}\\s*$"
},
{
"type": "null"
}
],
"title": "Naics",
"default": null,
"description": "Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored."
},
"state": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
{
"type": "null"
}
],
"title": "State",
"default": null,
"description": "Two-letter US state code of the place of performance."
},
"agency": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Agency",
"default": null,
"description": "Agency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cursor",
"default": null,
"description": "next_cursor from the previous response. Pass it with the same filters to get the next page."
},
"awardee": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Awardee",
"default": null,
"description": "Part of the awardee's name, 2 to 100 characters."
},
"keyword": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Keyword",
"default": null,
"description": "2 to 100 characters matched against the title only."
},
"awarded_within_days": {
"type": "integer",
"title": "Awarded Within Days",
"default": 365,
"maximum": 1095,
"minimum": 1,
"description": "Only awards from the last N days, 1 to 1095 (default 365)."
}
}
}| any |
| Two-letter US state code, e.g. 'VA'. Many federal notices have no state, so this filter skips them. |
| agency | any | Agency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names. |
| cursor | any | next_cursor from the previous response. Pass it with the same filters to get the next page. |
| keyword | any | 2 to 100 characters matched against the title only. |
| set_aside | any | Set-aside code, e.g. 'SBA' or 'SDVOSBC'. Federal contracts only. |
| posted_within_days | any | Only items posted in the last N days, 1 to 180 (default 180). |
{
"type": "object",
"title": "search_contractsArguments",
"properties": {
"open": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Open",
"default": null,
"description": "true (the default): only items with a response deadline of today or later, US Eastern; an item with no deadline counts as closed. false: include closed ones."
},
"type": {
"anyOf": [
{
"enum": [
"federal",
"state"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Type",
"default": null,
"description": "Narrow to federal or to state contracts. Leave empty for both."
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Number of results to return, 1 to 50."
},
"naics": {
"anyOf": [
{
"type": "string",
"pattern": "^\\s*\\d{6}(\\s*,\\s*\\d{6}){0,9}\\s*$"
},
{
"type": "null"
}
],
"title": "Naics",
"default": null,
"description": "Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A notice matches on its own codes (matched_naics says which), or through a code MatchAwards' AI suggested: that one is listed in ai_matched_naics, so call the match AI-suggested. Unknown codes are ignored."
},
"state": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
{
"type": "null"
}
],
"title": "State",
"default": null,
"description": "Two-letter US state code, e.g. 'VA'. Many federal notices have no state, so this filter skips them."
},
"agency": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Agency",
"default": null,
"description": "Agency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cursor",
"default": null,
"description": "next_cursor from the previous response. Pass it with the same filters to get the next page."
},
"keyword": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Keyword",
"default": null,
"description": "2 to 100 characters matched against the title only."
},
"set_aside": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Set Aside",
"default": null,
"description": "Set-aside code, e.g. 'SBA' or 'SDVOSBC'. Federal contracts only."
},
"posted_within_days": {
"anyOf": [
{
"type": "integer",
"maximum": 180,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Posted Within Days",
"default": null,
"description": "Only items posted in the last N days, 1 to 180 (default 180)."
}
}
}| any |
| Only items posted in the last N days, 1 to 180 (default 180). |
{
"type": "object",
"title": "search_grantsArguments",
"properties": {
"open": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Open",
"default": null,
"description": "true (the default): only items with a response deadline of today or later, US Eastern; an item with no deadline counts as closed. false: include closed ones."
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Number of results to return, 1 to 50."
},
"naics": {
"anyOf": [
{
"type": "string",
"pattern": "^\\s*\\d{6}(\\s*,\\s*\\d{6}){0,9}\\s*$"
},
{
"type": "null"
}
],
"title": "Naics",
"default": null,
"description": "Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cursor",
"default": null,
"description": "next_cursor from the previous response. Pass it with the same filters to get the next page."
},
"keyword": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Keyword",
"default": null,
"description": "2 to 100 characters matched against the title only."
},
"posted_within_days": {
"anyOf": [
{
"type": "integer",
"maximum": 180,
"minimum": 1
},
{
"type": "null"
}
],
"title": "Posted Within Days",
"default": null,
"description": "Only items posted in the last N days, 1 to 180 (default 180)."
}
}
}{
"type": "object",
"title": "search_jobsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Number of results to return, 1 to 50."
},
"naics": {
"anyOf": [
{
"type": "string",
"pattern": "^\\s*\\d{6}(\\s*,\\s*\\d{6}){0,9}\\s*$"
},
{
"type": "null"
}
],
"title": "Naics",
"default": null,
"description": "Up to 10 six-digit NAICS codes, comma-separated, e.g. '236220' or '541511,541512'. A record matches on its own codes (matched_naics says which). Unknown codes are ignored."
},
"state": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
{
"type": "null"
}
],
"title": "State",
"default": null,
"description": "Two-letter US state code, e.g. 'VA'. Many federal notices have no state, so this filter skips them."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cursor",
"default": null,
"description": "next_cursor from the previous response. Pass it with the same filters to get the next page."
},
"keyword": {
"anyOf": [
{
"type": "string",
"maxLength": 100,
"minLength": 2
},
{
"type": "null"
}
],
"title": "Keyword",
"default": null,
"description": "2 to 100 characters matched against the title only."
},
"posted_within_days": {
"type": "integer",
"title": "Posted Within Days",
"default": 30,
"maximum": 30,
"minimum": 1,
"description": "Only jobs posted within the last N days, 1 to 30 (default 30)."
}
}
}