# MatchAwards (remote · matchawards.com)

Search US government contracts, grants and jobs from matchawards.com. Read-only, no key.

- Trust score: 66/100 (medium)
- Change this week: +1
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-22

## Components

- remote · `matchawards.com`: 66/100 (this document), [markdown](https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards.md), [page](https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards)
- pypi · `matchawards-mcp`: 68/100, [markdown](https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards-mcp.md), [page](https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards-mcp)

## Channel facts

- Endpoint: `https://matchawards.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.4`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-22.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 39/100
  - 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3212 tokens (~292/item across 11 items; 10 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability check failed: schema churn in the 13 days we've observed: 2 tool removals, 0 breaking changes, 0 auth/transport breaks, 6 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 10 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 12 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

## Install

### How do I install the MatchAwards MCP server?

MatchAwards is a hosted endpoint at https://matchawards.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http matchawards-matchawards-mcp 'https://matchawards.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "matchawards-matchawards-mcp": {
      "url": "https://matchawards.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "matchawards-matchawards-mcp": {
      "type": "http",
      "url": "https://matchawards.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.matchawards-matchawards-mcp]
url = "https://matchawards.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "matchawards-matchawards-mcp": {
      "type": "remote",
      "url": "https://matchawards.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add matchawards-matchawards-mcp --url 'https://matchawards.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  matchawards-matchawards-mcp:
    url: "https://matchawards.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "matchawards-matchawards-mcp": {
      "Transport": "http",
      "Url": "https://matchawards.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add matchawards-matchawards-mcp -t streamable-http -u 'https://matchawards.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "matchawards-matchawards-mcp": {
      "type": "http",
      "url": "https://matchawards.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-21 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7.

### 2026-10-13 (score 65, −6)

- [security regression] Stability: 0.10 → fail
- [security regression] Tool “find_contacts” was removed
- [security regression] Tool “search_by_naics” was removed
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “get_opportunity” rewrote its description, which is the text the model reads
- [security] Tool “search_contracts” rewrote its description, which is the text the model reads
- [security] Tool “search_grants” rewrote its description, which is the text the model reads
- [security] Tool “search_jobs” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 248 → 292
- [functional] First check of Capabilities: pass
- [functional] First check of Schema quality: 0
- [functional] New resource “matchawards-results”
- [functional] Server version: 1.0.2 → 1.0.4
- [functional] Server version: 0.3.0 → 1.0.2
- [functional] New tool “lookup_naics”
- [functional] New tool “search_awards”
- [functional] New tool “show_results”
- [functional] New tool “assess_opportunity”
- [functional] New tool “find_teaming_partners”
- [functional] New tool “get_company”
- [cosmetic] “search_contracts” added an optional parameter “agency”
- [cosmetic] “search_contracts” reworded the description of “naics”
- [cosmetic] “search_grants” reworded the description of “naics”
- [cosmetic] “search_jobs” reworded the description of “naics”
- [cosmetic] “search_jobs” reworded the description of “posted_within_days”
- [cosmetic] Tool “get_opportunity” changed its title: Get opportunity details
- [cosmetic] Tool “search_contracts” changed its title: Search government contracts
- [cosmetic] Tool “search_grants” changed its title: Search grants
- [cosmetic] Tool “search_jobs” changed its title: Search jobs

### 2026-10-11 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-10 (score 70, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-09 (score 70)

First indexed and scored.

## MCP tools (10)

### `search_contracts` (~531 tokens)

Search government contracts

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.

Input parameters:

- `agency`: Agency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names.
- `cursor`: next_cursor from the previous response. Pass it with the same filters to get the next page.
- `keyword`: 2 to 100 characters matched against the title only.
- `limit` (integer): Number of results to return, 1 to 50.
- `naics`: 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…
- `open`: 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.
- `posted_within_days`: Only items posted in the last N days, 1 to 180 (default 180).
- `set_aside`: Set-aside code, e.g. 'SBA' or 'SDVOSBC'. Federal contracts only.
- `state`: Two-letter US state code, e.g. 'VA'. Many federal notices have no state, so this filter skips them.
- `type`: Narrow to federal or to state contracts. Leave empty for both.

Output parameters:

- `as_of`: When the API generated the results (ISO time).
- `has_more` (boolean): true: call again with cursor=next_cursor and the same filters.
- `next_cursor`
- `note`
- `results` (array)
- `warning`: Set when paging stopped early; the results so far are still valid.

### `search_grants` (~356 tokens)

Search grants

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.

Input parameters:

- `cursor`: next_cursor from the previous response. Pass it with the same filters to get the next page.
- `keyword`: 2 to 100 characters matched against the title only.
- `limit` (integer): Number of results to return, 1 to 50.
- `naics`: 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.
- `open`: 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.
- `posted_within_days`: Only items posted in the last N days, 1 to 180 (default 180).

Output parameters:

- `as_of`: When the API generated the results (ISO time).
- `has_more` (boolean): true: call again with cursor=next_cursor and the same filters.
- `next_cursor`
- `note`
- `results` (array)
- `warning`: Set when paging stopped early; the results so far are still valid.

### `search_jobs` (~331 tokens)

Search jobs

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

Input parameters:

- `cursor`: next_cursor from the previous response. Pass it with the same filters to get the next page.
- `keyword`: 2 to 100 characters matched against the title only.
- `limit` (integer): Number of results to return, 1 to 50.
- `naics`: 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.
- `posted_within_days` (integer): Only jobs posted within the last N days, 1 to 30 (default 30).
- `state`: Two-letter US state code, e.g. 'VA'. Many federal notices have no state, so this filter skips them.

Output parameters:

- `as_of`: When the API generated the results (ISO time).
- `has_more` (boolean): true: call again with cursor=next_cursor and the same filters.
- `next_cursor`
- `note`
- `results` (array)
- `warning`: Set when paging stopped early; the results so far are still valid.

### `get_opportunity` (~172 tokens)

Get opportunity details

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.

Input parameters:

- `id` (string, required): The id field of a search result.

Output parameters:

- `agency`
- `agency_id`: The agency's MatchAwards id.
- `ai`: AI-generated notes on this opportunity, or null. Label them as AI-generated when you show or quote them.
- `ai_matched_naics`: Only when you filtered by naics: requested codes this contract notice matched only because MatchAwards' AI suggested them, not its own codes. Call such a match AI-suggested.
- `as_of`
- `city`
- `contacts` (array): Published points of contact; [] if none.
- `description`: Up to 2000 characters.
- `id` (string): Pass to get_opportunity for the description and contacts.
- `matched_naics`: Only when you filtered by naics: the requested codes this record carries: its own code (in naics) or, for a grant or job, another code of its program or occupation.
- `naics`: On state notices (type state) the naics code itself is AI-assigned.
- `no_fixed_deadline`: true: the deadline is a placeholder date.
- `note`
- `office`
- `posted_at`: Date, YYYY-MM-DD.
- `response_deadline`: Date, YYYY-MM-DD; null if none.
- `sam_url`: The SAM.gov notice (federal only). Show it as a markdown link.
- `set_aside`
- `solicitation_number`
- `state`
- `title`
- `type`: federal, state, grant or job.
- `url`: The posting on matchawards.com. Show it as a markdown link.

### `lookup_naics` (~196 tokens)

Look up NAICS codes

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

Input parameters:

- `limit` (integer): Number of codes to return, 1 to 25.
- `query` (string, required): Words, e.g. 'cybersecurity', or the first 2 to 6 digits of a code, e.g. '5415'.

Output parameters:

- `as_of`
- `note`
- `results` (array)

### `search_awards` (~507 tokens)

Search past awards

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

Input parameters:

- `agency`: Agency name, e.g. 'Department of Veterans Affairs'; matched to the closest MatchAwards agency, which the result note names.
- `awarded_within_days` (integer): Only awards from the last N days, 1 to 1095 (default 365).
- `awardee`: Part of the awardee's name, 2 to 100 characters.
- `cursor`: next_cursor from the previous response. Pass it with the same filters to get the next page.
- `keyword`: 2 to 100 characters matched against the title only.
- `limit` (integer): Number of results to return, 1 to 50.
- `naics`: 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`: Two-letter US state code of the place of performance.
- `type` (string): contract_award (federal contracts), grant_award, or any (both).
- `uei`: The awardee's 12-character UEI.

Output parameters:

- `as_of`: When the API generated the results (ISO time).
- `has_more` (boolean): true: call again with cursor=next_cursor and the same filters.
- `next_cursor`
- `note`
- `results` (array)
- `warning`: Set when paging stopped early; the results so far are still valid.

### `get_company` (~173 tokens)

Get company award history

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

Input parameters:

- `uei` (string, required): 12-character UEI, e.g. 'C3KXNLTAAY98'.

Output parameters:

- `as_of`
- `coverage_note`
- `duns`
- `first_award_date`
- `last_award_date`
- `location`
- `name`
- `note`
- `other_names` (array): Other spellings in award records.
- `recent_awards` (array): Up to 10, newest first.
- `top_agencies` (array)
- `top_naics` (array): From contract awards only.
- `totals`
- `uei` (string)

### `assess_opportunity` (~338 tokens)

Assess an opportunity

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.

Input parameters:

- `id` (string, required): The id field of a search result.
- `my_naics`: 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`: The user's set-aside code, e.g. 'SBA' or 'SDVOSBC', to compare with the opportunity's.

Output parameters:

- `ai`: AI-generated notes on this opportunity, or null. Label them as AI-generated when you show or quote them.
- `as_of`
- `award_value_range`: Quartiles of the similar awards' amounts (USD); null with fewer than 3 amounts.
- `basis`: 'same NAICS and agency', 'same NAICS, all agencies', or null (no NAICS).
- `coverage_note`
- `naics_match`: Whether the opportunity's NAICS is one of my_naics; null when my_naics was not given.
- `note`
- `opportunity`
- `sample`
- `set_aside_match`: Whether the opportunity is set aside for my_set_aside; null when it was not given. An opportunity without a set-aside is open to all firms.
- `similar_awards` (array): The 5 newest similar awards.
- `typical_winners` (array): Up to 5 firms that won similar work, most awards first, then largest total.
- `warning`: Set when the award lookup was cut short; the figures cover what was read.

### `find_teaming_partners` (~271 tokens)

Find teaming partners

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.

Input parameters:

- `id` (string, required): 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).

Output parameters:

- `ai_subcontracting`: AI-generated notes on subcontracting angles for this opportunity, or null. Label them as AI-generated when you show them.
- `as_of`
- `coverage_note`
- `note`
- `opportunity`
- `partners` (array): Up to 10 firms that won similar work.
- `role` (string)
- `sample`
- `warning`: Set when the award lookup was cut short; the list covers what was read.

### `show_results` (~116 tokens)

Show results

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

Input parameters:

- `ids` (array, required): Ids from search results, in the order to show them.

Output parameters:

- `as_of`: When the API generated the first row shown (ISO time).
- `failed` (array): Ids not fetched because MatchAwards was busy or failed. Call show_results again with just these ids to add them.
- `missing` (array): Ids not shown because they were not found or are not a contract or grant (a job). Retrying will not add them.
- `note`
- `results` (array)
- `warning`: Set when some ids could not be fetched (see failed).

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards#diagnostics

## Score history

- 2026-10-22: 66
- 2026-10-21: 66
- 2026-10-20: 65
- 2026-10-19: 65
- 2026-10-18: 65
- 2026-10-17: 65
- 2026-10-16: 65
- 2026-10-15: 65
- 2026-10-14: 65
- 2026-10-13: 65
- 2026-10-12: 71
- 2026-10-11: 71
- 2026-10-10: 70
- 2026-10-09: 70

## Common questions

### What is the MatchAwards MCP server?

MatchAwards is an MCP server listed in the public MCP registry as io.github.matchawards/matchawards-mcp. Search US government contracts, grants and jobs from matchawards.com. Read-only, no key. This page covers its hosted endpoint (https://matchawards.com/mcp).

### Is the MatchAwards MCP server safe to use?

MatchAwards scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the MatchAwards MCP server expose?

MatchAwards exposes 10 tools: search_contracts, search_grants, search_jobs, get_opportunity, lookup_naics, and 5 more. Their descriptions and schemas cost roughly 2,991 tokens of context every time the server is loaded.

### Does the MatchAwards MCP server require authentication?

No. We connected to MatchAwards without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the MatchAwards MCP server still maintained?

MatchAwards is still listed as active in the MCP registry. We last reached this channel on 22 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://matchawards.com/mcp
- Repository: https://github.com/matchawards/matchawards-mcp
- Website: https://matchawards.com/
- Changelog RSS feed: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards.xml
- Changelog JSON feed: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards.json
- HTML version of this page: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards
