mcpField
M
MatchAwards

MatchAwards

远程服务
matchawards.com商业与营销0今天更新

关于 MatchAwards

MatchAwards 是只读 MCP 服务,用于查找美国政府合同、拨款、职位及过往奖项。其工具还可查询企业历史,并生成机会评估和组队简报,无需账户或 API 密钥。

主要功能

  1. 01搜索合同、拨款和职位
  2. 02获取机会详情与联系人
  3. 03查询奖项和企业历史
  4. 04评估机会与潜在组队伙伴
  5. 05提供含来源链接的结构化结果

适用场景

  1. 01按条件查找开放合同或拨款
  2. 02查看企业公开获奖历史
  3. 03评估投标机会并寻找潜在伙伴

MCP 相关

向 MCP 客户端提供只读搜索、查询和评估工具。可通过 stdio 本地运行,也可访问托管端点 https://matchawards.com/mcp。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://matchawards.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
pypimatchawards-mcp1.0.4

工具

10
参数类型必填说明
openany否true(默认):仅包含响应截止日期为今天或之后(美国东部时间)的项目;没有截止日期的项目视为已关闭。false:包含已关闭项目。
typeany否限定为联邦或州合同。留空则同时搜索两者。
limitinteger否要返回的结果数,1 到 50。
naicsany否最多 10 个六位数 NAICS 代码,以逗号分隔,例如 '236220' 或 '541511,541512'。公告与其自身代码匹配(matched_naics 会说明匹配了哪些代码),也可能通过 MatchAwards 的 AI 建议代码匹配:该代码会列在 ai_matched_naics 中,因此请称其为 AI 建议匹配。未知代码将被忽略。
stateany否两字母美国州代码,例如 'VA'。许多联邦公告没有州信息,因此此筛选条件会跳过这些公告。
agencyany否机构名称,例如 'Department of Veterans Affairs';与最接近的 MatchAwards 机构匹配,结果备注会注明该机构。
cursorany否上一响应中的 next_cursor。使用相同的筛选条件传入,以获取下一页。
keywordany否2 到 100 个字符,仅匹配标题。
set_asideany否保留项目代码,例如 'SBA' 或 'SDVOSBC'。仅适用于联邦合同。
posted_within_daysany否仅包含过去 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_BASEhttps://matchawards.comAPI 基础 URL。仅在开发时更改。
MATCHAWARDS_HTTP_HOST127.0.0.1仅用于 --http:监听地址。
MATCHAWARDS_HTTP_PORT8765仅用于 --http:监听端口。
MATCHAWARDS_RATE_PER_MIN30仅用于 --http:每个客户端每分钟的请求数。
MATCHAWARDS_RATE_BURST10仅用于 --http:每个客户端每 5 秒的请求数。
MATCHAWARDS_RATE_PER_PREFIX_MIN120仅用于 --http:同一 /48 内所有 IPv6 /64 每分钟的请求总数。
MATCHAWARDS_GLOBAL_PER_MIN1200仅用于 --http:所有客户端每分钟的请求总数。必须高于 MATCHAWARDS_EGRESS_PER_MIN(否则服务不会启动)。
MATCHAWARDS_RATE_PER_SUBJECT_MIN30仅用于 --http:每位 ChatGPT 用户每分钟的请求数(x-openai-subject,仅限来自 OpenAI 出口地址的请求)。
MATCHAWARDS_RATE_SUBJECT_BURST10仅用于 --http:每位 ChatGPT 用户每 5 秒的请求数。
MATCHAWARDS_EGRESS_PER_MIN600仅用于 --http:所有 ChatGPT 流量每分钟的请求总数。
MATCHAWARDS_GLOBAL_API_PER_MIN900仅用于 --http:整个服务每分钟的 API 调用数(一次搜索最多可发起 3 次调用)。超过此限制时,工具会回复“MatchAwards 正忙,请在 N 秒后重试”,而不会调用 API。
MATCHAWARDS_TRUSTED_PROXIES127.0.0.1/32,::1/128仅用于 --http:信任其 X-Real-IP 标头的代理(CIDR,以逗号分隔)。默认仅信任环回地址。
MATCHAWARDS_ALLOWED_HOSTSmatchawards.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_HOST127.0.0.1仅用于 --http:指标监听器的地址。
MATCHAWARDS_METRICS_PORT9765仅用于 --http:指标监听器的端口。
MATCHAWARDS_USAGE_RETENTION_DAYS180仅用于 --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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。