Government tenders, contract awards, buyers and suppliers from official sources in 60+ countries.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a tender to a saved list. Body: id (list id) + tender_no OR award_id. Idempotent. Requires a user API key.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add a tender to a saved list. Body: id (list id) + tender_no OR award_id. Idempotent. Requires a user API key.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| award_id | string | |
| tender_no | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"award_id": {
"type": "string"
},
"tender_no": {
"type": "string"
}
}
}Create a new saved award list (personal). Body: name. Requires a user API key.
| Argument | Type | Description |
|---|---|---|
| name* | string |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
}
}
}Delete a saved list (and its items). Body: id. Requires a user API key (creator or workspace owner).
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Delete a saved search. Body: id. Requires a user API key (creator or workspace owner).
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Export a filtered award set as CSV. country omitted means singapore. A bad country is an error, not a Singapore file.
| Argument | Type | Description |
|---|---|---|
| q | string | |
| year | integer | |
| agency | string | |
| country | string | |
| category | string | |
| supplier | string | |
| amount_max | integer | |
| amount_min | integer |
{
"type": "object",
"properties": {
"q": {
"type": "string"
},
"year": {
"type": "integer"
},
"agency": {
"type": "string"
},
"country": {
"type": "string"
},
"category": {
"type": "string"
},
"supplier": {
"type": "string"
},
"amount_max": {
"type": "integer"
},
"amount_min": {
"type": "integer"
}
}
}All awards for one agency (by slug or display-name match).
| Argument | Type | Description |
|---|---|---|
| agency* | string |
{
"type": "object",
"required": [
"agency"
],
"properties": {
"agency": {
"type": "string"
}
}
}Buyer (agency) detail by slug: summary stats, yearly spend trend, sector breakdown, and top suppliers.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| sup_page | integer |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"sup_page": {
"type": "integer"
}
}
}Alias of get_buyer (back-compat). Buyer (agency) detail by slug: summary stats, yearly spend trend, sector breakdown, and top suppliers.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| sup_page | integer |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"sup_page": {
"type": "integer"
}
}
}One saved list with paginated items joined to award data (description/buyer/supplier/amount/date). Requires a user API key.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| page | integer | |
| page_size | integer |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"page": {
"type": "integer"
},
"page_size": {
"type": "integer"
}
}
}List every saved award list the caller (x-api-key owner) can see. Each list has itemCount (tender items only), buyerCount, supplierCount and totalCount (all items). Requires a user API key.
No arguments.
{
"type": "object",
"properties": {}
}One saved search by id (visible to the caller, else not_found). Requires a user API key.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}List every saved search the caller (x-api-key owner) can see (personal + shared workspace). Requires a user API key.
No arguments.
{
"type": "object",
"properties": {}
}Sector detail by slug: summary stats, yearly trend, and active partners (kind=buyers|suppliers).
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| page | integer | |
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"kind": {
"enum": [
"buyers",
"suppliers"
],
"type": "string"
},
"page": {
"type": "integer"
},
"slug": {
"type": "string"
}
}
}All awards for one supplier (by display-name match).
| Argument | Type | Description |
|---|---|---|
| supplier* | string |
{
"type": "object",
"required": [
"supplier"
],
"properties": {
"supplier": {
"type": "string"
}
}
}Supplier detail by slug: summary stats, yearly awarded trend, sector breakdown, and top buyers.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| buyer_page | integer |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string"
},
"buyer_page": {
"type": "integer"
}
}
}Single tender (award) detail by numeric award_id OR public tender page id, with related awards (same tender / same buyer).
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Top buyers (agencies) by total spend.
| Argument | Type | Description |
|---|---|---|
| limit | integer |
{
"type": "object",
"properties": {
"limit": {
"type": "integer"
}
}
}The curated sector taxonomy (slug + name).
No arguments.
{
"type": "object",
"properties": {}
}Top suppliers by total awarded.
| Argument | Type | Description |
|---|---|---|
| limit | integer |
{
"type": "object",
"properties": {
"limit": {
"type": "integer"
}
}
}Remove a tender from a saved list. Body: id (list id) + tender_no. Requires a user API key.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| tender_no* | string |
{
"type": "object",
"required": [
"id",
"tender_no"
],
"properties": {
"id": {
"type": "string"
},
"tender_no": {
"type": "string"
}
}
}Rename a saved list. Body: id, name. Requires a user API key (creator or workspace owner).
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| name* | string |
{
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}Rename a saved search. Body: id, name. Requires a user API key (creator or workspace owner).
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| name* | string |
{
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
}Save a search under a name. Body: name, query (filter set), kind? ('atlas' → unified-search shape, else legacy Explorer filters). Requires a user API key.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| name | string | |
| query* | object |
{
"type": "object",
"required": [
"query"
],
"properties": {
"kind": {
"enum": [
"atlas"
],
"type": "string"
},
"name": {
"type": "string"
},
"query": {
"type": "object"
}
}
}Faceted full-text search over one collection (scope). Every filter is a property of this schema, the same params as REST GET /api/v1/search; values of a fixed list are matched in any case. A bad value or an unknown argument is an invalid-params error whose data lists every problem (errors[]). Tender hits carry lifecycle, deadline_at, accepts_bids and source_url when the source gives them. Returns {hits, found, page, per_page, facets}.
| Argument | Type | Description |
|---|---|---|
| q | string | Free text, at most 120 characters. |
| page | integer | Page number, from 1. |
| sort | string | relevance (default) or deadline (the nearest bid deadline first). |
| type | string | Procurement type, for example works, goods or services. Only some countries have it. |
| match | string | Text match mode for the suppliers and buyers scopes. |
| scope | string | The collection to search. Default tenders. |
| sector | array | Sector slugs (OR), for example it-software. |
| status | string | Countries scope only: data (the country has data) or coming_soon. |
| country |
Search awarded tenders in one country (Postgres), largest amount first, stable paging. Every filter is a property of this schema; country omitted means singapore. A bad value or an unknown argument is an invalid-params error whose data lists every problem (errors[]). Returns {rows, total, page, pageSize}.
| Argument | Type | Description |
|---|---|---|
| q | string | Text in the tender description (substring). |
| page | integer | Page number, from 1. |
| year | integer | Award year (publication year when the award date is missing). |
| agency | string | Buyer slug, or text in the buyer name (substring). |
| country | string | Country slug. Omitted means singapore. |
| category | string | Sector slug, for example it-software. |
| supplier | string | Text in the supplier name (substring). |
| date_days | integer | Published or awarded in the last N days (UTC days). |
| page_size | integer | Rows per page, from 1. Default 100; the plan cap and 1,000 apply. |
Self-introspection: resolve the caller's identity + entitlement + granted scopes. Returns {subject, type, active, plan, scopes, export_cap}. Works even when inactive (active:false) so an agent can verify auth and decide whether to pay before doing work.
No arguments.
{
"type": "object",
"properties": {}
}| string |
| Country slug, or comma-separated slugs (OR). |
| per_page | integer | Results per page, 1 to 50. Default 25. |
| year_max | integer | Latest year (award year, else publication year). |
| year_min | integer | Earliest year (award year, else publication year). |
| date_days | integer | Published or awarded in the last N days (UTC days). |
| lifecycle | array | Tender lifecycle values (OR). |
| amount_max | number | Maximum amount. |
| amount_min | number | Minimum amount. |
| has_amount | boolean | true: only rows with an amount. false: only rows without one. |
| accepts_bids | boolean | true: only open tenders whose bid deadline is still ahead. |
| awarded_days | integer | Awarded in the last N days (UTC days). |
| lifecycle_mode | string | is (default) keeps the lifecycle values; is_not leaves them out. |
| published_days | integer | Published in the last N days (UTC days). |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free text, at most 120 characters."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number, from 1."
},
"sort": {
"enum": [
"relevance",
"deadline"
],
"type": "string",
"description": "relevance (default) or deadline (the nearest bid deadline first)."
},
"type": {
"type": "string",
"description": "Procurement type, for example works, goods or services. Only some countries have it."
},
"match": {
"enum": [
"awards",
"name"
],
"type": "string",
"description": "Text match mode for the suppliers and buyers scopes."
},
"scope": {
"enum": [
"suppliers",
"tenders",
"buyers",
"sectors",
"countries"
],
"type": "string",
"description": "The collection to search. Default tenders."
},
"sector": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sector slugs (OR), for example it-software."
},
"status": {
"enum": [
"data",
"coming_soon"
],
"type": "string",
"description": "Countries scope only: data (the country has data) or coming_soon."
},
"country": {
"type": "string",
"description": "Country slug, or comma-separated slugs (OR)."
},
"per_page": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Results per page, 1 to 50. Default 25."
},
"year_max": {
"type": "integer",
"description": "Latest year (award year, else publication year)."
},
"year_min": {
"type": "integer",
"description": "Earliest year (award year, else publication year)."
},
"date_days": {
"enum": [
7,
30,
90,
365
],
"type": "integer",
"description": "Published or awarded in the last N days (UTC days)."
},
"lifecycle": {
"type": "array",
"items": {
"enum": [
"open",
"awarded",
"cancelled",
"planned"
],
"type": "string"
},
"description": "Tender lifecycle values (OR)."
},
"amount_max": {
"type": "number",
"description": "Maximum amount."
},
"amount_min": {
"type": "number",
"description": "Minimum amount."
},
"has_amount": {
"type": "boolean",
"description": "true: only rows with an amount. false: only rows without one."
},
"accepts_bids": {
"type": "boolean",
"description": "true: only open tenders whose bid deadline is still ahead."
},
"awarded_days": {
"enum": [
7,
30,
90,
365
],
"type": "integer",
"description": "Awarded in the last N days (UTC days)."
},
"lifecycle_mode": {
"enum": [
"is",
"is_not"
],
"type": "string",
"description": "is (default) keeps the lifecycle values; is_not leaves them out."
},
"published_days": {
"enum": [
7,
30,
90,
365
],
"type": "integer",
"description": "Published in the last N days (UTC days)."
}
}
}| amount_max |
| number |
| Maximum awarded amount. |
| amount_min | number | Minimum awarded amount. |
| agency_slug | string | Buyer slug, exact match. |
| awarded_days | integer | Awarded in the last N days (UTC days). |
| supplier_slug | string | Supplier slug, exact match. |
| published_days | integer | Published in the last N days (UTC days). |
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Text in the tender description (substring)."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number, from 1."
},
"year": {
"type": "integer",
"description": "Award year (publication year when the award date is missing)."
},
"agency": {
"type": "string",
"description": "Buyer slug, or text in the buyer name (substring)."
},
"country": {
"type": "string",
"description": "Country slug. Omitted means singapore."
},
"category": {
"type": "string",
"description": "Sector slug, for example it-software."
},
"supplier": {
"type": "string",
"description": "Text in the supplier name (substring)."
},
"date_days": {
"enum": [
7,
30,
90,
365
],
"type": "integer",
"description": "Published or awarded in the last N days (UTC days)."
},
"page_size": {
"type": "integer",
"minimum": 1,
"description": "Rows per page, from 1. Default 100; the plan cap and 1,000 apply."
},
"amount_max": {
"type": "number",
"description": "Maximum awarded amount."
},
"amount_min": {
"type": "number",
"description": "Minimum awarded amount."
},
"agency_slug": {
"type": "string",
"description": "Buyer slug, exact match."
},
"awarded_days": {
"enum": [
7,
30,
90,
365
],
"type": "integer",
"description": "Awarded in the last N days (UTC days)."
},
"supplier_slug": {
"type": "string",
"description": "Supplier slug, exact match."
},
"published_days": {
"enum": [
7,
30,
90,
365
],
"type": "integer",
"description": "Published in the last N days (UTC days)."
}
}
}