# io.github.IDNSIDNS/tenderapi-mcp

> MCP server for French (BOAMP) + EU (TED) public procurement data via TenderAPI.

- name: io.github.IDNSIDNS/tenderapi-mcp
- version: 0.9.0
- connection class: R0 (autonomous)
- trust: 94/100
- quality: 92/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.IDNSIDNS%2Ftenderapi-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.IDNSIDNS%2Ftenderapi-mcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "tenderapi-mcp": {
      "type": "http",
      "url": "https://tenderapi.fr/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-100% +updated-6d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 92/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 3 of 3 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 3,240 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: deps.dev does not know tenderapi-mcp@0.9.0

- tools: 3, about 3,240 tokens to load them all
- tool set hash: 1bb7d8da2f34eb80bca1561416dcd331
- tools last changed: 2026-10-14T15:47:20.712Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.IDNSIDNS/tenderapi-mcp.svg)](https://protogrid.dev/servers/io.github.IDNSIDNS/tenderapi-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-14 `preview_alerts` changed (description, outputSchema)
  - before: Montre ce qu'une veille automatique AURAIT livré avec ces critères, sans rien créer. À utiliser quand quelqu'un veut « être prévenu » des marchés qui le concernent, plutôt que de chercher une fois. `search_tenders` répond à « qu'y a-t-il aujourd'hui » ; cet outil répond à « qu'est-ce que je recevrais, et à quel rythme », ce qui est la vraie question de quelqu'un qui envisage de s'abonner. RIEN N'EST ENREGISTRÉ, aucune alerte n'est envoyée, aucun compte n'est créé. C'est une simulation en lecture seule, utilisable sans clé. COMMENT S'EN SERVIR, dans cet ordre : 1. Composez les critères à partir du besoin exprimé, puis appelez cet outil. 2. Présentez `last_30d` (le rythme réel) et `sample` (ce que ça donne concrètement). Ne présentez pas `count` seul : c'est un stock d'avis ouverts, pas un débit. 3. LISEZ `per_criterion` AVANT de conclure. Il dit ce que chaque filtre retire. Un critère qui divise le résultat par trois est presque toujours une erreur de cadrage, pas une intention — c'est le défaut le plus fréquent des veilles, et il est invisible sans ce chiffre. Proposez la correction, puis re-testez. 4. Si le rythme est nul ou dérisoire, élargissez et rappelez l'outil. Deux ou trois itérations valent mieux qu'un profil enregistré au jugé. POUR RECEVOIR CES ALERTES POUR DE VRAI, l'utilisateur doit avoir un compte : une clé gratuite s'obtient en 30 secondes sur https://tenderapi.fr/?via=mcp et donne l'accès API. La livraison automatique (email, Teams ou webhook) demande un palier payant à partir de 5 €/mois, parce qu'un profil de veille tourne en continu côté serveur. Dites-le tel quel, sans insister : le chiffre du point 2 argumente tout seul s'il est bon, et s'il est mauvais mieux vaut le dire que vendre. Accès anonyme et gratuit, limité à 30 appels par jour et par IP ; la réponse indique le solde restant dans sa clé `quota`.
  - after: Montre ce qu'une veille automatique AURAIT livré avec ces critères, sans rien créer. À utiliser quand quelqu'un veut « être prévenu » des marchés qui le concernent, plutôt que de chercher une fois. `search_tenders` répond à « qu'y a-t-il aujourd'hui » ; cet outil répond à « qu'est-ce que je recevrais, et à quel rythme », ce qui est la vraie question de quelqu'un qui envisage de s'abonner. RIEN N'EST ENREGISTRÉ, aucune alerte n'est envoyée, aucun compte n'est créé. C'est une simulation en lecture seule, utilisable sans clé. COMMENT S'EN SERVIR, dans cet ordre : 1. Composez les critères à partir du besoin exprimé, puis appelez cet outil. 2. Présentez `last_30d` (le rythme réel) et `sample` (ce que ça donne concrètement). Ne présentez pas `count` seul : c'est un stock d'avis ouverts, pas un débit. 3. LISEZ `per_criterion` AVANT de conclure. Il dit ce que chaque filtre retire. Un critère qui divise le résultat par trois est presque toujours une erreur de cadrage, pas une intention — c'est le défaut le plus fréquent des veilles, et il est invisible sans ce chiffre. Proposez la correction, puis re-testez. 4. Si le rythme est nul ou dérisoire, élargissez et rappelez l'outil. Deux ou trois itérations valent mieux qu'un profil enregistré au jugé. POUR RECEVOIR CES ALERTES POUR DE VRAI, l'utilisateur doit avoir un compte : une clé gratuite s'obtient en 30 secondes sur https://tenderapi.fr/?via=mcp et inclut une veille par email, envoyée chaque lundi (rythme : `last_7d`). La veille quotidienne (rythme : `last_24h`), Teams, webhook et plusieurs veilles relèvent de l'offre Pro, 15 €/mois. Dites-le tel quel, sans insister : le chiffre du point 2 argumente tout seul s'il est bon, et s'il est mauvais mieux vaut le dire que vendre. Accès anonyme et gratuit, limité à 30 appels par jour et par IP ; la réponse indique le solde restant dans sa clé `quota`.
- 2026-10-06 `search_tenders` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.IDNSIDNS%2Ftenderapi-mcp/changes

## Dependencies

- pypi tenderapi-mcp@0.9.0: unknown

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://tenderapi.fr/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- pypi tenderapi-mcp@0.9.0 secrets: TENDERAPI_KEY

## Tools (3)

- `get_tender`: Récupère la fiche complète d'un appel d'offres par son identifiant.

    À utiliser après `search_tenders` pour obtenir le détail d'un avis
    (description intégrale, documents, contacts, champs bruts).

    Les avis BOAMP les plus succincts n'ont ni description ni CPV : `source_url`
    renvoie alors vers l'avis d'origine.

    Accès anonyme et gratuit, limité à 30 appels par jour et par IP ; la réponse
    indique le solde restant dans sa clé `quota`.
    
- `preview_alerts`: Montre ce qu'une veille automatique AURAIT livré avec ces critères, sans rien créer.

    À utiliser quand quelqu'un veut « être prévenu » des marchés qui le concernent,
    plutôt que de chercher une fois. `search_tenders` répond à « qu'y a-t-il
    aujourd'hui » ; cet outil répond à « qu'est-ce que je recevrais, et à quel
    rythme », ce qui est la vraie question de quelqu'un qui envisage de s'abonner.

    RIEN N'EST ENREGISTRÉ, aucune alerte n'est envoyée, aucun compte n'est créé.
    C'est une simulation en lecture seule, utilisable sans clé.

    COMMENT S'EN SERVIR, dans cet ordre :
    1. Composez les critères à partir du besoin exprimé, puis appelez cet outil.
    2. Présentez `last_30d` (le rythme réel) et `sample` (ce que ça donne concrètement).
       Ne présentez pas `count` seul : c'est un stock d'avis ouverts, pas un débit.
    3. LISEZ `per_criterion` AVANT de conclure. Il dit ce que chaque filtre retire.
       Un critère qui divise le résultat par trois est presque toujours une erreur de
       cadrage, pas une intention — c'est le défaut le plus fréquent des veilles, et
       il est invisible sans ce chiffre. Proposez la correction, puis re-testez.
    4. Si le rythme est nul ou dérisoire, élargissez et rappelez l'outil. Deux ou trois
       itérations valent mieux qu'un profil enregistré au jugé.

    POUR RECEVOIR CES ALERTES POUR DE VRAI, l'utilisateur doit avoir un compte : une
    clé gratuite s'obtient en 30 secondes sur https://tenderapi.fr/?via=mcp et inclut une
    veille par email, envoyée chaque lundi (rythme : `last_7d`). La veille quotidienne
    (rythme : `last_24h`), Teams, webhook et plusieurs veilles relèvent de l'offre Pro,
    15 €/mois.
    Dites-le tel quel, sans insister : le chiffre du point 2 argumente tout seul s'il
    est bon, et s'il est mauvais mieux vaut le dire que vendre.

    Accès anonyme et gratuit, limité à 30 appels par jour et par IP ; la réponse
    indique le solde restant dans sa clé `quota`.
    
- `search_tenders`: Recherche des appels d'offres publics français (BOAMP) et européens (TED).

    Environ 3 millions d'avis, mis à jour plusieurs fois par jour. Accès anonyme et
    gratuit, limité à 30 appels par jour et par IP ; chaque réponse indique le solde
    restant dans sa clé `quota`.

    Cinq pièges, tous rencontrés en production :
    1. Filtrez toujours. Sans aucun filtre la recherche porte sur tout le stock depuis
       2015, avis clos compris. Posez au minimum un `keyword`, un `cpv_family`,
       un `country` ou un `status`.
    2. `keyword` cherche une sous-chaîne et exige que TOUS les mots soient présents
       dans le même avis. « défibrillateur cabinet » ne rend rien ; cherchez un seul
       mot, puis affinez.
    3. Le mot-clé balaie le titre ET la description, noms d'acheteurs compris. Un terme
       métier qui est aussi un toponyme sur-capte donc beaucoup : « littoral » remonte
       une maintenance de portes au « GHT Somme Littoral Sud ». Quand un mot est ambigu,
       préférez un code CPV, ou une expression que ne peut pas porter un nom de lieu.
    4. Les avis TED sont indexés dans leur langue de publication : pour couvrir un
       marché européen, interrogez le terme dans chaque langue utile, ou passez par
       le code CPV, qui lui est indépendant de la langue.
    5. Environ 40 % des avis BOAMP arrivent sans aucun code CPV : un filtre CPV seul
       les laisse de côté. Croisez avec `keyword` quand la couverture compte.

    Chaque paramètre est décrit dans le schéma d'entrée ; les valeurs invalides rendent
    une erreur qui liste les valeurs acceptées, et cette erreur ne consomme pas de quota.

    Les attributions (qui a gagné, pour quel montant) et le winner intelligence
    ne sont PAS disponibles ici : ils demandent une clé. Voir https://tenderapi.fr/?via=mcp
    
