World Bank Procurement MCP Server
Enables searching and fetching World Bank procurement notices using the public API. Supports filtering by country, sector, and notice type, and retrieving full details by ID.
README
worldbank-procurement-mcp
A remote MCP (Model Context Protocol) server exposing the World Bank's free
Procurement Notices API (search.worldbank.org/api/v2/procnotices) as tools
an AI agent can call. No API key needed on the World Bank side.
What was broken in the previous version, and the fix
The first deploy returned -32603 Internal server error on every request,
failing in ~1ms of CPU time -- too fast to have even reached a fetch call.
Root cause, confirmed against @modelcontextprotocol/server's actual
changelog:
inputSchemawas a bare object ({ name: z.string() }) instead of a full Standard Schema instance (z.object({ name: z.string() })). Cloudflare's own docs example uses the bare-object form, but the SDK's real behavior (per its changelog, PR #1689 "Support Standard Schema for tool and prompt schemas") requires a complete schema object. The bare form throws the moment the tool is registered -- which matches the instant, pre-fetch failure exactly. Fixed: everyinputSchemainsrc/index.tsnow usesz.object({...}).- Zod was pinned to v3 (
^3.23.8); the SDK requires Zod v4 for Standard Schema support. Fixed:zodis now pinned to^4.4.3. - Versions were floating or nonexistent.
agentswas"latest"(drift risk), and@modelcontextprotocol/server@2.0.0doesn't actually exist as a stable release -- the real latest is the alpha line. Fixed: both are now pinned to exact, verified-published versions:agents@0.17.4,@modelcontextprotocol/server@2.0.0-alpha.2.
Also added: a try/catch around the handler that logs the real JS error to
Observability/wrangler tail before responding, and a friendly plain-text
response at / instead of a bare 404, so future debugging is faster.
Honesty check: @modelcontextprotocol/server is still an alpha package
("expect breaking changes until v2 stabilizes" per its own README) and
Cloudflare's createMcpHandler pattern is only days old. I've verified every
version and API detail above against the SDK's real changelog and Cloudflare's
current docs, and this should deploy cleanly -- but I can't execute or test
it myself (no network access in my environment), so "perfectly" is my best
verified effort, not a guarantee against a dependency shipping another
breaking change after this was written.
Tools exposed
search_wb_notices-- keyword + filter search (country, sector, notice type, procurement method), paginated.get_wb_notice-- full detail for one notice by ID.
Deploying from a computer
unzip worldbank-procurement-mcp.zip
cd worldbank-procurement-mcp
npm install
npm start # local dev server + MCP Inspector to test first
npx wrangler login
npx wrangler deploy
Test locally before deploying:
npx @modelcontextprotocol/inspector@latest
Point it at http://localhost:8788/mcp, Connect, List Tools.
Deploying from your phone only
If you don't have a computer handy, this replaces the existing
world-bank-mcp Worker's code without touching a terminal:
- On github.com (mobile browser), open the repo backing your Worker.
- Tap into
package.json, tap the pencil (edit) icon, delete the contents, paste in the newpackage.jsonfrom this zip, commit tomain. - Repeat for
src/index.ts(the big one -- this is the actual fix),wrangler.jsonc,tsconfig.json, and.gitignore. - If your Worker is connected to this repo for auto-deploy (check
Workers & Pages → world-bank-mcp → Settings → Build), each commit to
mainredeploys automatically -- watch Deployments for the new one to go live. - If it's not connected to a repo yet: Workers & Pages → world-bank-mcp → Settings → Build → Connect to Git, pick this repo, and it'll deploy from there going forward.
Either way, after it redeploys, go back to the MCP playground and tap Add
on https://world-bank-mcp.maksgstaad.workers.dev/mcp again.
Notes
- No secrets required -- the World Bank API is open.
compatibility_dateinwrangler.jsoncis pinned to 2026-07-30; bump it periodically per Cloudflare's Workers changelog.- If this still fails after redeploying, check Observability again -- the new try/catch means you should now see the actual error message and stack trace in the log entry, not just a bare error code. Paste that back and I'll fix the real cause rather than guessing again.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.