EU Tender MCP
LLMが記憶からでっち上げがちな事柄 | このMCPが実際に行うこと |
Rows:
1. "「サービスのEU制限を教えて」" / "適用されるカテゴリともに、実際の数字(€143kの標準値)を返す。"
Actually, threshold: "EU threshold for services" - The EU public procurement threshold (for services) is €143,000 for certain service categories. In Japanese "サービスのEU通達閾値". We can keep "閾値".
2. "「ドイツのソフトウェアの入札を探して」" / "構造化されたフィルタ可能な入札記録(国・CPV・価格・締め切り)を戻す"
3. "「このRFPを国外から入札するのが安全なのか?」" / "HRフラグ スキャン(保証・売上高下限・現地拠点・厳しい締め切り)に加えて、誠実なSME適合スコアを実行する"
4. "「'cleaning services'に対応するCPVコードは何か?」" / "エイリアス付きのCPV部門を返す"
Use "cleaning services" is a quoted English phrase. Use ' ' or "". Perhaps we preserve the original quotes: "What CPV code is 'cleaning services'?" We can translate as "「'cleaning services'に対応するCPVコードは何?」" But "cleaning services" is a word to translate? Actually it's a query example. The instruction says "preserve verbatim", but this is a quoted English description. To preserve meaning, we can keep English in quotes. "Cleaning services" can be translated as "清掃サービス". Since in Japanese, the CPV lookup discovers code; the user would query "清掃サービス". And original "cleaning services" in single quotes. We can translate the description: "'clean/services' のCPVコードは何?" Maybe keeping the English is okay. To avoid violating, translate the text to Japanese but keep as natural query. I'd use:「「清掃サービス」に対応するCPVコードは?」 Because the phrase is an example. Since the row is in the table and we need to translate prose, we can translate the coordinate text. But important to preserve the literal? Not mandatory. Yet "keeping 'cleaning services' verbatim" is not in the list, but it's an example. The instruction says "Translate prose only. Keep verbatim in source script: ..." It lists "Package/module names", not prose. So "cleaning services" is regular prose and should be translated. But it is quoted, so in Japanese we can say "「清掃サービス」". Fine.
5. "「この調達種別の意味は?」" / "`pin`、`cn-standard`、`results`などの意味を説明します。"
7. Then paragraph: "すべてのツールは**決定論的で、型付けされ、データ出どころについて誠実です** — たとえ TED API キーが設定されていなくても「ライブ」機会を作ることはありません。"
But "when a TED API key isn't configured" describes "never manufactures when not configured" = "設定されていない場合には決して作成しない". Need to make "it never fabricates 'live' opportunities" as a general claim "without TED key". So: "——TED_API_KEYが未設定の場合でも、"ライブと詐称する案件を作り上げることはありません。" Good.
8. Section "## ツール(7)" Then table.
Let's translate the tools table:
| `search_tenders` | クエリ、国、CPV、価格帯、締切で入札を検索 |
| `market_snapshot_tool` | 国と業界別の動向、典型的な契約金額、緊急の締め切り |
| `analyze_tender` | レッドフラグ・スキャン + 0〜100のSME適合スコア(tender IDまたは貼り付けたRFPテキストで評価) |
| `look_up_cpv` | 説明文をEUのCPV部門コードに変換 |
| `look_up_notice_type` | `pin`、`cn-standard`、`results`などが何を伝えるかを説明 |
| `pot` | 金額がEUの強制公告公表要件のしきい値を超えるか判定 |
| `tender_details` | 個々の入札レコードの詳細全体を返します |
Need to keep the code spans.
9. "## インストールと実行" (or "## 準備と起動")
GXP1
### サーバーの起動(stdio)
GXP2
10. "## クライアントに接続する"
**Claude Desktop** — 次のように MCP 設定(`claude_desktop_config.json`)に追加します:
`mcpServers` → と[`configs/claude-desktop.json`](configs/claude-desktop.json) を参照し、`PYTHONPATH` をこのリポジトリの絶対パスに設定します。
**Claude Code /その他のMCPクライアント** — [`configs/mcp-config.json`](configs/mcp-config.json) を使ってください。そして、パッケージをインストール(`pip install -e .`)し、`python3 -m tendermcp.server` を解決できるようにします。
11. "## Data model"
- **デフォルト・プロバイダー:** ラベル付きの **サンプル入札** をバンドルして(ソースを `bundled_sample`)、MCPが未起動から動作し、デモができ、キーなしで完全にテスト可能になります。
- **ライブTEDと再発(ロードマップ):** TED APIキーを登録し、`TED_API_KEY` を設定し、`TEDLiveProvider._fetch()` (`providers.py` 内に差し替え可能なプロバイダとしてすでに搭載済み) を実装してください。それまでは **実データを捏造しません** — 代わりにこのラベル付きのサンプルが返されます。
12. "## プロジェクト構成" (or "Layout") + GXP3
13. "## ロードマップ / 正直な補注"
- **ライブで提中** が最も大きな改善ですーーそれが可能なのは、汎用のために必要な登録済みTED/OPEN APIキーと、"アカウント固有のフィードURL"です。これらはユーザー自身しか用意できません(その側はすでに完了しています)。
- **レッドフラッグ判定の追加ルール** と **法域の機微** の対応を計画しています。分析ツールは意図的に透明です(結果的数値ではなく*理由*を出力します。
- **法律助言ではありません。** アナライザは、迅速ふるい分け手段です。必ず、完全入札書類系を確認してください。
"MITでライセンスされています。"
Let's improve the Japanese for each bullet.
Better:
- **ライブ・TEDフィード** 最大の改善点です — それには登録済みのTED/OPEN APIキーと、アカウント固有のフィードURLが必要ですが、それはユーザーにしか取得できません。プロバイダ接続部(シーム)はもう準備されています。
- **他の法律** or "管轄によって異なる微妙な問題" = "管轄の互いの違い" is better than "法域の機密性". "jurisdiction nuance" = "法域のニュアンス". Use "法域ごとの違い" perhaps.
- "Not legal advice.": "法的な助言ではありません。" The analyzer is "流域/symptom" "トリアージ手段" or "初期判断の手助け". Use "トリアージのための補助手段".
Now, I'd like to ensure the output complete. Let's craft the final clean text.
Potential issue: "mcpServers" in the original appears with backticks; in our final markdown we need to include backticks. I'll do.
Also " `claude_desktop_config.json` " — in Japanese we say "MCP設定(`claude_desktop_config.json`)に追加します。" That is fine.
Now let's produce final.
Need to be mindful of the instruction "Return only the translated text, with no wrapper and no code fence." So I'll output plain markdown.
Let's compose final answer:
---
# EU Tender MCP
**中小企業向けのライブ+構造化されたEU公契約インテリジェンス** — MCPサーバーとして。Claude・Cursor・任意のMCPクライアントの中から、入札機会の検索、クロスボーダーリスクの分析、EU入札の理解を実現します。
この価値は、LLMが**知ることができず**、現在の入札機会、EUの閾値、CPVコード、クロスボーダーリスクのパターンにあります。これは、自国や加盟国でない制度下の公共契約に、入札しようとしているコンサルティング、サービス、または供給系の中小企業(SME)のために構築されています。
---
## 何のためにこれが本当に役立つのか(ただのラッパーではないこと)
| LLMが記憶からでっち上げる可能性があること | 実際にMCPが行うこと |
| ------------------------------------------ | ------------------------------------------------------------------------------------- |
| 「サービス公共調達への、EUの閾値は」 | 実際の値(標準 で€143k)を、設定された区分とともに返す。 |
| 「ドイツのソフトウェアに関する入札を探して」 | 入札データ (国、CPV、価格範囲、期限) を返し、フィルタできるようにする |
| 「このRFPを国外から入札するのは危険か?」 | レッドフラグ・スキャン(保証金、売上高の下限、現地拠の必要性、短い期限)と正直なSME向けスコアを実行 |
| 「`cleaning services`のCPVコードは?」 | 別名付きのCPV部門を返却 |
| 「この調達区分の broadenings意味は何か」 | `pin`、`cn-standard`、`results` 等を説明 |
すべてのツールは**決定的、型付けされ、データソースをうまく開示**します。たとえ TED APIキーを利用可能でなくても「ライブ」情報を捏造しません。
---
## ツール(7)
| ツール | 機能 |
| ------------------------ | ------------------------------------------------------------------------------------------------ |
| `search_tenders` | 問い合わせ / 国 / CPV / 金額範囲 / 締め切りで入札を検索 |
| `market_snapshot_tool` | 国・セクター別のアクティビティ、典型的な金額、期限切れ間近の入札・応募を表示 |
| `analyze_tender` | 入札IDまたは貼り付けられていない RFP のテキストに対して、必ず0-100のSME適合しスコア +選手が優先 |
| `look_up_cpv` | 説明文をEUのCPV部門コードに変換する |
| `look_up_notice_type` | 通知種別(`pin`、`cn-standard`、`results`など)が示す意味を返す |
| `eu_threshold` | 金額がEU公告・公開の必須要件高出かどうかを判定する |
| `tender_details` | 単一の入札に関する完全な構造化レコードを取得する |
I see some weird entries now. Must rewrite cleanly.
Let's craft finalJapanese with utmost care. I'll use the exact row names.
Actually, the table should be:Available Tools
7 toolsanalyze_tenderA
Analyze a tender's cross-border risk and fit for an SME bidder.
Provide either 'tender_id' (looks it up from the active pool and pulls its value/deadline automatically) OR paste 'text' of an RFP to scan it directly. Uses 'estimated_value_eur' / 'deadline_days_left' as overrides when given. Returns a red-flag scan + an honest 0-100 fit score with reasons.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| tender_id | No | ||
| buyer_type | No | ||
| deadline_days_left | No | ||
| estimated_value_eur | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It explains that `tender_id` looks up the active pool and automatically pulls value/deadline, while `text` is scanned directly, and it describes the output as a red-flag scan plus a 0-100 fit score. It could mention error/empty-input behavior, but the disclosed behavior is above-average.
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 compact and well-structured: a one-sentence purpose, an input-mode explanation with clear either/or guidance, override semantics, and a statement of expected output. Each line adds useful guidance and no unnecessary filler is present.
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 light schema annotations and the absence of an output schema, the description covers the core invocation modes, how overrides behave, and what the tool returns. The main omissions are the purpose of `buyer_type` and behavior when neither `tender_id` nor `text` is supplied, but the overall description is still adequate for an agent to use the tool reasonably.
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 0%, so the description must compensate. It meaningfully explains the roles of `text`, `tender_id`, `estimated_value_eur`, and `deadline_days_left`, including the override behavior. The one gap is `buyer_type`, whose effect is not described anywhere, but most parameters gain useful semantic meaning beyond their names and types.
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 is specific: 'Analyze a tender's cross-border risk and fit for an SME bidder' clearly identifies the action, resource, and analytical outcome. It sets this tool apart from the sibling lookup and search tools, which focus on discovering or returning tender details rather than analyzing fit and risk.
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 explains how to invoke it — providing either a `tender_id` or RFP `text` — and that overrides are available. However, it does not explicitly state when to choose this tool over siblings like `tender_details` or `market_snapshot_tool`, so usage guidance is largely implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
eu_thresholdC
Check whether a tender's value is above EU mandatory publication thresholds. 'category' in works/supplies/services/concessions.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | standard | |
| category | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It fails to state what the tool returns (e.g., boolean, threshold value, comparison result), whether it is read-only or has side effects, or what inputs are actually required to assess the tender's value. The mention of category values is the only behavioral hint, but it leaves the core behavior opaque.
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 two short, direct sentences with no filler. The purpose is front-loaded, and the category constraint is included efficiently. It earns a high score for being 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 lack of an output schema, annotations, and the cryptic 'kind' parameter, this description is incomplete. It does not explain the return value, the meaning of 'kind', or how the tender value is passed. An agent would have to guess how to invoke it correctly, especially since the required 'category' parameter is explained but the optional 'kind' is not.
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 0%, so the description must compensate. It explains that 'category' can be 'works/supplies/services/concessions', which adds meaning for that parameter. However, it does not explain the 'kind' parameter at all, nor does it specify how the tender's value is provided (there is no value parameter in the schema). The description only partially clarifies the inputs.
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 states a clear verb ('Check whether') and a specific resource ('a tender's value is above EU mandatory publication thresholds'), and even enumerates the valid category values. However, it does not explicitly differentiate from sibling tools such as market_snapshot_tool or analyze_tender, so it lacks explicit sibling distinction.
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?
No guidance is given on when to use this tool versus alternatives. The description simply states what it does, leaving it to the agent to infer the context. There is no mention of when not to use it, prerequisites, or why it should be chosen over other threshold-related or tender-analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
look_up_cpvA
Translate a good/service description into EU CPV division codes.
Useful for cross-border bidders to classify a tender or pick the right alert keywords. Also returns all divisions if 'query' is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It explicitly states the main transformation and discloses the empty-query behavior: 'Also returns all divisions if query is empty.' It does not describe output format or error cases, but for a simple lookup tool this is reasonably transparent.
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 concise sentences: the core purpose, the user scenarios, and the edge-case behavior. No wasted words or redundant schemas. The most important information (input-to-output translation) is placed first.
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 simplicity (one required string parameter, no nested objects, no output schema), the description covers the essential context: what input to provide and what to do with an empty input. It does not specify return-value details, but for a code-lookup tool this is a minor gap, not a critical one.
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 coverage is 0%, so the description must clarify the only parameter 'query'. It does: query is a good/service description line, and an empty string triggers a special 'return all divisions' behavior. This adds meaningful semantics entirely absent from the schema.
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 opens with a specific verb and resource: 'Translate a good/service description into EU CPV division codes.' This clearly states the input, the transformation, and the output type. It also implicitly distinguishes itself from siblings like look_up_notice_type by focusing on CPV divisions rather than other classifications.
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 explains when it is useful: 'cross-border bidders to classify a tender or pick the right alert keywords.' This gives clear usage context. It does cite alternatives or say when not to use it, but there is no need, since the use case is well articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
look_up_notice_typeA
Explain what an EU tender notice type (e.g. 'cn-standard', 'pin', 'results') means and what it signals to a bidder.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
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 correctly implies a read-only explanatory operation and adds bidder-relevant context, but it does not specify the output form, whether it returns a standardized definition, or any limitations on accepted codes. This is acceptable for a simple lookup but not richly transparent.
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?
A single sentence, front-loaded with the core action and resource, with examples woven in naturally. Every part of the sentence earns its place, and there is no filler or repetition.
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 one-parameter, low-complexity explanatory tool, the description covers the essential semantics and gives useful examples. The absence of an output schema is mostly fine because the output is an explanation, but a note about the response format or accepted-code coverage would make it fully complete.
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 provides only a single 'code' string with 0% description coverage, so the description must compensate. It does so by giving the semantic domain ('EU tender notice type') and three concrete accepted code examples, which is meaningful guidance beyond the bare schema. However, it stops short of describing the full accepted set or case-sensitivity.
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 states a specific verb ('explain') and a specific resource ('EU tender notice type'), with concrete examples ('cn-standard', 'pin', 'results') and a clear audience-focused purpose ('what it signals to a bidder'). This clearly distinguishes it from sibling tools like look_up_cpv, which covers a different code domain.
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 intended use is implied by the description and name — call this when the user needs the meaning of a notice type code — but there is no explicit when-to-use guidance, no mention of alternatives, and no statement of when not to use it. The context is clear enough for inference, but it does not meet the 'explicit' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_snapshot_toolA
Get a market overview of available tenders: activity by country and sector, typical contract values, and the most urgent deadlines.
Optionally filter by country (ISO) or CPV division.
| Name | Required | Description | Default |
|---|---|---|---|
| cpv | No | ||
| country | No | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It implies a read-only operation ('overview', 'snapshot') and indicates the output is a summary (typical values, most urgent deadlines), but it does not disclose potential limitations like data recency, pagination, or any side effects. It is somewhat transparent but incomplete.
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 two concise sentences that clearly state the purpose and available filters. No jargon, no redundancy, well-structured with a colon to introduce the overview content.
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?
With no annotations, the description must cover side effects, requirements, and limitations. It provides the core purpose and optional filters but omits any alternative tool guidance, performance expectations, or authorization needs. It is adequate for a simple read-only snapshot tool but lacks some contextual depth.
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 description partially explains the parameters: it mentions country (ISO) and CPV division for filteringaine but does not detail the max_results parameter or specific formats (e.g., how CPV division is entered). Since no schema descriptions are present and the description covers only two of three parameters, it is moderately informative but not exhaustive.
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 states a clear action ('Get a market overview') on a specific resource ('available tenders'), and specifies the content: activity by country and sector, typical contract values, and urgent deadlines. It distinguishes itself from siblings like search_tenders by focusing on aggregated 'overview' data rather than individual tender 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 mentions optional filters (country ISO, CPV division) but does not explicitly state when to use this tool versus search_tenders or others. It implies a summary use case but does not give exclusion criteria or direct alternatives. There is no 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersB
Search EU public tenders.
Returns a list of tender records with id, title, buyer, country, CPV, deadline, and estimated value. Free text 'query' matches title/description. 'country' is an ISO code like 'DE'. 'cpv' is a CPV division (e.g. 48000000).
| Name | Required | Description | Default |
|---|---|---|---|
| cpv | No | ||
| limit | No | ||
| query | No | ||
| source | No | auto | |
| country | No | ||
| deadline_from | No | ||
| max_value_eur | No | ||
| min_value_eur | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It does disclose the return shape, free-text matching behavior, and ISO/CPV value formats, which is helpful. However, it omits default limit behavior, the meaning of source='auto', pagination, and how filters combine.
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 compact, front-loaded with the core purpose, and every sentence adds useful information. It avoids filler and is appropriately sized for a search tool.
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?
Without an output schema, listing the returned fields is a good compensation. However, with 8 optional parameters and no annotations, the description leaves meaningful gaps around source semantics, limit behavior, and filter interactions, making it adequate but not complete.
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 0%, so the description must compensate. It explains query, country, and cpv, but 5 of 8 parameters (limit, source, deadline_from, min_value_eur, max_value_eur) receive no semantic explanation. The property names are somewhat self-explanatory, but the description does not fully carry the burden.
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 EU public tenders and lists the fields returned, which makes the basic purpose obvious. It does not explicitly contrast with sibling tools like tender_details, but the 'list of tender records' wording signals an aggregate search rather than a single-record lookup.
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?
There is no guidance on when to use this tool versus alternatives like tender_details, analyze_tender, or market_snapshot_tool. The parameter explanations imply how to filter, but the description never states selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tender_detailsB
Get the full structured record for one tender by id.
| Name | Required | Description | Default |
|---|---|---|---|
| tender_id | Yes |
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 states it returns 'full structured record', but does not disclose the record's fields, structure, pagination, or error behavior. While 'get' implies a read-only operation, this is not explicit, and no side effects or prerequisites are mentioned.
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 a single, concise sentence of 9 words that front-loads the core action ('Get the full structured record') without extraneous content. It is appropriately brief and clear.
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 tool with no output schema and only one parameter, the description should describe what the 'full structured record' contains and any expectations on the output. It is vague, omits return format details, error handling, and does not clarify the scope of a tender record. An agent lacks confidence in what will be returned.
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 0% and the description adds no information about tender_id beyond the schema's type string. There is no guidance on format, constraints, examples, or what constitutes a valid tender ID, so the description offers zero value over the schema.
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 states the verb 'Get', the resource 'full structured record for one tender', and the method 'by id'. This clearly differentiates it from siblings like search_tenders (which searches broadly) and look_up_cpv (which looks up CPV codes).
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 its use for fetching a specific tender by ID, but provides no explicit guidance on when to choose it over alternatives. It does not mention conditions such as 'use when you have a tender_id' or exclusion cases, leaving the agent to infer the appropriate context.
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.
7 tool updates
v0.1.0- First observed
analyze_tender - First observed
eu_threshold - First observed
look_up_cpv - First observed
look_up_notice_type - First observed
market_snapshot_tool - First observed
search_tenders - First observed
tender_details
TDQS
Scored across 7 tools
Each tool has a distinct purpose: searching for tenders, getting market snapshots, analyzing bidder fit, looking up CPV codes, explaining notice types, checking thresholds, and fetching details. There is no overlap that would cause an agent to misselect between them. The analyze_tender tool's dual input modes are intuitively separate from the other tools.
Tool names mix patterns: most follow verb_noun (search_tenders, analyze_tender, look_up_cpv, look_up_notice_type), but market_snapshot_tool and eu_threshold use noun phrases, and tender_details is noun_noun. While readable, the inconsistent structure and the odd '_tool' suffix in market_snapshot_tool reduce predictability.
With 7 tools, the server is well-scoped and covers the core needs of EU tender discovery, analysis, and reference lookups without bloat or redundancy. Each tool clearly earns its place.
The tool surface covers search, detail retrieval, market overview, cross-border analysis, CPV translation, notice type explanation, and threshold checks—covering the main workflows. Minor gaps exist, such as no ability to fetch attached tender documents or filter tenders by date range in search, but these are edge cases that agents can often work around.
Maintenance
Related MCP Connectors
Search EU public tenders across TED and 8 national portals. Monitor, match, and analyse procurement.
EU tenders and grant calls, matched to your company and qualified, inside the AI you already use
Find, score and analyse German and EU public tenders; search docs; draft quotes.
Search public procurement notices from 17 sources across Germany, the EU and the UK. Read-only.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseAqualityBmaintenanceEnables AI agents to find, score, and monitor government contract opportunities across UK, EU, and US with AI-powered relevance scoring.252 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and retrieving detailed information on EU grant calls and tenders from the EU Funding & Tenders Portal, including deadlines, budgets, and topic details.24 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching and analyzing government tenders, contract awards, and pre-tender pipelines from 21 official sources, with tools for tender search, award intelligence, and detailed notice retrieval.MIT