Skip to main content
Glama

Find federal opportunities

search_opportunities
Read-onlyIdempotent

Find official opportunity records by keywords, industry, set-aside, state, agency and source status. Active does not imply the deadline is open.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoPlain-language keywords; empty returns notices matching the other filters.
afterNoLast notice ID from next_after in the preceding page.
limitNoMaximum notices to return, from 1 to 50; defaults to 25.
naicsNoTwo- to six-digit NAICS industry code from a notice or the NAICS reference collection.
stateNoState or territory code for the place of performance.
activeNoFilter by source active status; this does not mean the response deadline is open.
agencyNoAgency code on the source notice.
set_asideNoOfficial set-aside code from a notice or the set-asides reference collection.
generationNoRetained generation UUID from a prior result for a consistent snapshot.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsYes
scopeYesLimits of this retained official-notice search.
filtersYesApplied search filters.
generationYes
next_afterNoLast record ID for the next page, or null at the end.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / limit / maximum
      Added value: +50
    • changedInput schema / properties / limit / minimum
      Previous value: -0New value: +1
    • addedOutput schema / $defs / OpportunityQuery / properties / limit / maximum
      Added value: +50
    • changedOutput schema / $defs / OpportunityQuery / properties / limit / minimum
      Previous value: -0New value: +1
  2. Changed10 schema fields changed
    • addedInput schema / properties / active / description
      Added value: +"Filter by source active status; this does not mean the response deadline is open."
    • addedInput schema / properties / after / description
      Added value: +"Last notice ID from next_after in the preceding page."
    • addedInput schema / properties / agency / description
      Added value: +"Agency code on the source notice."
    • addedInput schema / properties / generation / description
      Added value: +"Retained generation UUID from a prior result for a consistent snapshot."
    • addedInput schema / properties / limit / description
      Added value: +"Maximum notices to return, from 1 to 50; defaults to 25."
    • addedInput schema / properties / naics / description
      Added value: +"Two- to six-digit NAICS industry code from a notice or the NAICS reference collection."
    • addedInput schema / properties / q / description
      Added value: +"Plain-language keywords; empty returns notices matching the other filters."
    • addedInput schema / properties / set_aside / description
      Added value: +"Official set-aside code from a notice or the set-asides reference collection."
    • addedInput schema / properties / state / description
      Added value: +"State or territory code for the place of performance."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "JsonObject": {
      +      "description": "Source-specific JSON map. The envelope is stable; map keys vary by official source.",
      +      "type": "object"
      +    },
      +    "OpportunityQuery": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "active": {
      +          "description": "Filter by source active status; this does not mean the response deadline is open.",
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "after": {
      +          "description": "Last notice ID from next_after in the preceding page.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "agency": {
      +          "description": "Agency code on the source notice.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "generation": {
      +          "description": "Retained generation UUID from a prior result for a consistent snapshot.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "limit": {
      +          "description": "Maximum notices to return, from 1 to 50; defaults to 25.",
      +          "format": "uint",
      +          "minimum": 0,
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "naics": {
      +          "description": "Two- to six-digit NAICS industry code from a notice or the NAICS reference collection.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "q": {
      +          "default": "",
      +          "description": "Plain-language keywords; empty returns notices matching the other filters.",
      +          "type": "string"
      +        },
      +        "set_aside": {
      +          "description": "Official set-aside code from a notice or the set-asides reference collection.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "state": {
      +          "description": "State or territory code for the place of performance.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "OpportunitySummary": {
      +      "properties": {
      +        "content_hash": {
      +          "description": "Hash of retained notice content for change detection.",
      +          "type": "string"
      +        },
      +        "data": {
      +          "$ref": "#/$defs/JsonObject"
      +        },
      +        "id": {
      +          "type": "string"
      +        },
      +        "summary": {
      +          "type": "string"
      +        },
      +        "title": {
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "title",
      +        "summary",
      +        "content_hash",
      +        "data",
      +        "url"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "properties": {
      +    "filters": {
      +      "$ref": "#/$defs/OpportunityQuery",
      +      "description": "Applied search filters."
      +    },
      +    "generation": {
      +      "type": "string"
      +    },
      +    "items": {
      +      "items": {
      +        "$ref": "#/$defs/OpportunitySummary"
      +      },
      +      "type": "array"
      +    },
      +    "next_after": {
      +      "description": "Last record ID for the next page, or null at the end.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "scope": {
      +      "description": "Limits of this retained official-notice search.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "generation",
      +    "items",
      +    "filters",
      +    "scope"
      +  ],
      +  "type": "object"
      +}
  3. Added
  4. Removed
  5. Changed15 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / agency / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / awarded_contractor_name / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / awardee_cage / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / awardee_uei / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • addedInput schema / properties / cursor / minLength
      Added value: +1
    • addedInput schema / properties / deadline_preset / minLength
      Added value: +1
    • changedInput schema / properties / naics / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / notice_type / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • addedInput schema / properties / posted_preset / minLength
      Added value: +1
    • changedInput schema / properties / psc / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • addedInput schema / properties / q / minLength
      Added value: +1
    • changedInput schema / properties / set_aside / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • addedInput schema / properties / sort / minLength
      Added value: +1
    • changedInput schema / properties / state / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
  6. First observed

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this is a read-only, idempotent, open-world search, so the safety profile is covered. The description's one behavioral addition—clarifying that 'active' means source status, not an open deadline—is genuinely useful but largely repeats the schema description for the `active` parameter.

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

Conciseness5/5

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

Two tight sentences with the core scope front-loaded in the first clause and the single caveat trailing it. No filler, no redundancy in structure.

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

Completeness4/5

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

With an output schema present and all nine parameters fully documented, the description needn't explain return values; the annotation set covers safety. It is nearly complete, only missing sibling routing and any mention of pagination intent (after/limit), which the schema handles.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (q, naics, state, set_aside, agency, generation, after, limit) is already documented. The description only lists filter categories at a high level and adds no syntax, format, or interaction details beyond the schema.

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

Purpose4/5

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

States a specific verb (Find) plus resource (official opportunity records) and enumerates the filterable dimensions, so the agent knows exactly what it returns. However, it does not differentiate itself from sibling tools like 'search' or 'research_opportunity', which likely overlap, leaving the agent to guess which one to pick.

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?

The only guidance is a caveat ('Active does not imply the deadline is open'), which tells the agent how to interpret a flag, not when to use this tool versus siblings. With 'search', 'research_opportunity', and 'detail' in the sibling set, the absence of any routing advice is a real gap.

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.