Skip to main content
Glama

gouda_studios/sam-gov-opportunities-feed

gouda_studios--sam-gov-opportunities-feed
Destructive

Returns SAM.gov federal contract opportunities as JSON, filterable by keyword, NAICS, set-aside, notice type, agency, and state. Use for new or matching notices.

Input Schema

NameRequiredDescriptionDefault
statesNoOptional 2-letter US state codes.
onlyNewNoIf true, return only notices not seen before.
keywordsNoOptional free-text search terms.
waitSecsNoSeconds to wait for the run to finish (0-45).
setAsidesNoOptional small-business set-aside codes.
activeOnlyNoIf true, skip archived notices.
maxResultsNoMaximum notices to return.
naicsCodesNoOptional 6-digit NAICS codes.
noticeTypesNoOptional SAM notice type codes.
agencyContainsNoOptional agency name substring.
includeDetailsNoIf true, fetch full notice details.
includeContactsNoIf true, include contracting officer contacts.
postedWithinDaysNoOnly notices from the last N days; 0 = no limit.
minDaysUntilResponseNoMinimum days remaining until response deadline.

Output Schema

NameRequiredDescriptionDefault
tipNoAdvisory guidance RAG Web Browser wrote to its key-value.
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT |.
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states.
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed62 schema fields changed
    • changedInput schema / description
      Previous value: -"Returns U.S. federal contract opportunities (RFPs, RFQs, sources sought, award notices) from SAM.gov as one JSON row per notice. All inputs are optional; a good default is {\"keywords\":\"software\",\"postedWithinDays\":7,\"maxResults\":50}. Pricing: pay per event, $0.002 per opportunity row returned."New value: +"Returns U.S. federal contract opportunities (RFPs, RFQs."
    • changedInput schema / properties / activeOnly / description
      Previous value: -"true (default) = skip archived/inactive notices.\nExample values: true"New value: +"If true, skip archived notices."
    • removedInput schema / properties / activeOnly / examples
      Removed value: -[
      -  true
      -]
    • removedInput schema / properties / activeOnly / title
      Removed value: -"Active notices only"
    • changedInput schema / properties / agencyContains / description
      Previous value: -"Optional case-insensitive text the agency path must contain, e.g. \"Navy\" or \"Veterans Affairs\"."New value: +"Optional agency name substring."
    • removedInput schema / properties / agencyContains / title
      Removed value: -"Agency contains"
    • removedInput schema / properties / apiKey
      Removed value: -{
      -  "description": "Optional. Your own free api.sam.gov public API key; when set, the Actor reads the official SAM.gov Opportunities API instead of the public search feed.",
      -  "title": "SAM.gov API key (optional)",
      -  "type": "string"
      -}
    • changedInput schema / properties / includeContacts / description
      Previous value: -"true (default) = include the contracting officer work name, email and phone published on the notice.\nExample values: true"New value: +"If true, include contracting officer contacts."
    • removedInput schema / properties / includeContacts / examples
      Removed value: -[
      -  true
      -]
    • removedInput schema / properties / includeContacts / title
      Removed value: -"Include contracting officer contacts"
    • changedInput schema / properties / includeDetails / description
      Previous value: -"true (default) = fetch each notice for NAICS, PSC, set-aside, place of performance, full description and contacts. false = faster, fewer fields.\nExample values: true"New value: +"If true, fetch full notice details."
    • removedInput schema / properties / includeDetails / examples
      Removed value: -[
      -  true
      -]
    • removedInput schema / properties / includeDetails / title
      Removed value: -"Fetch full details"
    • changedInput schema / properties / keywords / description
      Previous value: -"Optional free-text search over SAM.gov notice titles and text, e.g. \"cybersecurity\" or \"janitorial services\". Leave empty to return all notices that match the other filters.\nExample values: \"software\""New value: +"Optional free-text search terms."
    • removedInput schema / properties / keywords / examples
      Removed value: -[
      -  "software"
      -]
    • removedInput schema / properties / keywords / prefill
      Removed value: -"software"
    • removedInput schema / properties / keywords / title
      Removed value: -"Keywords"
    • changedInput schema / properties / maxResults / description
      Previous value: -"Maximum rows to return (1-10000). You are charged per row returned, so this caps the cost: 100 rows = $0.20 at $0.002/row.\nExample values: 100"New value: +"Maximum notices to return."
    • removedInput schema / properties / maxResults / examples
      Removed value: -[
      -  100
      -]
    • removedInput schema / properties / maxResults / title
      Removed value: -"Max results"
    • changedInput schema / properties / minDaysUntilResponse / description
      Previous value: -"Optional. Skip notices whose response deadline is fewer than N days away, so you only get ones you can still bid on."New value: +"Minimum days remaining until response deadline."
    • removedInput schema / properties / minDaysUntilResponse / title
      Removed value: -"Minimum days until response deadline"
    • removedInput schema / properties / naicsCodes / default
      Removed value: -[]
    • changedInput schema / properties / naicsCodes / description
      Previous value: -"Optional list of 6-digit NAICS industry codes (strings), e.g. [\"541511\",\"541512\"]. A notice matches if it has any of them. Empty = all industries."New value: +"Optional 6-digit NAICS codes."
    • removedInput schema / properties / naicsCodes / items / description
      Removed value: -"Optional list of 6-digit NAICS industry codes (strings), e.g. [\"541511\",\"541512\"]. A notice matches if it has any of them. Empty = all industries."
    • removedInput schema / properties / naicsCodes / items / title
      Removed value: -"NAICS codes"
    • removedInput schema / properties / naicsCodes / title
      Removed value: -"NAICS codes"
    • removedInput schema / properties / noticeTypes / default
      Removed value: -[]
    • changedInput schema / properties / noticeTypes / description
      Previous value: -"Optional list of notice type codes: o=Solicitation, k=Combined Synopsis/Solicitation, p=Presolicitation, r=Sources Sought, s=Special Notice, a=Award Notice, u=Justification, i=Intent to Bundle, g=Surplus sale. Empty = all types."New value: +"Optional SAM notice type codes."
    • removedInput schema / properties / noticeTypes / items / enumTitles
      Removed value: -[
      -  "Solicitation",
      -  "Combined Synopsis/Solicitation",
      -  "Presolicitation",
      -  "Sources Sought",
      -  "Special Notice",
      -  "Award Notice",
      -  "Justification (J&A)",
      -  "Intent to Bundle",
      -  "Sale of Surplus Property"
      -]
    • removedInput schema / properties / noticeTypes / title
      Removed value: -"Notice types"
    • changedInput schema / properties / onlyNew / description
      Previous value: -"true = return only notices not delivered in an earlier run with the same filters (state is kept between runs). Use with a schedule for an alert feed."New value: +"If true, return only notices not seen before."
    • removedInput schema / properties / onlyNew / title
      Removed value: -"Only new since last run (monitor mode)"
    • changedInput schema / properties / postedWithinDays / description
      Previous value: -"Only notices posted or updated in the last N days. 0 = no date limit. Use 1-7 for daily/weekly monitoring."New value: +"Only notices from the last N days; 0 = no limit."
    • removedInput schema / properties / postedWithinDays / title
      Removed value: -"Posted/updated within (days)"
    • removedInput schema / properties / setAsides / default
      Removed value: -[]
    • changedInput schema / properties / setAsides / description
      Previous value: -"Optional small-business set-aside codes, e.g. [\"SBA\",\"8A\",\"SDVOSBC\",\"WOSB\",\"HZC\"]. Empty = any set-aside or none."New value: +"Optional small-business set-aside codes."
    • removedInput schema / properties / setAsides / items / enumTitles
      Removed value: -[
      -  "Total Small Business",
      -  "Partial Small Business",
      -  "8(a) Competed",
      -  "8(a) Sole Source",
      -  "HUBZone",
      -  "HUBZone Sole Source",
      -  "SDVOSB",
      -  "SDVOSB Sole Source",
      -  "WOSB",
      -  "WOSB Sole Source",
      -  "EDWOSB",
      -  "EDWOSB Sole Source",
      -  "Veteran-Owned",
      -  "Veteran-Owned Sole Source"
      -]
    • removedInput schema / properties / setAsides / title
      Removed value: -"Set-asides"
    • removedInput schema / properties / states / default
      Removed value: -[]
    • changedInput schema / properties / states / description
      Previous value: -"Optional 2-letter US state codes for the place of performance, e.g. [\"VA\",\"MD\"]. Requires includeDetails=true. Empty = all locations."New value: +"Optional 2-letter US state codes."
    • removedInput schema / properties / states / items / description
      Removed value: -"Optional 2-letter US state codes for the place of performance, e.g. [\"VA\",\"MD\"]. Requires includeDetails=true. Empty = all locations."
    • removedInput schema / properties / states / items / title
      Removed value: -"Place of performance (state codes)"
    • removedInput schema / properties / states / title
      Removed value: -"Place of performance (state codes)"
    • changedInput schema / properties / waitSecs / description
      Previous value: -"Max seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget."New value: +"Seconds to wait for the run to finish (0-45)."
    • removedInput schema / required
      Removed value: -[]
    • changedOutput schema / properties / apifyConsoleUrl / description
      Previous value: -"Personalized Apify Console link to the run; present only for Console sessions"New value: +"Personalized Apify Console link to the run; present only."
    • changedOutput schema / properties / exitCode / description
      Previous value: -"Actor process exit code; populated for terminal states (especially FAILED)"New value: +"Actor process exit code; populated for terminal states."
    • changedOutput schema / properties / status / description
      Previous value: -"Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED"New value: +"Run status: READY | RUNNING | TIMING-OUT | TIMED-OUT |."
    • changedOutput schema / properties / storages / description
      Previous value: -"Dataset and key-value store metadata, keyed by alias. \"default\" is always the primary entry."New value: +"Dataset and key-value store metadata, keyed by alias."
    • changedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / apifyConsoleUrl / description
      Previous value: -"Personalized Apify Console link to the dataset; present only for Console sessions"New value: +"Personalized Apify Console link to the dataset; present."
    • changedOutput schema / properties / storages / properties / datasets / additionalProperties / properties / inflatedBytes / description
      Previous value: -"Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching."New value: +"Approximate uncompressed byte size of the dataset. Use."
    • changedOutput schema / properties / storages / properties / datasets / description
      Previous value: -"Map of dataset alias → metadata. Key \"default\" is always the run's primary dataset."New value: +"Map of dataset alias → metadata. Key \"default\" is always."
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / apifyConsoleUrl / description
      Previous value: -"Personalized Apify Console link to the dataset; present only for Console sessions"New value: +"Personalized Apify Console link to the dataset; present."
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / inflatedBytes / description
      Previous value: -"Approximate uncompressed byte size of the dataset. Use with itemCount to pick limit/fields before fetching."New value: +"Approximate uncompressed byte size of the dataset. Use."
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / description
      Previous value: -"JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema."New value: +"JSON Schema for rows in the dataset at."
    • changedOutput schema / properties / storages / properties / keyValueStores / additionalProperties / properties / apifyConsoleUrl / description
      Previous value: -"Personalized Apify Console link to the store; present only for Console sessions"New value: +"Personalized Apify Console link to the store; present."
    • changedOutput schema / properties / storages / properties / keyValueStores / description
      Previous value: -"Map of key-value store alias → metadata. Key \"default\" is always the run's primary store."New value: +"Map of key-value store alias → metadata. Key \"default\"."
    • changedOutput schema / properties / storages / properties / keyValueStores / properties / default / properties / apifyConsoleUrl / description
      Previous value: -"Personalized Apify Console link to the store; present only for Console sessions"New value: +"Personalized Apify Console link to the store; present."
    • changedOutput schema / properties / tip / description
      Previous value: -"Advisory guidance RAG Web Browser wrote to its key-value store under the reserved \"TIP\" key"New value: +"Advisory guidance RAG Web Browser wrote to its key-value."
    • changedOutput schema / properties / tip / properties / caveat / description
      Previous value: -"Present when this session cannot run the Actor the tip recommends"New value: +"Present when this session cannot run the Actor the tip."
    • changedOutput schema / properties / tip / properties / message / description
      Previous value: -"Truncated to 300 characters, with a trailing ellipsis if the Actor's message was longer"New value: +"Truncated to 300 characters, with a trailing ellipsis if."
  2. Changed2 schema fields changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / contacts / items / properties / email / type
      Previous value: -"string"New value: +[
      +  "null",
      +  "string"
      +]
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / solicitationNumber / type
      Previous value: -"string"New value: +[
      +  "null",
      +  "string"
      +]
  3. First observed

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false, destructiveHint=true, openWorldHint=true, yet the description presents this as a plain data fetch and never reconciles that profile — no mention that it runs an actor, writes a dataset, blocks for up to waitSecs, or hits SAM.gov rate/API-key constraints. It also omits that onlyNew is stateful (depends on prior runs having recorded seen notices), which materially changes behavior between calls.

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

Conciseness4/5

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

Two sentences, front-loaded with the return type and filter surface, with no filler. The second sentence is thin but not wasteful; the only cost is that the brevity leaves real gaps elsewhere rather than padding this sentence.

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

Completeness2/5

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

An output schema exists so return values need not be explained, but a 14-parameter, zero-required tool with stateful flags, a blocking wait, and a destructive/actor-run annotation profile needs more than two sentences. Key call-shaping details — defaults that silently narrow results (activeOnly=true, includeDetails=true), and the fact that a 30s wait may return partial runs — go unmentioned.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 14 parameters already carries its own documentation; the description's list of filter dimensions merely mirrors a subset of them. It adds no meaning beyond the schema, e.g. nothing on how maxResults interacts with waitSecs or on the semantics of the notice-type and set-aside codes.

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

Purpose4/5

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

The description names a specific verb and resource ("Returns SAM.gov federal contract opportunities as JSON") and enumerates the filter dimensions (keyword, NAICS, set-aside, notice type, agency, state), so the agent knows exactly what data comes back. It does not differentiate from the closest sibling, gouda_studios--usaspending-awards-search, which covers a related but distinct dataset (historical awards vs. active opportunities).

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

Usage Guidelines2/5

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

"Use for new or matching notices" is the only usage signal and it is too vague to route an agent: it does not say when to prefer this over usaspending-awards-search, nor when to use onlyNew versus postedWithinDays. No exclusions, prerequisites, or alternative tools are named.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.