Skip to content

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.

Changes · 4

21 tools: 4 change things and 17 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "cpv_labels" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "cpv_labels" says "label": a word for a change.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "cpv_labels" says "label": a word for a change.

      What this check looks for
    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_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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.