Przetargowy Janusz — Polish public tenders
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Polish public tenders (przetargi): hybrid search, AI SWZ summaries, buyers, contractors, CPV stats.
| Author | pl.przetargowyjanusz |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2435 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Przetargowy Janusz — Polish public tenders": {
"url": "https://przetargowyjanusz.pl/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (25)
search_tendersread-onlySemantic search over active Polish public tenders (przetargi) by meaning, with optional filters. Ranks by relevance (hybrid vector + keyword). Returns paginated tender cards, each with a public URL. Tenders without an AI summary yet are included: their card has has_summary=false and no teaser, get_tender returns their notice data, and a signed-in user on a trial or paid plan can order the summary in Przetargowy Janusz. `mode` is 'semantic', or 'lexical' when the embedding service is temporarily unavailable; `unapplied_filters` then lists the filters it could not apply exactly.
Parameters:
query(required) — string — Natural-language query, e.g. 'budowa hali sportowej z basenem'cpv— string — Restrict to tenders whose CPV includes this codepage— integerregion— string — Voivodeship (województwo): slug or name from list_facets, e.g. 'slaskie' or 'śląskie'max_value— number — Maximum estimated value (PLN)min_value— number — Minimum estimated value (PLN)deadline_before— string — ISO date; only tenders with submission deadline before it
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_tendersread-onlyBrowse tenders without a text query. `filter` selects the axis: 'all' (every active tender, or archived when archived=true), 'category' (CPV division code from list_facets), 'region' (voivodeship slug from list_facets), or 'city' (city slug from list_facets). Use list_facets first to get valid values.
Parameters:
page— integervalue— string — Required for category/region/city. CPV division code (e.g. '45000000'), region slug, or city slug — all from list_facets.filter— stringarchived— boolean — Only for filter='all': return finished tenders instead.
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_facetsread-onlyList the browsable facets of the active tender set: CPV categories, voivodeships (regions), and cities, each with a count and the slug/code to pass to list_tenders. Call this to discover valid filter values.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_tenderread-onlyFetch full detail for one tender by its public slug (from search_tenders/list_tenders results): metadata, the 12-section AI SWZ summary, the OPZ scope brief, full award results (winner, value, offer price band, rejected offers, whether the cheapest offer won), the cancelled predecessor it re-issues (with that procedure's offer band — a price signal), the EU project funding it, and the bidders' Q&A. A tender without an AI summary (has_summary=false) returns its notice data with summary_sections and scope_brief null, like its public page. Returns not-found for non-public tenders.
Parameters:
slug(required) — string — public_slug from a listing result
Hints: read-only yes · destructive no · idempotent yes · open-world no
search_entitiesread-onlyFind contracting authorities (kind='buyer', zamawiający) or contractors (kind='contractor', wykonawcy — companies and sole traders) by name or NIP. Returns each match with its slug and public URL; pass the slug to get_buyer / get_contractor.
Parameters:
kind(required) — stringquery(required) — string — Name fragment or NIP, e.g. 'gmina wieliczka' or '6772...'limit— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_buyerread-onlyProfile of one contracting authority (zamawiający) by slug (from search_entities or a tender's authority): identity (NIP, REGON, KRS, region), counts, its active tenders, recent awards with winners, top contractors, procurement plan positions and recent contracts — or, on older pages, its tenders and public finance (municipal budget, NFZ contracts, investments). Same data as its public page.
Parameters:
slug(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_contractorread-onlyProfile of one contractor (wykonawca — company or sole trader) by slug (from search_entities or a buyer's results): registry data (REGON, legal form, VAT status, PKD, debtor-register flags), wins and offers, recent wins and losses, its main buyers, rivals it meets, and recent public contracts. Same data as its public page.
Parameters:
slug(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
cpv_statsread-onlyMonthly market statistics for one CPV category, as on its public statistics page: awards with a price, median and p10/p90 award value, average offers per award, distinct winners, top winners, biggest awards and the regional split. Available for these 8-digit codes: 45000000, 33000000, 71000000, 90000000, 34000000, 39000000, 55000000, 30000000, 48000000, 79000000, 50000000, 09000000, 38000000, 15000000, 80000000, 72000000, 85000000, 60000000, 42000000, 31000000, 32000000, 44000000.
Parameters:
cpv(required) — string — 8-digit CPV code, check digit optional, e.g. '45000000'month— string — YYYY-MM; defaults to the latest closed month
Hints: read-only yes · destructive no · idempotent yes · open-world no
cpv_searchread-onlyResolve free-text to CPV codes (the EU Common Procurement Vocabulary used to classify tenders). Returns matching codes with Polish labels. Use the codes with list_tenders filter='category' (division = first 8 digits).
Parameters:
query(required) — stringlimit— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
cpv_treeread-onlyWalk the CPV hierarchy. Omit `parent` for top-level divisions; pass a code (e.g. '45000000-7') to list its children. Each node flags whether it has children.
Parameters:
parent
Hints: read-only yes · destructive no · idempotent yes · open-world no
cpv_labelsread-onlyResolve CPV codes to their Polish labels. Pass an array of full codes (e.g. ['45000000-7']).
Parameters:
codes(required) — array
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_my_tendersread-onlyList the tenders in the signed-in user's pipeline ('Moje przetargi'), most recently updated first, with each one's pipeline status and public URL. Requires OAuth authentication and a trial or paid plan.
Parameters:
limit— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_my_alertsread-onlyList the signed-in user's saved alert profiles (saved searches / notification rules): query, CPV codes, regions, budget band, and delivery settings. Requires OAuth authentication and a trial or paid plan.
Hints: read-only yes · destructive no · idempotent yes · open-world no
search_my_tendersread-onlySearch the signed-in company's matched tenders by words — the search box of the tender list in Przetargowy Janusz: only tenders that fit the company profile (CPV codes, voivodeships). view 'recommended' (filtered by what the company does, when its profile says so) or 'all'; 50 per page, the same tender cards as list_matched_tenders. To search all Polish tenders, use search_tenders. Requires OAuth authentication and a trial or paid plan.
Parameters:
query(required) — stringpage— integerview— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_matched_tendersread-onlyThe signed-in company's matched tenders — the list in Przetargowy Janusz built from its profile (CPV codes, voivodeships, budget): view 'recommended' (filtered by what the company does, when its profile says so) or 'all'. 50 per page, each with fit_score (0–100), has_summary, an app_url and the public url. Without CPV codes in the profile there is no list — the answer says so with a link to the profile. Requires OAuth authentication and a trial or paid plan.
Parameters:
dir— stringkind— string — works, supplies or servicespage— integersort— stringview— stringquery— stringregions— array — Voivodeships (slug or name from list_facets); default: the company profilemax_value— number — Maximum estimated value (PLN); overrides the profile budgetmin_value— number — Minimum estimated value (PLN); overrides the profile budgetdeadline_before— string — ISO date; only tenders with submission deadline before it
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_my_tenderread-onlyOne tender from the signed-in company's 'Moje przetargi' by tender_id (from list_my_tenders or list_matched_tenders): pipeline status and its history, deadlines, the AI summary state (ready / requested / no_documents / none), the number of tender documents and archive files, the last document fill run, what filling in its documents still needs (fill_details: missing details, confirmed values, Janusz's price proposals), and links to its workspace in the app and its public page. Requires OAuth authentication and a trial or paid plan.
Parameters:
tender_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_tender_filesread-onlyFiles in the document archive of one tender from the signed-in company's 'Moje przetargi' (tender_id): the tender's documents copied in, the company's uploads and the documents Janusz filled — with type, version and date. Read one with get_tender_file. Requires OAuth authentication and a trial or paid plan.
Parameters:
tender_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_tender_fileread-onlyOne file from the signed-in company's document archive (file_id from list_tender_files): its text, 20000 characters per call (pass next_offset as offset for the rest), and a download link valid for 5 minutes. Requires OAuth authentication and a trial or paid plan.
Parameters:
file_id(required) — stringoffset— integer
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_tender_documentsread-onlyThe text read from a tender's documentation (SWZ, OPZ and attachments; the specification first), by tender_id or public slug, 20000 characters per call (pass next_offset as offset for the rest), with the list of documents it came from. Empty when no document text has been read yet. Requires OAuth authentication and a trial or paid plan.
Parameters:
slug— string — public slug, when there is no tender_idoffset— integertender_id— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
add_to_my_tendersAdds a tender to the signed-in company's 'Moje przetargi' — the same as 'Dodaj do Moich' in Przetargowy Janusz: a new entry in the 'Do_przejrzenia' column (one removed earlier comes back there) and its AI summary queued. A tender already there stays as it is. By tender_id (from search_tenders, list_matched_tenders or get_tender) or public slug. Returns the result (added / restored / already), the status and the workspace link. Requires OAuth authentication and a trial or paid plan.
Parameters:
slug— string — public slug, when there is no tender_idtender_id— string
Hints: read-only no · destructive no · idempotent yes · open-world no
set_tender_statusMoves a tender of the signed-in company's 'Moje przetargi' (tender_id) to another status, with the moves the app allows: between the company's own kanban stages (e.g. Do_przejrzenia), to Do_wysłania or Oczekiwanie_na_wynik, closing it as Wygrana, Uczciwa_przegrana, Nieuczciwa_przegrana, Anulowane, Do_odwołania or Odpuszczam, back from Do_wysłania / Oczekiwanie_na_wynik to a work stage, and an appeal to Udane_odwołanie or Nieudane_odwołanie. Odpuszczam needs a reason; for a loss, cancellation or appeal the reason is optional, for Wygrana the contract value. A refused move lists the allowed statuses. Saved to the status history; the rest of the team is notified as in the app. Requires OAuth authentication and a trial or paid plan.
Parameters:
tender_id(required) — stringstatus(required) — string — target status: a kanban column id of the company or a system statusreason— string — why — required for Odpuszczam; for losses, cancellation and appeals optionalwinning_price— number — contract value in PLN, for Wygrana
Hints: read-only no · destructive no · idempotent yes · open-world no
request_summaryOrders the AI summary of a tender's documentation (SWZ) — the same as 'Wygeneruj teraz' in Przetargowy Janusz: queues the summary, or first the download or reading of the tender documents. By tender_id or public slug. status: already-done (the summary is there — read it with get_tender or get_my_tender), generating (ready in a few minutes), fetch-needed (documents are being downloaded — ask again in a few minutes), extraction-needed (no SWZ among the documents), no-source / no-documents (nothing to summarize), error. Requires OAuth authentication and a trial or paid plan.
Parameters:
slug— string — public slug, when there is no tender_idtender_id— string
Hints: read-only no · destructive no · idempotent yes · open-world no
start_fillStarts filling in the documents of a tender in 'Moje przetargi' (forms, declarations, price form) with the company's data — the same as 'Wypełnij' in Przetargowy Janusz; it takes a few minutes. Janusz needs the offer price, the completion deadline and the signatory's name and role first: status missing_facts lists what is missing — set it with confirm_bid_price and set_fill_details, or, only after the user agrees to fill in with what there is, call again with allow_missing=true (the app's 'Wypełnij z tym co jest'). Progress: get_my_tender (last_fill); the filled files: list_tender_files. Counts toward the plan's fill limit. status: started, missing_facts, nip_required (the company's NIP is not set), fill_limit, rate_limit (8 per day per person). Requires OAuth authentication and a trial or paid plan.
Parameters:
tender_id(required) — stringallow_missing— boolean — fill in despite missing details — only when the user agreed
Hints: read-only no · destructive no · idempotent no · open-world no
set_fill_detailsSets the details Janusz needs to fill in the documents of a tender in 'Moje przetargi' — the completion deadline and the signatory's name and role — as the user stated them (the same details the Janusz chat in the app records). Only the given fields change. Returns what is still missing before start_fill; the offer price is set with confirm_bid_price. Requires OAuth authentication and a trial or paid plan.
Parameters:
tender_id(required) — stringsignatory_name— string — full name of the person signing the offersignatory_role— string — e.g. 'Prezes Zarządu'completion_deadline— string — e.g. '30 dni od podpisania umowy' or '2026-12-15'
Hints: read-only no · destructive no · idempotent yes · open-world no
confirm_bid_priceSets the offer price (net PLN) of a tender in 'Moje przetargi' — the same as choosing the price in Przetargowy Janusz: one of Janusz's price variants (aggressive, realistic, higher — listed in get_my_tender fill_details.price_proposals) or variant 'manual' with amount. The price goes into the offer documents. Only with the price the user stated or picked. Requires OAuth authentication and a trial or paid plan.
Parameters:
tender_id(required) — stringvariant(required) — stringamount— number — net PLN — required for variant 'manual'rationale— string
Hints: read-only no · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.