Skip to main content
Glama
atlasprzetargow

Atlas Przetargów

Atlas Przetargów — MCP Server

npm version License: MIT

The first MCP server for Polish public procurement data. Query 800 000+ Polish public tenders (BZP + TED), buyer/contractor profiles, and category statistics directly from Claude Desktop, Cursor, Continue, Cline, or any MCP-compatible AI client.

Powered by Atlas Przetargów — the Polish public procurement search and analytics platform.


What is this?

The Model Context Protocol (MCP) lets AI assistants connect to external tools and data. This server exposes the Atlas Przetargów API to any MCP client, giving your AI assistant the ability to:

  • Search Polish public tenders by keyword, CPV category, location, value, or deadline

  • Get full tender details including buyer, CPV codes, estimated value, deadlines, optional AI-generated summary

  • Profile any procuring entity (zamawiający) by NIP — including who wins their contracts most often

  • Profile any contractor (wykonawca) by NIP — including which buyers they win from

  • Analyze market statistics for any CPV category (count, median value, avg offers, avg deadline)

  • Compare provinces and cities in procurement volume

  • Access a glossary of 90+ Polish public procurement terms

  • Use guided workflows (prompts) for tender analysis, buyer due diligence, and opportunity discovery


Related MCP server: Rejestr.io MCP Server

Quick start (Claude Desktop)

Option A — via npx (recommended, no install)

Edit your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add:

{
  "mcpServers": {
    "atlas-przetargow": {
      "command": "npx",
      "args": ["-y", "@atlasprzetargow/mcp"]
    }
  }
}

Restart Claude Desktop. The Atlas tools will appear in the tools panel.

Option B — global install

npm install -g @atlasprzetargow/mcp

Then in claude_desktop_config.json:

{
  "mcpServers": {
    "atlas-przetargow": {
      "command": "atlas-przetargow-mcp"
    }
  }
}

Usage examples (in Claude Desktop)

"Find active construction tenders in Warsaw with budget 500k–5M PLN and show me the top 5"

"Use the buyer-due-diligence prompt for NIP 5252248481" (→ runs due diligence on the City of Warsaw as a procuring entity)

"What's the median value of IT tenders in Poland last year?"

"Look up tender 2026/BZP 00202613 and analyze its key terms and risks"

"Find me the CPV code for medical equipment and show active tenders"

"Who most frequently wins contracts from GDDKiA (National Roads Authority)?"


Tools

Tool

Description

search_tenders

Search tenders with filters (query, CPV, city, province, value range, dates, sort)

get_tender

Full details of a tender by ID, optionally with AI summary

get_buyer

Profile of a procuring entity by NIP + top winning contractors

get_contractor

Profile of a contractor by NIP + top buyers they win from

search_entities

Find buyers / contractors by name (returns NIP for other tools)

get_category_stats

Aggregate stats for a CPV category (count, median, avg offers, avg deadline)

get_province_stats

Statistics by province or city (top buyers, top CPV)

search_cpv

Look up CPV codes by Polish keyword

Resources

URI

Description

atlas://glossary

Index of 90+ Polish public procurement terms

atlas://glossary/{slug}

Full definition of a specific term

atlas://knowledge

Index of long-form knowledge base articles

atlas://knowledge/{slug}

Full knowledge base article

Prompts

Prompt

Description

analyze-tender

Comprehensive analysis of a tender notice: scope, value, deadlines, risks, recommendation

buyer-due-diligence

Due diligence on a procuring entity: purchase profile, contractor network, red flags

find-opportunities

Find active tender opportunities matching a CPV + location + value profile


Configuration (environment variables)

All optional. Defaults are safe.

Variable

Default

Description

ATLAS_API_BASE

https://atlasprzetargow.pl

API root. Useful for staging or self-hosted Atlas

ATLAS_API_KEY

(none)

Optional key for /api/llm/* endpoints (AI summaries). Without it, the server still works with full public data

ATLAS_TIMEOUT_MS

20000

Request timeout

ATLAS_MAX_RETRIES

2

Retry count for 429 / 5xx / timeouts

Pass them via your MCP client config:

{
  "mcpServers": {
    "atlas-przetargow": {
      "command": "npx",
      "args": ["-y", "@atlasprzetargow/mcp"],
      "env": {
        "ATLAS_API_KEY": "your-optional-key-here"
      }
    }
  }
}

Polish public procurement — quick reference

  • BZP (Biuletyn Zamówień Publicznych) — Polish national tender registry. IDs look like 2026/BZP 00202613.

  • TED (Tenders Electronic Daily) — EU-wide tender registry, required for tenders above EU thresholds.

  • CPV (Common Procurement Vocabulary) — 8-digit category codes, e.g. 45000000 = construction, 72000000 = IT.

  • NIP — Polish 10-digit tax ID, used to identify every buyer / contractor.

  • Province codes: 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

  • Notice types:

    • ContractNotice — active tender, open for bids

    • TenderResultNotice / ContractAwardNotice — results (who won, at what price)

    • CompetitionNotice, ConcessionNotice — specialized notices


Development

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

Rate limits & fair use

Atlas Przetargów API has a per-IP rate limit (30 req/min for LLM endpoints, more for public ones). The MCP server automatically retries 429 responses with exponential backoff.

If you hit rate limits frequently (e.g. in production automations), please reach out via atlasprzetargow.pl/kontakt for higher-tier access.


License

MIT © Atlas Przetargów

Data source attribution

All tender data is sourced from:

  • BZP (Biuletyn Zamówień Publicznych) — public registry of the Polish Public Procurement Office

  • TED (Tenders Electronic Daily) — EU public procurement registry

Processed, enriched, and served by Atlas Przetargów.


Available Tools

8 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nipYesPolish tax ID (NIP) of the procuring entity — 10 digits
include_winning_contractorsNoIf true, also fetch the list of contractors that most frequently win this buyer's tenders. Default: true.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cpvYesCPV code or prefix, e.g. '45' (construction), '72' (IT), '45240000-1'
windowNoStatistics window: month=30d, quarter=90d, year=365d. Default: year

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nipYesPolish tax ID (NIP) of the contractor — 10 digits
include_winning_buyersNoIf true, also fetch the list of buyers this contractor most frequently wins tenders from. Default: true.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
provinceNoProvince code like 'PL14'. If omitted, returns totals for ALL provinces.
cityNoIf provided, returns top buyers and top CPV categories for this city instead.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
tender_idYesTender ID in BZP format '2026/BZP 00202613' or dashed '2026-BZP-00202613'. TED IDs are also supported.
include_ai_summaryNoIf true and ATLAS_API_KEY is configured, attach AI-generated summary of the tender notice. Default: false.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch term for CPV (Common Procurement Vocabulary) codes — keyword in Polish, e.g. 'komputer', 'budowa drogi', 'usługi prawne'
limitNoMax results (1-30, default 10)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesName (or fragment) of the entity to search, e.g. 'warszawa', 'gddkia', 'budimex'
typeNoLimit to buyers (zamawiający), contractors (wykonawcy), or both. Default: all
limitNoMax results (1-30, default 10)

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFull-text search query (Polish terms work best), e.g. 'budowa drogi', 'komputer'
cpvNoCPV code prefix or full code. Examples: '45' (roboty budowlane), '72' (IT services), '45240000-1'
cityNoCity name, e.g. 'Warszawa', 'Kraków'
provinceNoPolish 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
buyerNipNoNIP (tax ID) of the procuring entity (zamawiający)
noticeTypeNoContractNotice = active tender; TenderResultNotice/ContractAwardNotice = results
orderKindNoKind of procurement: works (roboty), supplies (dostawy), services (usługi)
dateFromNoISO date YYYY-MM-DD — filter publications from
dateToNoISO date YYYY-MM-DD — filter publications to
valueMinNoMinimum estimated value in PLN
valueMaxNoMaximum estimated value in PLN
sortNoSort order (default: newest)
limitNoMax results per page (1-50, default 20)
pageNoPage number (default 1)

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 8 tool updatesv0.1.0
    • First observedget_buyer
    • First observedget_category_stats
    • First observedget_contractor
    • First observedget_province_stats
    • First observedget_tender
    • First observedsearch_cpv
    • First observedsearch_entities
    • First observedsearch_tenders

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Exposes 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.
    4
    141 PyPI
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Poland's largest business registry database, enabling company search, beneficiary checks, and financial document retrieval via natural language.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables search and analysis of European public procurement tenders, including EU above-threshold (TED) and below-threshold from 11 national sources, with hybrid search and filtering.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables users to search and analyze Korean public procurement IT bid announcements, including full bid opening results, through natural language conversation with Claude.
    8
    1
    MIT