Atlas Przetargów
Atlas Przetargów — Serwer MCP
Pierwszy serwer MCP dla danych o polskich zamówieniach publicznych. Przeszukuj ponad 800 000 polskich przetargów (BZP + TED), profile zamawiających i wykonawców oraz statystyki kategorii bezpośrednio z Claude Desktop, Cursor, Continue, Cline lub dowolnego klienta AI zgodnego z MCP.
Obsługiwane przez Atlas Przetargów — platformę do wyszukiwania i analizy polskich zamówień publicznych.
Czym to jest?
Model Context Protocol (MCP) pozwala asystentom AI łączyć się z zewnętrznymi narzędziami i danymi. Ten serwer udostępnia API Atlasu Przetargów dowolnemu klientowi MCP, dając Twojemu asystentowi AI możliwość:
Wyszukiwania polskich przetargów publicznych według słów kluczowych, kategorii CPV, lokalizacji, wartości lub terminu składania ofert
Pobierania pełnych szczegółów przetargu, w tym zamawiającego, kodów CPV, szacunkowej wartości, terminów oraz opcjonalnego podsumowania wygenerowanego przez AI
Profilowania dowolnego zamawiającego po NIP — w tym sprawdzania, kto najczęściej wygrywa ich przetargi
Profilowania dowolnego wykonawcy po NIP — w tym sprawdzania, od których zamawiających najczęściej wygrywają zlecenia
Analizy statystyk rynkowych dla dowolnej kategorii CPV (liczba, mediana wartości, średnia liczba ofert, średni termin)
Porównywania województw i miast pod kątem wolumenu zamówień
Dostępu do glosariusza ponad 90 terminów związanych z polskimi zamówieniami publicznymi
Korzystania z gotowych przepływów pracy (promptów) do analizy przetargów, weryfikacji zamawiających (due diligence) i odkrywania szans biznesowych
Related MCP server: narajangteo-searcher
Szybki start (Claude Desktop)
Opcja A — przez npx (zalecane, bez instalacji)
Edytuj plik konfiguracyjny Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Dodaj:
{
"mcpServers": {
"atlas-przetargow": {
"command": "npx",
"args": ["-y", "@atlasprzetargow/mcp"]
}
}
}Zrestartuj Claude Desktop. Narzędzia Atlasu pojawią się w panelu narzędzi.
Opcja B — instalacja globalna
npm install -g @atlasprzetargow/mcpNastępnie w claude_desktop_config.json:
{
"mcpServers": {
"atlas-przetargow": {
"command": "atlas-przetargow-mcp"
}
}
}Przykłady użycia (w Claude Desktop)
"Znajdź aktywne przetargi budowlane w Warszawie z budżetem 500 tys.–5 mln PLN i pokaż mi 5 najlepszych"
"Użyj promptu buyer-due-diligence dla NIP 5252248481" (→ przeprowadza weryfikację Urzędu m.st. Warszawy jako zamawiającego)
"Jaka była mediana wartości przetargów IT w Polsce w zeszłym roku?"
"Znajdź przetarg 2026/BZP 00202613 i przeanalizuj jego kluczowe warunki oraz ryzyka"
"Znajdź kod CPV dla sprzętu medycznego i pokaż aktywne przetargi"
"Kto najczęściej wygrywa kontrakty od GDDKiA?"
Narzędzia
Narzędzie | Opis |
| Wyszukiwanie przetargów z filtrami (zapytanie, CPV, miasto, województwo, zakres wartości, daty, sortowanie) |
| Pełne szczegóły przetargu po ID, opcjonalnie z podsumowaniem AI |
| Profil zamawiającego po NIP + najczęstsi wykonawcy |
| Profil wykonawcy po NIP + najczęstsi zamawiający |
| Znajdź zamawiających / wykonawców po nazwie (zwraca NIP dla innych narzędzi) |
| Agregowane statystyki dla kategorii CPV (liczba, mediana, średnia ofert, średni termin) |
| Statystyki według województwa lub miasta (najwięksi zamawiający, najczęstsze CPV) |
| Wyszukiwanie kodów CPV po polskim słowie kluczowym |
Zasoby
URI | Opis |
| Indeks ponad 90 terminów związanych z polskimi zamówieniami publicznymi |
| Pełna definicja konkretnego terminu |
| Indeks artykułów bazy wiedzy |
| Pełny artykuł z bazy wiedzy |
Prompty
Prompt | Opis |
| Kompleksowa analiza ogłoszenia o przetargu: zakres, wartość, terminy, ryzyka, rekomendacja |
| Weryfikacja zamawiającego: profil zakupowy, sieć wykonawców, sygnały ostrzegawcze |
| Znajdowanie aktywnych przetargów pasujących do profilu CPV + lokalizacja + wartość |
Konfiguracja (zmienne środowiskowe)
Wszystkie opcjonalne. Domyślne wartości są bezpieczne.
Zmienna | Domyślnie | Opis |
|
| Główny adres API. Przydatne dla stagingu lub własnej instancji Atlasu |
| (brak) | Opcjonalny klucz dla endpointów |
|
| Limit czasu żądania |
|
| Liczba ponownych prób dla błędów 429 / 5xx / timeoutów |
Przekaż je przez konfigurację klienta MCP:
{
"mcpServers": {
"atlas-przetargow": {
"command": "npx",
"args": ["-y", "@atlasprzetargow/mcp"],
"env": {
"ATLAS_API_KEY": "your-optional-key-here"
}
}
}
}Polskie zamówienia publiczne — szybka ściąga
BZP (Biuletyn Zamówień Publicznych) — krajowy rejestr przetargów. ID wyglądają jak
2026/BZP 00202613.TED (Tenders Electronic Daily) — unijny rejestr przetargów, wymagany dla przetargów powyżej progów unijnych.
CPV (Common Procurement Vocabulary) — 8-cyfrowe kody kategorii, np.
45000000= roboty budowlane,72000000= usługi IT.NIP — 10-cyfrowy numer identyfikacji podatkowej, używany do identyfikacji każdego zamawiającego / wykonawcy.
Kody województw:
PL02dolnośląskie ·PL04kujawsko-pomorskie ·PL06lubelskie ·PL08lubuskie ·PL10łódzkie ·PL12małopolskie ·PL14mazowieckie ·PL16opolskie ·PL18podkarpackie ·PL20podlaskie ·PL22pomorskie ·PL24śląskie ·PL26świętokrzyskie ·PL28warmińsko-mazurskie ·PL30wielkopolskie ·PL32zachodniopomorskieTypy ogłoszeń:
ContractNotice— aktywny przetarg, otwarty na ofertyTenderResultNotice/ContractAwardNotice— wyniki (kto wygrał, za jaką cenę)CompetitionNotice,ConcessionNotice— ogłoszenia specjalistyczne
Rozwój
git clone https://github.com/atlasprzetargow/mcp-server.git
cd mcp-server
npm install
npm run build
npm run smoke # runs all tools against production API
# Test locally in Claude Desktop:
# Point the "command" in claude_desktop_config.json to the absolute path of dist/index.js:
# "command": "node", "args": ["/abs/path/to/mcp-server/dist/index.js"]Limity zapytań i zasady użytkowania
API Atlasu Przetargów posiada limit zapytań na IP (30 zapytań/min dla endpointów LLM, więcej dla publicznych). Serwer MCP automatycznie ponawia próby przy błędach 429 z użyciem wykładniczego wycofywania (exponential backoff).
Jeśli często osiągasz limity (np. w automatyzacjach produkcyjnych), skontaktuj się przez atlasprzetargow.pl/kontakt w celu uzyskania dostępu wyższego poziomu.
Licencja
MIT © Atlas Przetargów
Źródła danych
Wszystkie dane o przetargach pochodzą z:
BZP (Biuletyn Zamówień Publicznych) — publiczny rejestr Urzędu Zamówień Publicznych
TED (Tenders Electronic Daily) — unijny rejestr zamówień publicznych
Przetworzone, wzbogacone i udostępnione przez Atlas Przetargów.
Powiązane
Atlas Przetargów — interfejs webowy
Model Context Protocol — standard
Claude Desktop — klient referencyjny
awesome-mcp-servers — lista społecznościowa
Available Tools
8 toolsget_buyerGet profile of a procuring entity (zamawiający)A
Fetch a profile of a Polish public procuring entity (zamawiający) by its NIP (tax ID). Returns name, location, statistics, recent tenders, and top winning contractors. Use for due diligence on who buys what and from whom.
| Name | Required | Description | Default |
|---|---|---|---|
| nip | Yes | Polish tax ID (NIP) of the procuring entity — 10 digits | |
| include_winning_contractors | No | If true, also fetch the list of contractors that most frequently win this buyer's tenders. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the return content (name, location, statistics, recent tenders, top winning contractors) and the tool's purpose (due diligence). However, it lacks details on error handling, rate limits, authentication needs, or data freshness, which are important for a tool fetching entity profiles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and efficiently uses two sentences: one for the tool's function and return values, and another for its usage context. Every sentence adds value without redundancy, making it appropriately concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (fetching entity profiles with two parameters) and no output schema, the description provides a good overview of return content and usage context. However, it lacks details on output structure (e.g., format of statistics or tender lists) and behavioral aspects like errors or limits, leaving some gaps for an agent to invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already fully documents both parameters (nip and include_winning_contractors). The description adds no additional parameter semantics beyond what the schema provides, such as explaining the significance of the NIP or the impact of the boolean flag, so it meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Fetch a profile'), the resource ('Polish public procuring entity'), and the key identifier ('by its NIP'). It distinguishes from sibling tools by focusing on buyer profiles rather than statistics, contractors, tenders, or searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool ('for due diligence on who buys what and from whom'), which implicitly differentiates it from tools like get_contractor or get_tender. However, it does not explicitly state when not to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_statsGet tender statistics for a CPV categoryA
Retrieve aggregate statistics for a CPV category: count, average/median value, average number of offers, average deadline period. Based on historical BZP+TED data. Useful for market sizing and competitive benchmarking.
| Name | Required | Description | Default |
|---|---|---|---|
| cpv | Yes | CPV code or prefix, e.g. '45' (construction), '72' (IT), '45240000-1' | |
| window | No | Statistics window: month=30d, quarter=90d, year=365d. Default: year |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool retrieves aggregate statistics (implying read-only, non-destructive behavior) and specifies the data sources (historical BZP+TED data). However, it lacks details on permissions, rate limits, error handling, or output format, leaving behavioral gaps for a tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by specific metrics and context. Every sentence adds value: the first defines the action and metrics, the second specifies data sources, and the third states use cases. It is efficiently structured with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is partially complete. It covers purpose, data sources, and use cases adequately, but lacks details on output format, error conditions, or behavioral constraints, which are important for a statistical tool with no structured output documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters (cpv and window). The description adds no additional parameter semantics beyond what the schema provides, such as examples or constraints. The baseline score of 3 is appropriate as the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'retrieve' and resource 'aggregate statistics for a CPV category', listing concrete metrics (count, average/median value, etc.). It distinguishes from siblings by focusing on statistical aggregation rather than individual entity retrieval (e.g., get_tender, get_buyer) or search operations (e.g., search_cpv).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'useful for market sizing and competitive benchmarking' based on 'historical BZP+TED data'. It implies usage for aggregated insights rather than detailed searches, but does not explicitly state when not to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contractorGet profile of a contractor (wykonawca)A
Fetch a profile of a Polish tender contractor by its NIP. Returns name, location, total wins, total value and top buyers they win tenders from.
| Name | Required | Description | Default |
|---|---|---|---|
| nip | Yes | Polish tax ID (NIP) of the contractor — 10 digits | |
| include_winning_buyers | No | If true, also fetch the list of buyers this contractor most frequently wins tenders from. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the return data structure (name, location, wins, value, buyers) which is helpful, but doesn't mention error handling, rate limits, authentication needs, or whether this is a read-only operation. The description adds some behavioral context but leaves gaps for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence efficiently conveys purpose, resource, key parameter, and return data. Every element earns its place with zero wasted words. The structure is front-loaded with the core action and progressively adds details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with no annotations and no output schema, the description provides adequate purpose and return data overview but lacks details on error cases, data freshness, or response format. It's minimally viable but could better address the gaps left by missing structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents both parameters. The description mentions NIP as the identifier and implies include_winning_buyers controls buyer data inclusion, but adds no additional semantic context beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Fetch a profile'), resource ('Polish tender contractor'), and key identifying attribute ('by its NIP'). It distinguishes this tool from siblings like get_buyer or get_tender by focusing on contractor profiles rather than buyers, categories, or tenders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing contractor profile data by NIP, but provides no explicit guidance on when to use this versus alternatives like search_entities or other get_* tools. It mentions what data is returned but doesn't specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_province_statsGet tender statistics by province or cityA
Retrieve aggregate tender statistics by Polish province (all 16 voivodeships) or drill down to a specific city (top buyers, top CPV categories). Without arguments returns the full province ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| province | No | Province code like 'PL14'. If omitted, returns totals for ALL provinces. | |
| city | No | If provided, returns top buyers and top CPV categories for this city instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool's statistical aggregation behavior and the hierarchical drill-down capability (province → city). However, it doesn't mention performance characteristics, data freshness, or potential limitations like result size constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly constructed sentences with zero waste: first establishes core purpose, second explains parameter hierarchy, third clarifies default behavior. Every sentence earns its place by adding distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only statistical tool with good schema coverage, the description provides adequate context about scope and behavior. The main gap is lack of output format information (no output schema), but the description compensates somewhat by specifying what statistics are returned (ranking, top buyers, top CPV categories).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds marginal value by explaining the hierarchical relationship between province and city parameters and clarifying the default behavior when no arguments are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and resource 'aggregate tender statistics', specifies geographic scope (Polish provinces/cities), and distinguishes from siblings by focusing on statistical aggregation rather than individual entity lookup or search operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use different parameter combinations (no arguments for full ranking, province for province-level, city for city-level details). However, it doesn't explicitly state when NOT to use this tool versus alternatives like get_category_stats or search_tenders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tenderGet full details of a public tenderA
Retrieve detailed information about a specific Polish public tender by its ID. Returns buyer, location, deadlines, estimated value, CPV codes, contractor (if awarded), notice type and a content excerpt. Optionally includes AI-generated summary points (requires ATLAS_API_KEY).
| Name | Required | Description | Default |
|---|---|---|---|
| tender_id | Yes | Tender ID in BZP format '2026/BZP 00202613' or dashed '2026-BZP-00202613'. TED IDs are also supported. | |
| include_ai_summary | No | If true and ATLAS_API_KEY is configured, attach AI-generated summary of the tender notice. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns (buyer, location, deadlines, etc.), mentions optional AI-generated summaries, and notes the ATLAS_API_KEY requirement for that feature. However, it doesn't address error conditions, rate limits, or authentication needs beyond the API key mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in two sentences: the first states the core purpose and return data, the second covers the optional feature. Every element serves a purpose with zero wasted words, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no annotations and no output schema, the description does a good job explaining what information is returned. It could be more complete by describing the response format or structure, but it adequately covers the tool's purpose and behavior given the context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents both parameters thoroughly. The description adds marginal value by mentioning the AI-generated summary feature in context, but doesn't provide additional parameter semantics beyond what's in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve detailed information'), resource ('Polish public tender'), and scope ('by its ID'). It distinguishes from siblings like get_buyer or search_tenders by focusing on full details for a single tender rather than entity-specific data or search functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to get full details of a specific tender by ID). It doesn't explicitly mention when not to use it or name alternatives, but the context implies this is for detailed retrieval rather than searching or getting partial data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_cpvSearch CPV codes by keywordA
Look up CPV (Common Procurement Vocabulary — EU procurement category) codes by Polish keyword. Use this before search_tenders to find the right CPV filter. Returns code, name, division, and historical tender count.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term for CPV (Common Procurement Vocabulary) codes — keyword in Polish, e.g. 'komputer', 'budowa drogi', 'usługi prawne' | |
| limit | No | Max results (1-30, default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the return format ('Returns code, name, division, and historical tender count') and implies a read-only lookup operation, though it doesn't mention potential limitations like rate limits or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured in three sentences: purpose, usage guidance, and return values, with zero wasted words. It's front-loaded with the core functionality and appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, no annotations, and no output schema, the description is largely complete. It covers purpose, usage, and return format, though it could benefit from mentioning any error conditions or the format of the historical tender count.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds minimal value beyond the schema by reinforcing the Polish keyword requirement and the purpose of finding CPV filters, but doesn't provide additional syntax or format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Look up CPV codes'), resource ('CPV codes'), and scope ('by Polish keyword'), distinguishing it from siblings like search_tenders by focusing on code lookup rather than tender search. It explicitly mentions the EU procurement category context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('Use this before search_tenders to find the right CPV filter') and distinguishes it from the sibling search_tenders tool, offering clear context for its application in a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entitiesSearch procuring entities or contractors by nameA
Search Polish public procurement entities (buyers / zamawiający) or contractors (wykonawcy) by name. Returns a list with NIP, location and volume. Useful to find the NIP for get_buyer / get_contractor tools.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Name (or fragment) of the entity to search, e.g. 'warszawa', 'gddkia', 'budimex' | |
| type | No | Limit to buyers (zamawiający), contractors (wykonawcy), or both. Default: all | |
| limit | No | Max results (1-30, default 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return format ('list with NIP, location and volume'), which is helpful, but lacks details on behavioral traits like pagination, rate limits, error handling, or authentication needs. It's adequate but has gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The first sentence states the purpose and output, the second provides usage guidance. It's front-loaded with essential information and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description does well by explaining the return format and usage context. However, it could improve by mentioning potential limitations (e.g., search scope, data freshness) or error cases. It's mostly complete but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema by mentioning 'name (or fragment)' for the query and hinting at the output fields, but doesn't provide additional syntax or format details. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('Polish public procurement entities or contractors'), specifies the search criteria ('by name'), and distinguishes it from siblings by explaining its role in finding NIPs for get_buyer/get_contractor tools. It's specific and avoids tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('Useful to find the NIP for get_buyer / get_contractor tools'), providing clear guidance on its purpose in the workflow and distinguishing it from sibling tools like get_buyer or get_contractor that require NIPs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersSearch Polish public tendersA
Search public procurement tenders from BZP (Biuletyn Zamówień Publicznych) and TED (Tenders Electronic Daily) via Atlas Przetargów. Returns a list with titles, buyers, locations, CPV codes, estimated values and deadlines. Use for queries like 'aktywne przetargi budowlane w Warszawie', 'zamówienia IT powyżej 500k PLN', 'co kupuje ZUS'.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Full-text search query (Polish terms work best), e.g. 'budowa drogi', 'komputer' | |
| cpv | No | CPV code prefix or full code. Examples: '45' (roboty budowlane), '72' (IT services), '45240000-1' | |
| city | No | City name, e.g. 'Warszawa', 'Kraków' | |
| province | No | Polish province code: PL02 dolnośląskie, PL04 kujawsko-pomorskie, PL06 lubelskie, PL08 lubuskie, PL10 łódzkie, PL12 małopolskie, PL14 mazowieckie, PL16 opolskie, PL18 podkarpackie, PL20 podlaskie, PL22 pomorskie, PL24 śląskie, PL26 świętokrzyskie, PL28 warmińsko-mazurskie, PL30 wielkopolskie, PL32 zachodniopomorskie | |
| buyerNip | No | NIP (tax ID) of the procuring entity (zamawiający) | |
| noticeType | No | ContractNotice = active tender; TenderResultNotice/ContractAwardNotice = results | |
| orderKind | No | Kind of procurement: works (roboty), supplies (dostawy), services (usługi) | |
| dateFrom | No | ISO date YYYY-MM-DD — filter publications from | |
| dateTo | No | ISO date YYYY-MM-DD — filter publications to | |
| valueMin | No | Minimum estimated value in PLN | |
| valueMax | No | Maximum estimated value in PLN | |
| sort | No | Sort order (default: newest) | |
| limit | No | Max results per page (1-50, default 20) | |
| page | No | Page number (default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the return format (list with titles, buyers, locations, etc.) and suggests Polish terms work best, but doesn't mention rate limits, authentication requirements, pagination behavior beyond parameters, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences: first states purpose and return format, second provides usage examples. Every word earns its place with zero waste, making it highly efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 14-parameter search tool with no annotations and no output schema, the description provides good purpose clarity and usage examples. However, it could better address behavioral aspects like result limitations, authentication needs, or error scenarios given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 14 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches public procurement tenders from specific sources (BZP and TED via Atlas Przetargów) and returns a list with specific fields. It distinguishes from siblings by focusing on search functionality rather than getting specific entities or statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides when to use this tool with concrete query examples ('aktywne przetargi budowlane w Warszawie', 'zamówienia IT powyżej 500k PLN', 'co kupuje ZUS'), giving clear context for appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
get_buyer - First observed
get_category_stats - First observed
get_contractor - First observed
get_province_stats - First observed
get_tender - First observed
search_cpv - First observed
search_entities - First observed
search_tenders
TDQS
Scored across 8 tools
Every tool has a clearly distinct purpose with no ambiguity. For example, get_buyer retrieves buyer profiles, get_tender fetches specific tender details, and search_tenders performs broader searches, each targeting different resources and actions. The descriptions explicitly differentiate their functions, making misselection unlikely.
All tool names follow a consistent verb_noun pattern, such as get_buyer, search_tenders, and get_category_stats. This uniformity enhances readability and predictability, with no deviations in naming conventions across the set.
With 8 tools, the count is well-scoped for the server's purpose of Polish public procurement analysis. Each tool earns its place by covering distinct aspects like entity profiles, tender searches, and statistical data, avoiding both thinness and overload.
The tool set provides complete coverage for the domain, including CRUD-like operations such as fetching entities and tenders, searching with filters, and retrieving statistical insights. There are no obvious gaps, as it supports due diligence, market analysis, and competitive benchmarking workflows.
Maintenance
Related MCP Connectors
Polish public tenders (przetargi): hybrid search, AI SWZ summaries, buyers, contractors, CPV stats.
141Polish public procurement for AI agents: BZP and TED tenders, awards, buyers and contractors.
91EU tenders and grant calls, matched to your company and qualified, inside the AI you already use
Search EU public tenders across TED and 8 national portals. Monitor, match, and analyse procurement.
Related MCP Servers
- AlicenseAqualityBmaintenanceExposes French and EU public procurement data (BOAMP + TED) as MCP tools for AI agents, enabling search for tenders, awards, and winner intelligence via typed filters.4226 PyPIMIT
- AlicenseAqualityCmaintenanceEnables users to search and analyze Korean public procurement IT bid announcements, including full bid opening results, through natural language conversation with Claude.81MIT
- AlicenseNot gradedqualityCmaintenanceFind, analyze, and score Polish public tenders (BZP): parsed requirements, deadlines, certificates, and bid-fit scoring against your company profile.6 npmMIT
- FlicenseAqualityCmaintenanceEnables searching and analyzing Polish public procurement tenders from BZP and TED, including filtering, tender details and timelines, offers and contract values, buyer/contractor profiles, CPV code lookup, and regional statistics, with optional AI-summary endpoints.121-