关于 MatchAwards
MatchAwards 是只读 MCP 服务,用于查找美国政府合同、拨款、职位及过往奖项。其工具还可查询企业历史,并生成机会评估和组队简报,无需账户或 API 密钥。
主要功能
- 01搜索合同、拨款和职位
- 02获取机会详情与联系人
- 03查询奖项和企业历史
- 04评估机会与潜在组队伙伴
- 05提供含来源链接的结构化结果
适用场景
- 01按条件查找开放合同或拨款
- 02查看企业公开获奖历史
- 03评估投标机会并寻找潜在伙伴
MCP 相关
向 MCP 客户端提供只读搜索、查询和评估工具。可通过 stdio 本地运行,也可访问托管端点 https://matchawards.com/mcp。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://matchawards.com/mcpclaude mcp add --transport http matchawards-matchawards https://matchawards.com/mcp{"mcpServers":{"matchawards-matchawards":{"type":"http","url":"https://matchawards.com/mcp"}}}在 Cursor 中打开{"servers":{"matchawards-matchawards":{"type":"http","url":"https://matchawards.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"matchawards-matchawards":{"type":"http","url":"https://matchawards.com/mcp"}}}{"mcpServers":{"matchawards-matchawards":{"serverUrl":"https://matchawards.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
10| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| open | any | 否 | true(默认):仅包含响应截止日期为今天或之后(美国东部时间)的项目;没有截止日期的项目视为已关闭。false:包含已关闭项目。 |
| type | any | 否 | 限定为联邦或州合同。留空则同时搜索两者。 |
| limit | integer | 否 | 要返回的结果数,1 到 50。 |
| naics | any | 否 | 最多 10 个六位数 NAICS 代码,以逗号分隔,例如 '236220' 或 '541511,541512'。公告与其自身代码匹配(matched_naics 会说明匹配了哪些代码),也可能通过 MatchAwards 的 AI 建议代码匹配:该代码会列在 ai_matched_naics 中,因此请称其为 AI 建议匹配。未知代码将被忽略。 |
| state | any | 否 | 两字母美国州代码,例如 'VA'。许多联邦公告没有州信息,因此此筛选条件会跳过这些公告。 |
| agency | any | 否 | 机构名称,例如 'Department of Veterans Affairs';与最接近的 MatchAwards 机构匹配,结果备注会注明该机构。 |
| cursor | any | 否 | 上一响应中的 next_cursor。使用相同的筛选条件传入,以获取下一页。 |
| keyword | any | 否 | 2 到 100 个字符,仅匹配标题。 |
| set_aside | any | 否 | 保留项目代码,例如 'SBA' 或 'SDVOSBC'。仅适用于联邦合同。 |
| posted_within_days | any | 否 | 仅包含过去 N 天内发布的项目,1 到 180(默认 180)。 |
详细介绍
MatchAwards MCP 服务
MatchAwards 让 AI Agent 能够直接访问持续更新的政府和商业合同、拨款、工作、奖项及合作机会。
这是 MatchAwards 的 Model Context Protocol 服务。它可让 Claude、Cursor、VS Code 和其他 MCP 客户端搜索美国政府合同机会、拨款和工作,以及过往合同和拨款奖项。它只读取数据,无需账户或 API 密钥。
工具
| 工具 | 返回内容 | 提示词示例 |
|---|---|---|
search_contracts | 联邦和州合同机会。筛选条件:NAICS(最多 10 个代码)、州、关键词、预留类别、仅联邦或仅州、过去 N 天内发布、仅开放机会、机构(按名称)、1 至 50 条结果、分页。 | “查找弗吉尼亚州过去一周发布的开放屋顶工程合同。” |
search_grants | 联邦拨款和资金机会。筛选条件:NAICS、关键词、过去 N 天内发布、仅开放机会、1 至 50 条结果、分页(拨款通知不含州信息)。 | “目前有开放的宽带拨款吗?” |
search_jobs | 过去 30 天内发布的职位。筛选条件:NAICS、州、关键词、过去 N 天内发布、1 至 50 条结果、分页。 | “显示过去 7 天德克萨斯州的电工职位。” |
get_opportunity | 一项机会的完整记录:搜索结果行及其描述、已公布的联系人(姓名和职务),以及 MatchAwards 提供的 AI 生成备注(ai:匹配度、推理、分包和大型主承包商角度、摘要),并标明为 AI 生成。 | “第二条结果的联系人是谁?” |
lookup_naics | 根据文字(“网络安全”)或 2 至 6 位代码前缀查找 NAICS 代码,并提供每个代码在 matchawards.com 上的页面。最多 1 至 25 个代码。 | “哪个 NAICS 代码涵盖网络安全咨询?” |
search_awards | 过往联邦合同奖项和拨款奖项:获奖方(名称、UEI、DUNS)、金额、日期、机构、NAICS、预留类别、地点、招标、合同和 CFDA 编号,以及指向 matchawards.com 和 SAM.gov 或 USAspending 的链接。筛选条件:类型、NAICS、机构(按名称)、州、获奖方名称、UEI、关键词、过去 N 天内获奖(最多 1,095 天)、1 至 50 条结果、分页。 | “过去一年中,谁赢得了 NAICS 541512 下的 VA 合同?” |
get_company | 根据 UEI 查询一家公司的获奖记录:名称、地点(城市、州、国家)、合同和拨款总额、首次和最近获奖日期、主要 NAICS 代码和机构,以及最近的 10 个奖项。不含联系方式。 | “显示 UEI C3KXNLTAAY98 的获奖记录。” |
assess_opportunity | 一项机会的资格评估简报:剩余天数(美国东部时间)、开放或已关闭、预留类别和 NAICS(以及是否符合用户的 my_set_aside 和 my_naics)、AI 生成的备注、最新的 5 个类似奖项(同一 NAICS、同一机构;如果该机构没有记录,则查询所有机构;最多取过去 3 年内最新的 150 条,并由 sample 说明读取了哪些日期以及是否已读取全部记录)、赢得类似项目的前 5 家公司(按获奖次数排序,其次按总额排序)、其获奖金额的四分位数,以及覆盖情况说明。 | “我们应该投标第一条结果吗?我们的 NAICS 是 336413,属于小型企业。” |
find_teaming_partners | 从读取的最新记录(sample)中找出最多 10 家赢得类似奖项的公司(先查机会所在州内相同 NAICS 的记录,再查同一机构;如果两者都没有结果且仍有奖项查询额度,则查任意地区的该 NAICS),按 UEI 去重,并依次按获奖次数、最近获奖时间和获奖总额排序;每家公司的 why 行均根据记录撰写。记录中没有 UEI 的公司会标为 uei: null,并注明无法查询其历史记录。role(sub、prime、any)会在获奖次数相同的公司中,优先显示典型奖项金额较小或较大的公司。仅使用公开奖项数据:不提供联系人或资料链接。 | “空军的那条通知有哪些公司可以与我们组队?” |
agency 筛选器接受一个名称。服务端会在 MatchAwards 的机构中查找该名称(先精确匹配,再匹配以该名称开头的名称,最后按 API 返回的顺序匹配其余名称),目前只按最佳匹配筛选;结果的 note 会注明该机构,并列出最多 3 个其他匹配项(一个部门可能有多个机构账户)。如果没有匹配项,则搜索范围涵盖所有机构,并在备注中说明。查找结果会缓存 10 分钟。 |
奖项记录可能不完整(联邦奖项尤其如此),因此每条奖项结果都会说明这一点。这两个简要工具会将企业描述为曾获得类似项目,而绝不会称其为现任承包商;每次调用最多发出 1 次机会请求和 6 次奖项请求(每个查询最多 3 次,由各查询共享),并在 6 秒内完成;如果任一限制导致查找提前结束,它们会根据已读取的数据作答,并提供 warning。其 sample 会说明数据所依据的奖项记录数量、记录日期,以及是否已读取所有匹配记录。拨款奖项的标题是获奖者的名称,因此会要求模型改用获奖者名称和 CFDA 编号作为标题。
所有工具均为只读且无需账户:每个工具都会在 _meta 中声明 readOnlyHint、idempotentHint、标题和 securitySchemes: [{"type": "noauth"}]。结果均为结构化数据:每个工具都会发布 outputSchema 并返回 structuredContent,同时也会提供相同的 JSON 文本,供只能读取文本的客户端使用。每条结果都包含 matchawards.com 上的 url(联邦公告还包含 sam_url),并且服务端会要求模型将其显示为 Markdown 链接。指向 matchawards.com 的链接会带上 utm_source、utm_medium 和 utm_campaign 参数,用于标识发起请求的 AI 主机(例如 utm_source=chatgpt);指向其他网站的链接保持不变。
1.0.4 中的更改
- 结果卡片可在 Claude 中渲染:Claude 只接受其自身的沙盒域名,因此不向 Claude 提供
_meta.ui.domain;其他主机仍会获得https://matchawards.com。
1.0.3 中的更改
- 托管服务:用量统计行的默认保留时间缩短至 180 天(原为 365 天),由
MATCHAWARDS_USAGE_RETENTION_DAYS设置。
1.0.2 中的更改
- 卡片由新工具
show_results提供,模型会传入选定的 ID 调用一次;搜索工具只返回数据。卡片(results-v2.html)会在原位置展开一行,并提供“询问相关问题”按钮。 - 按
naics筛选的结果会说明哪些请求的代码匹配:matched_naics(记录自身的代码),以及合同公告中的ai_matched_naics(MatchAwards 的 AI 建议代码)。 - 指向 matchawards.com 的链接会带上用于标识 AI 主机的 UTM 参数。
- 托管服务:共享限制为每分钟 1200 次请求,
/metrics还会增加工具延迟、不同调用方数量和客户端数量。
1.0 中的更改
- 移除
search_by_naics:search_contracts、search_grants和search_jobs均可单独接受相同的naics筛选器。 - 移除
find_contacts:get_opportunity会随记录的其余内容一并返回已发布的联系人。 - 结果采用结构化输出(
outputSchema和structuredContent)。只有在架构声明后,API 之后新增的字段才会出现在结果中。MatchAwards 有 AI 内容时,get_opportunity会返回ai(注明为 AI 生成的说明);否则返回 null。 - 工具注解采用封闭世界设定(
openWorldHint: false):这些工具只读取 MatchAwards 目录。 - 新增工具:
lookup_naics、search_awards、get_company、assess_opportunity和find_teaming_partners;search_contracts接受机构名称作为agency。
卡片
能够呈现 MCP Apps 的宿主(ChatGPT、Claude)会为每个回答显示一张内嵌卡片:搜索后,模型会调用 show_results,传入它选出的最多 10 个合同或拨款 ID;卡片会列出其中最多 8 个,并显示标题、机构、地点、联邦/州/拨款徽标、截止日期(剩余天数、已截止或无固定截止日期)、预留类别和 NAICS 代码。无法显示的 ID(未找到、属于职位,或因 MatchAwards 忙碌而未获取)会在列表下方计数。搜索工具只返回数据,不显示卡片。点击某一行可展开详情(发布日期、招标信息、办公室、NAICS、预留类别);其中的“Ask about this”按钮会让模型介绍该机会的详情,“Open on MatchAwards”链接则会打开对应页面。卡片是一个独立完整的 HTML 资源 ui://matchawards/results-v2.html(text/html;profile=mcp-app):不使用外部脚本或样式,也不发起网络请求,因此其 CSP 不允许任何内容。卡片只呈现工具的 structuredContent,不会自行调用工具。
其他工具会直接返回结构化结果,不显示卡片。
卡片默认关闭。设置 MATCHAWARDS_WIDGETS=1 后,资源和指向该资源的 show_results(_meta.ui.resourceUri)才会列出;其他工具的结果不受影响。tests/widget_harness/ 中提供了一个精简的宿主页面和示例结果,可用于在浏览器中检查卡片。
托管服务
托管端点运行于 https://matchawards.com/mcp。将其按 URL 添加为远程 MCP 服务(连接器)即可,无需安装任何内容,也无需密钥:
- ChatGPT:使用 URL
https://matchawards.com/mcp添加自定义连接器。 - Claude(claude.ai 或 Claude Desktop):依次点击 Settings、Connectors,使用相同 URL 添加自定义连接器。Claude Code:
claude mcp add --transport http matchawards https://matchawards.com/mcp。 - Cursor:在
mcp.json中添加{"mcpServers": {"matchawards": {"url": "https://matchawards.com/mcp"}}}。
托管端点提供相同的工具。请求频率限制如下:每个客户端地址(IPv6:每个 /64)每分钟 30 次、每 5 秒 10 次;每个 IPv6 /48 每分钟 120 次;所有客户端合计每分钟 1200 次(ChatGPT 共享池:600 次)。超出限制时,端点会返回 HTTP 429,并附带 Retry-After。
安装
该服务通过 uvx 运行,uv 中包含 uvx。
Claude Desktop
将以下内容添加到 claude_desktop_config.json(macOS:~/Library/Application Support/Claude/claude_desktop_config.json;Windows:%APPDATA%\Claude\claude_desktop_config.json),然后重启 Claude Desktop:
{
"mcpServers": {
"matchawards": {
"command": "uvx",
"args": ["matchawards-mcp"]
}
}
}
Claude Code
claude mcp add matchawards -- uvx matchawards-mcp
Cursor
将以下内容添加到 ~/.cursor/mcp.json(所有项目)或 .cursor/mcp.json(单个项目):
{
"mcpServers": {
"matchawards": {
"command": "uvx",
"args": ["matchawards-mcp"]
}
}
}
VS Code
将以下内容添加到工作区中的 .vscode/mcp.json:
{
"servers": {
"matchawards": {
"type": "stdio",
"command": "uvx",
"args": ["matchawards-mcp"]
}
}
}
其他客户端
任何能够启动 stdio 服务的 MCP 客户端都可以使用。命令为 uvx matchawards-mcp。
OpenClaw
integrations/openclaw-plugin 中包含一个原生 OpenClaw 插件(在 ClawHub 上名为 @matchawards/openclaw-plugin),其九个工具会调用托管端点;其中还包含一个名为 matchawards 的 ClawHub 技能,用 curl 指导 Agent 使用公共 REST API。两者均为只读,无需账户。插件的 tools.json 根据此服务的工具列表生成(integrations/openclaw-plugin/scripts/gen_tools.py);如果文件未及时更新,测试套件将会失败。
自行运行 HTTP 服务
matchawards-mcp --http 会通过无状态 Streamable HTTP(JSON 回复、无会话、无 SSE),在 http://127.0.0.1:8765/mcp 提供相同的工具:
uvx matchawards-mcp --http
curl -s http://127.0.0.1:8765/mcp -H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' -H 'MCP-Protocol-Version: 2025-06-18' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
请求的处理顺序如下:
- 重复的斜杠和末尾的斜杠会被折叠,因此
/mcp/和//mcp都视为/mcp。除/mcp和/healthz以外的任何路径都会返回 404。 GET /healthz返回ok,且不受速率限制。Host标头不在MATCHAWARDS_ALLOWED_HOSTS(或127.0.0.1、localhost)中时,无论请求方法是什么,都会返回 421。- 仅处理
POST /mcp。GET、DELETE和OPTIONS会返回 405(无 SSE 流、无会话、无 CORS)。 - POST 请求必须包含
Content-Length(缺少时返回 411),请求正文超过 64 KB 时返回 413。 - 先按客户端限流(对于来自 OpenAI 地址的请求,按 ChatGPT 用户限流),然后应用服务器级限额:超限时返回 429,并附带
Retry-After。
客户端标识为套接字地址;当套接字地址位于 MATCHAWARDS_TRUSTED_PROXIES 中时,则使用 X-Real-IP 标头(IPv6 按 /64 计,/48 内的所有 /64 也共享 MATCHAWARDS_RATE_PER_PREFIX_MIN)。请在设置 X-Real-IP 的反向代理后运行服务,不要直接暴露端口。限额按进程保存在内存中。下方任一变量的值无效,都会导致服务器在启动时停止。每个请求都会记录一行日志(方法、路径、状态、耗时、经过哈希处理的客户端键),不会记录标头或请求正文。
ChatGPT 请求来自 OpenAI 共享的出口地址(已发布的列表,随软件包提供并每日刷新;刷新失败时会保留上一次有效列表),因此多个用户会共用一个地址,按 IP 限流会同时限制这些用户。仅对来自这些地址的请求,才会按 x-openai-subject(ChatGPT 的每用户 ID,仅保留其带密钥的哈希值)限流;所有 ChatGPT 流量共用 MATCHAWARDS_EGRESS_PER_MIN 限额;不含该标头的请求仅计入此共享限额。其他地址发来的该标头会被忽略,且永远不会使用 User-Agent。
在 Docker 中,宿主机上的 nginx 会通过 compose 网络的网关访问容器,而不是通过回环地址,因此请准确填写该地址。使用 docker network inspect <network> --format '{{(index .IPAM.Config 0).Gateway}}' 读取地址,并按以下示例设置:
MATCHAWARDS_HTTP_HOST=0.0.0.0
MATCHAWARDS_TRUSTED_PROXIES=127.0.0.1/32,::1/128,172.18.0.1/32
不要信任诸如 172.16.0.0/12 这样的宽泛私有网段:它可能与内部网络重叠,网段中的任何主机都可能因此自行选择速率限制键。
配置
| 变量 | 默认值 | 用途 |
|---|---|---|
MATCHAWARDS_API_BASE | https://matchawards.com | API 基础 URL。仅在开发时更改。 |
MATCHAWARDS_HTTP_HOST | 127.0.0.1 | 仅用于 --http:监听地址。 |
MATCHAWARDS_HTTP_PORT | 8765 | 仅用于 --http:监听端口。 |
MATCHAWARDS_RATE_PER_MIN | 30 | 仅用于 --http:每个客户端每分钟的请求数。 |
MATCHAWARDS_RATE_BURST | 10 | 仅用于 --http:每个客户端每 5 秒的请求数。 |
MATCHAWARDS_RATE_PER_PREFIX_MIN | 120 | 仅用于 --http:同一 /48 内所有 IPv6 /64 每分钟的请求总数。 |
MATCHAWARDS_GLOBAL_PER_MIN | 1200 | 仅用于 --http:所有客户端每分钟的请求总数。必须高于 MATCHAWARDS_EGRESS_PER_MIN(否则服务不会启动)。 |
MATCHAWARDS_RATE_PER_SUBJECT_MIN | 30 | 仅用于 --http:每位 ChatGPT 用户每分钟的请求数(x-openai-subject,仅限来自 OpenAI 出口地址的请求)。 |
MATCHAWARDS_RATE_SUBJECT_BURST | 10 | 仅用于 --http:每位 ChatGPT 用户每 5 秒的请求数。 |
MATCHAWARDS_EGRESS_PER_MIN | 600 | 仅用于 --http:所有 ChatGPT 流量每分钟的请求总数。 |
MATCHAWARDS_GLOBAL_API_PER_MIN | 900 | 仅用于 --http:整个服务每分钟的 API 调用数(一次搜索最多可发起 3 次调用)。超过此限制时,工具会回复“MatchAwards 正忙,请在 N 秒后重试”,而不会调用 API。 |
MATCHAWARDS_TRUSTED_PROXIES | 127.0.0.1/32,::1/128 | 仅用于 --http:信任其 X-Real-IP 标头的代理(CIDR,以逗号分隔)。默认仅信任环回地址。 |
MATCHAWARDS_ALLOWED_HOSTS | matchawards.com,staging.matchawards.com | 仅用于 --http:接受的 Host 标头,以逗号分隔(始终接受 127.0.0.1 和 localhost)。 |
MATCHAWARDS_USAGE_DB | /data/usage.db | 仅用于 --http:用于使用统计的 SQLite 文件。如果其目录不存在或不可写,服务会记录一条警告,但不会记录任何数据。 |
MATCHAWARDS_USAGE_SALT | 未设置 | 仅用于 --http:用于生成 ChatGPT 调用方指纹的密钥。未设置时,不会存储指纹。 |
MATCHAWARDS_METRICS_TOKEN | 未设置 | 仅用于 --http:/metrics 的 Bearer 令牌。未设置时,指标监听器不会启动。 |
MATCHAWARDS_METRICS_HOST | 127.0.0.1 | 仅用于 --http:指标监听器的地址。 |
MATCHAWARDS_METRICS_PORT | 9765 | 仅用于 --http:指标监听器的端口。 |
MATCHAWARDS_USAGE_RETENTION_DAYS | 180 | 仅用于 --http:使用统计行的保留天数。 |
MATCHAWARDS_WIDGETS | 未设置 | 1:提供结果卡片(参见 Cards)。未设置时,不提供卡片资源,也不提供 show_results。 |
使用统计(托管模式)
使用 --http 时,服务会将使用统计保存在 SQLite 文件中(MATCHAWARDS_USAGE_DB,WAL 模式)。stdio 模式不会记录任何内容。写入操作由两个后台线程执行,并尽力而为:写入失败会计入 mcp_ledger_errors_total,且不会导致请求失败。超过 MATCHAWARDS_USAGE_RETENTION_DAYS 天(默认值为 180 天)的行会被删除,每天最多删除一次。
记录内容:
- 工具调用:每次到达工具的调用记录一行:时间、工具名称、结果(
ok、invalid_input、upstream_error、bad_response(工具无法读取的回复)、upstream_timeout(API 超时;请重试)、partial(assess_opportunity或find_teaming_partners已作答,但请求或时间限制导致奖项查询被提前截断)、rate_limited_upstream、busy、internal_error)、客户端网络地址(IPv4 /24 或 IPv6 /48)、User-Agent(前 200 个字符)、其类别(openai-mcp、claude-user、claude、cursor、……、prober或other)以及延迟。被速率限制拦截的调用会计入指标,但不写入行。SDK 在工具运行前拒绝的参数也不会写入行;不过,它们仍会在传输表中计为tools/call。 - 传输,每日统计:按客户端网络地址、JSON-RPC 方法(仅统计已知的 MCP 方法,其他方法均归为
_other)以及clientInfo名称和版本分别计数,并记录最近一次看到的 User-Agent。随着请求正文流入,会从initialize正文的前 8 KiB,或从params._meta(2026-07-28 客户端)读取clientInfo;正文不会被缓冲。每个客户端网络地址每天最多记录 50 个计数项;超过后会合并到_other。 - ChatGPT 调用方:当设置了
MATCHAWARDS_USAGE_SALT,且来自 ChatGPT 出口地址的请求带有x-openai-subject(ChatGPT 的匿名逐用户 ID;来自其他地址时会忽略此字段)时,工具调用行会保存该值的 16 位十六进制 HMAC-SHA256,以统计不同的 ChatGPT 调用方(统计中仅限openai-mcp类别)。不使用x-openai-session:它会随对话变化。
绝不记录:工具参数(搜索词、ID)、请求或响应正文、完整客户端地址、原始标头值。
使用以下命令读取统计信息:
matchawards-mcp stats --days 7 # --db PATH to read another file
该命令会输出各工具按结果分类的调用数、各类别的调用数、真实调用与探测请求及我们自己的测试(matchawards-test/ UA)数量、不同客户端网络地址的数量(不包括探测请求和我们自己的测试)、不同的 ChatGPT 指纹、按方法分类的传输请求数以及最常见的 clientInfo 名称。在 Docker 中:docker exec <container> matchawards-mcp stats --days 1。
指标
设置 MATCHAWARDS_METRICS_TOKEN 后,同一进程中的第二个监听器(MATCHAWARDS_METRICS_HOST:MATCHAWARDS_METRICS_PORT,默认值为 127.0.0.1:9765)会以 Prometheus 文本格式提供 GET /metrics,请求需携带 Authorization: Bearer <token>(未携带时返回 401)。/mcp 端口不会提供 /metrics(返回 404):它信任代理传来的 X-Real-IP,因此只应将指标端口发布到 Prometheus 抓取所用的网络。所有指标都存储在内存中,重启后会重置;每个标签值都来自固定集合,绝不会包含客户端地址、主体或参数。
mcp_tool_calls_total{tool,outcome}(计数器):工具调用次数(使用记录表会为每次调用写入一行)。mcp_tool_duration_seconds{tool}(直方图,桶为 0.1 0.25 0.5 1 2.5 5 10 20 30 s):同一批调用的工具调用延迟。mcp_requests_total{method}(计数器):/mcp上按 JSON-RPC 方法统计的已处理请求数。mcp_rejected_total{reason}(计数器):rate_limit_client、rate_limit_prefix、rate_limit_subject、rate_limit_egress、rate_limit_global、size、host、path、method。mcp_agent_requests_total{family}(计数器):按 User-Agent 系列统计的已处理请求数。mcp_clients_total{client}(计数器):按clientInfo.name统计的initialize请求数,并归入chatgpt、claude、cursor、vscode、n8n、matchawards、mcp-inspector、other或unknown。mcp_distinct_callers{kind,window}(仪表,window=1h或24h):不同的client网络(/24 或 /48,不包括探测程序和自身测试)以及不同的 ChatGPT 用户(chatgpt_subject:仅针对来自 ChatGPT 出口地址的请求,使用x-openai-subject)。数据以每进程独立加盐的哈希值形式保存,每种类型最多 100,000 个。不同调用方指标会在重启后重置,因此重启后 24 小时内,24 小时统计值并不完整。mcp_distinct_evictions_total{kind}(计数器):为保持在上限内而丢弃的不同调用方键数(仅在大量新网络或主体涌入时非零)。该值大于零时,不同调用方计数只是下限:不断更换主体或网络的调用方可能会挤出其他调用方。mcp_ledger_errors_total(计数器):使用记录表写入失败的次数。
运维说明
- 在
/data挂载卷(或设置MATCHAWARDS_USAGE_DB),以确保文件在重建容器后仍然保留。 - 如需获取 ChatGPT 指纹,nginx 必须将
x-openai-subject传递给容器(默认会传递,除非清除了请求头),并且必须设置MATCHAWARDS_USAGE_SALT且保持其稳定:更换盐值会生成新的指纹。 - 对于 Docker,设置
MATCHAWARDS_METRICS_HOST=0.0.0.0,并且仅在内部网络中发布指标端口。
数据
数据来自 matchawards.com,包括美国联邦和州级合同机会、拨款、职位、联邦合同授予和拨款授予。仅返回公开发布的信息,且每条结果都会链接回 matchawards.com 上对应的页面。
- 默认情况下,合同和拨款搜索会返回开放项目:截止日期为今天或之后(美国东部时间)。没有截止日期的项目视为已关闭。
- 职位搜索涵盖最近 30 天。
- 结果按最新时间优先排列。当
has_more为 true 时,模型可以使用cursor请求下一页。 - 使用较窄的筛选条件(例如某个机构或罕见名称)时,即使后面还有更多记录,也可能扫描最新记录但未找到匹配项;此时结果中的
warning会说明这一情况,并提供用于继续搜索的cursor。 - 如果搜索的首次请求失败,工具会返回错误。如果后续页面请求失败,工具会返回已获取的行,并在
warning中说明停止原因。 - 格式异常的结果行会被排除,并计入
warning;搜索结果的其余部分仍会返回。 - 每次 API 调用超时为 10 秒。
- API 按 IP 限流:每分钟 60 次请求,此外每 5 秒最多突发 20 次请求。当筛选条件较窄且结果稀少时,单次搜索调用最多可使用 3 次请求,另加 1 次机构名称查询(缓存 10 分钟)。达到限流时,工具会返回错误,告知模型需要等待多少秒。
开发
python -m venv .venv
.venv/bin/pip install -e ".[test]"
.venv/bin/pytest
测试不会发起网络调用。
tests/golden/prompts.json 列出了提示词及模型应选择的工具(或不选择任何工具),用于在客户端中手动检查工具选择。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。