Skip to main content
Glama

Public procurement opportunities

get_procurement_opportunities
Read-onlyIdempotent

Search open public-procurement notices aggregated from official national and multilateral sources (including SAM.gov, TED, Pakistan EPADS, Georgia SPA and Armenia ARMEPS) and return compact records: title, buyer, country, source, deadline, estimated value, automationFit and a link, without descriptions or submission and eligibility payloads. Paged: page_size defaults to 10 (maximum 25) and nextCursor continues the same filters and sort. automationFit is keyword-relevance evidence only, never bidding eligibility, and participationMode "unknown" stays unknown; sourceStatuses and countryCoverage report which sources answered. Requires a paid plan; one live downstream fetch, weight 2 on API plans. Read-only.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "get_procurement_opportunities"
  }
}

Input Schema

NameRequiredDescriptionDefault
sortNoResult ordering. Defaults to newest.
buyerNoCase-insensitive buyer or contracting-authority text.
queryNoCase-insensitive text search across procurement titles and descriptions.
cursorNoOpaque nextCursor from the prior result; keep the same filters and sort when continuing.
sourceNoOfficial source adapter, such as sam, ted, contracts-finder, canada-buys, gets, or world-bank.
countryNoOne ISO 3166-1 alpha-2 country code.
jmespathNoOptional JMESPath projection applied to the response. See initialize.instructions for grammar and examples.
countriesNoAdditional ISO 3166-1 alpha-2 country codes. Combined with country.
page_sizeNoRecords per call. Defaults to 10; capped at 25 to protect agent context.
deadline_toNoInclude deadlines on or before this ISO-8601 timestamp.
deadline_fromNoInclude deadlines on or after this ISO-8601 timestamp.
min_automation_scoreNoOptional positive keyword-relevance threshold. Non-integer or non-positive values are ignored; the canonical route clamps values above 100. This is not bidding-eligibility evidence.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "properties": {
      +      "appliedFilters": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "availability": {
      +        "type": "string"
      +      },
      +      "countryCoverage": {
      +        "description": "unknown means the requested country has not been observed in this snapshot, not that there are confirmed zero results.",
      +        "type": "string"
      +      },
      +      "dataAvailable": {
      +        "type": "boolean"
      +      },
      +      "fetchedAt": {
      +        "type": "string"
      +      },
      +      "nextCursor": {
      +        "description": "Opaque pagination cursor. An empty string means no further pages are available.",
      +        "type": "string"
      +      },
      +      "opportunities": {
      +        "items": {
      +          "properties": {
      +            "automationFit": {
      +              "properties": {
      +                "classificationVersion": {
      +                  "type": "string"
      +                },
      +                "level": {
      +                  "type": "string"
      +                },
      +                "matchReasons": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "score": {
      +                  "type": "number"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "buyer": {
      +              "type": "string"
      +            },
      +            "categoryCodes": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "countryCode": {
      +              "type": "string"
      +            },
      +            "deadline": {
      +              "type": "string"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "money": {
      +              "properties": {
      +                "amount": {
      +                  "type": "number"
      +                },
      +                "currency": {
      +                  "type": "string"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "noticeType": {
      +              "type": "string"
      +            },
      +            "officialUrl": {
      +              "type": "string"
      +            },
      +            "participationMode": {
      +              "type": "string"
      +            },
      +            "publishedAt": {
      +              "type": "string"
      +            },
      +            "region": {
      +              "type": "string"
      +            },
      +            "sectors": {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "source": {
      +              "type": "string"
      +            },
      +            "status": {
      +              "type": "string"
      +            },
      +            "title": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "sourceStatuses": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "total": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "opportunities",
      +      "nextCursor",
      +      "fetchedAt",
      +      "dataAvailable",
      +      "availability",
      +      "sourceStatuses",
      +      "total",
      +      "appliedFilters",
      +      "countryCoverage"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "required": [
      +      "projection"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "data",
      +      "_attribution"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "_budget_exceeded"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "_jmespath_error"
      +    ]
      +  }
      +]
    • removedOutput schema / properties
      Removed value: -{
      -  "appliedFilters": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "availability": {
      -    "type": "string"
      -  },
      -  "countryCoverage": {
      -    "description": "unknown means the requested country has not been observed in this snapshot, not that there are confirmed zero results.",
      -    "type": "string"
      -  },
      -  "dataAvailable": {
      -    "type": "boolean"
      -  },
      -  "fetchedAt": {
      -    "type": "string"
      -  },
      -  "nextCursor": {
      -    "description": "Opaque pagination cursor. An empty string means no further pages are available.",
      -    "type": "string"
      -  },
      -  "opportunities": {
      -    "items": {
      -      "properties": {
      -        "automationFit": {
      -          "properties": {
      -            "classificationVersion": {
      -              "type": "string"
      -            },
      -            "level": {
      -              "type": "string"
      -            },
      -            "matchReasons": {
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "score": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "buyer": {
      -          "type": "string"
      -        },
      -        "categoryCodes": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "countryCode": {
      -          "type": "string"
      -        },
      -        "deadline": {
      -          "type": "string"
      -        },
      -        "id": {
      -          "type": "string"
      -        },
      -        "money": {
      -          "properties": {
      -            "amount": {
      -              "type": "number"
      -            },
      -            "currency": {
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "noticeType": {
      -          "type": "string"
      -        },
      -        "officialUrl": {
      -          "type": "string"
      -        },
      -        "participationMode": {
      -          "type": "string"
      -        },
      -        "publishedAt": {
      -          "type": "string"
      -        },
      -        "region": {
      -          "type": "string"
      -        },
      -        "sectors": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "source": {
      -          "type": "string"
      -        },
      -        "status": {
      -          "type": "string"
      -        },
      -        "title": {
      -          "type": "string"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "sourceStatuses": {
      -    "items": {
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "total": {
      -    "type": "number"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "opportunities",
      -  "nextCursor",
      -  "fetchedAt",
      -  "dataAvailable",
      -  "availability",
      -  "sourceStatuses",
      -  "total",
      -  "appliedFilters",
      -  "countryCoverage"
      -]
  2. Added

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare read-only, idempotent, non-destructive and closed-world, and the description adds genuinely useful operational context: paid-plan requirement, one live downstream fetch at weight 2, a hard page-size cap to protect agent context, and sourceStatuses/countryCoverage for partial coverage. It also pre-empts a likely misuse by clarifying automationFit is keyword relevance, never bidding eligibility. Minor tension: 'one live downstream fetch' from external sources sits awkwardly with openWorldHint=false, though the fixed adapter list supports a closed-set reading.

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?

One dense paragraph with the core purpose, sources, return shape and pagination front-loaded; almost every clause carries weight. It is tightly packed, though, and a short line break between the retrieval contract and the plan/weight caveats would improve scannability without adding words.

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

Completeness5/5

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

For a 12-parameter search tool with an output schema, the description covers everything an agent needs to decide and call correctly: scope, allowed returns, pagination continuation, cost/plan gate, and interpretation caveats for relevance scores and source coverage. Return-shape detail is not over-explained since the output schema exists.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning above the schema: it explains that nextCursor carries the same filters and sort, gives the page_size default and cap rationale, and defines automationFit as relevance-only evidence that never implies eligibility. Those semantics (especially the eligibility caveat on min_automation_score) are not derivable from the schema alone.

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

Purpose5/5

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

Opens with a specific verb+resource ('Search open public-procurement notices') and immediately names the aggregated official sources (SAM.gov, TED, EPADS, SPA, ARMEPS). It also states the record shape returned, so an agent knows exactly what retrieval this tool performs and that no sibling tool covers procurement notices.

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

Usage Guidelines4/5

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

Usage context is clear: search open notices filtered by buyer/country/deadline, continue with nextCursor, and it explicitly states the tool does not return descriptions or submission/eligibility payloads. There is no explicit 'use X instead' routing or negative-condition guidance (e.g., what to do when eligibility data is required), which keeps it short of a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.