{"name":"io.github.tettertotter/fundinglandscape","slug":"tettertotter-fundinglandscape","title":"FundingLandscape","description":"Search 31,000+ open US grants, federal contracts, and foundations. Checked daily, free tier.","url":"https://mcp.market/server/tettertotter-fundinglandscape","rating":null,"grade":"C","score":57,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":20,"ok":20,"last_checked_at":"2026-09-24T10:11:33.082Z","last_ok_at":"2026-09-24T10:11:33.082Z","latency_ms":304},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/tettertotter/fundinglandscape","website":"https://fundinglandscape.com/mcp","version":"2.1.3","remotes":[{"type":"streamable-http","url":"https://fundinglandscape.com/api/mcp"}],"packages":[],"tools":[{"name":"batch_search_grantsplus","description":"DEPRECATED ALIAS — prefer search_grantsplus with a queries[] array, which now runs the identical batch fan-out. Kept for backward compatibility; behavior is unchanged. Search grants, prizes, and foundations comprehensively. Returns 10 results by default (~4KB). Use detail_level and max_results to control response size. Response includes total available count so you can request more if needed. Counts toward your monthly searches. A batch counts as 1 call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"queries":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":5,"description":"Array of 2-5 search queries to run in parallel. Example for clean energy: [\"renewable energy grants\", \"solar wind funding\", \"clean energy nonprofit\", \"sustainability grants\", \"green technology funding\"]"},"max_results":{"type":"number","minimum":1,"default":10,"description":"Maximum opportunities to return (default: 10, max: 100). Token cost guide: 10 results ~4KB, 25 results ~10KB, 50 results ~20KB, 100 results ~40KB."},"offset":{"type":"number","minimum":0,"default":0,"description":"Number of results to skip for pagination (default: 0). Use with max_results to page through large result sets. Example: offset=100 with max_results=100 returns results 101-200."},"detail_level":{"type":"string","enum":["minimal","compact","full"],"default":"compact","description":"Controls response verbosity. minimal (~120 bytes/result): id, title, org, deadline, url, qualityScore - best for scanning 50+ results. compact (~400 bytes/result, DEFAULT): adds snippet, category, status, deadlineType, daysUntilDeadline, deadlineLabel, and lastRoundClosedAt - good for recommendations. full (~1.5KB/result): everything including eligibility, amounts - only use with max_results <= 10."},"max_response_tokens":{"type":"number","minimum":500,"default":4000,"description":"Token budget for response (default: 4000 ≈ 16KB). Server auto-caps results to fit. Increase to 8000-16000 for more results per call, decrease to 2000 for lightweight scanning."},"posted_within_days":{"type":"number","description":"Preferred alias for new_within_days: only opportunities ingested (added by us) in the last N days. Applied per sub-query before dedupe; the response includes a deduped newSince summary. If both posted_within_days and new_within_days are supplied, posted_within_days wins."},"new_within_days":{"type":"number","description":"Backwards-compatible alias for posted_within_days. Only opportunities ingested (added by us) in the last N days -- for recurring/delta checks (\"what is new since my last check\"). Applied per sub-query before dedupe; response includes deduped newSince.newCount and the newest/oldest ingest timestamp in the window."},"since":{"type":"string","description":"Stateless alternative to posted_within_days/new_within_days: ISO 8601 instant. Only opportunities ingested at/after this instant."},"source":{"type":"string","description":"Filter every batch sub-query to a specific source/domain, e.g. \"grants.gov\" or \"deq.nc.gov\"."},"user_context":{"type":"object","properties":{"organization_type":{"type":"string","enum":["nonprofit","startup","small_business","university","government","individual"],"description":"Common natural-language phrasing (e.g. \"501(c)(3) nonprofit\") is also parsed; unparseable values are ignored with an explicit note in the response."},"location":{"type":"string","description":"State code or \"nationwide\""}}},"grants_filters":{"type":"object","properties":{"agency_code":{"type":"string","description":"Grants.gov agency code"},"cfda":{"type":"string","description":"CFDA number (e.g., \"10.001\")"}},"description":"Grants.gov specific filters"},"include_foundations":{"type":"boolean","description":"Also search private foundations (default: true)"}},"required":["queries"]}},{"name":"batch_search_procurement","description":"DEPRECATED ALIAS — prefer search_procurement with a queries[] array, which now runs the identical batch fan-out. Kept for backward compatibility; behavior is unchanged. Search federal contracts (SAM.gov) comprehensively. Returns 10 results by default (~4KB). Use detail_level and max_results to control response size. Response includes total available count so you can request more if needed. When sam_filters.pop_state (alias: place_of_performance_state) is set, the response includes a placeOfPerformance field summed across every sub-query (matched, unknownServed with unknowns excluded instead when user_context.location_strict is true, and otherStateExcluded). Counts toward your monthly searches. A batch counts as 1 call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"queries":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":5,"description":"Array of 2-5 search queries to run in parallel. Example for IT services: [\"IT services contract\", \"software development federal\", \"technology consulting government\", \"computer services procurement\"]"},"max_results":{"type":"number","minimum":1,"default":10,"description":"Maximum opportunities to return (default: 10, max: 100). Token cost guide: 10 results ~4KB, 25 results ~10KB, 50 results ~20KB, 100 results ~40KB."},"offset":{"type":"number","minimum":0,"default":0,"description":"Number of results to skip for pagination (default: 0). Use with max_results to page through large result sets. Example: offset=100 with max_results=100 returns results 101-200."},"detail_level":{"type":"string","enum":["minimal","compact","full"],"default":"compact","description":"Controls response verbosity. minimal (~120 bytes/result): id, title, org, deadline, url, qualityScore - best for scanning 50+ results. compact (~400 bytes/result, DEFAULT): adds snippet, category, status, deadlineType, daysUntilDeadline, deadlineLabel, and lastRoundClosedAt - good for recommendations. full (~1.5KB/result): everything including eligibility, amounts - only use with max_results <= 10."},"max_response_tokens":{"type":"number","minimum":500,"default":4000,"description":"Token budget for response (default: 4000 ≈ 16KB). Server auto-caps results to fit. Increase to 8000-16000 for more results per call, decrease to 2000 for lightweight scanning."},"posted_within_days":{"type":"number","description":"Preferred alias for new_within_days: only opportunities ingested (added by us) in the last N days. Applied per sub-query before dedupe; the response includes a deduped newSince summary. If both posted_within_days and new_within_days are supplied, posted_within_days wins."},"new_within_days":{"type":"number","description":"Backwards-compatible alias for posted_within_days. Only opportunities ingested (added by us) in the last N days -- for recurring/delta checks (\"what is new since my last check\"). Applied per sub-query before dedupe; response includes deduped newSince.newCount and the newest/oldest ingest timestamp in the window."},"since":{"type":"string","description":"Stateless alternative to posted_within_days/new_within_days: ISO 8601 instant. Only opportunities ingested at/after this instant."},"source":{"type":"string","description":"Filter every batch sub-query to a specific source/domain, e.g. \"sam.gov\"."},"user_context":{"type":"object","properties":{"organization_type":{"type":"string","enum":["small_business","startup","nonprofit","university","government","individual"],"description":"Common natural-language phrasing (e.g. \"501(c)(3) nonprofit\") is also parsed; unparseable values are ignored with an explicit note in the response."},"location":{"type":"string","description":"State code or \"nationwide\""},"location_strict":{"type":"boolean","description":"With a recognized location, requests geographic filtering; nationwide or unspecified records and explicitly broader fallbacks may remain. Check geographyFilterOutcome and warnings. With sam_filters.place_of_performance_state (or pop_state in batch), true additionally excludes records without a confirmed performance location; false demotes and caveats them."},"naics_codes":{"type":"array","items":{"type":"string"},"description":"NAICS codes for filtering (e.g., [\"541512\", \"541511\"])"}}},"sam_filters":{"type":"object","properties":{"department":{"type":"string","description":"Federal department (e.g., \"Department of Defense\")"},"sub_tier":{"type":"string","description":"Sub-tier agency"},"office":{"type":"string","description":"Contracting office"},"set_aside":{"type":"string","description":"Set-aside type. Supported: SDVOSB, VOSB, WOSB, EDWOSB, 8a/8(a), HUBZone, SBA/\"Small Business\" (each expands to all matching SAM codes and CSV labels). Actually filters results."},"set_aside_code":{"type":"string","description":"Exact SAM set-aside code (e.g., \"SBA\", \"8A\", \"SDVOSBC\"). Prefer set_aside for common terms."},"pop_state":{"type":"string","description":"Place of performance state code. Alias: place_of_performance_state, which wins if both are set."},"place_of_performance_state":{"type":"string","description":"Preferred alias for pop_state; wins if both are set."},"pop_city":{"type":"string","description":"Place of performance city"},"pop_zip":{"type":"string","description":"Place of performance ZIP"},"pop_country":{"type":"string","description":"Place of performance country (default: USA)"}},"description":"SAM.gov specific filters"}},"required":["queries"]}},{"name":"check_connection","description":"Verify MCP server connectivity. Returns success immediately with no database calls. Use this FIRST if experiencing tool errors - a successful response confirms the server is reachable. It does not confirm account, search, or paid-feature authentication, which can still return \"Auth required\" separately. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"deadline_calendar","description":"Get upcoming funding deadlines for planning an application schedule. Default compact mode returns a merged `results` list of lean rows (id/title/org/deadline/daysUntil and direct url when it fits) plus section counts/index ranges so grants and procurement stay balanced without duplicating every row. Pass compact:false for full descriptions, quality details, and full `sections.grants` / `sections.procurement` arrays. Returns a bounded page of up to 50 candidate rows per section before calendar exclusions, not a complete calendar for the requested window. `coverage` preserves per-section candidate counts and executable candidate-search continuations; counts are not exact eligible totals. Non-biddable notices (Sources Sought, Award notices, etc.) and past/undated rows are excluded. Pass `category` to restrict to one type (e.g. \"procurement\" for contracts only). Paid feature. Counts toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"weeks":{"type":"number","description":"Number of weeks ahead to show (default: 4, max: 12)"},"days":{"type":"number","description":"Alternative to weeks: exact number of days ahead to show (default: 28, max: 365)"},"category":{"type":"string","description":"Optional. Restrict to ONE category instead of the default balanced grants+procurement view (e.g. \"grant\", \"procurement\", \"prize\"). Omit to get both grants and procurement as separate sections."},"compact":{"type":"boolean","default":true,"description":"Return compact rows by default to keep agent payloads small. Long titles/orgs/links may be shortened or omitted; set false for full descriptions, nested quality details, and full section arrays."}}}},{"name":"delete_saved_search","description":"Delete a saved search by ID. Use list_saved_searches first to find the ID. Does not count toward your monthly searches.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"number","description":"Saved search ID (from list_saved_searches)"}},"required":["id"]}},{"name":"find_funders_of","description":"Find the private foundations whose covered 990-PF filings name a given organization as a grant recipient. Use this to research who funds peer organizations doing work like the user's. Returns matched recipients with a confidence tier (registry_corroborated = an EIN matched a registry record; name_match = normalized organization name only), then that recipient's funders ranked by total recorded giving with amounts, grant-record counts, and the covered filing years. Historical filing evidence, NOT an open call, a current interest statement, or an eligibility signal. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"organization":{"type":"string","description":"Recipient organization name, at least 3 characters. Recipient names are written however the filing foundation chose to write them, so the shortest distinctive part of the name matches best."},"state":{"type":"string","description":"Optional 2-letter state code to restrict matches to recipients recorded in that state."},"page":{"type":"number","description":"1-based page of matched recipients."},"limit":{"type":"number","description":"Recipients per page (default 20, max 50)."}},"required":["organization"]}},{"name":"find_similar","description":"Find opportunities similar to a given one using semantic similarity. Returns each result with similarityScore (0-1) and a concise matchExplanation of shared signals such as category/class, geography, organization, and award amount band. Useful when user likes one result and wants more like it. Uses vector embeddings to find conceptually related opportunities, not just keyword matches. Paid feature. Counts toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"opportunity_id":{"type":"string","description":"ID of the opportunity to find similar matches for (from search results)"},"limit":{"type":"number","description":"Max similar opportunities to return (default: 5, max: 20)"}},"required":["opportunity_id"]}},{"name":"funders_for_cause","description":"Find the private foundations that have given to recipients in a cause area, optionally limited to one state. The cause area is the IRS NTEE major group recorded for the RECIPIENT organization, so this reports where a funder has actually given rather than what it says it funds. Historical filing evidence, not an open call. Valid causes: Arts and culture (A), Education (B), Environment (C), Animals (D), Health care (E), Mental health and crisis (F), Disease and disorders (G), Medical research (H), Crime and legal aid (I), Employment (J), Food and agriculture (K), Housing and shelter (L), Public safety and disaster relief (M), Recreation and sports (N), Youth development (O), Human services (P), International affairs (Q), Civil rights and advocacy (R), Community improvement (S), Philanthropy and grantmaking (T), Science and technology (U), Social science (V), Public and societal benefit (W), Religion (X), Mutual benefit (Y), Unclassified (Z). Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"cause":{"type":"string","description":"Cause area name (for example \"Education\") or its NTEE major group letter (for example \"B\")."},"state":{"type":"string","description":"Optional 2-letter state code for the RECIPIENT organizations, not the funder."},"page":{"type":"number","description":"1-based page of funders."},"limit":{"type":"number","description":"Funders per page (default 20, max 50)."}},"required":["cause"]}},{"name":"get_account_status","description":"Check your subscription status, usage this period, and remaining searches. Use anytime to see how many searches you have left. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_categories","description":"Browse all funding categories with opportunity counts. Categories include: Grant, Construction, Goods & Services, Professional Services, Technology, Healthcare, Research, and more. Useful for understanding what types of opportunities are available. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_dataset_summary","description":"Get dataset size and coverage stats (open opportunities, certified sources). Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_foundation","description":"Get the current profile for a PRIVATE foundation by EIN. Foundation Intelligence Beta uses active QA-gated releases for filing-scoped public facts and Plus grant-history and repeat-grantee sections. The Pro leadership section returns only people and titles exactly as listed in a dated public filing, with responsible-use limits. The Pro federal-connections section returns registry-corroborated organization-level overlap with federal assistance records. Named-person grant recipients and grant-purpose text are excluded. Only private foundations (IRS 990-PF filers, 3,678+ foundations) are included. Covers IRS tax years 2018 to 2026. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"ein":{"type":"string","description":"9-digit EIN (no dashes). Example: 911663695. Must be a private foundation (990-PF filer)."},"section":{"type":"string","enum":["public_profile","grant_history","repeat_grantees","leadership","federal_connections"],"description":"Foundation Intelligence section. Grant history and repeat grantees require Plus; filing-listed leadership and federal-recipient connections require Pro."},"recipient":{"type":"string","description":"Filter grant-history or repeat-grantee rows by organization name."},"state":{"type":"string","description":"For grant_history or federal_connections, filter by 2-letter recipient state."},"year":{"type":"number","description":"For grant_history, filter by filing year."},"minimum_amount":{"type":"number","description":"For grant_history, minimum amount per reported line."},"maximum_amount":{"type":"number","description":"For grant_history, maximum amount per reported line."},"minimum_years":{"type":"number","description":"For repeat_grantees, minimum covered filing years (2+)."},"assistance_listing_number":{"type":"string","description":"For federal_connections, filter by Assistance Listing number such as 93.855."},"page":{"type":"number","description":"For federal_connections, 1-based results page."},"cursor":{"type":"string","description":"Opaque cursor returned by the prior page."},"limit":{"type":"number","description":"Rows per paid page (default 25, max 100). Federal connections uses page-number pagination; grant history and repeat grantees return opaque cursors."}},"required":["ein"]}},{"name":"get_opportunity","description":"Get details for a specific funding opportunity. Description includes up to 12,000 characters of cleaned stored source text; descriptionCoverage reports truncation and returned length. If truncated, consult the source URL. Without an mcp-session-id, the sessionless first answer returns the compact description instead: read descriptionCoverage for the returned length, the stored length and whether the text was cut, and echo the header for the full text. IMPORTANT: Use the exact \"id\" field from search results (e.g. \"cmk65gf090028lee3nhy4lo6a\"). Do NOT construct or guess IDs. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"string","description":"Exact opportunity ID from search results (CUID format like \"cmk65gf09...\")"}},"required":["id"]}},{"name":"get_pack_link","description":"Buy Search Pack ($5 = 50 searches, never expire). Requires active subscription. Does not count toward your monthly searches.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"quantity":{"type":"number","description":"Number of packs to buy (1-20, default: 1). Each pack = 50 searches."}}}},{"name":"get_pricing","description":"Get pricing for all plans. Returns names, prices, features, limits. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_setup_instructions","description":"Return MCP setup instructions for Claude Desktop and other clients. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"get_tool_guide","description":"Get comprehensive usage guide for FundingLandscape tools. Call this FIRST to understand optimal workflows, parameter usage, and best practices. Returns detailed documentation for search tools, filters, and token optimization strategies. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"topic":{"type":"string","enum":["overview","search","foundations","batch","filters","workflows","all"],"description":"Topic to get guidance on (default: overview). Use \"all\" for complete reference."}}}},{"name":"get_upgrade_link","description":"Get Stripe checkout URL for subscription. IMPORTANT: Requires sign-in first. If not authenticated, returns sign-in instructions. After OAuth sign-in, call again for checkout URL. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"plan":{"type":"string","enum":["plus","pro"],"description":"Plan to upgrade to (default: plus)"},"interval":{"type":"string","enum":["month"],"description":"Billing interval (default: month)"}}}},{"name":"list_saved_searches","description":"List all saved searches for the current user. Returns each search with its ID, query, filters, alert settings, and last run time. Use this FIRST to check what the user already has before creating or updating searches. Response includes remaining slots and plan info. Saved searches are available on every plan, including Free (Free: 1 saved search with weekly email alerts, Plus: 10, Pro: 25). Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"report_feedback","description":"Report bugs, data issues, or feedback. Actions: bug, data_issue, irrelevant, praise. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"opportunity_id":{"type":"string","description":"ID of the opportunity being reported on (if applicable)"},"action":{"type":"string","enum":["clicked","saved","dismissed","irrelevant","wrong_category","bug","feature_request","data_issue","praise","other"],"description":"Type of feedback. Use \"bug\" for errors, \"data_issue\" for stale/wrong data, \"irrelevant\" for poor results."},"message":{"type":"string","description":"Describe the issue. For bugs, include the error message."},"category":{"type":"string"},"severity":{"type":"string","enum":["low","medium","high"],"description":"high = user blocked, medium = degraded experience, low = minor issue"},"search_query":{"type":"string","description":"The search query that produced the issue"},"request_id":{"type":"string","description":"From error response - helps us trace the issue"},"tool":{"type":"string","description":"Which tool had the issue"},"result_position":{"type":"number"},"user_context":{"type":"object"}},"required":["action"]}},{"name":"save_search","description":"Save a search query for email alerts. When new opportunities match, the user receives daily or weekly email notifications. The FREE tier includes 1 saved search with weekly email alerts, so any user can set one up without a paid plan.\n\nRECOMMENDED WORKFLOW:\n1. Call list_saved_searches first to check for existing/similar searches\n2. If a similar search exists, offer to update_saved_search instead\n3. Search with search_grantsplus or search_procurement first to validate the query returns good results\n4. Save with appropriate filters based on what the user described\n\nFILTER TIPS:\n- Use itemTypes [\"grant\"] for grants/fellowships or [\"procurement\"] for contracts/RFPs\n- Use sourceTypes [\"federal\"] for federal opportunities only\n- Use geography [\"CA\"] for California-specific (includes national opportunities)\n- For SAM.gov-specific filters (NAICS, set-asides), use sourceContext\n- Keep filters broad for notifications - better to get a few extra than miss one\n\nPLAN LIMITS: Free: 1 saved search, weekly email alerts. Plus ($29/mo): 10 saved searches, daily or weekly alerts. Pro ($79/mo): 25 saved searches, daily or weekly alerts.\n\nDoes not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query to save (e.g. \"clean energy research grants\", \"IT services federal contracts\")"},"name":{"type":"string","description":"Friendly name for this search (e.g. \"DOE Clean Energy Grants\")"},"filters":{"type":"object","description":"Filters to narrow alert results. All optional. When omitted, all opportunity types are included.","properties":{"itemTypes":{"type":"array","items":{"type":"string","enum":["grant","procurement","prize","financial","other"]},"description":"Opportunity types. \"grant\" includes fellowships/scholarships/SBIR. \"procurement\" includes contracts/RFPs. \"financial\" includes loans/tax credits."},"status":{"type":"array","items":{"type":"string","enum":["open","rolling","coming_soon"]},"description":"Status filter. Recommended: [\"open\", \"rolling\"]. Include \"coming_soon\" for early awareness."},"sourceTypes":{"type":"array","items":{"type":"string","enum":["federal","state","local","foundation","corporate"]},"description":"Filter by funding source. \"federal\" = grants.gov, SAM.gov, DOE, NSF, etc."},"sources":{"type":"array","items":{"type":"string"},"description":"Specific data sources by slug (e.g. [\"sam.gov\", \"grants.gov\", \"nsf\"]). Limits alerts to these sources only."},"geography":{"type":"array","items":{"type":"string"},"description":"US state codes (2-letter uppercase, e.g. [\"CA\", \"TX\"]). Eligibility-aware: shows opportunities tagged for these states, plus national opportunities, plus opportunities with unspecified geography (typically federal). Opportunities tagged only for other states are excluded."},"applicantTypes":{"type":"array","items":{"type":"string","enum":["nonprofit","government","business","tribal","education"]},"description":"Filter by eligible applicant type. Note: only ~7% of opportunities have this data, so this filter is soft (includes opportunities without eligibility data)."},"deadlineRange":{"type":"string","enum":["next7days","next30days","next60days","next90days","noDeadline"],"description":"Deadline window for alerts."},"organization":{"type":"string","description":"Filter by agency/organization name (e.g. \"Department of Energy\", \"NSF\", \"NIH\")."},"sourceContext":{"type":"object","description":"Source-specific filters for SAM.gov or Grants.gov. Use when the user wants alerts from a specific source with its native filters.","properties":{"source":{"type":"string","description":"Source slug (e.g. \"sam.gov\", \"grants.gov\")"},"filters":{"type":"object","description":"Source-specific filter keys. For SAM.gov: samDepartment, samSubTier, samOffice, samSetAside, samSetAsideCode, samPopState, samPopCity, samPopZip, naics (comma-separated NAICS codes). For Grants.gov: grantsAgencyCode, grantsCfda, grantsDocType."}}}}},"cadence":{"type":"string","enum":["weekly","daily","never"],"description":"Alert frequency. daily requires a paid plan (Plus or Pro); free includes weekly. never = save the search without email alerts. Default: weekly"},"hidelow":{"type":"boolean","description":"Hide low-confidence results in alerts. Default: false"}},"required":["query"]}},{"name":"search_foundations","description":"Look up a private foundation by full legal name or EIN in the active QA-gated Foundation Intelligence release (3,678 profiles). Covers IRS tax years 2018 to 2026. Mission/topic discovery and grant-purpose search are withheld until their source and quality contracts pass review. Counts toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Full private-foundation legal name or 9-digit EIN. Examples: \"Gates Foundation\" or \"56-2618866\". Mission/topic queries are not available in this release."},"states":{"type":"array","items":{"type":"string"},"description":"Filter by state (2-letter codes). Where foundation is based."},"min_annual_giving":{"type":"number","description":"Minimum annual giving in dollars"},"limit":{"type":"number","description":"Max foundations to return (default: 10, max: 50)"}},"required":["query"]}},{"name":"search_grants_and_procurement","description":"MIXED search across all 29,763 opportunities from 232 sources — combines grants AND procurement/contracts in one query. This mixes funding types which can create noisy results.\n\nROUTING — use the specialized tool instead:\n• User wants grants/funding/fellowships/prizes → search_grantsplus\n• User wants contracts/RFPs/procurement/bids → search_procurement\n• User explicitly wants BOTH types → search_grants_and_procurement\n• Intent unclear → ASK the user first\n\nUse search_grantsplus or search_procurement for cleaner, more relevant results. Free tier: 10 searches/month, full results. Paid plans add higher monthly limits. Paid plans show new listings the day they open; the free plan reaches the same listings after 10 days. Counts toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language search query"},"category":{"type":"string","description":"Filter by category"},"status":{"type":"string","enum":["open","closed","all"],"description":"Filter by status"},"deadline_within_days":{"type":"number","description":"Only opportunities closing within N days"},"posted_within_days":{"type":"number","description":"Preferred alias for new_within_days: only opportunities WE ADDED (ingested) in the last N days. In queryless browse mode without a single source, the recency window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. In windowCoverage, sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason is separate from ceilingTruncated, which is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Uses the same ingest freshness field as newSince/recurring checks; not the opportunity posted date or deadline. If both posted_within_days and new_within_days are supplied, posted_within_days wins."},"new_within_days":{"type":"number","description":"Backwards-compatible alias for posted_within_days. Only opportunities WE ADDED (ingested) in the last N days for recurring/delta checks (\"what is new since my last check\"). Additive to all other filters. In queryless browse mode without a single source, the recency window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. The response includes newSince and windowCoverage: sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason is separate from ceilingTruncated, which is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Not the opportunity posted date or deadline."},"since":{"type":"string","description":"Stateless alternative to posted_within_days/new_within_days: ISO 8601 instant. Only opportunities ingested at/after this instant. Store the previous response newSince.newest and pass it here to manage your own watermark."},"organization":{"type":"string","description":"Filter by organization or funder name"},"source":{"type":"string","description":"Filter by source domain or dataSource (e.g., \"grants.gov\" or \"tier0-sam.gov\")"},"limit":{"type":"number","description":"Max results (default: 10)"},"cursor":{"type":"string","description":"Pagination cursor from previous response"},"min_quality":{"type":"string","enum":["high","medium","low","any"],"description":"Minimum record-completeness tier (default: medium). any removes this quality-tier filter; relevance, access and other filters still apply."},"compact":{"type":"boolean","description":"Return compact results (default: true). Compact results include essential fields: id, title, organization, category, url, deadline, deadlineType, daysUntilDeadline, deadlineLabel, lastRoundClosedAt, status, qualityScore, and snippet. Set to false for full details including eligibility, amounts, and match explanations."},"procurement_type":{"type":"string","enum":["professional_services","it_services","construction","manufacturing","all"],"description":"Filter SAM.gov contracts by industry type. professional_services = consulting, engineering, R&D (NAICS 54xxxx, excludes manufacturing/construction noise). it_services = software, IT systems (NAICS 5415xx). construction = building projects (NAICS 23xxxx). manufacturing = production (NAICS 31-33xxxx). Use this to avoid irrelevant commodity results like \"O-RING\" or \"VALVE\" when searching for service contracts."},"user_context":{"type":"object","properties":{"organization_type":{"type":"string","enum":["nonprofit","startup","small_business","university","government","individual"],"description":"Common natural-language phrasing (e.g. \"501(c)(3) nonprofit\") is also parsed; unparseable values are ignored with an explicit note in the response."},"location":{"type":"string"},"location_strict":{"type":"boolean","description":"With a recognized location, requests geographic filtering; nationwide or unspecified records and explicitly broader fallbacks may remain. Check geographyFilterOutcome and warnings. With sam_filters.place_of_performance_state (or pop_state in batch), true additionally excludes records without a confirmed performance location; false demotes and caveats them."},"looking_for":{"type":"string","enum":["grants","contracts","all"]},"naics_codes":{"type":"array","items":{"type":"string"},"description":"NAICS codes to INCLUDE (e.g., [\"541611\"])"},"exclude_naics_prefixes":{"type":"array","items":{"type":"string"},"description":"NAICS prefixes to EXCLUDE. Use [\"31\", \"32\", \"33\"] to exclude manufacturing, [\"23\"] to exclude construction. Eliminates commodity procurement noise like \"O-RING\" or \"VALVE\" results."},"procurement_type":{"type":"string","enum":["professional_services","construction","manufacturing","it_services","all"],"description":"Preset filter for SAM.gov: professional_services (NAICS 54xxxx - consulting, engineering, R&D, excludes manufacturing/construction noise), it_services (NAICS 5415xx), construction (23xxxx), manufacturing (31-33xxxx). Use this OR exclude_naics_prefixes, not both."}},"description":"User context for better filtering"}},"anyOf":[{"required":["query"]},{"required":["source"]},{"required":["organization"]}]}},{"name":"search_grantsplus","description":"GRANTS & FOUNDATIONS — Search grants, prizes, fellowships, SBIR/STTR, and private foundations. Excludes procurement/contracts for clean results. Use when user wants: funding, grants, fellowships, research money, SBIR, foundation grants. Also returns matching private foundations automatically. Examples: \"cancer research funding\", \"clean energy small business grants\", \"HVAC grants in Arizona\". BATCH MODE (paid): pass a queries[] array of 2-5 variations instead of query to run them in parallel, dedupe, and return all unique results in one call — this replaces the former batch_search_grantsplus tool. Paid plans show new listings the day they open; the free plan reaches the same listings after 10 days. Counts toward your monthly searches. A batch counts as 1 call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language search query. Provide either query (single search) or queries (batch mode) — exactly one."},"queries":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":5,"description":"BATCH MODE (paid, replaces batch_search_grantsplus): array of 2-5 search queries to run in parallel, dedupe, and merge. Example for clean energy: [\"renewable energy grants\", \"solar wind funding\", \"clean energy nonprofit\", \"sustainability grants\", \"green technology funding\"]. When set, query is ignored and the batch response params (detail_level, max_results, offset, max_response_tokens) apply."},"detail_level":{"type":"string","enum":["minimal","compact","full"],"description":"Batch mode only: controls response verbosity (minimal/compact [default]/full). Ignored in single-query mode."},"max_results":{"type":"number","minimum":1,"description":"Batch mode only: maximum merged results to return (default 10). Ignored in single-query mode (use limit)."},"offset":{"type":"number","minimum":0,"description":"Batch mode only: number of merged results to skip for pagination (default 0). Ignored in single-query mode."},"max_response_tokens":{"type":"number","minimum":500,"description":"Batch mode only: token budget for the response (default 4000). Server auto-caps results to fit. Ignored in single-query mode."},"status":{"type":"string","enum":["open","closed","all"],"description":"Filter by status"},"deadline_within_days":{"type":"number","description":"Only opportunities closing within N days"},"posted_within_days":{"type":"number","description":"Preferred alias for new_within_days: only opportunities WE ADDED (ingested) in the last N days. In queryless browse mode without a single source, the recency window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. In windowCoverage, sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason is separate from ceilingTruncated, which is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Uses the same ingest freshness field as newSince/recurring checks; not the opportunity posted date or deadline. If both posted_within_days and new_within_days are supplied, posted_within_days wins."},"new_within_days":{"type":"number","description":"Backwards-compatible alias for posted_within_days. Only opportunities WE ADDED (ingested) in the last N days for recurring/delta checks (\"what is new since my last check\"). Additive to all other filters. In queryless browse mode without a single source, the recency window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. The response includes newSince and windowCoverage: sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason is separate from ceilingTruncated, which is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Not the opportunity posted date or deadline."},"since":{"type":"string","description":"Stateless alternative to posted_within_days/new_within_days: ISO 8601 instant. Only opportunities ingested at/after this instant. Store the previous response newSince.newest and pass it here to manage your own watermark."},"organization":{"type":"string","description":"Filter by funding organization"},"source":{"type":"string","description":"Filter to a specific source/domain, e.g. \"grants.gov\", \"deq.nc.gov\", or \"sam.gov\"."},"limit":{"type":"number","description":"Max results (default: 25)"},"cursor":{"type":"string","description":"Pagination cursor from previous response"},"min_quality":{"type":"string","enum":["high","medium","low","any"],"description":"Minimum record-completeness tier (default: medium). any removes this quality-tier filter; relevance, access and other filters still apply."},"compact":{"type":"boolean","description":"Return compact results (default: true). Set to false for full details."},"include_foundations":{"type":"boolean","description":"Also search private foundations matching the query (default: true). Returns foundations that have historically funded similar work."},"user_context":{"type":"object","properties":{"organization_type":{"type":"string","enum":["nonprofit","startup","small_business","university","government","individual"],"description":"Common natural-language phrasing (e.g. \"501(c)(3) nonprofit\") is also parsed; unparseable values are ignored with an explicit note in the response."},"location":{"type":"string"}},"description":"User context for better filtering"},"grants_filters":{"type":"object","properties":{"agency_code":{"type":"string","description":"Grants.gov agency code (HHS, DOE, NSF, etc.)"},"cfda":{"type":"string","description":"CFDA/Assistance listing number (e.g., \"10.001\")"}},"description":"Grants.gov specific filters"}},"anyOf":[{"required":["query"]},{"required":["queries"]},{"required":["source"]},{"required":["organization"]}]}},{"name":"search_procurement","description":"CONTRACTS & PROCUREMENT — Search government contracts, RFPs, RFIs, BAAs, and solicitations from SAM.gov. Better than searching SAM.gov directly — includes semantic search and NAICS industry filtering to exclude commodity noise. Use when user wants: contracts, RFPs, procurement, bids, government work. Examples: \"IT consulting services\", \"construction management\", \"cybersecurity contracts\". BATCH MODE (paid): pass a queries[] array of 2-5 variations instead of query to run them in parallel, dedupe, and return all unique results in one call — this replaces the former batch_search_procurement tool. When sam_filters.place_of_performance_state (alias: pop_state, accepted in both single and batch mode) is set, the response includes a placeOfPerformance field reporting how many results are confirmed performed in that state (matched), how many have no confirmed location and are shown demoted with a caveat (unknownServed, excluded instead when user_context.location_strict is true), and how many were excluded for being tagged to a different, parseable state (otherStateExcluded; geography we could not parse into any state, such as a bare address or ZIP code, counts as unknownServed instead); a batch call sums these across every sub-query. Paid plans show new listings the day they open; the free plan reaches the same listings after 10 days. Counts toward your monthly searches. A batch counts as 1 call.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Natural language search query. Provide either query (single search) or queries (batch mode) — exactly one."},"queries":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":5,"description":"BATCH MODE (paid, replaces batch_search_procurement): array of 2-5 search queries to run in parallel, dedupe, and merge. Example for IT services: [\"IT services contract\", \"software development federal\", \"technology consulting government\", \"computer services procurement\"]. When set, query is ignored and the batch response params (detail_level, max_results, offset, max_response_tokens) apply."},"detail_level":{"type":"string","enum":["minimal","compact","full"],"description":"Batch mode only: controls response verbosity (minimal/compact [default]/full). Ignored in single-query mode."},"max_results":{"type":"number","minimum":1,"description":"Batch mode only: maximum merged results to return (default 10). Ignored in single-query mode (use limit)."},"offset":{"type":"number","minimum":0,"description":"Batch mode only: number of merged results to skip for pagination (default 0). Ignored in single-query mode."},"max_response_tokens":{"type":"number","minimum":500,"description":"Batch mode only: token budget for the response (default 4000). Server auto-caps results to fit. Ignored in single-query mode."},"status":{"type":"string","enum":["open","closed","all"],"description":"Filter by status"},"deadline_within_days":{"type":"number","description":"Only opportunities closing within N days"},"posted_within_days":{"type":"number","description":"Preferred alias for new_within_days: only opportunities WE ADDED (ingested) in the last N days. In queryless browse mode without a single source, the recency window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. In windowCoverage, sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason is separate from ceilingTruncated, which is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Uses the same ingest freshness field as newSince/recurring checks; not the opportunity posted date or deadline. If both posted_within_days and new_within_days are supplied, posted_within_days wins."},"new_within_days":{"type":"number","description":"Backwards-compatible alias for posted_within_days. Only opportunities WE ADDED (ingested) in the last N days for recurring/delta checks (\"what is new since my last check\"). Additive to all other filters. In queryless browse mode without a single source, the recency window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. The response includes newSince and windowCoverage: sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason is separate from ceilingTruncated, which is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Not the opportunity posted date or deadline."},"since":{"type":"string","description":"Stateless alternative to posted_within_days/new_within_days: ISO 8601 instant. Only opportunities ingested at/after this instant. Store the previous response newSince.newest and pass it here to manage your own watermark."},"organization":{"type":"string","description":"Filter by contracting agency"},"source":{"type":"string","description":"Filter to a specific source/domain, e.g. \"sam.gov\" or an agency source domain."},"limit":{"type":"number","description":"Max results (default: 25)"},"cursor":{"type":"string","description":"Pagination cursor from previous response"},"min_quality":{"type":"string","enum":["high","medium","low","any"],"description":"Minimum record-completeness tier (default: medium). any removes this quality-tier filter; relevance, access and other filters still apply."},"compact":{"type":"boolean","description":"Return compact results (default: true). Set to false for full details."},"procurement_type":{"type":"string","enum":["professional_services","it_services","construction","manufacturing","all"],"description":"Filter by industry. professional_services = consulting/engineering/R&D (NAICS 54xxxx). it_services = software/IT (NAICS 5415xx). construction = building (NAICS 23xxxx). manufacturing = production (NAICS 31-33xxxx)."},"user_context":{"type":"object","properties":{"organization_type":{"type":"string","enum":["nonprofit","startup","small_business","university","government","individual"],"description":"Common natural-language phrasing (e.g. \"501(c)(3) nonprofit\") is also parsed; unparseable values are ignored with an explicit note in the response."},"location":{"type":"string"},"location_strict":{"type":"boolean","description":"With a recognized location, requests geographic filtering; nationwide or unspecified records and explicitly broader fallbacks may remain. Check geographyFilterOutcome and warnings. With sam_filters.place_of_performance_state (or pop_state in batch), true additionally excludes records without a confirmed performance location; false demotes and caveats them."},"naics_codes":{"type":"array","items":{"type":"string"},"description":"NAICS codes to INCLUDE (e.g., [\"541611\"])"},"exclude_naics_prefixes":{"type":"array","items":{"type":"string"},"description":"NAICS prefixes to EXCLUDE (e.g., [\"31\",\"32\",\"33\"] for manufacturing)"}},"description":"User context for better filtering"},"sam_filters":{"type":"object","properties":{"department":{"type":"string","description":"Top-level federal department or independent agency, e.g. \"Department of Energy\", \"DOE\", \"Defense\", \"GSA\". Matched against the live SAM.gov department facet (agency name, acronym, or \"Department of X\" phrasing all resolve); an unrecognized value is applied as-is and reported in the response as departmentFilter."},"set_aside":{"type":"string","description":"Set-aside type. Supported: SDVOSB, VOSB, WOSB, EDWOSB, 8a/8(a), HUBZone, SBA/\"Small Business\" (each expands to all matching SAM codes and CSV labels). Actually filters results."},"psc_code":{"type":"string","description":"Product Service Code. NOT YET APPLIED to results — accepted for schema compatibility with other tools but currently reported in the response as an ignored filter; do not rely on it to narrow results."},"place_of_performance_state":{"type":"string","description":"State code (e.g., \"CA\", \"TX\"). Alias: pop_state (used by search_grantsplus/batch_search_procurement) is also accepted here."},"pop_state":{"type":"string","description":"Alias for place_of_performance_state — state code (e.g., \"CA\", \"TX\"). When both are sent, place_of_performance_state wins."}},"description":"SAM.gov specific filters"}},"anyOf":[{"required":["query"]},{"required":["queries"]},{"required":["source"]},{"required":["organization"]}]}},{"name":"sign_in","description":"Authenticate existing subscriber via OAuth. Opens browser login. Does not count toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"update_saved_search","description":"Update a saved search. Modify query, filters, alert cadence, name, or quality settings. Can only update your own saved searches.\n\nMODIFIABLE FIELDS: query, name, filters (same schema as save_search), cadence (weekly/daily/never), hidelow (quality filter), emailEnabled (on/off)\n\nTIP: Call list_saved_searches first to see the current settings, then update only the fields that need to change. The response confirms what was updated.\n\nDoes not count toward your monthly searches.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"id":{"type":"number","description":"Saved search ID to update"},"query":{"type":"string","description":"New search query text"},"name":{"type":"string","description":"New friendly name"},"filters":{"type":"object","description":"New filters (same schema as save_search filters). Replaces all existing filters.","properties":{"itemTypes":{"type":"array","items":{"type":"string","enum":["grant","procurement","prize","financial","other"]},"description":"Opportunity types."},"status":{"type":"array","items":{"type":"string","enum":["open","rolling","coming_soon"]},"description":"Status filter."},"sourceTypes":{"type":"array","items":{"type":"string","enum":["federal","state","local","foundation","corporate"]},"description":"Funding source category."},"sources":{"type":"array","items":{"type":"string"},"description":"Specific data sources by slug."},"geography":{"type":"array","items":{"type":"string"},"description":"US state codes (2-letter uppercase)."},"applicantTypes":{"type":"array","items":{"type":"string","enum":["nonprofit","government","business","tribal","education"]},"description":"Eligible applicant types."},"deadlineRange":{"type":"string","enum":["next7days","next30days","next60days","next90days","noDeadline"],"description":"Deadline window."},"organization":{"type":"string","description":"Agency/organization name."},"sourceContext":{"type":"object","description":"Source-specific filters (SAM.gov, Grants.gov). See save_search for details."}}},"cadence":{"type":"string","enum":["weekly","daily","never"],"description":"New alert frequency. daily requires a paid plan (Plus or Pro); free includes weekly. never = turn email alerts off."},"hidelow":{"type":"boolean","description":"Hide low-confidence results in alerts."},"emailEnabled":{"type":"boolean","description":"Enable or disable email alerts without changing cadence."}},"required":["id"]}},{"name":"whats_new","description":"DEDICATED \"what's new since I last checked\" tool for recurring agent checks: one obvious call instead of remembering the new_within_days param on a search tool. Returns opportunities FundingLandscape ingested in the last N days (default 7), with a newSince summary (newCount, newest, oldest ingest timestamp). In a pure recency digest without a single source, the window is sampled across sources round-robin by ingest recency so one bulk harvester cannot own the digest; each source remains newest first. In windowCoverage, sourcesSampled counts distinct sources returned by the grouped provider query before MCP quality, judge, recency-withhold, and page filters; it is absent when no grouped sample was available, including when sampling was not attempted, and 0 means the grouped query succeeded but returned no sourced rows; sourcesServed counts distinct sources delivered on this page. windowCoverage.order is \"recency\" for the queryless browse digest or \"relevance\" when a query is present. windowIncomplete/incompleteReason reports any incomplete retrieval walk, and ceilingTruncated is true only when the 2,000-row ceiling excluded records; ceilingTruncated and hardCeiling are present only when order is \"recency\" and are omitted entirely under \"relevance\" (query mode never walks past a single bounded fetch, so no ceiling logic runs). Wraps the same ingest-freshness filter as posted_within_days/new_within_days on the search tools, no separate counting logic. Optional query/status/source narrow the window; omit query entirely for a pure recency digest across everything new. For a stateless watermark, pass since (ISO 8601) instead of days, then store this response's newSince.newest and pass it back next time. Free tier: full window, honest held-back count if the recency gate withholds anything newer. Counts toward your monthly searches.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"days":{"type":"number","description":"Ingest-freshness window in days (default: 7). Only opportunities FundingLandscape ADDED in the last N days, not the opportunity posted date or deadline. Ignored if since is set."},"since":{"type":"string","description":"Stateless alternative to days: ISO 8601 instant. Only opportunities ingested at/after this instant. Store the previous response newSince.newest and pass it here to manage your own watermark."},"query":{"type":"string","description":"Optional natural language filter (e.g. \"clean energy nonprofit\"). Omit for a pure recency digest across all new opportunities."},"status":{"type":"string","enum":["active","open","rolling","forecast","closed","all"],"description":"Filter by opportunity status (default: active)"},"source":{"type":"string","description":"Filter to a specific source/domain, e.g. \"grants.gov\" or \"sam.gov\"."},"category":{"type":"string","description":"Filter by category"},"min_quality":{"type":"string","enum":["high","medium","low","any"],"description":"Minimum record-completeness tier (default: medium). any removes this quality-tier filter; relevance, access and other filters still apply."},"limit":{"type":"number","description":"Results per page (default and maximum: 25). Large results produce smaller pages; follow nextCursor even after a short page."},"cursor":{"type":"string","description":"Pagination cursor from previous response"},"compact":{"type":"boolean","description":"Return compact results (default: true). Set to false for full details."},"user_context":{"type":"object","properties":{"organization_type":{"type":"string","description":"Common natural-language phrasing (e.g. \"501(c)(3) nonprofit\") is also parsed; unparseable values are ignored with an explicit note in the response."},"location":{"type":"string","description":"State code or \"nationwide\""},"looking_for":{"type":"string","enum":["grants","contracts","all"]}}}}}}],"scan":{"score":57,"grade":"C","scanned_at":"2026-09-23T11:51:04.223Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T11:51:04.211Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1167ms"]},"poisoning":{"score":15,"max":15,"notes":["28 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["repository not readable: repo not found"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://fundinglandscape.com/api/mcp","reachable":true,"authRequired":false,"latencyMs":1167,"serverInfo":{"name":"fundinglandscape","version":"2.1.0"}}],"packages":[],"repo":{"found":false,"owner":"tettertotter","repo":"fundinglandscape","error":"repo not found"},"icon":{"url":"https://fundinglandscape.com/favicon.svg","source":"site"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}