Polish Public Tenders

Polish public procurement for AI agents: BZP and TED tenders, awards, buyers and contractors.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
83%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,929Tokens (tool definitions)
~2.4 KBTypical response size
Significant attention impact (2.29% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "polish-public-tenders": {
      "url": "https://compabase.com/api/mcp/tenders"
    }
  }
}

Remote endpoints

https://compabase.com/api/mcp/tendersstreamable-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_tenders(status, industry, region, city, kind, ...)

Search Polish public procurement notices from BZP (national) and TED (EU): open calls with deadlines or awarded contracts. Filter by industry (it, construction, medicine, or a 2-digit CPV division such as 72), region, buyer city, kind and value. Returns title, buyer, CPV codes, publication date, deadline, estimated or awarded value and a link to the notice.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "open",
        "awarded"
      ],
      "description": "open (default) or awarded notices."
    },
    "industry": {
      "type": "string",
      "description": "it, construction, medicine, or a 2-digit CPV division code (e.g. 72, 45, 33)."
    },
    "region": {
      "type": "string",
      "enum": [
        "dolnośląskie",
        "kujawsko-pomorskie",
        "lubelskie",
        "lubuskie",
        "łódzkie",
        "małopolskie",
        "mazowieckie",
        "opolskie",
        "podkarpackie",
        "podlaskie",
        "pomorskie",
        "śląskie",
        "świętokrzyskie",
        "warmińsko-mazurskie",
        "wielkopolskie",
        "zachodniopomorskie"
      ],
      "description": "Voivodeship of the buyer."
    },
    "city": {
      "type": "string",
      "description": "Buyer city, e.g. Warszawa."
    },
    "kind": {
      "type": "string",
      "enum": [
        "supplies",
        "services",
        "works"
      ],
      "description": "Contract type."
    },
    "source": {
      "type": "string",
      "enum": [
        "national",
        "eu"
      ],
      "description": "national (BZP) or eu (TED). Default: both."
    },
    "value_min": {
      "type": "number",
      "description": "Minimum estimated/awarded value."
    },
    "value_max": {
      "type": "number",
      "description": "Maximum estimated/awarded value."
    },
    "currency": {
      "type": "string",
      "enum": [
        "PLN",
        "EUR",
        "USD"
      ],
      "description": "Currency for value filters and output. Default PLN."
    },
    "page": {
      "type": "integer",
      "minimum": 0,
      "maximum": 50,
      "description": "Result page (20 per page)."
    }
  },
  "additionalProperties": false
}
🟢search_companies(name, krs, nip, city, county, ...)

Search and filter Polish KRS companies (spółki). Compabase also holds the full CEIDG/JDG register; this tool does not browse JDG — those without a public contact email are hidden because of RODO. Default `fields=summary` returns a compact row (name, NIP, KRS, location, PKD, latest financials, email/phone/website) — small enough for MCP clients. `fields=contacts_only` is name/NIP/KRS/city/email/phone/website only. `fields=full` returns every company_search column plus contacts and may exceed client size limits. Use for rankings, sector filters, city/county/region browsing, name search, or NIP/KRS lookup. When a PKD is mostly JDG, a sparse result includes a `hint` (full CEIDG is in the database; listing is RODO-gated). Do not call export_companies just to get a handful of emails or phones.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    },
    "city": {
      "type": "string",
      "description": "City name — KRS records use uppercase, e.g. 'WARSZAWA', 'POZNAŃ'."
    },
    "county": {
      "type": "string",
      "description": "County / powiat (lowercase)."
    },
    "region": {
      "type": "string",
      "description": "Voivodeship (lowercase), e.g. 'mazowieckie', 'wielkopolskie'."
    },
    "postal_code": {
      "type": "string",
      "description": "Postal code prefix, e.g. '00-9' or '61-'."
    },
    "pkd": {
      "type": "string",
      "description": "Primary PKD code prefix, e.g. '46.90.Z' or '46'."
    },
    "all_pkd": {
      "type": "string",
      "description": "Match any PKD code in the company's activity list (not just primary)."
    },
    "legal_form": {
      "type": "string",
      "description": "Legal form fragment, e.g. 'spółka z o.o.' or 'akcyjna'."
    },
    "currency": {
      "type": "string",
      "enum": [
        "pln",
        "usd",
        "eur"
      ],
      "description": "Currency for monetary filters. Default: pln."
    },
    "revenue_min": {
      "type": "number",
      "description": "Minimum total revenue."
    },
    "revenue_max": {
      "type": "number",
      "description": "Maximum total revenue."
    },
    "profit_min": {
      "type": "number",
      "description": "Minimum net profit."
    },
    "profit_max": {
      "type": "number",
      "description": "Maximum net profit."
    },
    "profit_operating_min": {
      "type": "number",
      "description": "Minimum operating profit (PLN). Negative allowed. Omit if unused."
    },
    "profit_operating_max": {
      "type": "number",
      "description": "Maximum operating profit (PLN). Omit if unused."
    },
    "total_assets_min": {
      "type": "number",
      "description": "Minimum total assets."
    },
    "total_assets_max": {
      "type": "number",
      "description": "Maximum total assets."
    },
    "ebitda_min": {
      "type": "number",
      "description": "Minimum EBITDA."
    },
    "ebitda_max": {
      "type": "number",
      "description": "Maximum EBITDA."
    },
    "capital_min": {
      "type": "number",
      "description": "Minimum share capital."
    },
    "capital_max": {
      "type": "number",
      "description": "Maximum share capital."
    },
    "estimated_value_min": {
      "type": "number",
      "description": "Minimum Ohlson estimated equity value in PLN."
    },
    "estimated_value_max": {
      "type": "number",
      "description": "Maximum Ohlson estimated equity value in PLN."
    },
    "registration_date_min": {
      "type": "string",
      "description": "Earliest KRS registration date, YYYY-MM-DD (inclusive). For newly registered companies use today's date for both registration_date_min and registration_date_max."
    },
    "registration_date_max": {
      "type": "string",
      "description": "Latest KRS registration date, YYYY-MM-DD (inclusive)."
    },
    "is_active": {
      "type": "boolean",
      "description": "true = active only, false = closed only. Omit for all."
    },
    "has_email": {
      "type": "boolean",
      "description": "true = only companies with email on record. Matching rows include contacts.email. Omit otherwise."
    },
    "has_website": {
      "type": "boolean",
      "description": "true = only companies with website on record. Matching rows include contacts.website. Omit otherwise."
    },
    "sort_by": {
      "type": "string",
      "enum": [
        "revenue_total",
        "profit_net",
        "total_assets",
        "profit_operating",
        "ebitda",
        "capital_total",
        "estimated_value",
        "registration_date"
      ],
      "description": "Sort field (default: revenue_total). registration_date + sort_dir=desc lists the newest registrations first."
    },
    "sort_dir": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "description": "Sort direction (default: desc)."
    },
    "year": {
      "type": "integer",
      "description": "Filter to companies whose latest financial_period_to falls within this calendar year (e.g. 2024). Use only for sector/ranking browse — omit when looking up a company by name, KRS, or NIP."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Max results (default: 10, max: 50)."
    },
    "fields": {
      "type": "string",
      "enum": [
        "contacts_only",
        "summary",
        "full"
      ],
      "description": "Response size. Default summary (name, NIP, KRS, location, PKD, latest financials, email/phone/website). contacts_only: name, NIP, KRS, city, email, phone, website. full: every company_search column plus contacts — often too large for MCP clients."
    }
  }
}
🟢get_company(name, krs, nip)

Get the registry profile of one Polish company: name, legal form, address, industry (PKD), share capital, representation rules, recent registry changes, VAT status and headline financials for the latest filed period. Identify the company by name, KRS number or company tax number (NIP). For earlier years or full statements use get_financials.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    }
  }
}
🟢get_company_public_aid(name, krs, nip)

Get SUDOP public aid / grants for a company — full case list with amounts, grantor, measure, purpose. Keyed by NIP. Identify company by name, KRS, or NIP.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    }
  }
}
🟢get_company_eu_funds(name, krs, nip)

Get European Funds (Fundusze Europejskie) projects for a company — official MFiPR lists, EU co-financing, programme and dates. Keyed by NIP. Identify company by name, KRS, or NIP. Cohesion/shared-management funds; not TED procurement, not FTS Commission grants, and not SUDOP state aid.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    }
  }
}
🟢get_company_eu_grants(name, krs, nip)

Get European Commission grants awarded directly to a Polish company (Horizon Europe, LIFE, Erasmus+ and other EU programmes from the EU Financial Transparency System). Identify the company by name, KRS number or company tax number (NIP).

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    }
  }
}
🟢get_company_public_tenders(name, krs, nip)

Get BZP public procurement data — full awards as contractor and notices as buyer, with award values. Keyed by NIP. Identify company by name, KRS, or NIP.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    }
  }
}
🟢get_company_eu_tenders(name, krs, nip)

Get TED EU-threshold public procurement — full awards as contractor and notices as buyer. Keyed by NIP. Identify company by name, KRS, or NIP.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Company name, used when the KRS or NIP is not known."
    },
    "krs": {
      "type": "string",
      "description": "KRS number of the company in the Polish National Court Register (10 digits)."
    },
    "nip": {
      "type": "string",
      "description": "Polish company tax number (NIP) of the business, 10 digits."
    }
  }
}
🟢get_usage

Get current billing period usage and remaining quota — mcp_queries, api_requests, export_companies, ask_ai_credits, watchlist_companies. Includes limits and reset date.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools