Polish Public Tenders (e-Zamówienia/BZP) MCP
Pricing
from $2.00 / 1,000 find relevant polish tenders
Polish Public Tenders (e-Zamówienia/BZP) MCP
Find, analyze, and score Polish public tenders (BZP national notices): parsed requirements, deadlines, certificates, evaluation criteria, and bid-fit scoring against your company profile.
Pricing
from $2.00 / 1,000 find relevant polish tenders
Rating
0.0
(0)
Developer
Anton Aouat
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
An MCP server that gives an AI agent clean access to Polish public tenders published on the national Biuletyn Zamówień Publicznych (BZP) notice board (e-Zamówienia platform). It finds tenders, parses each structured notice into requirements/deadlines/certificates, and scores bid-fit against a company profile — deterministically, with no LLM involved server-side.
Built for suppliers bidding on Polish public contracts, and the procurement-tech agencies and tools serving them.
Tools
| Tool | What it does |
|---|---|
find_relevant_tenders | Search open BZP contract notices by CPV code, keywords, region (NUTS/województwo), order type, publication/deadline window, below-EU threshold. Pass a profile to rank results by bid-fit score. Returns concise summaries. |
analyze_tender | Full structured breakdown of one tender: subject, buyer, CPV, deadlines, typed participation requirements, exclusion grounds, required documents, detected certificates, weighted evaluation criteria, submission language, bid-bond/security flags. |
score_bid_opportunity | Score one tender against a company profile (0–100) with a transparent factor breakdown, matches, gaps (e.g. missing certificates), and risks (short deadline, Polish-only, wadium). Unknown data is scored neutrally, never faked. |
find_previous_winners | Search awarded tenders (BZP result notices) by CPV, keywords, or buyer — competitive intelligence before bidding. |
monitor_tender_changes | Fetch all published versions of one tender and return a structured diff of what changed: deadline, evaluation criteria, requirements, CPV. Stateless — re-call to keep watching. |
Polish national (BZP) tenders only in v1 — no EU-wide TED notices.
Example
"Find road-works tenders in region PL32 under the EU threshold, closing in the next three weeks, and tell me if my company is a good fit."
// find_relevant_tenders{ "cpvCodes": ["45233140-2"], "regions": ["PL32"], "belowEuOnly": true,"profile": { "capabilities": ["road works"], "cpvCodes": ["45233140-2"], "regions": ["PL32"] } }
{"count": 1,"tenders": [{"noticeNumber": "2026/BZP 00315918/01","subject": "„Wymiana nawierzchni dojazdu do windy w budynku Przychodni lekarskiej przy ul. Szpitalnej 11 w Barlinku”","buyer": "BARLINECKIE TOWARZYSTWO BUDOWNICTWA SPOŁECZNEGO SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ W BARLINKU","buyerRegion": "PL32","cpv": [{ "code": "45233140-2", "label": "Roboty drogowe" }],"orderType": "Works","submissionDeadline": "2026-07-16T12:00:00Z","belowEu": true,"matchScore": 78}]}
Then score_bid_opportunity with the same noticeNumber + profile returns the full
factor breakdown behind that 78.
Use it
Hosted (Apify) — recommended
Buyers connect through a lightweight bridge package that forwards to the hosted,
maintained Actor over its Standby /mcp endpoint and meters usage to your own Apify
account — the same pattern every live server in this factory uses (e.g.
finnish-trade-mcp-server, finnish-company-mcp-server):
{"mcpServers": {"ezamowienia-tenders": {"command": "npx","args": ["-y", "ezamowienia-tenders-mcp-server"],"env": { "APIFY_API_TOKEN": "your-apify-token" }}}}
Get your token from Apify Console → Settings → Integrations → API token, after subscribing to the Actor on the Apify Store. Billing is per successful tool call (Pay-Per-Event).
(The ezamowienia-tenders-mcp-server bridge package and the live Actor URL land at deploy
time — the bridge is built in a later task. Until then, use the Local (stdio) setup below.)
Local (stdio)
npm installnpm run build
Then register with any MCP client (e.g. Claude Desktop):
{"mcpServers": {"ezamowienia-tenders": { "command": "node", "args": ["/abs/path/to/servers/ezamowienia-tenders/dist/server.js"] }}}
No API key is required — the BZP notice board is open data.
Or run the HTTP transport locally: PORT=3999 npm run standby → POST http://localhost:3999/mcp.
Develop
npm run typecheck # tsc --noEmitnpm test # vitest — unit tests vs recorded real fixtures (offline)npm run smoke # live: boots the server, real MCP handshake + real BZP callsnpm run build # produces dist/
Windows: run tools directly (node ./node_modules/vitest/vitest.mjs run) or run npm
scripts from PowerShell — this repo's path contains spaces, which breaks npm's .bin shims.
Architecture (small, single-purpose units):
src/bzp/client.ts— HTTP only: BZP mo-board notice search, throttle, TTL cache.src/bzp/parse-notice.ts— the moat: parses each notice's structured HTML body into typed requirements, deadlines, exclusion grounds, certificates, and evaluation criteria.src/bzp/normalize.ts— shape-mapping only: raw BZP notice → clean agent shape.src/scoring/profile.ts+src/scoring/engine.ts— theCompanyProfileschema and the deterministic, weighted bid-fit scoring engine (no LLM).src/tools.ts— MCP contracts only: the 5 tools + Pay-Per-Event billing hook.src/server.ts— stdio transport.src/standby.ts— Apify Standby HTTP transport.
Data source & attribution
Data from Poland's Biuletyn Zamówień Publicznych (BZP), published via the e-Zamówienia platform operated by the Public Procurement Office (Urząd Zamówień Publicznych, UZP), Polish public-sector open data. This server is an independent tool and is not affiliated with, endorsed by, or sponsored by UZP or e-Zamówienia.
License
MIT