World Bank Procurement Notices MCP — global development tenders (keyless). Wraps the public, no-auth World Bank Procurement Notices search API to provide access to ~412,000 procurement notices for World Bank-financed projects across ~140 developing countries.
Four tools with complete input schemas and strong descriptions (avg 180 chars). All parameters typed and described. Tool names follow verb_noun pattern (search_, list_, fetch). Schemas use proper JSON Schema with type constraints. Output structure documented in code comments. Key gaps: no enum constraints on filter parameters (notice_type, method, country accept free-form strings), no explicit error handling guidance in descriptions, no pagination metadata (total count, next_cursor) documented in output schema, and no tool annotations (readOnlyHint, idempotentHint). All tools are read-only and idempotent but this is not declared in the schema.
Search World Bank contract awards — which contracts were awarded under World Bank-financed development projects (300k+ award notices across developing countries). Filter by full-text keyword and/or country to see recently awarded goods, civil works, and consulting contracts, each with project, bid reference, procurement method, award publication date, and a public notice URL (the notice detail page names the awarded supplier). Newest first. Keyless.
List the latest World Bank procurement notices for one developing country — open tenders, invitations for bids, expressions of interest, and contract awards funded by World Bank international development projects there. Newest first with bid reference, project name, submission deadline, procurement method, and public notice URL. Useful for finding active bidding opportunities or recent government contract activity in countries across Africa, Asia, and Latin America. Keyless.
Fetch one World Bank procurement notice by its notice id (e.g. "OP00457469", from wb_procurement_search results). Returns the full record: notice type and status, project, country, bid reference, submission deadline, procurement method, contact person/organization/email/phone, the full notice text (bidding instructions, eligibility, award details for contract awards), and the public notice URL.
Search World Bank procurement notices — tenders, invitations for bids, requests for expression of interest, contract awards, and general procurement notices for World Bank-financed international development projects in ~140 developing countries (Africa, Asia, Latin America, Middle East, Eastern Europe). ~412k notices, newest first. Full-text search plus filters: country, notice type, and procurement method (Request for Bids, Request for Proposals, consultant selection). Each result includes bid reference, project, deadline, and a public notice URL. Keyless, global multilateral source.
Filter parameters accept free-form strings instead of enums. 'notice_type' and 'method' parameters in wb_procurement_search and wb_procurement_awards should declare allowed values as enums (e.g. 'Invitation for Bids', 'Contract Award', 'RFB', 'RFP') rather than accepting arbitrary strings. This invites hallucinated values from LLMs.
Output schema not documented in tool definitions. Code comments describe API fields returned (id, notice_type, project_name, deadline, URL) but the inputSchema lacks a corresponding 'outputSchema' declaration. LLMs cannot plan downstream tool calls or extract fields without knowing the response structure.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All four tools are read-only and idempotent (safe to retry), but this is not declared in the schema. Agents cannot infer safety properties and may avoid retrying on transient failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Pagination metadata not documented. Tools accept 'limit' and 'offset' but descriptions do not specify whether responses include total_count, has_more, or next_offset. Without this, agents cannot determine if more results exist or how to construct the next request.
Error handling not documented. Descriptions do not explain what happens on invalid country names, malformed IDs, API timeouts, or rate limits. Code comment mentions 'never throw, failures resolve to { error, retry_hint }' but this contract is not exposed in tool descriptions.