Skip to main content
Glama
Gov Tenders & Grants MCP

Gov Tenders & Grants MCP

Gov Tenders & Grants MCP: SAM.gov, Grants.gov, USAspending, UK, EU TED

Public-sector opportunity data as MCP tools: US federal contract opportunities (SAM.gov), federal grants (Grants.gov), federal awards (USAspending), UK tenders (Find a Tender, Contracts Finder), EU tenders (TED) and city council meeting minutes and agendas (Legistar). Every row carries its official source link.

Hosted remote MCP server (Streamable HTTP) on Apify's MCP gateway. Client config plus a small open-source stdio proxy server. No Actor source.

Disclosure: I maintain these Actors on Apify Store (publisher publicrecords).

MCP endpoint

https://mcp.apify.com/?tools=publicrecords/govcon-opportunity-feed,publicrecords/grants-gov-scraper,publicrecords/usaspending-awards-scraper,publicrecords/uk-find-a-tender-scraper,publicrecords/eu-ted-notices-scraper,publicrecords/legistar-meetings-scraper

Auth: sign in with Apify (OAuth) when your client prompts, or send an Apify API token as a Bearer token. Runs are billed per result on your own Apify account; see each Store page for current pricing.

Related MCP server: US Government Data

Tools

Actor

Store page

MCP tool

What it returns

Federal Contract Opportunities

publicrecords/govcon-opportunity-feed

publicrecords--govcon-opportunity-feed

SAM.gov and Grants.gov notices in one feed, with new-since-last-run deltas and source links.

Grants.gov Search

publicrecords/grants-gov-scraper

publicrecords--grants-gov-scraper

Open federal grants: opportunity, agency, deadline, eligibility and source link.

USAspending Awards

publicrecords/usaspending-awards-scraper

publicrecords--usaspending-awards-scraper

Federal contract and grant awards by agency, recipient, NAICS and period, with award IDs and source links.

UK Find a Tender & Contracts Finder

publicrecords/uk-find-a-tender-scraper

publicrecords--uk-find-a-tender-scraper

UK government tender notices with buyer, value, deadline and source link.

EU TED Tenders

publicrecords/eu-ted-notices-scraper

publicrecords--eu-ted-notices-scraper

EU procurement notices from Tenders Electronic Daily with buyer, CPV, value, deadline and source link.

Legistar Council Meetings

publicrecords/legistar-meetings-scraper

publicrecords--legistar-meetings-scraper

City council meetings, agendas, minutes and documents for any city on Legistar, with source link.

The Apify gateway also exposes helper tools to read run results (get-actor-run, get-dataset-items).

Who it's for

  • GovCon and bid teams: which federal opportunities were posted today?

  • Grant writers and nonprofits: which federal grants are open, and when do they close?

  • Market research: who has been winning awards from an agency, and how much?

  • Local news and civic watchers: what did a city council put on its agenda, and what do the minutes say?

Example prompts

  • Which new SAM.gov and Grants.gov notices mention <keyword> today? Include the source links.

  • List open Grants.gov opportunities from <agency> and their deadlines.

  • Which recipients won USAspending awards from <agency> in <period>, and for how much?

  • Find EU TED tenders published today for IT services, with buyer and deadline.

Cursor / Claude Code / any remote-MCP client

{
  "mcpServers": {
    "gov-tenders": {
      "url": "https://mcp.apify.com/?tools=publicrecords/govcon-opportunity-feed,publicrecords/grants-gov-scraper,publicrecords/usaspending-awards-scraper,publicrecords/uk-find-a-tender-scraper,publicrecords/eu-ted-notices-scraper,publicrecords/legistar-meetings-scraper"
    }
  }
}

Claude Desktop (local bridge)

{
  "mcpServers": {
    "gov-tenders": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--actors", "publicrecords/govcon-opportunity-feed,publicrecords/grants-gov-scraper,publicrecords/usaspending-awards-scraper,publicrecords/uk-find-a-tender-scraper,publicrecords/eu-ted-notices-scraper,publicrecords/legistar-meetings-scraper"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}

Local stdio server (open source)

This repo also ships a small MCP server in src/ for clients that only run local stdio servers. It answers initialize and tools/list locally from tools.json, which is generated from each Actor's public input schema and checked for drift in CI and weekly, so any client or directory can inspect the tools with no token. tools/call is forwarded to the hosted Apify MCP endpoint above with your own APIFY_TOKEN; without a token a call returns a clear error instead of running anything. The token is only sent in the Authorization header and is never logged.

{
  "mcpServers": {
    "gov-tenders": {
      "command": "npx",
      "args": ["-y", "github:GeminiGeorge22/gov-tenders-mcp"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}

Or from a clone:

git clone https://github.com/GeminiGeorge22/gov-tenders-mcp.git
cd gov-tenders-mcp && npm install
APIFY_TOKEN=YOUR_APIFY_TOKEN node src/server.js

Optional env: APIFY_ACTORS (comma-separated subset of the Actors above) and APIFY_MCP_URL (full endpoint override).

Tests run against an in-memory mock server, with no network and no token: npm test. Requires Node.js 18+.

Python (uvx/pip)

A matching Python version of this server lives in python/, built on the official mcp Python SDK: same tools, same APIFY_TOKEN, same hosted endpoint. Requires Python 3.10+.

{
  "mcpServers": {
    "gov-tenders": {
      "command": "uvx",
      "args": ["gov-tenders-mcp"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}

Or with pip: pip install gov-tenders-mcp, then run gov-tenders-mcp. Python tests: cd python && pip install -e ".[test]" && env -u APIFY_TOKEN python -m pytest.

See also

  • ecommerce-search-rankings-mcp: E-commerce search results and product rankings across Amazon, eBay, Walmart, Google Shopping, AliExpress, Shopify and Etsy.

  • ecommerce-sales-mcp: E-commerce sales signals: Amazon bestsellers and reviews, eBay sold prices, TikTok Shop and Etsy shop sales.

  • forecast-accuracy-mcp: Forecast accuracy and track records: forecasts vs actuals, earnings beats, prediction markets, archived pages and news.

  • sports-betting-stats-mcp: Sports betting odds and stats: sportsbook odds, player props, scores, xG, closing lines, horse racing.

  • sports-odds-mcp: Live odds from Kambi-powered sportsbooks (BetRivers, Unibet, Paf, Svenska Spel, ATG).

  • etsy-sales-mcp: Etsy search results and Etsy shop sales counters.

  • ats-jobs-mcp: New job postings from Greenhouse, Lever, Ashby and SmartRecruiters.

Registry

Official MCP Registry name: io.github.GeminiGeorge22/gov-tenders-mcp

License

MIT, for this documentation, config and the proxy server code in src/. Not affiliated with the sites the Actors read.

Available Tools

6 tools
publicrecords--eu-ted-notices-scraperTED Tenders Daily: EU procurement notices from TendersA
Read-only
Inspect

TED Tenders Daily: EU procurement notices from Tenders. Which EU tenders were published today? Returns TED (Tenders Electronic Daily) notices with buyer, CPV, value, deadline and source link.

When to use: Use when you need EU procurement notices from TED (Tenders Electronic Daily) with buyer, CPV code, value and deadline.

Returns: the run's dataset rows as structured JSON (one row per result), plus the run and dataset IDs for paging the full dataset.

Behavior: starts one run of the Apify Actor "publicrecords/eu-ted-notices-scraper" through Apify's hosted MCP gateway (mcp.apify.com) with your own APIFY_TOKEN; the run uses your Apify account. Read-only: it only reads public web data and changes nothing on the source site. Docs: https://apify.com/publicrecords/eu-ted-notices-scraper

NameRequiredDescriptionDefault
cpvNoOptional Common Procurement Vocabulary code (e.g. 72000000). Mapped to classification-cpv. Ignored if expertQuery is set.
scopeNoTED scope: ALL (archive) or ACTIVE (currently open). Default ALL.ALL
keywordsNoOptional. Mapped to TED expert-search FT~"…" full-text. Ignored if expertQuery is set.
maxItemsNoMaximum notice rows to push to the default dataset.
noticeTypeNoOptional eForms notice-type filter (e.g. cn-standard, can-standard, pin-only, pin-cfc-standard). Ignored if expertQuery is set.
expertQueryNoOptional raw TED Expert Search expression. When set, overrides keywords / dates / noticeType / cpv / buyerCountry filters (you must include SORT BY yourself if desired). Example: buyer-country=DEU AND PD>=20260101 SORT BY publication-date DESC
buyerCountryNoOptional ISO 3166-1 alpha-3 buyer country (e.g. DEU, FRA, NLD). Mapped to buyer-country. Ignored if expertQuery is set.
publicationDateToNoOptional. Converted to TED PD<=YYYYMMDD. Ignored if expertQuery is set.
publicationDateFromNoOptional. Default: 14 days ago. Converted to TED PD>=YYYYMMDD. Ignored if expertQuery is set.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld and destructive=false; the description adds that each call starts a new Apify Actor run under the caller's own account with their APIFY_TOKEN, which effectively explains the idempotentHint=false behavior and hints at per-run cost. It also discloses the return shape (dataset rows plus run and dataset IDs for paging), though it does not state what happens when a run yields zero notices or how long a run typically takes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core question ('Which EU tenders were published today?') followed by clearly labeled Returns/Behavior/Docs sections. The opening sentence restates the title almost verbatim, and the docs URL plus actor slug are somewhat redundant given the tool name, but overall there is little wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, no-required-param scraper with no output schema, the definition covers what it returns (one row per result plus run/dataset IDs for paging), how it executes (hosted Apify MCP gateway, caller's token), and its read-only nature. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter docs are already detailed (CPV mapping to classification-cpv, date conversion to TED PD>=YYYYMMDD, expertQuery overriding all filters). The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — returns TED (Tenders Electronic Daily) EU procurement notices with buyer, CPV, value, deadline and source link. The domain (EU TED) is named explicitly, which distinguishes it from the US/UK tender siblings without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'When to use' block gives a clear triggering condition (needing EU TED notices with buyer, CPV, value, deadline). It stops short of naming alternatives such as uk-find-a-tender-scraper or usaspending-awards-scraper for non-EU jurisdictions, or explaining when to prefer expertQuery over the mapped filters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publicrecords--govcon-opportunity-feedFederal Contract Opportunities: SAM.gov + Grants.gov in oneA
Read-only
Inspect

Federal Contract Opportunities: SAM.gov + Grants.gov in one. Which federal contract opportunities were posted today? Returns SAM.gov and Grants.gov notices in one feed, new-since-last-run deltas, and source links.

When to use: Use when you need new US federal contract opportunities (SAM.gov) and grants (Grants.gov) in one feed, optionally only items new since the last run.

Returns: the run's dataset rows as structured JSON (one row per result), plus the run and dataset IDs for paging the full dataset.

Behavior: starts one run of the Apify Actor "publicrecords/govcon-opportunity-feed" through Apify's hosted MCP gateway (mcp.apify.com) with your own APIFY_TOKEN; the run uses your Apify account. Read-only: it only reads public web data and changes nothing on the source site. Docs: https://apify.com/publicrecords/govcon-opportunity-feed

NameRequiredDescriptionDefault
modeNomonitor
naicsNo6-digit or prefix, e.g. 541512 or 5415.
sinceNoET calendar date (YYYY-MM-DD) or RFC3339. Selects HF delta shards with eventDate >= since. Optional for snapshot (serves latest snapshot). For monitor, defaults to a 7-day lookback ending at the latest published delta date. Example: "2026-09-21"
statesNoTwo-letter US state codes for place of performance (contracts).
samBulkNoIgnored on the public Actor (v1.2 HF serve). Retained for input compatibility; private producer uses SAM Data Services CSV.
sourcesNoAllowed values: sam, grants. SAM defaults to daily Data Services CSV (samBulk=true, no key). Grants.gov needs no key.
agenciesNoNames or codes, e.g. Department of Defense, DHS, EPA.
keywordsNoFree-text keywords matched against opportunity titles.
maxItemsNoHard cap on opportunity rows returned (and billed) after sort by postedDate desc → Sol#. Default 10000. Under the default 14d window, Active matches often exceed 10k — runs emit CAP_TRUNCATED + CAP_COVERAGE.covered/total (never silent). Cap always drops the oldest rows.
setAsideNoSB, 8A, HUBZone, SDVOSB, WOSB, NONE
samApiKeyNoOptional when samBulk=true. Required only for API enrich (resourceLinks) / monitor checks / samBulk=false. Personal public API key from sam.gov (Account Details → Request API Key). Free. Stored encrypted; never logged.
enrichTopNNoCategory leaders (or predecessors) per opportunity in enrich mode.
noticeTypesNoFilter by notice type, e.g. solicitation, award_notice, grant_posted.
deadlineAfterNoDefaults to today; excludes expired opportunities.
incumbentModeNocategory_leaders (default): top USASpending recipients by agency×NAICS. predecessor: true prior-awardee/recompete join (stub until PREDECESSOR_JOIN.md ships). Proof schedules must keep default.category_leaders
samEnrichLimitNoIgnored on the public Actor (v1.2 HF serve). Retained for input compatibility.
includeContactsNoWhen true, include SAM point-of-contact fields.
postedWithinDaysNoOnly include opportunities posted within the last N days. Declared product default is **14 days** (Thursday product window).
includeDescriptionsNoWhen true, fetch full grant synopses (slower).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, destructive=false, openWorld=true, so the safety profile is covered; the description adds genuinely new facts: it starts a run of a named Apify Actor through the hosted MCP gateway, consumes the caller's own APIFY_TOKEN and Apify account, and returns run/dataset IDs for paging the full dataset. What it omits is run timing/synchronicity and what a partial or failed run looks like — relevant for a job-launching tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Clearly front-loaded and segmented into When to use / Returns / Behavior / Docs, so an agent can scan it quickly. The opening sentence largely restates the title, and the docs URL plus branding line add bulk without decision-relevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return shape is adequately explained (dataset rows as JSON plus run/dataset IDs), which compensates for the missing output schema, and the auth/billing model is disclosed. But for a 19-parameter tool whose behavior changes drastically by mode, the description never explains monitor vs snapshot vs enrich vs rehashState, leaving the single most consequential control undocumented in both description and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 95%, so the schema already carries the parameter burden and baseline 3 applies. The description only loosely gestures at the 'since' delta behavior and adds no meaning for mode, samBulk, enrichTopN, or incumbentMode beyond what the schema states — and 'mode' itself has no description in either place.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a concrete resource and scope: 'Federal Contract Opportunities' pulling SAM.gov and Grants.gov notices into one feed, plus delta and source links. The combined-source scope implicitly separates it from the grants-only and USASpending siblings, but no sibling is ever named, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is an explicit 'When to use' line: when you need new US federal contract opportunities plus grants in one feed, optionally delta-only since the last run. It gives no when-not conditions and never routes the agent to grants-gov-scraper or usaspending-awards-scraper for narrower needs, and the four modes (monitor/snapshot/enrich/rehashState) — the main behavioral fork — get no usage guidance at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publicrecords--grants-gov-scraperGrants.gov Search API: federal grants list with deadlinesA
Read-only
Inspect

Grants.gov Search API: federal grants list with deadlines. Which federal grants are open right now? Searches Grants.gov and returns opportunity, agency, deadline, eligibility and the source link.

When to use: Use when you need open US federal grant opportunities from Grants.gov with agency, deadline and eligibility.

Returns: the run's dataset rows as structured JSON (one row per result), plus the run and dataset IDs for paging the full dataset.

Behavior: starts one run of the Apify Actor "publicrecords/grants-gov-scraper" through Apify's hosted MCP gateway (mcp.apify.com) with your own APIFY_TOKEN; the run uses your Apify account. Read-only: it only reads public web data and changes nothing on the source site. Docs: https://apify.com/publicrecords/grants-gov-scraper

NameRequiredDescriptionDefault
agencyNoMapped to API body agencies (e.g. HHS, EPA, NSF).
statusNoMapped to API oppStatuses. Use forecasted|posted|closed|archived or pipe-joined.forecasted|posted
keywordNoSearch keyword (e.g. education, cybersecurity). Leave empty for all.
maxItemsNoCap on opportunity rows (deduped by opportunityId).
openDateToNoClient-side filter on openDate. Inclusive.
closeDateToNoClient-side filter on closeDate. Inclusive.
fetchDetailsNoHydrate synopsis via fetchOpportunity.
openDateFromNoClient-side filter on openDate. Accepts MM/DD/YYYY or YYYY-MM-DD. Inclusive.
closeDateFromNoClient-side filter on closeDate. Inclusive. Useful for 'still open' windows.
postedWithinDaysNoServer-side filter mapped to search2 dateRange (posted-date lookback). Verified values: 3,7,14,21,28,35,42,49,56,90,180,365. Omit for no posted-date filter.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-destructive, but the description adds genuinely non-obvious behavior: a run of the Apify Actor is started via the hosted MCP gateway, it uses the caller's own APIFY_TOKEN and Apify account, and the response includes run/dataset IDs for paging. It does not mention credit/cost implications of starting a run, which is the main remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (When to use / Returns / Behavior / Docs) are front-loaded and easy to scan. The opening restates the title and adds a rhetorical question ('Which federal grants are open right now?') that duplicates the purpose line, minor waste but not harmful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, no-required-input search tool with no output schema, the description covers purpose, return shape (one row per result plus run/dataset IDs), auth requirements and read-only nature. Only cost/credit behavior of the underlying Actor run is left unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 10 parameters is already documented in the schema, including the pipe-joined status format and the verified postedWithinDays values. The description adds no parameter-level meaning beyond naming agency, deadline and eligibility as returned fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Searches Grants.gov and returns opportunity, agency, deadline, eligibility') with a clear geographic/source scope (US federal grants via Grants.gov). That scope implicitly separates it from the EU TED, UK tender and USAspending siblings, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

An explicit 'When to use' line gives the condition: needing open US federal grant opportunities with agency, deadline and eligibility. It gives no negative guidance or named alternative (e.g. use the govcon feed for non-Grants.gov sources), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publicrecords--legistar-meetings-scraperLegistar City Council Minutes & Agendas: meetings, itemsA
Read-only
Inspect

Legistar City Council Minutes & Agendas: meetings, items. What did a city council decide? Returns Legistar meetings, agenda items, votes and documents for any city on Legistar, with the source link.

When to use: Use when you need city council or county board meetings, agenda items, votes and documents from a Legistar client (e.g. 'seattle', 'chicago').

Returns: the run's dataset rows as structured JSON (one row per result), plus the run and dataset IDs for paging the full dataset.

Behavior: starts one run of the Apify Actor "publicrecords/legistar-meetings-scraper" through Apify's hosted MCP gateway (mcp.apify.com) with your own APIFY_TOKEN; the run uses your Apify account. Read-only: it only reads public web data and changes nothing on the source site. Docs: https://apify.com/publicrecords/legistar-meetings-scraper

NameRequiredDescriptionDefault
dateToNoInclusive YYYY-MM-DD. Default: today + 14 days.
clientsYesLegistar client codes. Use the hostname label of {slug}.legistar.com. Working examples: seattle, milwaukee, madison, oakland, sanjose, boston, denver, columbus.
dateFromNoInclusive YYYY-MM-DD (EventDate / MatterIntroDate). Default: 30 days ago.
maxItemsNoCap on dataset rows (events + matters combined).
resourceNoWhich Legistar collection to pull. Options: events = Meetings (events); matters = Matters (legislation); both = Both.events
includeEventItemsNoExtra HTTP call per event. Titles flattened into eventItemTitles (pipe-separated). Default off.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld/non-idempotent, yet the description still adds real value: it states that each call starts one run on Apify's hosted MCP gateway, that the caller's APIFY_TOKEN and Apify account are used (a billing implication), and that run/dataset IDs are returned for paging the full dataset. The 'starts one run' phrasing is consistent with idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Sections are labelled (When to use / Returns / Behavior / Docs) and front-loaded, so an agent can skim it in one pass. Minor redundancy comes from restating the title verbatim and repeating the tool's scope in both the opening line and the 'When to use' block.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, no output schema and a hosted-run execution model, the definition covers everything an agent needs: selection criteria, returned data shape, authentication and account implications, and a docs link. Nothing material is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented with formats, defaults and enum meanings. The description adds no parameter-level detail beyond the loose phrase 'for any city on Legistar', so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Returns Legistar meetings, agenda items, votes and documents for any city on Legistar') and adds a framing question ('What did a city council decide?'). The domain is narrow enough that no sibling scraper (grants, tenders, awards, notices) could be confused with it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

An explicit 'When to use' section gives the condition ('city council or county board meetings, agenda items, votes and documents from a Legistar client') and even example client slugs. It stops short of naming exclusions or alternative tools for closely related municipal-data needs, so it is clear context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publicrecords--uk-find-a-tender-scraperFind a Tender & Contracts Finder: UK government tendersA
Read-only
Inspect

Find a Tender & Contracts Finder: UK government tenders. Which UK government tenders were published today? Returns Find a Tender and Contracts Finder notices with buyer, value, deadline and source link.

When to use: Use when you need UK public-sector tenders from Find a Tender and Contracts Finder with buyer, value and deadline.

Returns: the run's dataset rows as structured JSON (one row per result), plus the run and dataset IDs for paging the full dataset.

Behavior: starts one run of the Apify Actor "publicrecords/uk-find-a-tender-scraper" through Apify's hosted MCP gateway (mcp.apify.com) with your own APIFY_TOKEN; the run uses your Apify account. Read-only: it only reads public web data and changes nothing on the source site. Docs: https://apify.com/publicrecords/uk-find-a-tender-scraper

NameRequiredDescriptionDefault
cpvNoMatch when tender.items[].classification.id starts with any code (client-side).
keywordsNoCase-insensitive match on tender title, description, or buyer name (client-side).
maxItemsNoCap on notice rows.
updatedToNoISO datetime. Default: now.
noticeTypeNoMapped to API stages: planning | tender | award. Omit for all.
updatedFromNoISO datetime. Default: 7 days ago.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld and non-destructive, so the safety profile is covered; the description still adds genuinely new context: the run executes the Apify Actor via the hosted MCP gateway, consumes the caller's own APIFY_TOKEN and Apify account quota, and returns run/dataset IDs used for paging. It does not flag cost/credit consumption or pagination mechanics explicitly, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the concrete question it answers, then labeled When to use / Returns / Behavior sections that are easy to scan. The opening phrase repeats the title verbatim and the When-to-use line largely restates the first sentence, which is mild waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the Returns section carries the burden and does so adequately (one JSON row per result plus run/dataset IDs for paging), and the Behavior section explains execution and account context. Slight gap: the framing question asks about tenders 'published today' while the actual filters are updatedFrom (default 7 days) / updatedTo, so an agent could mis-set the time window.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter self-documented (cpv prefix match, case-insensitive keyword match, maxItems cap, ISO datetimes with defaults), so the baseline is 3. The description adds only field names in the returns line and nothing about how cpv, keywords or noticeType stages behave beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (UK government tenders) with the two exact sources named (Find a Tender and Contracts Finder), plus the fields returned (buyer, value, deadline, source link). This source-and-jurisdiction specificity is enough to separate it from the EU TED and USASpending/govcon siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated 'When to use' line gives clear positive context (UK public-sector tenders with buyer, value and deadline). It stops short of explicit exclusions, e.g. it never says 'for EU notices use eu-ted-notices-scraper instead', so an agent must infer the boundary from geography.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publicrecords--usaspending-awards-scraperUSAspending API Awards: federal contract and grant awardsA
Read-only
Inspect

USAspending API Awards: federal contract and grant awards. Who won federal contracts and grants, and for how much? Pulls USAspending awards by agency, recipient, NAICS and period, with award IDs and source links.

When to use: Use when you need who won US federal contracts and grants and for how much (USAspending), by agency, recipient, NAICS or period.

Returns: the run's dataset rows as structured JSON (one row per result), plus the run and dataset IDs for paging the full dataset.

Behavior: starts one run of the Apify Actor "publicrecords/usaspending-awards-scraper" through Apify's hosted MCP gateway (mcp.apify.com) with your own APIFY_TOKEN; the run uses your Apify account. Read-only: it only reads public web data and changes nothing on the source site. Docs: https://apify.com/publicrecords/usaspending-awards-scraper

NameRequiredDescriptionDefault
naicsNoMapped to filters.naics_codes.
agencyNoToptier awarding agency name → filters.agencies[{type:awarding,tier:toptier,name}]. Example: Department of Defense.
endDateNoYYYY-MM-DD. Default: today.
keywordsNoMapped to filters.keywords. Leave empty for broad recent awards; prefer agency/recipient/date.
maxItemsNoCap on award rows (deduped by awardId|generatedInternalId).
recipientNoMapped to filters.recipient_search_text (array). Example: Boeing. Verified shape requires an array of strings.
startDateNoYYYY-MM-DD. Default: today − 30 days (recent awards window).
subawardsNoPass subawards flag to search (default false).
awardTypesNoDefault A,B,C,D (contracts/IDVs). Avoid assistance codes that may list individuals.
fetchDetailsNoHydrate via GET /awards/{generated_internal_id}/.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, non-destructive, open-world behavior, so the bar is lower, yet the description still adds real operational context: it starts one run of the Apify Actor via the hosted MCP gateway, requires the caller's own APIFY_TOKEN, and bills against their Apify account. It also discloses that results come back as dataset rows plus run/dataset IDs for paging, and links the source docs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well structured and front-loaded: a summary sentence, then labeled 'When to use', 'Returns', 'Behavior', and 'Docs' sections. There is minor redundancy, since 'federal contract and grant awards' is repeated in the title and the first sentence, but nothing is wasted overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, zero-required scraper with no output schema, the description covers the essential gaps: what the run produces, that rows map one-per-result, and how to page the full dataset via run/dataset IDs. It does not touch on cost/credit consumption or run duration, which are the remaining unknowns for an agent invoking a paid Actor run.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, which sets the baseline at 3. The description only restates the same dimensions ('by agency, recipient, NAICS and period') and adds no syntax, precedence, or interaction guidance (for example how keywords interact with agency/recipient filters) beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Pulls USAspending awards by agency, recipient, NAICS and period, with award IDs and source links.' The domain (USAspending federal awards) is concrete enough to separate it from the tender/meeting siblings, though it never explicitly contrasts itself with publicrecords--grants-gov-scraper, which covers adjacent grant data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated 'When to use' block gives a clear trigger: 'when you need who won US federal contracts and grants and for how much... by agency, recipient, NAICS or period.' It gives positive context but no exclusions or named alternatives for the overlapping siblings, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.2.1
    • First observedpublicrecords--eu-ted-notices-scraper
    • First observedpublicrecords--govcon-opportunity-feed
    • First observedpublicrecords--grants-gov-scraper
    • First observedpublicrecords--legistar-meetings-scraper
    • First observedpublicrecords--uk-find-a-tender-scraper
    • First observedpublicrecords--usaspending-awards-scraper

TDQS

A4/5.0

Scored across 6 tools

Disambiguation4/5

Most tools are cleanly separated by geography/source (EU TED, UK Find a Tender, USAspending awards, Legistar meetings), so selection is usually obvious. The one real overlap is between govcon-opportunity-feed (SAM.gov + Grants.gov combined, delta mode) and grants-gov-scraper (Grants.gov only, search mode), which an agent could reasonably confuse when asked for US federal grants.

Naming Consistency4/5

All names use a uniform 'publicrecords--<source>-<object>-scraper' kebab-case convention with a shared namespace prefix, making them predictable. The single deviation is 'govcon-opportunity-feed' (feed rather than scraper) and 'eu-ted-notices-scraper' drops the source verb, but the pattern remains readable.

Tool Count5/5

Six tools is well within the ideal range and each maps to a distinct data source rather than duplicating surface area. Nothing feels padded, and the set is small enough for an agent to reason over at once.

Completeness3/5

The surface covers several major jurisdictions (EU, UK, US federal opportunities/grants/awards, US city councils) but leaves obvious holes such as US state/local procurement portals and non-covered countries, and the SAM.gov/Grants.gov duplication is redundant rather than additive. It also only exposes one-shot run launchers returning dataset IDs, with no tool to fetch a specific notice by ID or page a stored dataset, creating a soft dead end for drill-down.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for US (Mississippi) and UK government procurement feeds. Search live bids and tenders and track what changed over time: deadline moves, new awards, and added documents. Tools: search_opportunities, get_opportunity, list_recent_changes.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Search official US government data from any MCP client: building permits from 10 city open-data portals, federal contract opportunities from SAM.gov with contracting-officer contacts, and the CMS NPI healthcare-provider registry. Open-source TypeScript server; data delivered via Apify's pay-per-result actors using your own Apify token.
    3
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to find, score, and monitor government contract opportunities across UK, EU, and US with AI-powered relevance scoring.
    2
    103 npm
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for querying SAM.gov federal contract opportunities, providing precise search, retrieval, and attachment tools with full source traceability and explicit abstention when data is absent.
    5
    MIT