Federal Award Counterparty MCP Server
Pricing
from $50.00 / 1,000 tool calls
Federal Award Counterparty MCP Server
Answer questions about US federal award recipients from USAspending.gov: who won awards from an agency, one organisation's award history, and who that recipient actually is on the federal register.
Pricing
from $50.00 / 1,000 tool calls
Rating
0.0
(0)
Developer
NexGen Watch
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Share
🧰 Federal Award Counterparty MCP Server
Answer questions about US federal award recipients — who won awards from an agency, what one organisation has been awarded, and who that organisation actually is on the federal register — from USAspending.gov, live.
Built for sales teams qualifying government contractors, and for anyone who needs the award side of a counterparty before signing something.
This is a standby MCP server: it stays warm on Apify and answers tool calls from any MCP client (Claude Desktop, Cursor, an agent framework) at https://nexgenwatch--federal-award-counterparty-mcp.apify.actor/mcp. Billing is pay-per-event: $0.05 when the server starts, then $0.05 per tool call (mcp-tool-call). Source: api.usaspending.gov.
No login, no source API key and no CAPTCHA solving are involved: the source is read logged-out.
📊 Sample Output
A standby server answers tool calls rather than writing a dataset, so the sample is the server's own live health answer (GET https://nexgenwatch--federal-award-counterparty-mcp.apify.actor/, HTTP 200, read on 2026-09-17) followed by its tool table:
{"server": "federal-award-counterparty","billing_gate": true,"declared_events": ["apify-actor-start","mcp-tool-call"],"scope": "US federal awards published on USAspending.gov -- prime awards only, one jurisdiction. Subawards are excluded by design (subawards=False on every query); a subcontractor does not appear here and this server does not imply otherwise.","rate_limit_per_sec": 5.0,"rate_waits": 0,"ready": true}
| Tool | Arguments | What it returns |
|---|---|---|
find_recipient | name: str, limit: int = 10 | Find US federal award recipients by name. Returns each with its UEI, its parent/child level and its total awarded. Use the recipient_id with get_recipient_profile, and the UEI as the identity -- the name match is fuzzy. |
get_recipient_profile | recipient_id: str | Full USAspending profile for one recipient: UEI, DUNS, business types, parent, location, lifetime totals. Take recipient_id from find_recipient. |
get_award_history | recipient_name: str, days: int = 365, award_family: str = "contracts", limit: int = 20, new_awards_only: bool = True | Awards to one recipient in a trailing window, largest first. Defaults to NEW awards only -- set new_awards_only=False to include modifications to older awards, which will return awards that started years before the windo |
get_agency_top_recipients | agency_name: str, days: int = 365, award_family: str = "contracts", limit: int = 20, new_awards_only: bool = True | Who won awards from one federal agency in a trailing window, largest first. agency_name must be a top-tier agency name exactly as USAspending spells it -- call list_agencies for the list. |
list_agencies | `` | Every top-tier federal agency USAspending recognises, with the exact spelling get_agency_top_recipients needs. |
explain_limits | `` | What this server can and cannot tell you, and the three measured traps in the source. Read this before acting on any answer above. |
✅ What you get
6 tools, each returning a JSON object built only from what the source answered, with a scope and note field stating what the source does and does not cover. A lookup the source answers with 'not found' is a sourced answer (charged); malformed input or a source failure returns a notice that is NOT charged; nothing is ever fabricated.
Three things this server gets right that a naive read gets wrong
Every one of these was measured live against the source on 2026-07-30, and each one changes the answer.
1. "Last 12 months" does not mean "awarded in the last 12 months"
USAspending's default time filter matches awards with any activity in the window — so an old contract that saw a modification comes back as though it were new. Measured, same recipient, same 365-day window:
source default -> awards starting 2017-11-17, 2019-11-26, 2022-12-23date_type=new_awards_only -> awards starting 2026-04-09, 2025-09-12, 2025-08-01
Asked "who won work from this agency last year", the first answer names incumbents from three
administrations ago. This server sends new_awards_only by default, states which clock
produced every answer, and makes you opt into the loose one by name.
2. A recipient name is a search key, not an identity
recipient_search_text is a fuzzy match. Measured: searching LOCKHEED returns
RAYTHEON/LOCKHEED MARTIN JAVELIN JV — a different legal entity. Every row reports the
name actually matched, and the tools point you at the UEI as the identity.
3. A parent and its children are different companies on this register
USAspending publishes a parent (P) and each child (C) as separate recipients, with separate
UEIs and separate totals. Measured on one trading name: three rows, three UEIs, totals of
$64.8bn, $27.0bn and $16.7bn. A single number for "the company" depends entirely on which
row you meant, so the level is always reported and the rows are never merged.
Tools
| tool | what it answers |
|---|---|
find_recipient | Recipients matching a name, each with UEI, parent/child level and total awarded |
get_recipient_profile | Full profile for one recipient: UEI, DUNS, business types, parent, location, lifetime totals |
get_award_history | Awards to one recipient in a trailing window, largest first |
get_agency_top_recipients | Who won awards from one federal agency in a trailing window |
list_agencies | Every top-tier agency, with the exact spelling the agency tool needs |
explain_limits | What this server will and will not say, and the three traps above. Read before acting. |
Award families: contracts (default), grants, direct_payments, loans, other. An
unrecognised family is refused rather than silently defaulted.
Scope
US federal PRIME awards published on USAspending.gov. One jurisdiction. Every query sends
subawards=False, so a subcontractor on a federal prime contract does not appear here and this
server does not imply otherwise.
This server reports what USAspending publishes. It does not certify that an organisation is or is not a federal contractor, does not decide that two similarly named recipients are the same entity, and says nothing about award performance, quality or compliance.
Source, public and logged-out, no key: api.usaspending.gov/api/v2. robots.txt on that host
is 404 — no Disallow and no Crawl-delay — and every outbound call is paced anyway through one
shared strict-pacing bucket at 5 requests/second.
⚙️ Sample inputs
1. Connect an MCP client (Claude Desktop / Cursor style config; your Apify API token goes in the header):
{"mcpServers": {"federal-award-counterparty-mcp": {"url": "https://nexgenwatch--federal-award-counterparty-mcp.apify.actor/mcp","headers": {"Authorization": "Bearer <YOUR_APIFY_TOKEN>"}}}}
2. One tool call over JSON-RPC (what the client sends to /mcp; each call is one mcp-tool-call event):
{"jsonrpc": "2.0","id": 1,"method": "tools/call","params": {"name": "find_recipient","arguments": {"name": "<name>","limit": 10}}}
3. Health check from a shell (free — no tool call is charged):
$curl -H "Authorization: Bearer $APIFY_TOKEN" https://nexgenwatch--federal-award-counterparty-mcp.apify.actor/
🧾 JSON sample record
The live health record above is the server's own answer; a tool result carries the fields listed in the tool table plus scope and note.
🔧 How it works
Source. api.usaspending.gov — endpoints: https://api.usaspending.gov/api/v2. Public, logged-out reads only.
Standby. Apify keeps one server process warm; each MCP session is served by that process and idle servers are stopped by the platform. Nothing is cached between calls except what the source itself caches.
Charging. Every tool call charges one mcp-tool-call at $0.05 through Apify's pay-per-event billing before the answer is returned; the declared events are asserted against the live pricing at startup (billing_gate in the health answer).
What is not done. No login, no CAPTCHA bypass, no private data, no scraping of pages the source does not publish to any visitor.
💰 Pricing example
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
Actor Start (apify-actor-start) | $0.05 | $0.05 | $0.05 | $0.05 |
Tool call (mcp-tool-call) | $0.05 | $0.05 | $0.05 | $0.05 |
- 10 tool calls in one session: $0.05 start + 10 × $0.05 = $0.55
- 100 tool calls in one session: $0.05 start + 100 × $0.05 = $5.05
- 1000 tool calls in one session: $0.05 start + 1000 × $0.05 = $50.05
A health check or a connection that makes no tool call charges only the $0.05 start fee. A sourced 'not found' answer is a completed tool call and is charged; a notice for malformed input or a source failure is not charged (settle() charges only chargeable outcomes).
⚖️ Legal & ToS
The server reads public data published by api.usaspending.gov to any visitor, identifies itself, and does not access accounts or private data. Use the answers in line with the source's terms and your local law; the intended use is B2B research and agent tooling.
❓ FAQ
Q: Do I need a source API key?
A: No. api.usaspending.gov is read logged-out. You need only your Apify API token to connect to the server.
Q: Which MCP clients work?
A: Any client that speaks the MCP HTTP transport: Claude Desktop, Cursor, Windsurf, LangChain/LlamaIndex MCP adapters and Apify's own MCP client. Point it at the /mcp URL above.
Q: What happens when the source has no answer?
A: A sourced 'not found' (for example a 404 for an unknown identifier) comes back as an answer with scope and note explaining what was checked (where the server carries those fields), and is charged as a completed call; malformed input or a source outage returns a notice that is not charged. Nothing is invented.
Q: How is a call billed?
A: One mcp-tool-call event per tool call at $0.05, plus $0.05 when the server starts. Idle time is not billed to you.
Q: Is it rate limited?
A: The server paces requests to the source (RATE_PER_SEC=5.0) and answers calls in the order they arrive.
Q: Can I call it without an MCP client?
A: Yes — the /mcp endpoint is plain JSON-RPC over HTTP (sample input 2), and GET / is a free health check.
🆘 Troubleshooting
- 401 / 403 from the server → the Authorization header is missing or the token is wrong → use
Bearer <your Apify API token>. - 400
Missing session ID→ the client hit/mcpwithout initialising an MCP session → let the MCP client connect (it performs the handshake); raw JSON-RPC needs the session header the initialise call returns. - Tool returns a notice instead of data → the input was malformed or empty, or the source failed → the call was not charged; check the
note/reasonfield, fix the input and call again. - First call is slow → the standby server was cold and Apify started it → later calls in the same session are fast.
🔗 Related Actors
- EPO Publication Evidence MCP Server — Retrieve official European patent publications by number or publication day from the EPO publication server, with the INID-coded front page parsed in…
- Eurostat Labor Stats MCP Server — An MCP server over the official Eurostat dissemination API (ec.europa.eu/eurostat) — EU
- FDIC Bank Diligence MCP Server — Answer questions about US banks from the FDIC's public data: institution details, structural history, current status, closures and failures - for vet…
- Federal Rule Impact MCP Server — Answer 'what regulations changed for this industry' from the US Federal Register: search and retrieve rules, proposed rules and notices by CFR title,…
- Grants Qualification MCP Server — Report what a US federal grant agency actually states about who may apply, and screen an applicant type against it. Three outcomes, and 'qualified' i…
- Official Travel Advice MCP Server — MCP server for UK FCDO foreign travel advice from the official GOV.UK Content API — safety warnings, entry and health requirements, and update histor…
- 🏢 About NexGenData — NexGen Watch is NexGenData's fleet of 256 public monitoring and lookup actors built on official sources, pay-per-result. Browse the catalog at apify.com/nexgenwatch.
⭐ Found this useful?
If this server answered a question your agent could not, a quick review on the Apify Store helps other teams find it. Feature request or a source that changed? Open it from the Issues tab — every one is read.
