About tenderapi-mcp
tenderapi-mcp wraps TenderAPI's French BOAMP and EU TED public procurement data as tools for AI agents to search tenders and awards. It offers a keyless hosted endpoint as well as local installation with the full toolset.
Key features
- 01Search BOAMP and TED tenders
- 02Fetch tender details by ID
- 03Search and fetch award notices
- 04Aggregate statistics on contract winners
- 05Manage alerts for new tenders
Use cases
- 01Filter tenders by region, budget, or deadline
- 02Inspect an individual tender or award
- 03Compare award winners by category or region
- 04Set email or webhook alerts for new tenders
MCP support
Exposes TenderAPI tools for tenders, awards, winner statistics, and alert profiles to MCP clients. The hosted endpoint is keyless but limited; the local server requires an API key.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://tenderapi.fr/mcpclaude mcp add --transport http idnsidns-tenderapi https://tenderapi.fr/mcp{"mcpServers":{"idnsidns-tenderapi":{"type":"http","url":"https://tenderapi.fr/mcp"}}}Open in Cursor{"servers":{"idnsidns-tenderapi":{"type":"http","url":"https://tenderapi.fr/mcp"}}}Open in VS Code{"mcpServers":{"idnsidns-tenderapi":{"type":"http","url":"https://tenderapi.fr/mcp"}}}{"mcpServers":{"idnsidns-tenderapi":{"serverUrl":"https://tenderapi.fr/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
3| Parameter | Type | Required | Description |
|---|---|---|---|
| cpv | any | No | Exact 8-digit CPV code, e.g. '72000000' for IT services. About 40% of BOAMP notices have no CPV: a CPV-only filter excludes them. |
| page | integer | No | Page number, starting at 1. |
| sort | any | No | 'date' (reverse chronological, default), 'relevance' (BM25 ranking), or 'deadline' (nearest deadline first, notices without a deadline last). 'relevance' only makes sense with a keyword and is rejected without one. Combine 'deadline' with status='open' or deadline_after; otherwise the list starts with notices that closed years ago. |
| region | any | No | French region slug, e.g. 'bretagne', 'ile-de-france', 'occitanie'. An unknown value returns an error suggesting the closest slug. |
| source | any | No | 'boamp' (French notices) or 'ted' (European notices). If omitted, searches both. |
| status | any | No | 'open' (deadline has not passed, evaluated at query time) or 'closed'. ⚠️ WITHOUT this filter, the search covers the entire collection since 2015, including closed notices (~2.9 million): set 'open' if you are looking for notices that can still be responded to. |
| country | any | No | 2-letter ISO country code, e.g. 'FR', 'DE', 'ES'. Useful for keeping only French notices ('FR') or targeting a country in the TED corpus. |
| keyword | any | No | Full-text search on title and description, accent-insensitive. ALL words must appear in the same notice: search for one word first, then refine. FTS5's OR operator is supported, e.g. 'BIM OR "maquette numerique"'. |
| page_size | integer | No | Number of notices per page, 10 by default, capped at 20 for anonymous access. A notice is about 1,300 characters; raise this to 20 only if you plan to read them all. |
| budget_max | any | No | Maximum amount in euros. |
| budget_min | any | No | Minimum amount in euros. Notices with no reported budget are excluded unless include_null_budget=true. |
| cpv_family | any | No | 2-digit CPV prefix, e.g. '72' = all IT, '45' = works. |
| department | any | No | Department code, e.g. '35', '2A', '974'. Multiple values separated by commas. |
| buyer_siret | any | No | Buyer's SIRET, exactly 14 digits (the establishment, not the company). |
| descripteur | any | No | BOAMP descriptor code (DILA nomenclature), an alternative to CPV on the French side. |
| buyer_keyword | any | No | Fragment of the buyer's name, at least 3 characters, e.g. 'metropole', 'CHU'. |
| contract_type | any | No | 'services', 'works' or 'supplies'. The French forms 'travaux' and 'fournitures' are also accepted as aliases. |
| deadline_after | any | No | Submission deadline later than this ISO date (AAAA-MM-JJ). |
| procedure_type | any | No | Procedure type, e.g. 'open', 'restricted', 'negotiated'. An unknown value returns an error listing the accepted values. |
| deadline_before | any | No | Submission deadline earlier than this ISO date (AAAA-MM-JJ). |
| published_after | any | No | Published after this ISO date (AAAA-MM-JJ). This is the filter for daily monitoring. |
| include_planning | boolean | No | Include prior information notices (markets merely planned, not yet open). Excluded by default. |
| published_before | any | No | Published before this ISO date (AAAA-MM-JJ). |
| include_null_budget | boolean | No | Keep notices whose budget is not specified despite a budget filter. Many BOAMP notices do not announce an amount. |
| include_null_deadline | boolean | No | Keep notices without a deadline despite a deadline filter. Otherwise, a deadline_* filter silently excludes them. |
Details
From the project READMETenderAPI MCP server
Expose TenderAPI (French BOAMP + EU TED public procurement data) as MCP tools for AI agents (Claude Desktop, Cursor, Continue, Zed, etc.).
A thin wrapper over the public REST API at https://tenderapi.fr.
Coverage: BOAMP (France) since March 2015, and TED for FR/DE/IT/ES/UK since 2015 (legacy XML format until end 2023, then eForms), refreshed daily.
Two ways to use it
1. Hosted server — no install, no key
The fastest way to try it. Point any MCP client at the hosted endpoint:
https://tenderapi.fr/mcp
Claude Desktop / Claude Code:
{
"mcpServers": {
"tenderapi": {
"type": "streamable-http",
"url": "https://tenderapi.fr/mcp"
}
}
}
Exposes search_tenders and get_tender. Anonymous, free, limited to 30 tool calls per day per IP. No account, nothing to install.
Awards, winner intelligence and alert profiles are not available anonymously — they need a key, see below.
2. Local server (pip) — full toolset
Requires Python 3.10+ and a free API key.
pip install tenderapi-mcp
Get a free key at https://tenderapi.fr/ (includes one weekly email watch), then:
{
"mcpServers": {
"tenderapi": {
"command": "tenderapi-mcp",
"env": {
"TENDERAPI_KEY": "ta_your_key_here"
}
}
}
}
Claude Desktop config location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Restart the client. The tenderapi server should appear in the tool picker.
From source instead of PyPI:
git clone https://github.com/IDNSIDNS/tenderapi-mcp
cd tenderapi-mcp
pip install -e .
Any MCP client supporting stdio transport works. The tenderapi-mcp binary installed by pip is the entry point.
Tools exposed
| Tool | Tier | Hosted (keyless) | Description |
|---|---|---|---|
search_tenders | Free | ✅ | Search BOAMP + TED tenders with typed filters (CPV, region, budget, deadline, source, etc.) |
get_tender | Free | ✅ | Fetch a single tender by id |
search_awards | Pro | — | Search award notices (who won which contract, for how much) |
get_award | Pro | — | Fetch a single award by id |
winner_intel | Pro | — | Aggregated winner stats: top companies by CPV / region / year |
me | any | — | Current key tier, quota remaining, available features |
list_profiles, get_profile, create_profile, update_profile, delete_profile | Free (1, weekly email) / Pro | — | Manage alert profiles for new-tender matches: weekly email on a free key; daily email digest, Teams card or webhook on Pro |
upgrade_tier, billing_portal | any | — | Stripe checkout and billing-management links |
PINs (prior-information notices) are excluded from search_tenders by default; pass include_planning=true to include them. A deadline_after/deadline_before filter drops notices with no submission deadline unless include_null_deadline=true.
Tiers
- Hosted, keyless: 30 tool calls/day per IP, tenders only
- Free key: tenders, 1 alert profile (email digest every Monday, to the account address)
- Pro (15 €/month): adds awards and winner intelligence, up to 10 alert profiles delivered every morning (email digest, Teams or webhook)
Request limits only protect the service (free: 1 000/day and 30/min; Pro: 1 500/day and 120/min); paginated lists stop at row 1 000.
Prices are final — no VAT is charged (art. 293 B French tax code). See https://tenderapi.fr/#pricing.
Local development
Override the API base URL via TENDERAPI_BASE_URL (default https://tenderapi.fr).
Requirements
Pinned to the mcp 1.x line: version 2.0.0 removed mcp.server.fastmcp, which this
server is built on. Migration to the 2.x API is tracked separately.
License
MIT, see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.