# MatchAwards (pypi · matchawards-mcp)

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

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

## Components

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

## Channel facts

- Registry: `pypi`
- Package: `matchawards-mcp`
- Version: `1.0.4`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 1 of 31 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to matchawards/matchawards-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3018 tokens (~335/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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 9 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 10 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).

## Install

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

MatchAwards runs locally as a PyPI package, launched with uvx matchawards-mcp. 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 matchawards-matchawards-mcp -- uvx matchawards-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "matchawards-matchawards-mcp": {
      "command": "uvx",
      "args": [
        "matchawards-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "matchawards-matchawards-mcp": {
      "command": "uvx",
      "args": [
        "matchawards-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add matchawards-matchawards-mcp -- uvx matchawards-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "matchawards-matchawards-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "matchawards-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add matchawards-matchawards-mcp --command uvx --arg matchawards-mcp
```

### Hermes

```yaml
mcp_servers:
  matchawards-matchawards-mcp:
    command: "uvx"
    args: ["matchawards-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "matchawards-matchawards-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "matchawards-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add matchawards-matchawards-mcp -t stdio -c uvx -a matchawards-mcp
```

### Other

```json
{
  "mcpServers": {
    "matchawards-matchawards-mcp": {
      "command": "uvx",
      "args": [
        "matchawards-mcp"
      ]
    }
  }
}
```

## 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-22 (score 68, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-10-19 (score 64, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-18 (score 79, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-14 (score 64, +30)

- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent

### 2026-10-13 (score 34, −15)

- [security regression] Malware scan: pass → unverified
- [functional] Package version: 0.3.0 → 1.0.4
- [functional] Package version: 0.3.0 → 1.0.2

### 2026-10-12 (score 49, +15)

- [security improvement] Malware scan: unverified → pass

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

First indexed and scored.

## MCP tools (9)

### `search_contracts` (~504 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).

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` (~329 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).

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.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards-mcp#diagnostics

## Score history

- 2026-10-22: 68
- 2026-10-21: 64
- 2026-10-20: 64
- 2026-10-19: 64
- 2026-10-18: 79
- 2026-10-17: 64
- 2026-10-16: 64
- 2026-10-15: 64
- 2026-10-14: 64
- 2026-10-13: 34
- 2026-10-12: 49
- 2026-10-09: 34

## 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 PyPI package (matchawards-mcp).

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

MatchAwards scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 October 2026. Its build provenance is signed and verified. 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 9 tools: search_contracts, search_grants, search_jobs, get_opportunity, lookup_naics, and 4 more. Their descriptions and schemas cost roughly 2,821 tokens of context every time the server is loaded.

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

### What licence is the MatchAwards MCP server under?

MatchAwards declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/matchawards-mcp/
- Socket report: https://socket.dev/pypi/package/matchawards-mcp
- Repository: https://github.com/matchawards/matchawards-mcp
- Website: https://matchawards.com/
- Changelog RSS feed: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards-mcp.json
- HTML version of this page: https://verifymcp.io/servers/matchawards-matchawards-mcp/matchawards-mcp
