Przetargowy Janusz — Polish public tenders
by przetargowyjanusz.pl · remote · no sign-in to list tools · v1.1.0 · published by pl.przetargowyjanusz
Polish public tenders (przetargi): hybrid search, AI SWZ summaries, buyers, contractors, CPV stats.
21 tools: 4 change things and 17 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things4Claude Code: ask: see these tools
- Only reads17Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http tenders https://przetargowyjanusz.pl/mcpFindings
Matches of fixed checks, with the text they matched.
- Warncpv_labels
The server marks "cpv_labels" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "cpv_labels" says "label": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
21 tools
Changes things 4Claude Code: ask
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 come…No findings
Why it is in this group
- The name "add_to_my_tenders" says "add": a word for a change.
Description, as the server wrote it Adds 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.
Annotations the server declares
- title: Dodaj do Moich przetargów
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
cpv_labelsResolve CPV codes to their Polish labels.1 finding
Why it is in this group
- The name "cpv_labels" says "label": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "cpv_labels" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "cpv_labels" says "label": a word for a change.
Description, as the server wrote it Resolve CPV codes to their Polish labels. Pass an array of full codes (e.g. ['45000000-7']).
Annotations the server declares
- title: Nazwy kodów CPV
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
cpv_statsMonthly 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, t…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Monthly 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.
Annotations the server declares
- title: Statystyki rynku dla kodu CPV
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
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.No findings
Why it is in this group
- The name "set_tender_status" says "set": a word for a change.
Description, as the server wrote it Moves 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.
Annotations the server declares
- title: Zmień status przetargu
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 17Claude Code: allow
cpv_searchResolve free-text to CPV codes (the EU Common Procurement Vocabulary used to classify tenders).No findings
Why it is in this group
- The name "cpv_search" says "search": a word for reading.
Description, as the server wrote it Resolve 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).
Annotations the server declares
- title: Szukaj kodów CPV
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
cpv_treeWalk the CPV hierarchy.No findings
Why it is in this group
- The name "cpv_tree" says "tree": a word for reading.
Description, as the server wrote it Walk 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.
Annotations the server declares
- title: Drzewo kodów CPV
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_buyerProfile 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 aw…No findings
Why it is in this group
- The name "get_buyer" says "get": a word for reading.
Description, as the server wrote it Profile 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.
Annotations the server declares
- title: Profil zamawiającego
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_contractorProfile 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-regist…No findings
Why it is in this group
- The name "get_contractor" says "get": a word for reading.
Description, as the server wrote it Profile 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.
Annotations the server declares
- title: Profil wykonawcy
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_my_tenderOne 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 sta…No findings
Why it is in this group
- The name "get_my_tender" says "get": a word for reading.
Description, as the server wrote it One 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, and links to its workspace in the app and its public page. Requires OAuth authentication and a trial or paid plan.
Annotations the server declares
- title: Mój przetarg
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_tenderFetch 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 (wi…No findings
Why it is in this group
- The name "get_tender" says "get": a word for reading.
Description, as the server wrote it Fetch 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.
Annotations the server declares
- title: Szczegóły przetargu
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_tender_documentsThe 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 …No findings
Why it is in this group
- The name "get_tender_documents" says "get": a word for reading.
Description, as the server wrote it The 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.
Annotations the server declares
- title: Tekst dokumentacji przetargu
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_tender_fileOne 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 downlo…No findings
Why it is in this group
- The name "get_tender_file" says "get": a word for reading.
Description, as the server wrote it One 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.
Annotations the server declares
- title: Plik z archiwum
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_facetsList 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.No findings
Why it is in this group
- The name "list_facets" says "list": a word for reading.
Description, as the server wrote it List 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.
Annotations the server declares
- title: Branże, województwa i miasta
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_matched_tendersThe 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 …No findings
Why it is in this group
- The name "list_matched_tenders" says "list": a word for reading.
Description, as the server wrote it The 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.
Annotations the server declares
- title: Przetargy dopasowane do firmy
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_my_alertsList the signed-in user's saved alert profiles (saved searches / notification rules): query, CPV codes, regions, budget band, and delivery settings.No findings
Why it is in this group
- The name "list_my_alerts" says "list": a word for reading.
Description, as the server wrote it List 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.
Annotations the server declares
- title: Moje alerty
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_my_tendersList the tenders in the signed-in user's pipeline ('Moje przetargi'), most recently updated first, with each one's pipeline status and public URL.No findings
Why it is in this group
- The name "list_my_tenders" says "list": a word for reading.
Description, as the server wrote it List 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.
Annotations the server declares
- title: Moje przetargi
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_tender_filesFiles 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 Jan…No findings
Why it is in this group
- The name "list_tender_files" says "list": a word for reading.
Description, as the server wrote it Files 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.
Annotations the server declares
- title: Pliki przetargu w archiwum
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_tendersBrowse tenders without a text query.No findings
Why it is in this group
- The name "list_tenders" says "list": a word for reading.
Description, as the server wrote it Browse 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.
Annotations the server declares
- title: Przeglądaj przetargi
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_entitiesFind contracting authorities (kind='buyer', zamawiający) or contractors (kind='contractor', wykonawcy — companies and sole traders) by name or NIP.No findings
Why it is in this group
- The name "search_entities" says "search": a word for reading.
Description, as the server wrote it Find 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.
Annotations the server declares
- title: Szukaj zamawiających i wykonawców
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_my_tendersHybrid search over active tenders for the signed-in user's organization (the same search as the in-app command palette).No findings
Why it is in this group
- The name "search_my_tenders" says "search": a word for reading.
Description, as the server wrote it Hybrid search over active tenders for the signed-in user's organization (the same search as the in-app command palette). Requires OAuth authentication and a trial or paid plan.
Annotations the server declares
- title: Szukaj w przetargach mojej firmy
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_tendersSemantic search over active Polish public tenders (przetargi) by meaning, with optional filters.No findings
Why it is in this group
- The name "search_tenders" says "search": a word for reading.
Description, as the server wrote it Semantic 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.
Annotations the server declares
- title: Szukaj przetargów
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http tenders https://przetargowyjanusz.pl/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__tenders__search_tenders",
"mcp__tenders__list_tenders",
"mcp__tenders__list_facets",
"mcp__tenders__get_tender",
"mcp__tenders__search_entities",
"mcp__tenders__get_buyer",
"mcp__tenders__get_contractor",
"mcp__tenders__cpv_search",
"mcp__tenders__cpv_tree",
"mcp__tenders__list_my_tenders",
"mcp__tenders__list_my_alerts",
"mcp__tenders__search_my_tenders",
"mcp__tenders__list_matched_tenders",
"mcp__tenders__get_my_tender",
"mcp__tenders__list_tender_files",
"mcp__tenders__get_tender_file",
"mcp__tenders__get_tender_documents"
],
"ask": [
"mcp__tenders__cpv_stats",
"mcp__tenders__cpv_labels",
"mcp__tenders__add_to_my_tenders",
"mcp__tenders__set_tender_status"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as tenders. Review it before you use it.