Panda Public Funding Tools
Panda Public Funding Tools
US federal money and filings: grants, contracts, SBIR/STTR topics, SEC financials, clinical trials.
Focused MCP server (5 tools) from the Panda Federation public-data toolkit. Prefer this over the 23-tool mega-server for better Tool Definition Quality Score (TDQS) / Glama coherence.
Install / Use
Needs a free Apify API token and uv.
uvx --from panda-federation-tools panda-public-funding-toolsSame entry point from this repo:
uvx --from git+https://github.com/pandadad0214/panda-public-funding-tools panda-public-funding-toolsCursor / Claude / VS Code: command uvx, args ["--from", "panda-federation-tools", "panda-public-funding-tools"], env APIFY_TOKEN.
Related MCP server: uspto-patents-mcp
Tools (5)
grants_finderfederal_contract_findersbir_sttr_topic_radarsec_financials_excelclinical_trial_leads
Each tool runs one Apify Actor on your account. Empty runs are not charged per result; every call is capped by run_max_charge_usd. Full schemas and prices: umbrella README.
Sibling domain servers
panda-research-tools— Scholarly integrity and papers: citation checks, literature and PubMed search, academic experts, PDF tables.panda-leads-tools— Public leads and enrichment: NPI providers, podcasts, local businesses, hiring signals, website enrichment, team pages, topic trends, trucking carriers.panda-web-security-tools— Site, email and agent safety: SPF/DKIM/DMARC audits, AI/SEO readiness, website change monitoring, hidden AI instructions scanner.
Index / compatibility mega-server: panda-federation-tools (use only when you truly need every tool).
TDQS standard
New tools join this domain only while the count stays in the 3–15 band. Descriptions follow the checklist in the umbrella repo. See tdqs-standard / project docs.
Built by Panda Federation. MIT licensed.
Available Tools
5 toolsclinical_trial_leadsClinical Trial Leads: Sponsors, Sites & ContactsARead-only
Find clinical trials on the official ClinicalTrials.gov API by condition, intervention, sponsor, phase, status and site location, with sponsor class, enrollment, dates, central contacts, principal investigators and every study site with its contacts. Unlike pubmed_evidence_table (published articles) and npi_provider_lists (all registered providers), this returns registered studies and the people and sites running them. Use when you need recruiting trials near a location, sponsor or site pipelines, or investigator and site-contact leads for CROs, suppliers or patient referral. Do not use for published results (use pubmed_evidence_table) or for funding (use grants_finder). Parameters: statuses default to recruiting and not-yet-recruiting; add COMPLETED etc. for history. countries/states/city keep trials with at least one matching site and report matchingSiteCount. updatedWithinDays suits weekly schedules. requireContact filters out uncontactable trials before billing. Searches with no results are free. Returns per item: agentSummary, nctId, title, status, phase, conditions, interventions, leadSponsor, sponsorClass, collaborators, enrollment, startDate, primaryCompletionDate, centralContactName, centralContactPhone, centralContactEmail, principalInvestigators, sites, matchingSiteCount, url.
Behavior: read-only; runs the Apify Actor pandadad0214/clinical-trial-leads (https://apify.com/pandadad0214/clinical-trial-leads) on your own Apify account. Price: $0.002 per trial returned. Runs that find nothing are not charged per result, and spending is capped per call by run_max_charge_usd (default $0.50). run_max_items (default 50) limits items returned and fills maxResults when you leave it unset, so it also limits what is billed; setting maxResults higher can bill more than is returned. Most calls finish in 5-15 s for a few inputs; large inputs or crawls can take minutes, so raise run_timeout_secs (max 300) or shrink the input after a timeout error. Returns JSON {actor, count, items}; long text output is trimmed to whole items, with all items in structuredContent.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Site city. e.g. Phoenix. | |
| phases | No | Phases. Empty = any phase. | |
| states | No | Site states / regions. Full names as on ClinicalTrials.gov, e.g. Arizona, California, Ontario. | |
| sponsor | No | Sponsor or collaborator. e.g. Pfizer, Mayo Clinic. Optional. | |
| keywords | No | Other keywords. Free-text search across the whole record. Optional. | |
| statuses | No | Recruitment status. Default: recruiting + not yet recruiting. | |
| condition | No | Condition or disease. e.g. obesity, breast cancer, Alzheimer. Uses ClinicalTrials.gov synonyms. | |
| countries | No | Site countries. Keep trials with at least one site here, e.g. United States, Canada. | |
| studyType | No | Study type. Interventional = treatment trials. | any |
| maxResults | No | Maximum results. You pay per trial returned, so this also caps the cost. Default 100. | |
| sponsorType | No | Lead sponsor type. Industry = pharma/biotech/device companies. Choices: any = Any; INDUSTRY = Industry; NIH = NIH; FED = Other federal; OTHER_GOV = Other government; OTHER = Academic / hospital / other; NETWORK = Network. | any |
| intervention | No | Drug or intervention. e.g. semaglutide, CAR-T, device name. Optional. | |
| run_max_items | No | Optional. Most results to return from this call (default from PANDA_MAX_ITEMS, 50). Also limits how many results the Actor produces and charges for, unless you set its own max field. | |
| requireContact | No | Only trials with a contact. Skip trials without a published central or site contact. | |
| run_timeout_secs | No | Optional. Seconds to wait for results (default from PANDA_TIMEOUT_SECS, 120; max 300). | |
| updatedWithinDays | No | Updated in the last N days. Only trials whose record changed recently (good for weekly schedules). | |
| run_max_charge_usd | No | Optional. Hard spending cap for this call in USD (default from PANDA_MAX_CHARGE_USD, 0.50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, non-idempotent, non-destructive), it discloses that the tool executes an Apify Actor on the caller's own account, the exact price ($0.002/trial), that zero-result runs are free, the hard spend cap, and the run_max_charge_usd default. It also warns that maxResults set above run_max_items can bill more than is returned, and gives latency expectations and timeout remediation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then differentiation, then usage, then parameters, then a clearly labeled 'Behavior' block — a strong structure for a dense tool. Slightly redundant: the pubmed_evidence_table contrast is stated twice (in the 'Unlike' clause and again in the 'Do not use' clause), and the parameters section reads as one long run-on paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, zero-required-parameter, no-output-schema tool, the description covers purpose, alternatives, defaults, billing mechanics, latency, timeout recovery, and a full field inventory of returned items. Nothing an agent needs in order to call it correctly or budget for it appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by explaining that countries/states/city keep trials with at least one matching site and surface matchingSiteCount, and that requireContact filters uncontactable trials before billing. The run_max_items vs maxResults billing interaction is a genuinely non-obvious semantic that the schema text only hints at, though a couple of filter params (keywords, intervention) get no extra treatment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Find clinical trials on the official ClinicalTrials.gov API') and enumerates the filter axes plus returned entities (sponsors, sites, contacts, investigators). It explicitly distinguishes itself from two named alternatives (pubmed_evidence_table for articles, npi_provider_lists for providers), so an agent can classify it without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use cases (recruiting trials near a location, sponsor/site pipelines, investigator and site-contact leads for CROs, suppliers, patient referral) and explicit when-not-to-use routing to pubmed_evidence_table and grants_finder. It also adds per-parameter usage guidance such as 'add COMPLETED etc. for history' and 'updatedWithinDays suits weekly schedules'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
federal_contract_finderUSAspending Scraper: Federal Contract Awards & Recompete FinderARead-only
Find US federal prime contract awards on USAspending.gov by keyword, NAICS, PSC, agency, place of performance, set-aside or recipient, or switch to recompete mode to list contracts whose period of performance ends soon. Unlike grants_finder (assistance grants and research awards) and sbir_sttr_topic_radar (open SBIR/STTR topics), this returns procurement contracts with incumbent, UEI and end date. Use when you need incumbents, competitor contract history, market sizing by NAICS/agency, or recompete pipeline leads. Do not use for grants (use grants_finder) or for open solicitations you can bid on today (USAspending holds awards, not SAM.gov notices). Parameters: mode=awards honors sortBy and dateFrom/dateTo (activity window, default last 24 months); mode=recompete ignores sortBy, sorts by soonest end date and uses recompeteMonths as the window. NAICS prefixes cover all child codes. recipientNames accepts company names or UEIs for competitor lookups. Keywords under 3 characters are rejected. Returns per item: agentSummary, awardId, recipientName, recipientUei, amount, awardingAgency, awardingSubAgency, naicsCode, pscCode, description, startDate, endDate, monthsLeft, status, performanceState, url.
Behavior: read-only; runs the Apify Actor pandadad0214/federal-contract-finder (https://apify.com/pandadad0214/federal-contract-finder) on your own Apify account. Price: $0.002 per contract found. Runs that find nothing are not charged per result, and spending is capped per call by run_max_charge_usd (default $0.50). run_max_items (default 50) limits items returned and fills maxResults when you leave it unset, so it also limits what is billed; setting maxResults higher can bill more than is returned. Most calls finish in 5-15 s for a few inputs; large inputs or crawls can take minutes, so raise run_timeout_secs (max 300) or shrink the input after a timeout error. Returns JSON {actor, count, items}; long text output is trimmed to whole items, with all items in structuredContent.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Mode. Contract awards = awards that match your filters, sorted as you choose. Recompete radar = only contracts whose period of performance ends between today and the number of months below (incumbent contracts likely to be re-solicited), soonest first. Choices: awards = Contract awards; recompete = Recompete radar (contracts ending soon). | awards |
| dateTo | No | Activity to date. Optional. 2026, 2026-09 or 2026-09-30. Default: today. | |
| sortBy | No | Sort (contract awards mode). Largest awards first, newest start date first, latest end date first, or most recently modified first. Recompete radar always sorts by end date, soonest first. Choices: amount = Largest amount; newest = Newest start date; endingSoon = Latest end date; recentlyModified = Recently modified. | amount |
| agencies | No | Awarding agencies. Optional. Department or sub-agency by name or abbreviation, e.g. DOD, VA, GSA, DHS, Department of the Army, Missile Defense Agency, Forest Service. | |
| dateFrom | No | Activity from date. Optional. 2024, 2024-06 or 2024-06-30. Awards with a contract action (signed or modified) on or after this date. Default: 24 months ago (36 months in recompete mode). Earliest 2007-10-01. | |
| keywords | No | Keywords. Words to find in the award description, recipient or codes, e.g. cybersecurity, janitorial, drone. Each keyword at least 3 characters; rows matching any keyword are returned. At least one filter (keywords, NAICS, PSC, agency, recipient, state or set-aside) is required. | |
| pscCodes | No | PSC codes. Optional. Product and Service Codes (what was bought), e.g. D399 other IT, R425 engineering support, S201 custodial. | |
| maxAmount | No | Maximum award amount (USD). Optional. Whole number, 0 or more USD. | |
| minAmount | No | Minimum award amount (USD). Optional. Whole number, 0 or more USD. | |
| setAsides | No | Set-aside types. Optional. Only awards made under these small-business set-asides. | |
| maxResults | No | Maximum results. You pay per returned contract, so this also caps the cost. Whole number, 1 to 5,000; default 100. | |
| naicsCodes | No | NAICS codes. Optional. 2 to 6 digit NAICS industry codes; a prefix covers all codes under it (5415 = computer systems design). Examples: 541512 IT services, 561720 janitorial, 236220 commercial construction. | |
| contractTypes | No | Contract types. Optional. Default: all four prime contract types. | |
| run_max_items | No | Optional. Most results to return from this call (default from PANDA_MAX_ITEMS, 50). Also limits how many results the Actor produces and charges for, unless you set its own max field. | |
| recipientNames | No | Recipient (company) names. Optional. Company names or UEIs to look up a competitor's or partner's contracts, e.g. Booz Allen. | |
| recompeteMonths | No | Recompete window (months). Recompete radar only: keep contracts that end within this many months from today. Whole number, 1 to 36; default 12. | |
| run_timeout_secs | No | Optional. Seconds to wait for results (default from PANDA_TIMEOUT_SECS, 120; max 300). | |
| performanceStates | No | Place of performance (states). Optional. 2-letter US state codes where the work is done, e.g. AZ, TX, DC. | |
| run_max_charge_usd | No | Optional. Hard spending cap for this call in USD (default from PANDA_MAX_CHARGE_USD, 0.50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint=false and destructiveHint=false, yet the description adds substantial context beyond them: per-contract pricing ($0.002), a hard per-call cap via run_max_charge_usd, the fact that empty runs aren't billed, that run_max_items also constrains billing, that raising maxResults can bill more than is returned, and 5-15s typical latency with a 300s timeout ceiling. The one gap is that it doesn't explain why idempotentHint is false (e.g. that each call creates a fresh Actor run on the user's Apify account), which is the behavior an agent is most likely to get wrong on retries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded with purpose, then differentiation, then per-mode parameter behavior, then operational/cost behavior — a sensible information hierarchy with no filler sentences. It is nonetheless long for a description, and the middle "Parameters:" passage repeats several facts the 100%-covered schema already states.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 19-parameter tool with no output schema, the description stays complete: it enumerates the per-item return fields (agentSummary, awardId, recipientUei, monthsLeft, status, url, etc.), the top-level response envelope {actor, count, items}, cost and timeout guardrails, and the empty-result case. An agent has everything needed to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns a lift by documenting cross-parameter interactions the schema does not fully surface — that mode=recompete ignores sortBy, sorts by soonest end date and uses recompeteMonths as its window, and that run_max_items back-fills maxResults when it is unset. Other parameter notes (NAICS prefixes, UEI support in recipientNames, 3-character keyword minimum) restate what the schema already says, so it is not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource (find US federal prime contract awards on USAspending.gov) and enumerates the filterable dimensions. It immediately distinguishes itself from grants_finder and sbir_strtr_topic_radar by naming both and stating what each covers, so an agent can disambiguate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit positive use cases (incumbents, competitor contract history, market sizing by NAICS/agency, recompete pipeline leads) and explicit exclusions with named alternatives ("Do not use for grants… use grants_finder", "not open solicitations… USAspending holds awards, not SAM.gov notices"). The when-to-use/when-not matrix is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grants_finderGrants.gov Scraper: Federal Grants, NIH & NSF Awards APIARead-only
Search US federal funding in one call: open and forecasted Grants.gov opportunities plus already-funded NIH RePORTER and NSF awards, one row per grant with agency, dates, amount (USD), eligibility and link. Unlike sbir_sttr_topic_radar (SBIR/STTR solicitation topics with deadlines and DoD Q&A) and federal_contract_finder (procurement contracts on USAspending), this covers assistance grants and research awards. Use when you need grants to apply for or want to see who was funded for a topic. Do not use for contracts (use federal_contract_finder) or small-business R&D topics (use sbir_sttr_topic_radar). Parameters: sources picks the mix; grants_gov is apply-able funding, nih/nsf are past awards. maxResultsPerSource applies to each source, so worst-case billed rows = maxResultsPerSource x number of sources; run_max_items does not set it, so keep it small first and rely on run_max_charge_usd. minAmount drops rows whose source publishes no amount. includeGrantsGovDetails adds award ceiling and eligibility but slows the run; turn it off for quick scans. Returns per item: agentSummary, source, recordType, status, title, agency, number, openDate, closeDate, amount, eligibility, summary, url.
Behavior: read-only; runs the Apify Actor pandadad0214/grants-finder (https://apify.com/pandadad0214/grants-finder) on your own Apify account. Price: $0.003 per grant found. Runs that find nothing are not charged per result, and spending is capped per call by run_max_charge_usd (default $0.50). run_max_items (default 50) limits items returned but does not limit what the Actor bills; use the tool's own limits and run_max_charge_usd. Most calls finish in 5-15 s for a few inputs; large inputs or crawls can take minutes, so raise run_timeout_secs (max 300) or shrink the input after a timeout error. Returns JSON {actor, count, items}; long text output is trimmed to whole items, with all items in structuredContent.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | No | To date. Optional. 2026, 2026-12 or 2026-12-31. | |
| sortBy | No | Sort. Relevance (default) or newest first (by posted / start date). Choices: relevance = Relevance; newest = Newest first. | relevance |
| sources | No | Sources. Grants.gov = open and upcoming funding opportunities you can apply to. NIH RePORTER and NSF = awards already made (who got funded, how much, by which program). | |
| agencies | No | Agencies. Optional. Grants.gov agency codes or names (HHS-NIH11, NSF, DOE, USDA, ED, Geological Survey; a code prefix like HHS matches all HHS sub-agencies). NIH institutes (NCI, NIAID, NIMH… or NIH for all). NSF directorates (CSE, BIO, GEO, MPS, SBE, EDU, ENG, TIP, or NSF for all). A source is skipped when none of its agencies are listed. | |
| dateFrom | No | From date. Optional. 2025, 2025-06 or 2025-06-30. Applies to the Grants.gov posted date, the NIH project start date and the NSF award date. | |
| keywords | Yes | Keywords. What the funding is for, e.g. artificial intelligence, rural broadband, opioid prevention. Use quotes for exact phrases ("machine learning"). NIH also understands AND / OR / NOT. | artificial intelligence |
| maxAmount | No | Maximum amount (USD). Optional. Whole number, 0 or more USD. | |
| minAmount | No | Minimum amount (USD). Optional. Grants.gov award ceiling, NIH fiscal-year award or NSF estimated total. When set, rows whose source publishes no amount are left out (and counted in the summary). Whole number, 0 or more USD. | |
| nihActiveOnly | No | NIH: active projects only. Only return NIH projects that are currently active. Default: off. | |
| run_max_items | No | Optional. Most results to return from this call (default from PANDA_MAX_ITEMS, 50). Also limits how many results the Actor produces and charges for, unless you set its own max field. | |
| nihFiscalYears | No | NIH fiscal years. Optional, e.g. 2025, 2026. Each NIH project appears once (its latest matching year). | |
| run_timeout_secs | No | Optional. Seconds to wait for results (default from PANDA_TIMEOUT_SECS, 120; max 300). | |
| grantsGovStatuses | No | Grants.gov opportunity status. Default: forecasted and posted (still open or coming soon). | |
| run_max_charge_usd | No | Optional. Hard spending cap for this call in USD (default from PANDA_MAX_CHARGE_USD, 0.50). | |
| maxResultsPerSource | No | Maximum results per source. You pay per returned result, so this also caps the cost. Up to 1,000 per source. Whole number, 1 to 1,000 results per source; default 50. | |
| includeGrantsGovDetails | No | Grants.gov details (amount, eligibility, summary). Fetch each opportunity's detail page for award ceiling, eligibility and summary. Turn off for a faster title-and-deadline list. Default: on. | |
| grantsGovFundingCategories | No | Grants.gov funding categories. Optional Grants.gov category codes, e.g. ST (science and technology), HL (health), ED (education), AG (agriculture), ENV (environment), CD (community development). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply readOnly/openWorld/non-destructive, and the description goes well beyond them: per-result pricing ($0.003 per grant), the $0.50 default charge cap, the warning that run_max_items does not limit Actor billing while run_max_charge_usd does, typical 5-15s latency with a 300s ceiling, and the JSON {actor, count, items} envelope. These are exactly the operational facts an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but front-loaded: purpose, sibling differentiation, parameter guidance, then a clearly separated 'Behavior' block for cost and timing. The per-item return field list and a few parameter notes slightly duplicate the schema, but nothing is filler given the 17-parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 17 parameters and no output schema, the description still covers return shape (enumerated fields plus the {actor, count, items} envelope), cost model, spending cap, and timeout recovery advice. An agent has everything needed to call it correctly and to budget the run.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: sources is framed as 'apply-able funding vs past awards,' the worst-case billed row count is explained as maxResultsPerSource x number of sources, minAmount is flagged as silently dropping rows whose source publishes no amount, and includeGrantsGovDetails is presented as a speed/detail tradeoff. Some restatement of schema text keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search US federal funding') and enumerates the three underlying data sets (Grants.gov opportunities, NIH RePORTER, NSF awards) in the first sentence. It explicitly names and contrasts two siblings, sbir_sttr_topic_radar and federal_contract_finder, so an agent can disambiguate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives positive when-to-use ('you need grants to apply for or want to see who was funded for a topic') and explicit when-not-to-use with named alternatives for both contract search and SBIR/STTR topics. The routing between the three tools is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sbir_sttr_topic_radarSBIR/STTR Topic Radar: Open Topics, Deadlines & DoD Q&AARead-only
Find SBIR and STTR solicitation topics across agencies (DoD branches, NIH, NASA, NSF, DOE, USDA, DHS and more) by keyword, with full topic text, close dates, days left, topic numbers, official links, and DoD Q&A status and technical points of contact. Unlike grants_finder (general Grants.gov opportunities and past NIH/NSF awards) and federal_contract_finder (awarded contracts), this lists small-business R&D topics you can propose to. Use when a small business or research partner needs open SBIR/STTR topics, deadlines or a TPOC to contact. Do not use for general grants (use grants_finder) or for past contract winners (use federal_contract_finder). Parameters: empty keywords lists every topic matching the other filters, which can be large, so keep maxResults low. status=closed returns past topics to show what an agency keeps funding. includeDetails and includeDodQa each fetch extra pages per topic: richer rows, slower runs, same price; turn them off for a fast scan. Searches with no results are free. Returns per item: agentSummary, topicId, topicNumber, title, agency, branch, program, phase, status, openDate, closeDate, daysLeft, description, technicalPointOfContact, dodQaStatus, dodPublishedQuestions, officialSolicitationUrl, url.
Behavior: read-only; runs the Apify Actor pandadad0214/sbir-sttr-topic-radar (https://apify.com/pandadad0214/sbir-sttr-topic-radar) on your own Apify account. Price: $0.003 per topic found. Runs that find nothing are not charged per result, and spending is capped per call by run_max_charge_usd (default $0.50). run_max_items (default 50) limits items returned and fills maxResults when you leave it unset, so it also limits what is billed; setting maxResults higher can bill more than is returned. Most calls finish in 5-15 s for a few inputs; large inputs or crawls can take minutes, so raise run_timeout_secs (max 300) or shrink the input after a timeout error. Returns JSON {actor, count, items}; long text output is trimmed to whole items, with all items in structuredContent.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Topic status. Open = topics you can still propose to. Closed = past topics, useful to see what an agency keeps asking for. Choices: open = Open (accepting proposals); closed = Closed (past topics, for research). | open |
| program | No | Program. Topics tagged for both programs are kept either way. Choices: any = SBIR or STTR; SBIR = SBIR only; STTR = STTR only (needs a research-institution partner). | any |
| agencies | No | Agencies. Optional agency or branch codes: DOD (all DoD/DoW), USAF, ARMY, NAVY, DARPA, DHA, DTRA, MDA, SOCOM, SDA, OSD, CBD, HHS, NIH, FDA, CDC, NASA, NSF, DOE, USDA, NIFA, DHS, DOT, ED, EPA, DOC, NIST, NOAA, DOI, NRC. Empty = all agencies. | |
| keywords | No | Keywords. Words to find in topic titles and text, e.g. autonomy, battery, machine learning, wound care. Leave empty to list every topic with the chosen status. | |
| maxResults | No | Maximum topics. You pay per topic returned, so this also caps the cost. 1 to 1,000; default 50. | |
| closeDateTo | No | Closes on or before. Optional, e.g. 2027-03-31. | |
| includeDodQa | No | Add DoD Q&A status and point of contact. For DoD/DoW topics, looks the topic up on the DoD SBIR/STTR Innovation Portal (DSIP) and adds Q&A status, Q&A end date, published-question count and the technical point of contact when published. Needs 'Read full topic pages'. | |
| closeDateFrom | No | Closes on or after. Optional, e.g. 2026-12 or 2026-12-15. | |
| run_max_items | No | Optional. Most results to return from this call (default from PANDA_MAX_ITEMS, 50). Also limits how many results the Actor produces and charges for, unless you set its own max field. | |
| includeDetails | No | Read full topic pages. Adds topic number, solicitation number, branch, due dates, full description and the official solicitation link (one extra page per topic, no extra charge). | |
| run_timeout_secs | No | Optional. Seconds to wait for results (default from PANDA_TIMEOUT_SECS, 120; max 300). | |
| run_max_charge_usd | No | Optional. Hard spending cap for this call in USD (default from PANDA_MAX_CHARGE_USD, 0.50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds the economics an agent cannot infer: $0.003 per topic, free runs on zero results, per-call spend cap via run_max_charge_usd ($0.50 default), and the trap that raising maxResults can bill more than is returned. It also discloses latency (5-15 s typical, minutes for crawls), the 300 s timeout ceiling, extra page fetches for includeDetails/includeDodQa, and the {actor, count, items} return envelope — none of which is in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loading is strong: purpose, then sibling differentiation, then exclusions, then parameter tips, then a separate Behavior block for billing and latency. Some sentences duplicate structured fields — the $0.50 cap, the 50-item default, and the 300 s max are all in the schema — which makes the block denser than necessary, though nearly every sentence still carries routing or billing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-required, actor-wrapping tool with no output schema and real per-item cost, the description covers purpose, alternatives, cost model, timing, failure recovery ('raise run_timeout_secs ... or shrink the input after a timeout error'), and even enumerates returned fields. An agent has everything needed to call it safely and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and individual parameter meaning is already documented. The description earns extra credit for cross-parameter interactions the schema does not state: empty keywords plus filters yields a large set, includeDetails/includeDodQa cost time but not money ('same price'), and run_max_items fills maxResults when unset. It stops short of a 5 because much of the parameter prose restates schema text rather than adding new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Find SBIR and STTR solicitation topics across agencies') and enumerates the return payload (close dates, days left, topic numbers, official links, DoD Q&A status, TPOC). It explicitly distinguishes itself from the two nearest siblings, grants_finder and federal_contract_finder, so an agent can route correctly without comparing schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use ('a small business or research partner needs open SBIR/STTR topics, deadlines or a TPOC to contact') and explicit when-not-to-use with the named alternative for each exclusion ('Do not use for general grants (use grants_finder) or for past contract winners (use federal_contract_finder)'). It also supplies tactical guidance per parameter, e.g. keep maxResults low with empty keywords, and use status=closed for historical funding patterns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sec_financials_excelSEC Financials to Excel: EDGAR XBRL Comps & Model DataARead-only
Return standardized annual financials for US-listed companies from SEC EDGAR XBRL 10-K data: income statement, balance sheet and cash-flow lines plus EBITDA, free cash flow, net debt, margins and growth, one row per company-year, each number tagged to its source filing. Unlike pdf_table_extractor (any PDF table, best-effort), this reads structured filings and is exact; unlike federal_contract_finder it covers public-company fundamentals, not government spend. Use when you need comps, model inputs or multi-year history for tickers or CIKs. Do not use for private companies, foreign filers without 10-Ks, quarterly data or share prices (not included). Parameters: contactEmail is required by SEC's fair-access rule and is sent only to SEC. Billing is per company-year, so worst case = companies x years; run_max_items does not set years, so cap cost with years and run_max_charge_usd. Unknown tickers are returned free with a status. Returns per item: agentSummary, company, ticker, cik, fiscalYear, periodEnd, form, filed, revenue, grossProfit, operatingIncome, netIncome, epsDiluted, operatingCashFlow, capex, freeCashFlow, ebitda, cash, totalDebt, netDebt, stockholdersEquity, margins, revenueGrowth, epsGrowth, sourceTags. The comps workbook stays in the run's Apify key-value store.
Behavior: read-only; runs the Apify Actor pandadad0214/sec-financials-excel (https://apify.com/pandadad0214/sec-financials-excel) on your own Apify account. Price: $0.002 per company-year of financials. Runs that find nothing are not charged per result, and spending is capped per call by run_max_charge_usd (default $0.50). run_max_items (default 50) limits items returned but does not limit what the Actor bills; use the tool's own limits and run_max_charge_usd. Most calls finish in 5-15 s for a few inputs; large inputs or crawls can take minutes, so raise run_timeout_secs (max 300) or shrink the input after a timeout error. Returns JSON {actor, count, items}; long text output is trimmed to whole items, with all items in structuredContent.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Fiscal years per company. Most recent annual (10-K) periods to return. You pay per company-year row, so this also caps the cost. | |
| companies | Yes | Companies (tickers or CIKs). US-listed companies that file 10-Ks with the SEC, e.g. AAPL, MSFT, BRK-B or a CIK like 320193. Up to 200 per run. | |
| contactEmail | Yes | Your contact email (required by SEC). SEC requires every automated request to declare a contact in its User-Agent header. It is sent to SEC only and is never stored in the output. | |
| run_max_items | No | Optional. Most results to return from this call (default from PANDA_MAX_ITEMS, 50). Also limits how many results the Actor produces and charges for, unless you set its own max field. | |
| run_timeout_secs | No | Optional. Seconds to wait for results (default from PANDA_TIMEOUT_SECS, 120; max 300). | |
| run_max_charge_usd | No | Optional. Hard spending cap for this call in USD (default from PANDA_MAX_CHARGE_USD, 0.50). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, and the description stays consistent while adding substantial context the annotations cannot carry: SEC fair-access contact requirement, $0.002 per company-year billing, that run_max_items does not limit the Actor's billing while run_max_charge_usd does, default $0.50 cap, 5-15 s typical latency with run_timeout_secs up to 300, and that unknown tickers come back free with a status. Non-idempotency is implicitly covered by per-call billing and the explicit warning about repeated cost exposure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then routing, then parameter cost guidance, then runtime behavior — a sensible order. It is long and dense, and the exhaustive return-field list in the middle sentence competes with the usage guidance for attention, but since no output schema exists the field inventory earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers everything an agent needs for a 6-parameter, billed, long-running remote Actor call: cost model and caps, timeout guidance and remediation, required SEC contact email, per-item return fields in the absence of an output schema, and where the workbook artifact lands. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds real interpretation: it explains the years/company-year cost coupling and warns that run_max_items does not set years, so cost must be capped with years plus run_max_charge_usd — a cross-parameter interaction the schema only hints at. It slightly restates schema content (contactEmail's SEC purpose), which keeps this from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Return standardized annual financials for US-listed companies from SEC EDGAR XBRL 10-K data' — and enumerates the content (income statement, balance sheet, cash-flow lines plus EBITDA, FCF, net debt, margins, growth) at one row per company-year. It explicitly contrasts itself with pdf_table_extractor (best-effort PDF tables vs. exact structured filings) and federal_contract_finder (fundamentals vs. government spend), so an agent can separate it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an affirmative trigger ('Use when you need comps, model inputs or multi-year history for tickers or CIKs') and explicit exclusions ('Do not use for private companies, foreign filers without 10-Ks, quarterly data or share prices'). It also names the two alternatives it supersedes, which is the full when/when-not/alternative triad.
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.
5 tool updates
v0.1.0- First observed
clinical_trial_leads - First observed
federal_contract_finder - First observed
grants_finder - First observed
sbir_sttr_topic_radar - First observed
sec_financials_excel
TDQS
Scored across 5 tools
Each tool targets a distinct data source and use case, and the descriptions explicitly cross-reference each other (grants vs. contracts vs. SBIR topics) to prevent misselection. The only friction is scope: sec_financials_excel and clinical_trial_leads sit outside the 'public funding' theme, so an agent may briefly question whether they belong, though they are not confusable with the funding tools.
All five names are snake_case, descriptive noun phrases that pair a domain with an output type (grants_finder, federal_contract_finder, sbir_sttr_topic_radar, sec_financials_excel, clinical_trial_leads). The pattern is consistent and readable, though the suffix varies (finder/radar/excel/leads) rather than following a single verb_noun convention.
Five tools is a lean but workable set for a research/intelligence server, with each tool covering a substantial data source rather than a narrow operation. It is slightly thin for a server branded around 'public funding,' since only three tools serve that theme.
The funding surface covers assistance grants, awarded contracts and SBIR/STTR topics, but the description itself acknowledges a notable gap: no SAM.gov open contract solicitations, so an agent cannot find contracts to bid on today. There is also no lookup/detail tool for a specific grant or award, and state/local/foundation funding is absent.
Maintenance
Related MCP Connectors
Grants, jobs, SEC, federal awards, labs, Congress, trials, ad spend, datasets & leads (public data).
Grants.gov search and USAspending grant data. 4 MCP tools for grant discovery.
NIH clinical trials and FDA adverse event reports. 4 MCP tools for health research.
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceFederal procurement intelligence toolkit that searches SAM.gov contract opportunities, analyzes agency spending patterns, tracks competitor wins, and monitors small business set-aside programs (8a, HUBZone, SDVOSB, WOSB). 4 tools using SAM.gov and USASpending.gov data.3-
- AlicenseNot gradedqualityDmaintenanceUS patent search, full-text retrieval, claim extraction, citation graph, and weekly grant alerts for R\&D, biotech, and IP-law audiences.MIT
- AlicenseNot gradedqualityCmaintenanceAggregate US business filings, SEC reports, federal court cases, federal spending awards, and professional licenses through a single MCP server.1MIT
- AlicenseNot gradedqualityAmaintenanceAccess US federal award, recipient, agency, and spending analytics data from USAspending.gov via MCP, with 18 tools for searching and retrieving detailed records.424 npm5Apache 2.0