Skip to main content
Glama

mcp-imagepme

Serveur MCP (Model Context Protocol) qui donne accès aux indicateurs ImagePME (baromètre économique de l'Ordre des experts-comptables) depuis un assistant compatible MCP (Claude Code, Claude Desktop, etc.).

Le site ne propose ni API ni export automatisable classique : les données sont générées via un formulaire (Plotly Dash) accessible uniquement aux experts-comptables connectés. Ce serveur pilote donc un vrai navigateur (Playwright) pour se connecter, remplir le formulaire et récupérer le fichier Excel produit — exactement comme le ferait un utilisateur humain.

Prérequis indispensable : un compte Comptexpert valide (identifiants de connexion au portail de l'Ordre des experts-comptables). Ce projet ne fournit aucun accès aux données — chaque utilisateur doit avoir son propre compte, et n'utilise que ses propres droits d'accès.

Installation (sans terminal)

Prérequis : Python 3.10+ (sous Windows, l'installeur l'installe tout seul s'il manque) et l'application Claude.

  1. Télécharge le projet : bouton vert Code → Download ZIP sur la page GitHub, puis décompresse-le dans ton dossier personnel (pas dans Téléchargements).

  2. Double-clique sur l'installeur :

    • Windows : Installer.bat (si Windows affiche « Windows a protégé votre ordinateur », clique sur Informations complémentaires → Exécuter quand même) ;

    • macOS : Installer.command (la première fois, clic droit → Ouvrir, puis confirmer).

  3. Une fenêtre s'ouvre : saisis ton identifiant et ton mot de passe Comptexpert, coche où activer ImagePME (Claude, Claude Code, Codex d'OpenAI), puis Enregistrer.

  4. Quitte complètement Claude et relance-le.

Pour changer d'identifiants plus tard : Configurer.bat / Configurer.command.

Mise à jour

Double-clique sur Mettre a jour.bat (Windows) ou Mettre a jour.command (macOS), puis relance Claude. Tes identifiants sont conservés.

Désinstallation

Quitte complètement Claude, puis double-clique sur Desinstaller.bat (Windows) ou Desinstaller.command (macOS). ImagePME est retiré de Claude et le dossier du projet est supprimé, identifiants compris.

Variante : faire installer ImagePME par Claude

Au lieu des étapes 1 à 3 ci-dessus, tu peux coller ce texte dans Claude Code (onglet Code de l'application Claude) ou dans Codex. Ça ne fonctionne pas dans l'onglet Chat ou Cowork : Claude y travaille dans un environnement isolé qui ne peut pas installer de logiciel sur ton poste.

Si tu as déjà téléchargé ou installé le projet, Claude le réutilise au lieu de tout réinstaller :

Installe pour moi le serveur MCP ImagePME (https://github.com/BorisSAUVAGE/mcp-imagepme).
0. Avant tout, vérifie que tu peux exécuter des commandes directement sur mon ordinateur (pas dans une machine virtuelle ou un environnement Linux isolé) : sous Windows, la commande "powershell -Command $PSVersionTable" doit fonctionner. Si ce n'est pas le cas, ne télécharge rien : dis-moi de coller ce texte dans Claude Code (onglet Code de l'application Claude) ou dans Codex, ou d'utiliser Installer.bat / Installer.command.
1. Demande-moi d'abord si j'ai déjà téléchargé le projet et, si oui, dans quel dossier. Sinon, télécharge-le (git clone, ou l'archive ZIP de la branche main si git est absent) dans un dossier "mcp-imagepme" de mon dossier personnel.
2. Si ce dossier contient déjà une installation (.venv/bin/imagepme-mcp sur macOS/Linux, .venv\Scripts\imagepme-mcp.exe sur Windows), ne réinstalle rien : lance seulement la fenêtre de configuration avec le Python de .venv (scripts/configure.py). Sinon, lance le script d'installation : install.sh sur macOS/Linux, install.ps1 (powershell -ExecutionPolicy Bypass -File install.ps1) sur Windows. Si Python 3.10+ manque, dis-moi comment l'installer.
3. Une fenêtre va s'ouvrir pour que je saisisse moi-même mes identifiants Comptexpert : ne me les demande jamais dans la conversation.
4. Vérifie ensuite que le serveur "imagepme" est bien déclaré là où je l'ai coché : Claude Desktop (claude_desktop_config.json, clé mcpServers), Claude Code (claude mcp get imagepme), Codex (section [mcp_servers.imagepme] de ~/.codex/config.toml). Dis-moi enfin de quitter complètement et relancer les applications concernées.

Installation manuelle

python3 -m venv .venv
source .venv/bin/activate          # Windows : .venv\Scripts\activate

pip install -e .
playwright install chromium

cp .env.example .env
# édite .env et renseigne COMPTEXPERT_USERNAME / COMPTEXPERT_PASSWORD

claude mcp add imagepme -- "$(pwd)/.venv/bin/imagepme-mcp"

.env n'est jamais commité (voir .gitignore) et n'est lu que localement par le serveur pour se connecter en ton nom.

Si claude mcp add ne fonctionne pas : copie .mcp.json.example en .mcp.json à la racine du projet et remplace le chemin par le chemin absolu réel de .venv/bin/imagepme-mcp (ou .venv\Scripts\imagepme-mcp.exe sur Windows) sur ta machine.

Related MCP server: Browser[X]MCP

Utilisation

Une fois connecté, demande simplement en langage naturel, par exemple :

Donne-moi les indicateurs TVA de mai 2026, tous secteurs, au national.

Indicateurs TDFC pour le secteur de la construction en Bretagne, en PDF.

Deux tools sont exposés, chacun avec un paramètre format ("excel" par défaut, ou "pdf") :

  • get_indicateurs_tva — indicateurs TVA (ICA/ICAC), mensuels ou trimestriels : periodicite, annee, periode, niveau_sectoriel, secteur, niveau_geo, territoire, format.

  • get_indicateurs_tdfc — indicateurs TDFC (données fiscales annuelles) : tranche_ca, niveau_sectoriel, secteur, niveau_geo, territoire, format.

Chaque appel retourne le chemin local du fichier téléchargé (dans .data/downloads/).

Si les filtres demandés portent sur un échantillon trop restreint, ImagePME refuse d'afficher un résultat (secret statistique, en général moins de 10 entreprises) : le tool renvoie alors une erreur explicite plutôt qu'un fichier, en te suggérant d'élargir le niveau géographique ou sectoriel.

Fonctionnement interne

  • La connexion passe par le SSO CAS de l'Ordre (identification.experts-comptables.org).

  • La session est persistée dans .data/storage_state.json pour éviter de se reconnecter à chaque appel ; elle est automatiquement renouvelée si elle expire.

  • Le formulaire réel est une app Plotly Dash embarquée en iframe cross-origin — Playwright y accède nativement (contrairement à du code JS classique, bloqué par la same-origin policy).

Pour déboguer un sélecteur qui ne matche plus (le site peut évoluer) :

MCP_IMAGEPME_HEADED=1 python scripts/manual_test.py

Ça ouvre un vrai navigateur visible pour observer le flux pas à pas.

Ajouter un nouveau rapport ImagePME

  1. Crée src/mcp_imagepme/reports/<nom>.py sur le modèle de tva.py ou tdfc.py, en réutilisant les helpers de dash_form.py et reports/base.py.

  2. Expose une fonction async def correspondante dans server.py avec @mcp.tool(), en déportant l'appel Playwright (synchrone) via asyncio.to_thread(...).

Avertissement

Ce projet automatise l'accès à un service tiers avec authentification personnelle. Utilise-le uniquement avec ton propre compte, dans le respect des conditions d'utilisation d'ImagePME et de l'Ordre des experts-comptables.

Available Tools

2 tools
get_indicateurs_tdfcA

Télécharge les indicateurs TDFC (données fiscales annuelles) d'ImagePME.

Args: tranche_ca: libellé de la tranche de chiffre d'affaires annuel (défaut : toutes tranches confondues). niveau_sectoriel: "ape", "classe", "groupe", "division", "section" ou "tous" (défaut). secteur: secteur précis, requis si niveau_sectoriel != "tous". Pas besoin du libellé exact du site : un code NAF ("10.71C"), un mot-clé ou un libellé complet fonctionnent. Si le mot-clé correspond à plusieurs options (ex. "Boulangerie" couvre 10.71B et 10.71C), une erreur liste les options : précise alors avec le code de celle voulue. niveau_geo: "national" (défaut), "region" ou "departement". territoire: nom de la région/du département (ex. "Bretagne"), requis si niveau_geo != "national". Mêmes tolérances que secteur. format: "excel" (défaut) ou "pdf".

Returns: Le chemin local du fichier téléchargé et, en Excel, le tableau des données : pour chaque indicateur du compte de résultat et du bilan, montants moyens et médians sur 3 exercices, évolutions, ratios sur CA, part d'entreprises en hausse/baisse et taille de l'échantillon.

Raises: Une erreur explicite si le secteur/territoire ne correspond à aucune option, ou si ImagePME refuse d'afficher un résultat pour cause de secret statistique (échantillon trop petit) — dans ce dernier cas, réessaie avec un niveau géographique ou sectoriel plus large.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoexcel
secteurNo
niveau_geoNonational
territoireNo
tranche_caNoToutes tranches de CA
niveau_sectorielNotous

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that keyword matching may resolve to multiple options and surface a listing error, and that ImagePME can refuse output for statistical secrecy (small sample), with a suggested remedy. It does not mention authentication, rate limits, or whether downloads are cached/overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The Args/Returns/Raises structure is front-loaded and scannable, and each section earns its place given the parameter count. It is somewhat long, but the length is justified by six undocumented parameters and non-trivial error behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter tool with 0% schema coverage, no annotations, and a sibling, the description covers purpose, all parameter semantics, error conditions, and remediation. Even though an output schema exists (so Returns is not strictly necessary), the added field-level detail is harmless and helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and there are 6 parameters, so the description must compensate fully — and it does, documenting every parameter: default values, the allowed niveau_sectoriel values, required-if conditions for secteur/territoire, loose-matching tolerance (NAF codes, keywords, full labels), and format options.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Télécharge') and resource ('indicateurs TDFC, données fiscales annuelles') from a named source (ImagePME). It is naturally distinguished from the sibling get_indicateurs_tva by the TDFC/TVA subject matter, though the description never names the sibling explicitly.

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?

Gives clear conditional context: secteur is required when niveau_sectoriel != 'tous', territoire when niveau_geo != 'national', and it advises retrying with a broader geographic/sectoral level on secret-statistique errors. It does not, however, route the agent between this tool and get_indicateurs_tva.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_indicateurs_tvaA

Indicateurs TVA (ICA/ICAC) d'ImagePME : variation du chiffre d'affaires.

IMPORTANT — une seule requête suffit pour une série : chaque requête renvoie l'historique qui précède la période demandée (environ 12 mois en mensuel, juillet et août étant regroupés en "07+08" ; environ 11 trimestres en trimestriel). Pour l'évolution sur plusieurs mois ou trimestres, interroge UNIQUEMENT la période la plus récente voulue, puis lis l'historique dans le tableau renvoyé. Ne fais pas une requête par période (chaque requête prend environ une minute).

ICA = variation du CA par rapport à la même période de l'année précédente ; ICAC = même chose en cumul depuis le début de l'année.

Args: periodicite: "mensuelle" ou "trimestrielle". annee: année de la période recherchée (ex. "2026"). periode: nom du mois (ex. "Mai") si mensuelle, ou trimestre ("T1".."T4") si trimestrielle. niveau_sectoriel: "ape", "classe", "groupe", "division", "section" ou "tous" (défaut). secteur: secteur précis, requis si niveau_sectoriel != "tous". Pas besoin du libellé exact du site : un code NAF ("10.71C"), un mot-clé ou un libellé complet fonctionnent. Si le mot-clé correspond à plusieurs options (ex. "Boulangerie" couvre 10.71B et 10.71C), une erreur liste les options : précise alors avec le code de celle voulue. niveau_geo: "national" (défaut), "region" ou "departement". territoire: nom de la région/du département (ex. "Bretagne"), requis si niveau_geo != "national". Mêmes tolérances que secteur. format: "excel" (défaut) ou "pdf".

Returns: Le chemin local du fichier téléchargé et, en Excel, le tableau des données (une ligne par période : échantillon, ICA, ICAC).

Raises: Une erreur explicite si le secteur/territoire ne correspond à aucune option, ou si ImagePME refuse d'afficher un résultat pour cause de secret statistique (échantillon trop petit) — dans ce dernier cas, réessaie avec un niveau géographique ou sectoriel plus large.

ParametersJSON Schema
NameRequiredDescriptionDefault
anneeYes
formatNoexcel
periodeYes
secteurNo
niveau_geoNonational
territoireNo
periodiciteYes
niveau_sectorielNotous

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: it discloses that each response returns ~12 months / ~11 trimesters of history, that July+August are merged as '07+08', the per-request latency, and that results can be refused under secret statistique with a recommended widening retry. Nothing about the operation's runtime behavior is hidden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core definition, then the key usage warning, then Args/Returns/Raises — a clean structure where every block adds information. It is on the long side, and the Args section partly restates parameter names already in the schema, but the added semantic detail justifies the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with zero schema coverage, no annotations and an output schema, the description supplies everything needed: conditional requirements, accepted value formats, the return shape (file path plus Excel table with échantillon/ICA/ICAC per period) and error handling. An agent can invoke it correctly without further inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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, and it does: it enumerates valid values for periodicite, niveau_sectoriel, niveau_geo and format, gives an annee example, and explains that secteur/territoire accept NAF codes, keywords or full labels with fuzzy-matching plus a disambiguation error path. Conditional requirements (secteur required unless niveau_sectoriel='tous') are stated explicitly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and metric: 'Indicateurs TVA (ICA/ICAC) d'ImagePME : variation du chiffre d'affaires', and defines both indicators (ICA = variation vs. same period last year, ICAC = cumulative year-to-date). It does not name or differentiate itself from the sibling get_indicateurs_tdfc, so it falls short of a 5.

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?

Explicitly tells the agent how to query economically ('une seule requête suffit', 'interroge UNIQUEMENT la période la plus récente'), warns against a request per period, and gives a ~1 minute cost. It also prescribes recovery behavior for both failure modes (ambiguous keyword, secret statistique), which is exactly when-to-use guidance.

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. 2 tool updatesv0.4.1
    • First observedget_indicateurs_tdfc
    • First observedget_indicateurs_tva

TDQS

A4.3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools target clearly distinct datasets: TVA (ICA/ICAC revenue variation over time) versus TDFC (annual fiscal/balance-sheet indicators). Despite sharing many parameter names, their purposes and outputs are unmistakably different, so an agent can reliably pick the right one.

Naming Consistency5/5

Both tools follow the identical get_indicateurs_<dataset> pattern (get_indicateurs_tva, get_indicateurs_tdfc), giving a fully predictable and consistent naming convention.

Tool Count3/5

With only two tools the surface feels thin for a statistical data source; a single indicator each for TVA and TDFC may under-represent what ImagePME likely offers. It is functional but borderline rather than well-scoped.

Completeness3/5

The two indicator families are covered with rich parameters, but there is no tool to enumerate available indicators, sectors, or territories, forcing trial-and-error via error messages. This notable gap limits discoverability even though the two included operations are well documented.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI-driven browser automation with advanced form testing, batch operations, and intelligent element extraction for MCP-compatible applications.
    14
    22 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables listing and downloading scanned letters from the Swiss ePost digital letterbox through browser automation, requiring manual SwissID login for session establishment.
    21
    16 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to browse, click, type, screenshot, and extract data from web pages without writing CSS selectors, using numbered element refs. It also supports office automation such as bulk form filling, table extraction, downloads, PDF archiving, and page monitoring.
    14 npm
    1
    MIT