pennylane-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pennylane-mcp-serverquelles factures clients sont en retard ?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pennylane-mcp-claude
Votre comptabilité Pennylane, interrogée en français depuis Claude.
Vous installez ce serveur vous-même, avec votre propre jeton Pennylane. Aucun intermédiaire ne s'ajoute entre Claude, votre machine et Pennylane.
1. Ce que c'est
Pennylane a une API complète, mais elle ne se parle qu'en requêtes HTTP : pagination par curseur, filtres en JSON, un jeton par dossier. Ce serveur la traduit en 87 outils MCP que Claude appelle tout seul. Vous demandez « quelles factures clients sont en retard ? », et Claude interroge Pennylane, trie et répond.
Les outils couvrent la balance, les écritures, le lettrage, les journaux, les clients, les fournisseurs, les factures, les devis, les produits, les abonnements et les exports FEC. Ils lisent et ils écrivent : Claude peut créer une facture ou marquer un paiement.
Ce dépôt est un fork de melvynx/pennylane-mcp-server (MIT, Melvyn Morice), qui a écrit les outils métier. Le fork ajoute trois choses :
Ajout | Ce que ça change pour vous |
OAuth embarqué et transport HTTP ( | Le serveur se branche sur claude.ai web et mobile, protégé par un mot de passe |
Factures lisibles ( | « Impayées », « en retard avant le 15 », « émises en septembre » s'obtiennent en un appel. Le filtre |
Déploiement ( | Un serveur public avec HTTPS automatique, en une commande |
Pennylane propose aussi son propre connecteur MCP ; celui-ci s'en distingue par ses outils d'écriture et par le travail sur les factures, et le choix entre les deux dépend de votre usage.
La documentation amont (référence outil par outil, notions comptables) se trouve dans docs/.
Related MCP server: MonKey Office MCP Server
2. Comment ça marche
Deux façons de l'utiliser, selon l'endroit où vous parlez à Claude.
EN LOCAL (Claude Desktop, Claude Code)
Claude ──stdio──▶ pennylane-mcp-server (sur votre ordinateur) ──HTTPS──▶ API Pennylane
SUR UN SERVEUR (claude.ai web et mobile)
claude.ai ──HTTPS──▶ Caddy (certificat auto) ──▶ conteneur pennylane-mcp ──HTTPS──▶ API Pennylane
│ OAuth embarqué : mot de passe à la connexion
└ volume /state : jetons de connexion conservésEn local, Claude Desktop lance le serveur lui-même et lui parle par l'entrée et la sortie standard. Rien n'est exposé sur Internet. C'est la voie la plus simple, mais elle ne marche que sur l'ordinateur où le serveur est installé.
Sur un serveur, claude.ai doit joindre votre serveur depuis Internet, en HTTPS. Le serveur embarque son propre serveur d'autorisation OAuth. La première fois que vous branchez le connecteur, claude.ai ouvre une page qui vous demande votre mot de passe. claude.ai reçoit ensuite des jetons de connexion, que le serveur conserve sur disque : un redémarrage ne vous déconnecte pas.
3. Comment l'utiliser
Prérequis : un jeton Pennylane
Dans Pennylane : Paramètres → Connectivité → Développeurs, puis créez un Company API Token. Cochez au minimum ces droits :
ledger_accounts:all, journals:all, ledger_entries:all, trial_balance:readonly, fiscal_years:readonly, customers:all, customer_invoices:all, supplier_invoices:all
Fournisseurs, produits, devis, catégories, abonnements et exports ont leurs propres droits dans la même page : cochez ceux des outils que vous comptez utiliser. Un outil qui répond 403 signale un droit manquant sur le jeton.
Ce jeton donne accès à toute la comptabilité du dossier. Traitez-le comme un mot de passe : jamais dans un mail, jamais dans un dépôt git.
Voie A : en local, avec Claude Desktop
Ouvrez un terminal. Sur macOS : ⌘ + Espace, tapez « Terminal », Entrée. Sur Windows : menu Démarrer, « PowerShell ».
Installez uv, qui télécharge et lance le serveur pour vous.
macOS ou Linux :
curl -LsSf https://astral.sh/uv/install.sh | shWindows :
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Fermez le terminal et ouvrez-en un nouveau, sinon la commande
uvxreste introuvable. Testez ensuite le téléchargement du serveur :uvx --from git+https://github.com/Matthieusabourin2/pennylane-mcp-claude python -c "import pennylane_mcp; print('ok')"okdoit s'afficher. Sur un Mac qui n'a jamais servi au développement, macOS propose d'abord d'installer les « outils de ligne de commande » (git en fait partie) : acceptez, puis relancez la commande.Trouvez le chemin complet de
uvx:which uvxsur macOS (souvent/Users/VOTRENOM/.local/bin/uvx),where uvxsur Windows. Claude Desktop ne connaît pas votrePATH, d'où le chemin complet.Dans Claude Desktop : Paramètres → Développeur → Modifier la configuration. Le Finder (ou l'Explorateur) montre le fichier
claude_desktop_config.json: ouvrez-le avec un éditeur de texte brut. Avec TextEdit, passez d'abord par Format → Convertir au format texte, sinon les guillemets deviennent typographiques et le fichier ne se lit plus. Si le fichier est vide ou contient{}, remplacez tout par le bloc ci-dessous. S'il contient déjà d'autres réglages, ajoutez seulement l'entrée"pennylane"dans"mcpServers"(ou la clé"mcpServers"entière si elle manque), en gardant une virgule entre deux entrées.{ "mcpServers": { "pennylane": { "command": "/chemin/complet/vers/uvx", "args": ["--from", "git+https://github.com/Matthieusabourin2/pennylane-mcp-claude", "pennylane-mcp-server"], "env": { "PENNYLANE_API_TOKEN": "votre-jeton-pennylane" } } } }Quittez complètement Claude Desktop (⌘ + Q sur macOS), puis relancez-le. Demandez : « Liste mes factures clients en retard. »
Avec Claude Code, une seule commande suffit (-s user rend le serveur disponible dans tous vos projets) :
claude mcp add -s user pennylane -e PENNYLANE_API_TOKEN=votre-jeton -- uvx --from git+https://github.com/Matthieusabourin2/pennylane-mcp-claude pennylane-mcp-serverVoie B : sur un serveur, pour claude.ai web et mobile
Il vous faut une machine joignable depuis Internet (un VPS, une VM chez Scaleway, OVH ou ailleurs, ou un serveur chez vous) et un nom de domaine. Le guide pas à pas est dans docs/deploiement-serveur.md. En résumé :
git clone https://github.com/Matthieusabourin2/pennylane-mcp-claude.git
cd pennylane-mcp-claude
cp .env.example .env # puis remplir : jeton Pennylane, domaine, mot de passe
docker compose up -d --buildPuis, dans claude.ai : Paramètres → Connecteurs → Ajouter un connecteur personnalisé. Les connecteurs personnalisés dépendent de votre offre Claude ; sur une offre Team ou Enterprise, c'est un propriétaire de l'organisation qui les ajoute.
URL :
https://votre-domaine/mcpDans les paramètres avancés, choisissez « Utiliser votre propre client OAuth ». L'identifiant client est libre (par exemple
claude-pennylane), et le secret client reste vide. Les deux autres choix échouent : ce serveur n'accepte pas l'enregistrement automatique des clients.Une page « pennylane-mcp » s'ouvre : saisissez la valeur de
MCP_BEARER_TOKEN(ou deMCP_OAUTH_PASSWORD, si vous l'avez définie).
Le connecteur apparaît ensuite aussi dans l'application mobile Claude.
Sécurité, à lire avant d'exposer le serveur
Le mot de passe est la seule barrière entre Internet et votre comptabilité, en écriture. Générez-le avec
openssl rand -base64 32et ne le réutilisez nulle part. Le serveur ne limite pas les tentatives : un mot de passe court se devine.Changer le mot de passe ne déconnecte pas les sessions déjà ouvertes : leurs jetons de rafraîchissement restent valides. En cas de fuite, changez-le dans
.env, puis effacez les jetons et redémarrez :docker compose down,docker volume rm pennylane-mcp-claude_oauth-state(le préfixe est le nom du dossier),docker compose up -d. Rebranchez ensuite le connecteur dans claude.ai.Le serveur refuse de démarrer si l'OAuth est activé sans mot de passe ou sans adresse publique HTTPS. Il refuse aussi de renvoyer un code d'autorisation ailleurs que vers claude.ai.
.envetdossiers.jsonsont exclus du dépôt git et de l'image Docker. Gardez-les ainsi.
Limites connues
Au-delà d'environ 58 factures en mode compact, la réponse dépasse la taille qu'un outil peut renvoyer et elle est tronquée. Les compteurs (
count,is_complete) restent en tête. Resserrez alors la période ou filtrez par client.pennylane_get_quoteet les outils d'écriture renvoient encorepublic_file_url. Chaque lecture de ce champ régénère le lien public du PDF et invalide le précédent.Plusieurs dossiers Pennylane sur un même serveur : c'est possible avec un fichier
dossiers.json(voirdocs/deploiement-serveur.md). Toute personne qui connaît le mot de passe accède alors à tous les dossiers.
Développer
pip install -e .
python -m unittest discover -s tests # tests des fonctions pures, sans jetonLicence
MIT. La licence d'origine de Melvyn Morice est conservée dans LICENSE.
Available Tools
87 toolspennylane_add_dossierA
Ajoute un nouveau dossier comptable à la configuration. Le token est vérifié avec l'endpoint /me avant l'ajout. Si c'est le premier dossier, il devient automatiquement actif.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Nom d'affichage. Ex: 'SARL Dupont'. | |
| slug | Yes | Identifiant unique (minuscules, chiffres, tirets). Ex: 'sarl-dupont'. | |
| notes | No | Notes libres sur le dossier. | |
| token | Yes | Token API Pennylane (Company API Token). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description adds genuine traits beyond the annotations: the token is validated against the /me endpoint before insertion, and the first dossier is auto-activated. It does not spell out duplicate-creation or error behavior, but the two disclosed traits are meaningful extras.
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 short sentences, front-loaded with the core action and followed by behavioral notes. Nothing is padded, though the auto-activation sentence could be seen as a secondary detail rather than core purpose.
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?
An output schema exists, so return values need no explanation. The description covers token validation and first-dossier activation, which are the non-obvious behaviors. It omits what happens for subsequent dossiers and any error conditions, leaving a modest gap for a mutation tool.
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 100%, so all four parameters (slug, name, notes, token) are already documented in the schema. The description only indirectly touches the token parameter via the /me verification note and adds no format or constraint details beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource: 'Ajoute un nouveau dossier comptable à la configuration.' An agent can immediately tell this creates a dossier. It stops short of naming sibling operations (remove/switch/list_dossier), but the additive verb makes the distinction reasonably clear on its own.
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 on when to use this versus pennylane_switch_dossier, pennylane_list_dossiers, or pennylane_current_dossier, and no prerequisites stated. The note about the first dossier becoming active is operational context, not usage routing. An agent gets no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_customer_invoicesDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_customersDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_entry_linesDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_productsDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_quotesDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_supplier_invoicesDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_suppliersDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_changelog_transactionsDRead-onlyIdempotent
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_accountA
Crée un nouveau compte dans le plan comptable. Un numéro commençant par 401 crée automatiquement un fournisseur, par 411 un client.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | Libellé du compte comptable. | |
| number | Yes | Numéro du compte (ex: '411001' client, '401001' fournisseur, '512000' banque). 401→fournisseur auto-créé, 411→client auto-créé. | |
| vat_rate | No | Taux de TVA (ex: 'FR_200' pour 20%, 'FR_100' pour 10%, 'exempt'). | |
| country_alpha2 | No | Code pays ISO alpha-2 (ex: 'FR'). Défaut: FR. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description adds genuinely new behavior: prefix-driven auto-creation of fournisseur (401) or client (411) accounts. It does not mention permission requirements or reversal, but the key side effect is disclosed.
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?
Two short sentences, front-loaded with the core action followed by the notable side effect. No filler, though the prefix rule partly repeats the schema's number description.
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?
An output schema exists so return values need not be explained, and annotations plus 100% schema coverage carry most structured detail. The description supplies the non-obvious auto-creation behavior, leaving only minor gaps like permission prerequisites.
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 100%, so the schema already documents all four parameters, including the exact 401/411 prefix rule. The description's prefix explanation duplicates the number parameter's own description, adding no syntax or format detail beyond it. Baseline 3 applies.
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?
States a specific verb and resource ('Crée un nouveau compte dans le plan comptable'), which is unambiguous. It does not explicitly name the sibling create tools (create_supplier/create_customer) it borders, but the accounting-account domain is distinct enough for an agent to route correctly.
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?
Usage is only implied: the prefix rules hint that creating a 401/411 account will spawn a supplier/customer, but it never says when to prefer this tool over pennylane_create_supplier or pennylane_create_customer, nor what prerequisites exist. No explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_agl_exportA
Crée un export Grand Livre Analytique (AGL) pour une période. L'export est asynchrone : utilisez pennylane_get_agl_export pour récupérer le fichier.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Mode d'export : 'in_line' (défaut) ou 'in_column'. | |
| period_end | Yes | Fin de période (YYYY-MM-DD). | |
| period_start | Yes | Début de période (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the write/non-idempotent profile is known. The description adds the genuinely non-obvious trait that the operation is asynchronous and requires a separate retrieval call, which is real context beyond the annotations; it stops short of covering duplicate-export behavior or permissions.
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?
Two sentences, zero filler, with the core action stated first and the async follow-up second. Every clause earns its place.
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?
An output schema exists so return values need not be explained, and annotations cover the safety profile. The description completes the picture by documenting the async create-then-fetch flow; only minor gaps remain around the mode parameter's practical effect and whether repeated calls create separate exports.
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 100%, with mode, period_start and period_end all documented in the schema itself (including the 'in_line'/'in_column' values), so the baseline is 3. The description only implies period scoping and adds no syntax or constraint detail beyond 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?
States a specific verb (Crée) and resource (export Grand Livre Analytique) scoped to a period, and explicitly names the sibling pennylane_get_agl_export, so an agent can distinguish creation from retrieval without opening either schema.
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?
Gives clear workflow context: the export is asynchronous, so the caller must follow up with pennylane_get_agl_export to obtain the file. It does not state when NOT to use it (e.g. versus pennylane_create_fec_export) or any prerequisites, but the follow-up routing is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_billing_subscriptionB
Crée un nouvel abonnement de facturation récurrente. Nécessite un client, une date de début, une règle de récurrence et des lignes.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Mode de facturation : {'type': 'email', 'email_settings': {...}} ou {'type': 'awaiting_validation'} ou {'type': 'finalized'}. | |
| label | No | Libellé de l'abonnement. | |
| start | Yes | Date de début de l'abonnement (YYYY-MM-DD). | |
| customer_id | Yes | ID du client. | |
| invoice_lines | Yes | Lignes de facturation. Chaque ligne : {label: str, quantity: number, raw_currency_unit_price: str, unit: str, vat_rate: str, product_id?: int, description?: str}. | |
| payment_method | Yes | Méthode de paiement : 'offline' ou 'gocardless_direct_debit'. | |
| recurring_rule | Yes | Règle de récurrence. Ex: {'type': 'monthly', 'interval': 1} ou {'type': 'yearly', 'interval': 1, 'day_of_month': 1}. Types: 'weekly', 'monthly', 'yearly'. | |
| payment_conditions | Yes | Conditions de paiement : 'upon_receipt', '7_days', '15_days', '30_days', '30_days_end_of_month', '45_days', '45_days_end_of_month', '60_days'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, and destructiveHint=false, so the agent knows this is a non-idempotent mutation of external state. The description adds the 'recurring' nature but nothing about required permissions, validation/mode behavior, or side effects on the customer. No contradiction, but limited added value.
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?
Two short sentences, purpose front-loaded before the requirements. The second sentence slightly restates schema-required fields, so it is not perfectly waste-free, but overall it is tight and readable.
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?
An output schema exists and schema coverage is 100%, so the description does not need to explain returns or parameter details. For an 8-parameter, nested-object creation tool it covers the essentials; only a hint about the mode default or validation flow is missing.
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 100%, so the schema already documents every parameter (mode, label, start, customer_id, invoice_lines, payment_method, recurring_rule, payment_conditions). The description names the required fields, which lightly overlaps but adds no syntax or format detail beyond the schema. Baseline 3 applies.
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?
States a specific verb and resource: 'Crée un nouvel abonnement de facturation récurrente' (creates a new recurring billing subscription). This clearly distinguishes it from the get/list/update subscription siblings via the create verb. No sibling is explicitly named, but the operation is unambiguous.
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 when-to-use guidance or mention of alternatives (e.g., vs update_billing_subscription). The second sentence only enumerates required inputs ('un client, une date de début, une règle de récurrence et des lignes'), which is prerequisite information rather than usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_categoryB
Crée une nouvelle catégorie analytique dans un groupe. Le libellé et l'ID de groupe sont obligatoires.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | Libellé de la catégorie. | |
| direction | No | Direction : 'cash_in' ou 'cash_out' (catégories trésorerie uniquement). | |
| analytical_code | No | Code analytique. | |
| category_group_id | Yes | ID du groupe de catégories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, destructiveHint=false, so the mutation/safety profile is covered structurally. The description adds no behavioral context beyond the annotations (no auth requirements, no side effects, no idempotency note), so it neither strengthens nor contradicts them.
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?
Two short sentences, front-loaded with the action, with the required-parameter note second. No filler, though the second sentence duplicates schema information.
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?
An output schema exists so return values need not be described, and annotations cover the safety profile. However, for a creation tool the description omits where categories live (which group context), auth expectations, and how it relates to the sibling category-group tools, leaving it only minimally adequate.
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 100%, so all four parameters are already documented in the schema, including the direction enum-like values and analytical_code. The description only restates that label and category_group_id are required, which is redundant with the schema's required array.
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?
States a specific verb and resource ('Crée une nouvelle catégorie analytique') with scoping ('dans un groupe'), so the agent can tell it apart from list_category/get_category/update_category. It does not explicitly differentiate from other create_* siblings, but among the category tools the create purpose is unambiguous.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as link_categories or create_category_group. The only guidance is that label and group ID are mandatory, which is parameter information rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_company_customerA
Crée un nouveau client de type entreprise (société). Le nom (raison sociale) est obligatoire.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Ville. | |
| name | Yes | Raison sociale du client. | |
| notes | No | Notes libres. | |
| phone | No | Numéro de téléphone. | |
| emails | No | Liste d'emails du client. | |
| reg_no | No | Numéro SIREN (9 chiffres). | |
| address | No | Adresse postale (ligne 1). | |
| reference | No | Référence interne. | |
| vat_number | No | Numéro de TVA intracommunautaire. | |
| postal_code | No | Code postal. | |
| country_alpha2 | No | Code pays ISO (ex: 'FR'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it doesn't state whether duplicate detection applies (relevant since idempotentHint=false), whether the SIREN/TVA are validated, or what the response contains – though the output schema exists so return format is covered. With annotations doing the heavy lifting, the description's near-total silence is a mild, not severe, gap.
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?
Two short, front-loaded sentences: the action and entity type first, the required field second. No filler, padding, 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?
An output schema exists, so return values need not be explained, and annotations cover safety. What's missing for an 11-parameter creation tool in a multi-dossier system is context on tenant/dossier scoping, duplicate handling, and why the SIREN/TVA fields matter – enough to make this merely minimally viable rather than 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 100%, with every one of the 11 fields documented (e.g., reg_no as 'Numéro SIREN (9 chiffres)'), so the baseline is 3. The description's 'Le nom (raison sociale) est obligatoire' echoes what the schema already enforces via the required array and adds no format or constraint detail beyond it.
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?
States a specific verb and resource ('Crée un nouveau client de type entreprise') and explicitly distinguishes itself from the sibling pennylane_create_individual_customer by naming the 'entreprise/société' type. An agent can route between the two customer-creation tools without opening either schema.
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 on when to use this versus pennylane_create_individual_customer or pennylane_create_supplier, and no mention of prerequisites (e.g., required dossier context, which matters given the multi-dossier sibling tools). The only usage-relevant statement is the required-field note, which the schema already enforces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_customer_invoiceA
Crée une nouvelle facture client (brouillon par défaut). Nécessite un client, une date, une échéance et au moins une ligne.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date de la facture (YYYY-MM-DD). | |
| draft | No | Créer en brouillon (défaut: true). | |
| currency | No | Code devise (défaut: EUR). | |
| deadline | Yes | Date d'échéance (YYYY-MM-DD). | |
| customer_id | Yes | ID du client à facturer. | |
| invoice_lines | Yes | Lignes de facture. Chaque ligne : {product_id: int, quantity: number, label: str, unit: str, vat_rate: str, price_before_tax: str, discount: str (optionnel)}. | |
| special_mention | No | Mention spéciale sur la facture. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=true, so safety and mutation traits are covered. The description adds the behavioral fact that the invoice is created as a draft by default, which is useful context, but it discloses nothing about permissions, side effects, or lifecycle beyond the schema's own draft default.
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?
Two short sentences with the purpose front-loaded and zero filler. It is appropriately sized for a create tool, though it could have been slightly more informative without bloat.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. Still, for a 7-parameter creation tool in a dense invoice lifecycle family, the description omits how this relates to finalize/mark-paid siblings, leaving the agent to infer the workflow.
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 100%, so the baseline is 3. The description adds a genuine constraint not encoded in the schema: at least one invoice line is required (the invoice_lines array has no minItems). The restating of required fields mildly duplicates the schema's required list.
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?
States a specific verb (Crée) and resource (facture client) plus a scope qualifier (brouillon par défaut), so the agent knows it produces a new invoice in draft state. It is clear but does not explicitly differentiate itself from sibling creators/invoice lifecycle tools like update_customer_invoice or finalize_customer_invoice.
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 lists prerequisites (a customer, a date, a deadline, at least one line) which implies when the tool is applicable, and 'brouillon par défaut' hints at the draft-then-finalize workflow. However, it names no alternative and gives no explicit when-not, e.g. it never points the agent to update_customer_invoice or finalize_customer_invoice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_entryB
Crée une nouvelle écriture comptable avec ses lignes. RÈGLE FONDAMENTALE : total débits = total crédits. Les montants sont des strings (ex: '1500.00').
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date de l'écriture (YYYY-MM-DD). | |
| label | Yes | Libellé de l'écriture. | |
| currency | No | Code devise (défaut: EUR). | EUR |
| due_date | No | Date d'échéance (YYYY-MM-DD). | |
| journal_id | Yes | ID du journal comptable. | |
| piece_number | No | Numéro de pièce. | |
| ledger_entry_lines | Yes | Lignes d'écriture. Chaque ligne : {ledger_account_id: int, debit: str, credit: str, label?: str, piece_number?: str}. TOTAL DÉBIT = TOTAL CRÉDIT obligatoire. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, openWorldHint=true), so the safety burden is partly lifted. The description adds the balance invariant (total debits = total credits) and the string-typed amounts, but the balance rule is duplicated verbatim in the ledger_entry_lines schema, so the incremental behavioral disclosure is modest; nothing about validation errors, permissions, or side effects is added.
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 short lines, front-loaded with the purpose and then the single most important constraint. Nothing is padded, though the amount-format line partly duplicates the schema and the balance rule appears again in the schema.
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?
An output schema exists, so return values need not be explained, and the full schema coverage limits what the description must carry. However, for a write tool that depends on externally discovered IDs (journal_id, ledger_account_id), the description gives no guidance on sourcing those values, leaving a real gap for correct invocation.
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 100%, so the schema already documents all 7 parameters with examples. The description's only parameter-level note (amounts are strings, e.g. '1500.00') restates what the schema's debit/credit descriptions already say, adding no new semantics.
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?
States a specific verb and resource: creating a new accounting entry ('écriture comptable') with its lines, which clearly separates it from the sibling read/update tools (pennylane_get_entry, pennylane_update_entry, pennylane_list_entries). Sibling names are not referenced explicitly, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus alternatives, no prerequisites, and no pointer to how the required journal_id / ledger_account_id are obtained (e.g. via pennylane_list_journals or pennylane_list_accounts). The description only asserts what the tool does, not when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_fec_exportA
Crée un export FEC (Fichier des Écritures Comptables) pour une période. L'export est asynchrone : utilisez pennylane_get_fec_export pour récupérer le fichier une fois le statut 'ready'.
| Name | Required | Description | Default |
|---|---|---|---|
| period_end | Yes | Fin de période (YYYY-MM-DD). | |
| period_start | Yes | Début de période (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it non-read-only, non-idempotent, open-world and non-destructive, but say nothing about execution model. The description adds the key operational trait that the export is asynchronous and requires polling for a 'ready' status, which is genuinely new information. Permissions or retry behavior on repeat calls are not addressed.
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?
Two sentences, zero filler, with the resource and its async nature front-loaded before the routing instruction. Every phrase carries information the agent needs.
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?
An output schema exists, so return values need not be explained, and the description covers the create-then-poll workflow adequately. It could note whether overlapping periods cause duplicates, but overall an agent has what it needs.
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 100%, with both period_start and period_end carrying format guidance (YYYY-MM-DD), so the schema does the heavy lifting. The description only implies date-range scoping via 'pour une période' and adds no syntax or boundary details beyond that.
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?
States a specific verb and resource ('Crée un export FEC') with the scope ('pour une période'). This cleanly distinguishes it from the sibling pennylane_get_fec_export, which retrieves rather than creates.
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?
Explicitly names the follow-up tool and the condition that triggers it ('utilisez pennylane_get_fec_export ... une fois le statut ready'), which is a clear usage path. It does not, however, distinguish this FEC export from the sibling pennylane_create_agl_export.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_individual_customerA
Crée un nouveau client de type particulier (personne physique). Le prénom et le nom sont obligatoires.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Ville. | |
| notes | No | Notes libres. | |
| phone | No | Numéro de téléphone. | |
| emails | No | Liste d'emails du client. | |
| address | No | Adresse postale (ligne 1). | |
| last_name | Yes | Nom de famille du client. | |
| reference | No | Référence interne. | |
| first_name | Yes | Prénom du client. | |
| postal_code | No | Code postal. | |
| country_alpha2 | No | Code pays ISO (ex: 'FR'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description adds no behavioral context beyond that framework—no side effects, auth requirements, or dossier scoping—and the required-field note merely restates the schema. Minimum viable.
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?
Two short, front-loaded sentences with the core identity of the resource first. The second sentence restating the required fields is slightly redundant against the schema, keeping it short of a 5.
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 a fully documented schema, a non-empty output schema, and annotations covering the safety profile, the description supplies the essential routing distinction (individual vs company). It is thin on when-to-use and dossier context, but nothing needed to invoke the tool correctly is missing.
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 100%, so the schema documents all 10 parameters with titles and descriptions, making 3 the correct baseline. The description's mention that first_name/last_name are required adds nothing beyond the schema's required array.
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?
States a specific verb ('Crée') and resource ('client de type particulier/personne physique'), and the parenthetical 'personne physique' cleanly distinguishes it from the sibling pennylane_create_company_customer. An agent can route individual-vs-company without opening either schema.
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 gives no when-to-use guidance, no prerequisites, and never names the alternative (pennylane_create_company_customer) or the condition that selects between them. Create context is only implied by the purpose, which matches the calibration case that scored 2.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_journalB
Crée un nouveau journal comptable. Codes classiques : VE (ventes), HA (achats), BQ (banque), OD (opérations diverses), PA (paie), RB (reprise de balance).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Code du journal (2-5 lettres). Ex: 'VE' ventes, 'HA' achats, 'BQ' banque, 'OD' opérations diverses. | |
| label | Yes | Libellé du journal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the write/idempotency profile is covered. The description adds no behavioral context beyond that — no mention of duplicate-code errors, required permissions, or whether journals are scoped to the active dossier.
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?
Two short sentences, purpose front-loaded, no filler. The code list is somewhat redundant with the schema's code parameter description, which keeps it from being fully economical.
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 two-parameter creation tool with an output schema and full annotation coverage, the definition provides enough to call it: purpose, required code/label, and conventional code values. Only multi-dossier scoping and duplicate handling are left unstated.
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 100%, so the baseline is 3 for params the schema already documents. The description largely repeats the schema's own examples (VE, HA, BQ, OD) and only marginally extends them with PA (paie) and RB (reprise de balance), so real added value is small.
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?
States a specific verb and resource ('Crée un nouveau journal comptable'), so the agent immediately knows this creates a chart-of-accounts journal. It does not name the sibling reads (pennylane_list_journals / pennylane_get_journal), but the verb choice makes the distinction self-evident.
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 when-to-use guidance is given: nothing about prerequisites (fiscal year/dossier context), when a new journal is warranted versus reusing an existing one, or what to do if the code already exists. The second sentence is about parameter values, not usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_productB
Crée un nouveau produit/service dans le catalogue. Le libellé, le prix HT et le taux de TVA sont obligatoires.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Unité (ex: 'piece', 'hour', 'kg'). | |
| label | Yes | Libellé du produit/service. | |
| currency | No | Devise (défaut: EUR). | |
| vat_rate | Yes | Code taux de TVA (ex: 'FR_200' pour 20%, 'FR_100' pour 10%, 'FR_55' pour 5.5%, 'exempt' pour exonéré). | |
| reference | No | Référence interne. | |
| description | No | Description (max 5000 caractères). | |
| price_before_tax | Yes | Prix unitaire HT (ex: '100.00'). | |
| ledger_account_id | No | ID du compte comptable de vente associé. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond repeating the three required fields, saying nothing about side effects, permissions, or idempotency behavior.
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?
Two short sentences, purpose front-loaded, with zero filler. Every sentence carries relevant information and the required-field note follows immediately.
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 rich schema (100% coverage), an output schema, and annotations covering the safety profile, the description covers purpose and required fields adequately. The only notable gap is the absence of guidance on when to choose this over sibling tools.
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 100%, so the schema already documents all eight parameters, including VAT code examples and currency defaults. The description only confirms which three fields are required, which is already captured by the schema's required list.
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?
States a specific verb and resource ('Crée un nouveau produit/service dans le catalogue'), which is clearly distinguishable from list/get/update_product siblings. It does not explicitly name those siblings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as pennylane_update_product or pennylane_get_product. Only the required fields are noted, which is schema information rather than usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_quoteB
Crée un nouveau devis. Nécessite un client, une date, une échéance et au moins une ligne.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date du devis (YYYY-MM-DD). | |
| currency | No | Code devise (défaut: EUR). | |
| deadline | Yes | Date limite de validité (YYYY-MM-DD). | |
| language | No | Langue : 'fr_FR' ou 'en_GB' (défaut: fr_FR). | |
| customer_id | Yes | ID du client à devisé. | |
| invoice_lines | Yes | Lignes du devis. Chaque ligne : {label: str, quantity: number, raw_currency_unit_price: str, unit: str, vat_rate: str, product_id?: int, description?: str, section_rank?: int}. | |
| special_mention | No | Mention spéciale sur le devis. | |
| pdf_invoice_subject | No | Objet du devis PDF. | |
| pdf_invoice_free_text | No | Texte libre du devis PDF. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the precondition that at least one line is required, which is a useful behavioral constraint not enforced by the schema, but it does not disclose permissions, side effects, or response behavior beyond that.
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 sentences with no filler. It is front-loaded with the core action and then states the minimum required inputs, making it easy to parse quickly.
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 rich schema (100% parameter descriptions), annotations covering safety, and an output schema, the description is largely sufficient for an agent to invoke the tool. It states the purpose and required preconditions, though it omits guidance on when to choose this tool over siblings.
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 100%, so all nine parameters are documented in the schema itself. The description only restates the required parameters and adds no syntax, format, or default-value semantics beyond what the schema already provides.
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 and resource: 'Crée un nouveau devis' (creates a new quote). It clearly distinguishes creating a new quote from updating an existing one via the word 'nouveau', but it does not explicitly differentiate from siblings like pennylane_update_quote or pennylane_list_quotes.
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 only lists required inputs (customer, date, deadline, at least one line) rather than when to use this tool versus alternatives. There is no explicit guidance on when a new quote should be created instead of using pennylane_update_quote or other quote-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_create_supplierC
Crée un nouveau fournisseur. Le nom est obligatoire.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Ville. | |
| iban | No | IBAN du fournisseur. | |
| name | Yes | Nom du fournisseur (raison sociale). | |
| emails | No | Liste d'emails. | |
| reg_no | No | SIREN (9 chiffres). | |
| address | No | Adresse postale. | |
| vat_number | No | Numéro de TVA intracommunautaire. | |
| postal_code | No | Code postal. | |
| country_alpha2 | No | Code pays ISO (ex: 'FR'). | |
| payment_method | No | Méthode de paiement : 'automatic_transfer', 'manual_transfer', 'check', 'cash', 'card'. | |
| establishment_no | No | SIRET (14 chiffres). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the mutation and non-idempotent profile is covered structurally. The description adds nothing beyond that (e.g., no warning about duplicate supplier creation, no side effects such as creating a linked account).
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?
Two short sentences, front-loaded with the action and then the constraint. Nothing is padded, though the second sentence is redundant with the schema, so it is efficient rather than maximally informative.
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?
An output schema exists and the input schema is fully documented, so return values and field formats are covered elsewhere. However, for an 11-parameter creation tool with optional business identifiers (IBAN, VAT, SIRET), the description provides no validation expectations, default behavior, or error conditions, leaving it only minimally adequate.
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 100% and all 11 parameters carry their own French descriptions (IBAN, SIREN, SIRET, TVA, payment_method values), so the schema does the heavy lifting. The description's only parameter remark is 'Le nom est obligatoire', which merely restates the required array; baseline 3 applies.
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?
States a specific verb ('Crée') and resource ('un nouveau fournisseur'), so the operation is unambiguous. It does not need to distinguish itself from a sibling because no other tool creates suppliers, though it also offers no explicit contrast (e.g., vs. pennylane_list_suppliers or pennylane_update_supplier).
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 gives no context for when to use this tool versus alternatives, no prerequisites, and no indication of what happens on success. The only guidance is the required-field note, which is already enforced by the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_current_dossierARead-onlyIdempotent
Affiche le dossier comptable actuellement actif avec les informations de connexion Pennylane (via /me).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that it returns connection information and uses the /me endpoint, but does not disclose auth requirements, rate limits, or other behavioral traits beyond what annotations provide.
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, front-loaded sentence with no wasted words. The verb comes first, followed by the resource and scope, making it easy to parse quickly.
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 tool is a zero-parameter read-only operation with an output schema and rich annotations, the description is nearly complete. It could add one sentence on when to choose it over similar dossier-listing tools, but otherwise nothing essential is missing for correct invocation.
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 tool takes zero parameters, so there is no parameter semantics to clarify. Per calibration, a 0-param tool receives a baseline of 4 when the schema is empty and the description does not need to compensate.
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?
States a specific verb ('Affiche') and resource ('dossier comptable actuellement actif') with additional scope ('informations de connexion Pennylane'). The 'currently active' qualifier implicitly distinguishes it from list-all siblings like pennylane_list_dossiers, but no sibling is named explicitly.
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?
Usage is implied by the purpose: retrieve the active dossier and connection info. However, there is no explicit when-to-use guidance, no prerequisites, and no mention of alternatives such as pennylane_list_dossiers or pennylane_whoami.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_finalize_customer_invoiceA
Transforme un brouillon de facture client en facture finalisée. Attention : cette action est irréversible. La facture reçoit un numéro définitif.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la facture brouillon à finaliser. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is partly covered. The description adds genuinely new behavioral context beyond the annotations: the action is irreversible and the invoice acquires a definitive number. It does not mention auth requirements or exactly which fields become immutable, keeping it short of a 5.
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 tightly-scoped sentences with no filler. The purpose is front-loaded and the irreversibility warning is given immediately after, in an easy-to-spot position.
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 single-parameter mutation with an output schema present, the description covers what the agent needs: what it does, that it is irreversible, and the numbering consequence. Minor gaps (auth/permission prerequisites, whether it can fail on an already-finalized invoice) remain but are non-blocking.
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 100% and there is only one parameter, whose meaning ('identifiant de la facture brouillon') is fully documented in the schema. The description adds nothing about the id beyond what the schema already provides, so the baseline of 3 applies.
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?
States a specific verb (transforme/finalise) and resource (brouillon de facture client → facture finalisée), making the state transition explicit. This clearly distinguishes it from the sibling create_customer_invoice and update_customer_invoice tools without opening either schema.
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 the trigger condition (you have a draft to finalize), but never names an alternative or states when-not to use it. There is no explicit routing against update_customer_invoice or mark_customer_invoice_paid, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_accountARead-onlyIdempotent
Récupère le détail d'un compte comptable par son identifiant.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique du compte comptable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds no additional behavioral context (no auth, error, or rate-limit notes), which is acceptable given the annotation coverage but earns no bonus.
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, front-loaded sentence that states action, resource, and the required key with zero waste.
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 simple single-parameter read with an output schema present, the description need not explain return values, and the annotations carry safety. It is nearly complete, though it could have differentiated itself from the list sibling.
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 100% and there is only one parameter whose meaning is fully documented in the schema. The description's 'par son identifiant' merely restates what the schema already says, adding no new formatting or lookup semantics.
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?
States a specific verb and resource: 'Récupère le détail d'un compte comptable par son identifiant.' An agent can distinguish it from list_accounts, create_account, and update_account. It does not explicitly name the sibling alternatives, but the singular-retrieval semantics are clear.
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?
Usage is only implied by the single-identifier semantics: fetch one account when its id is known. There is no explicit statement of when to prefer this over pennylane_list_accounts, nor any exclusion or prerequisite note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_agl_exportARead-onlyIdempotent
Récupère le détail d'un export Grand Livre Analytique. Retourne le statut et l'URL de téléchargement si prêt.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de l'export AGL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only the conditional-return behavior ("si prêt"), which usefully implies the export may not be ready yet, but it omits anything about auth, rate limits, or how long generation takes.
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?
Two short sentences with zero padding; the core action is front-loaded and the conditional return detail follows immediately. Every sentence earns its place.
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 an output schema present and annotations covering the safety profile, the description is nearly complete for a simple single-parameter read. The only minor gap is the absence of any explicit routing against sibling get/create export tools.
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?
There is a single parameter with 100% schema description coverage ("Identifiant de l'export AGL"), so the schema fully documents it. The description adds no further meaning about the id's format or origin, making the baseline 3 appropriate.
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 ("Récupère le détail") and resource ("export Grand Livre Analytique"), which is clearly distinguishable from the sibling pennylane_create_agl_export by the retrieval framing. It does not, however, explicitly name any alternative tool for contrast.
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?
Usage is only implied: the note that it "Retourne le statut et l'URL de téléchargement si prêt" hints at polling for an asynchronously generated export, but there is no explicit statement of when to call this versus create_agl_export or get_fec_export, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_billing_subscriptionBRead-onlyIdempotent
Récupère le détail complet d'un abonnement de facturation.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de l'abonnement. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds only 'détail complet,' implying the full object is returned, but says nothing about auth requirements, error behavior for a missing id, or pagination/expansion semantics.
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 front-loaded sentence that names the action and the returned object with zero filler. Nothing could be removed without losing meaning.
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?
An output schema exists, so return values need no explanation, and the annotations cover the safety profile. For a one-parameter read tool this is largely complete; only failure behavior for an invalid id is unaddressed.
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 100% for the single 'id' parameter, whose meaning ('Identifiant de l'abonnement') is already documented in the schema. The description adds no format, type, or lookup-source detail beyond that, so the baseline 3 is correct.
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?
States a specific verb ('Récupère') and resource ('le détail complet d'un abonnement de facturation'), which is enough for an agent to distinguish this retrieval-by-id tool from the list/create/update siblings even without naming them. No explicit sibling differentiation, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use, when-not-to-use, or alternative-tool guidance. It does not say to prefer pennylane_list_billing_subscriptions when the id is unknown or pennylane_update_billing_subscription when modifying, leaving routing to inference from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_categoryBRead-onlyIdempotent
Récupère le détail d'une catégorie analytique par son identifiant.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la catégorie. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that – no auth requirements, no note on behavior for a missing id, and no extra context – so it contributes little behavioral value.
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 front-loaded sentence with zero filler; the resource and the keying mechanism are both stated immediately.
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 low-complexity single-parameter read tool with full annotation coverage and an output schema, explaining return values is unnecessary. The description covers the essentials, though it could say a bit more to route agents between the several category-related siblings.
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 100% and the id parameter is already documented as 'Identifiant de la catégorie.' The description's 'par son identifiant' merely restates the schema, adding no format or constraint details. Baseline 3 applies.
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?
States a specific verb (Récupère) and resource (catégorie analytique) keyed by identifier, so an agent can tell it apart from pennylane_list_categories. However it does not explicitly distinguish itself from siblings like pennylane_get_category_group or pennylane_list_group_categories.
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 on when to use this versus pennylane_list_categories or pennylane_get_category_group, nor any prerequisites mentioned. The single-record-by-id usage is only implied by the phrase 'par son identifiant'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_category_groupBRead-onlyIdempotent
Récupère le détail d'un groupe de catégories par son identifiant.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du groupe de catégories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, covering the safety profile. The description adds nothing beyond 'retrieve detail' – no note on auth, on what a category group contains, or on behavior when the id doesn't exist.
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?
One short sentence with the verb, resource and lookup key front-loaded; there is no filler to remove.
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 an output schema present, return-value detail is unnecessary, and one parameter is fully documented. However, for a get-by-id tool sitting among list_category_groups and get_category, the description does nothing to disambiguate the resource, leaving a small gap.
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 100% and there is a single required id parameter already documented as 'Identifiant du groupe de catégories.' The description's 'par son identifiant' merely restates it, so the baseline of 3 applies.
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?
States a specific verb ('Récupère') and resource ('le détail d'un groupe de catégories') scoped by identifier, so an agent can distinguish it from pennylane_list_category_groups. It does not name the sibling explicitly, which keeps it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'par son identifiant' implies the id must come from a prior list call, but no tool is named and there is no when/when-not guidance. The agent must infer that this is the detail-fetch counterpart to pennylane_list_category_groups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_customerARead-onlyIdempotent
Récupère le détail d'un client par son identifiant. Retourne les informations complètes (adresse, contacts, conditions de paiement).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique du client. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds that the response contains address, contacts and payment terms, which is light but relevant context; it says nothing about auth scope or missing-id behavior, so a 3 is appropriate.
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?
Two short sentences, zero filler, with the action front-loaded and the return content following. Every sentence earns its place.
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 an output schema covering return values and rich annotations covering the safety profile, the description only needs to convey purpose and lookup key, which it does. A brief note on error behavior for an unknown id 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?
Schema description coverage is 100% and there is a single, fully documented parameter, so the baseline is 3. The description only echoes 'par son identifiant' without adding format or constraint detail beyond 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?
States a specific verb (Récupère) and resource (le détail d'un client) with the lookup key (par son identifiant), which cleanly separates it from the list_customers sibling. It does not explicitly name an alternative, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'par son identifiant' implies the precondition that an id is already known, distinguishing it from list_customers, but the description never states when to use this versus listing or the changelog tools. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_customer_invoiceARead-onlyIdempotent
Récupère le détail complet d'une facture client par son identifiant, en un appel.
Les lignes (invoice_lines), les paiements (payments) et les transactions
bancaires rapprochées (matched_transactions) sont intégrés, au lieu de leurs URL.
Listes payments et matched_transactions vides = facture non rapprochée dans
Pennylane ; pour savoir si l'argent est arrivé, voir Qonto.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique de la facture client. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld/non-destructive, so the description earns credit for adding response-shape behavior: invoice_lines, payments and matched_transactions are embedded rather than returned as URLs. It also discloses a non-obvious data semantic (empty lists = unreconciled), which annotations cannot convey.
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?
Front-loaded with purpose, then progressively adds embedding behavior and reconciliation semantics in three tight sentences. Every sentence adds distinct information and none is filler.
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?
Output schema exists so return values need not be enumerated, and the description still supplies the one thing an agent would otherwise get wrong: that payments/matched_transactions are embedded and that empty lists do not mean the money has arrived. Combined with annotations covering safety, this is complete for a one-parameter getter.
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 100% and there is a single documented 'id' parameter, so the schema already carries the semantics. 'Par son identifiant' restates the schema without adding format, range or validity guidance, so the baseline 3 applies.
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?
States a specific verb (récupère) and resource (facture client) with the lookup key (par son identifiant), and 'détail complet ... en un appel' implicitly separates it from the list_customer_invoices sibling. It never names an alternative explicitly, so it falls just short of full sibling differentiation.
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?
Usage is implied by 'en un appel' (fetch everything in a single call) rather than stated as a when-to-use rule against list_customer_invoices or list_customer_invoice_lines. The note that empty payments/matched_transactions mean 'not reconciled, see Qonto' is a partial when-not hint, but no alternative tool in this family is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_entryBRead-onlyIdempotent
Récupère le détail complet d'une écriture comptable avec toutes ses lignes.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique de l'écriture comptable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds that the response includes all lines of the entry, which is useful behavioral context, but it does not disclose authentication needs, rate limits, or error behavior beyond that.
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, front-loaded sentence that efficiently conveys the core purpose and scope with zero wasted words.
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 simple getter with one documented parameter, full annotation coverage, and an output schema, the description is nearly complete. It could be improved by clarifying how it differs from list_entries or get_entry_line, but it does not omit anything essential for correct invocation.
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 input schema has 100% description coverage, with the single 'id' parameter clearly documented as the unique identifier of the entry. The description adds no additional syntax, format, or constraint details beyond what the schema already provides, so the baseline of 3 is appropriate.
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 ('Récupère') and resource ('écriture comptable') and clarifies scope by saying it returns the complete detail with all lines. However, it does not explicitly differentiate from siblings like list_entries or get_entry_line, leaving some ambiguity for an agent to resolve from tool names alone.
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 such as list_entries or get_entry_line. The description only states what the tool does, not the conditions or context that should trigger its selection over similar siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_entry_lineBRead-onlyIdempotent
Récupère le détail d'une ligne d'écriture comptable.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique de la ligne d'écriture. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and idempotency profile is fully covered. The description adds nothing beyond that structured data, but with annotations carrying the burden, a 3 is appropriate.
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, efficient sentence that is front-loaded and free of waste. It is perhaps overly terse, but nothing is padding.
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?
An output schema exists so return values need not be described, and annotations cover the safety profile. For a simple single-id getter this is minimally adequate, but the lack of sibling disambiguation leaves a small gap.
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 100% for the single id parameter ('Identifiant unique de la ligne d'écriture'), so the schema fully documents the argument. The description adds no extra meaning such as format or sourcing of the id, giving the baseline 3.
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?
States a specific verb (Récupère) and resource (le détail d'une ligne d'écriture comptable), so an agent knows this fetches a single entry line rather than the parent entry. However, it does not explicitly differentiate itself from siblings like pennylane_get_entry, pennylane_list_entry_lines, or pennylane_list_all_entry_lines, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no mention of alternatives (e.g. list_entry_lines for retrieving many lines), and no prerequisites. Usage is only implied by the tool name and verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_fec_exportARead-onlyIdempotent
Récupère le détail d'un export FEC. Retourne le statut (pending/ready/error) et l'URL de téléchargement si prêt (expire dans 10 minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de l'export FEC. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description's real value is the extra behavioral detail it adds: the three status values and, critically, that the download URL expires in 10 minutes. That expiry constraint is non-obvious and materially affects how an agent should act.
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?
Two short sentences, outcome-oriented and front-loaded: what it returns first, then the time-sensitive caveat. No filler.
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 an output schema present, the description need not enumerate return fields, and annotations cover safety. The added status/expiry detail makes it self-sufficient for a single-param read tool, though a hint about polling cadence or the create-then-get workflow would complete it.
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 100% and the single 'id' parameter is already documented as 'Identifiant de l'export FEC.' The description adds no format or source guidance for the id, so the schema carries the load and 3 is the correct baseline.
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?
States a specific verb and resource ('Récupère le détail d'un export FEC'), so an agent can immediately tell it apart from the sibling pennylane_create_fec_export. It also summarizes the payload (status + download URL), though it does not explicitly name the sibling it is not.
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 mention of a pending/ready/error status implicitly signals a polling use case after pennylane_create_fec_export, but no when-to-use, prerequisites, or alternative is stated explicitly. Usage is inferred rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_journalBRead-onlyIdempotent
Récupère le détail d'un journal comptable par son identifiant.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique du journal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds no behavioral context beyond the annotations (no auth needs, rate limits, or error behavior), which is acceptable given annotation coverage but adds no value.
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 well-formed sentence with zero filler, front-loading the action and resource. Nothing needs trimming and nothing is buried.
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 simple one-parameter read with an output schema and full annotation coverage, the description supplies what an agent needs to call it. Only the lack of any link to the list_journals workflow keeps it from being 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?
With a single parameter at 100% schema description coverage, the schema already documents the id fully. The phrase "par son identifiant" merely echoes the schema's "Identifiant unique du journal" without adding format or source guidance, so the baseline 3 applies.
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 ("Récupère"), resource ("journal comptable"), and scope ("par son identifiant"), making the operation unambiguous. It implicitly contrasts with pennylane_list_journals by fetching a single detail record, but never names that sibling, so it falls short of full differentiation.
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 when-to-use, when-not, or alternative guidance. The description only restates that an identifier is required, leaving the agent to infer that this is the single-record counterpart of list_journals without any explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_productARead-onlyIdempotent
Récupère le détail d'un produit par son identifiant. Retourne : libellé, prix HT, TVA, unité, compte comptable associé.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique du produit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the returned field set (libellé, prix HT, TVA, unité, compte comptable), which is mild added context, but it discloses nothing about error behavior, missing-id handling, or permissions.
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?
Two short sentences, front-loaded with the action and resource. The second line listing return fields is somewhat redundant with the existing output schema, keeping it just below a 5.
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 simple read-only, single-id retrieval with rich annotations and an output schema, the description is essentially complete. Since the output schema exists, the return-field enumeration is a bonus rather than a requirement, so nothing critical is missing.
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 100% and the single 'id' parameter is documented in the schema as 'Identifiant unique du produit', so the description adds no new parameter meaning. Baseline 3 is appropriate when the schema does the work.
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?
States a specific verb and resource ('Récupère le détail d'un produit par son identifiant'), which clearly differentiates it from the list/create/update product siblings by naming the identifier-based detail retrieval. It is clear but does not explicitly name an alternative like pennylane_list_products for enumeration.
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?
Usage is only implied: the agent must infer it should have an id (presumably from pennylane_list_products) and that this is the single-record lookup versus the list tool. No explicit when-to-use or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_quoteARead-onlyIdempotent
Récupère le détail complet d'un devis par son identifiant. Retourne toutes les informations : montants, lignes, statut, client.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique du devis. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety behavior is fully covered structurally. The description only adds that the full detail (amounts, lines, status, customer) is returned, which is largely redundant given an output schema exists; it says nothing about errors or auth.
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?
Two short sentences, front-loaded with the action and the identifier, with no wasted words. The second sentence's field list is slightly redundant against the output schema but does not bloat the text.
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 single-argument read tool with rich annotations and a dedicated output schema, the description covers what the tool does and what it returns. Nothing critical is missing, though an explicit sibling reference would round it out.
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 100% for the single required 'id' parameter, so the schema itself documents the argument. The phrase 'par son identifiant' merely restates the id parameter without adding format, range, or lookup semantics. Baseline 3 applies.
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?
States a specific verb (récupère) and resource (devis) scoped to retrieval by identifier, and enumerates the returned fields (montants, lignes, statut, client). It is easy to distinguish from list_quotes/create_quote/update_quote, but it never names a sibling explicitly to reinforce the routing.
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?
Usage is implied: to fetch a single quote you already know the id of. There is no explicit when-to-use vs. pennylane_list_quotes or pennylane_list_quote_lines, and no stated preconditions (e.g. needed permissions or whether the quote must exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_supplierARead-onlyIdempotent
Récupère le détail d'un fournisseur par son identifiant. Retourne les informations complètes (adresse, SIRET, IBAN, conditions de paiement).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique du fournisseur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered externally. The description adds that a full supplier record is returned (address, SIRET, IBAN, payment terms), which is useful but overlaps heavily with the output schema that already exists.
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?
Two short sentences, zero filler, with the primary action front-loaded and the returned-field detail following. Nothing to trim.
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 a 1-param schema at full coverage, an output schema, and annotations covering the safety/idempotency profile, the description is nearly complete. A brief note on error behavior for a non-existent id is the only meaningful gap.
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 100% and there is a single parameter whose schema description already explains it as the supplier's unique identifier. The description's 'par son identifiant' merely restates the schema, so this is baseline territory.
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?
States a specific verb and resource ('Récupère le détail d'un fournisseur') and scopes it to a single record via 'par son identifiant', which cleanly separates it from the list/create/update siblings. It doesn't explicitly name those siblings, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case (fetch one supplier by id) is implied by the identifier-scoping, but there is no explicit when-to-use vs. when-to-use-list guidance and no mention of alternatives. Adequate but leaves routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_supplier_invoiceARead-onlyIdempotent
Récupère le détail complet d'une facture fournisseur. Retourne toutes les informations : montants, lignes, statut, fournisseur.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant unique de la facture fournisseur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered structurally. The description adds value by enumerating what the detail payload contains (montants, lignes, statut, fournisseur), hinting it aggregates line-level data, but says nothing about auth scope, pagination or error behavior.
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?
Two short sentences, zero waste, and the core action is front-loaded ahead of the return summary. Nothing superfluous.
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 single-parameter read tool with an output schema and full annotation coverage, the description is nearly sufficient on its own; it even summarizes the return contents. Minor gap is the absence of any routing hint to the list or line-level siblings.
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?
Only one parameter, and schema description coverage is 100% ('Identifiant unique de la facture fournisseur'), so the schema already carries full meaning. The description adds no syntax or format detail for the id, making the baseline 3 appropriate.
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?
States a specific verb and resource ('Récupère le détail complet d'une facture fournisseur'), clearly distinguishing a single-record fetch from the sibling list_supplier_invoices. It does not explicitly name the alternative, but the verb 'get/récupère' plus 'détail complet' makes the singular-fetch intent unambiguous.
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?
Usage is implied by the 'get one by id' pattern shared with pennylane_get_customer_invoice, pennylane_get_supplier, etc. There is no explicit when-to-use vs list_supplier_invoices or when-not guidance, so the agent must infer the selection rule from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_get_trial_balanceARead-onlyIdempotent
Récupère la balance générale pour une période donnée. Retourne chaque compte avec ses totaux débit/crédit. Essentiel pour les travaux de clôture, la vérification des soldes, et la préparation des états financiers.
L'outil pagine automatiquement pour récupérer TOUS les comptes (classes 1 à 7) afin de garantir des totaux exacts.
| Name | Required | Description | Default |
|---|---|---|---|
| period_end | Yes | Fin de période (YYYY-MM-DD). | |
| is_auxiliary | No | Filtre sur le type de compte : true = uniquement les comptes auxiliaires (détail par tiers 411xxx/401xxx), false = uniquement les comptes généraux, Ne pas renseigner (null) = tous les comptes retournés par l'API. Par défaut null : l'API retourne TOUS les comptes (classes 1 à 7), le serveur exclut automatiquement les auxiliaires de l'output sauf demande explicite. | |
| period_start | Yes | Début de période (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: automatic pagination across all accounts (classes 1-7) and handling of auxiliary accounts, which tells the agent the result is a complete, exact total rather than a page.
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?
Two short paragraphs with the core action front-loaded and pagination detail second. Efficient, though the 'TOUS les comptes' emphasis is slightly redundant with the schema's own wording.
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?
An output schema exists, so return values need not be explained, and annotations carry the safety profile; the description covers purpose, use contexts, and pagination behavior. It is complete for a read-only report tool, with only minor redundancy rather than a real gap.
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 100%, so the schema already documents period_start, period_end, and the is_auxiliary filter including its default behavior. The description's note about classes 1-7 largely restates what the schema says, adding only marginal meaning over the structured fields, so the baseline of 3 applies.
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?
States a specific verb ('Récupère') and resource ('balance générale') plus the returned content ('chaque compte avec ses totaux débit/crédit'). The purpose is unambiguous, but the description does not explicitly name or contrast against siblings like pennylane_list_accounts or pennylane_list_entries, so it stays at 4.
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?
Explicitly names the use contexts: closing work ('travaux de clôture'), balance verification ('vérification des soldes'), and financial statement preparation. That gives clear when-to-use guidance, but there are no exclusions or named alternatives for when a different tool (e.g., list_entries) is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_letter_linesA
Lettre (rapproche) des lignes d'écriture entre elles. Permet de pointer des factures avec des règlements. Les lignes doivent appartenir au même compte (ex: 411xxx client). Par défaut, débit total = crédit total.
| Name | Required | Description | Default |
|---|---|---|---|
| line_ids | Yes | IDs des lignes à lettrer (min 2, même compte, équilibrées débit/crédit). | |
| allow_partial | No | Autoriser le lettrage partiel (déséquilibré). Défaut: false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true. The description adds the operational constraints an agent needs: lines must share the same account (e.g. 411xxx), and the default requires total debit = total credit. It does not say how to reverse the operation, which is the main remaining gap.
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?
Four short sentences, front-loaded with what the tool does, then the use case, then constraints. No filler, though the parenthetical 'rapproche' is a minor redundancy with 'lettre'.
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 an output schema present, the description needn't explain returns. It covers purpose, use case, account constraint and balance default, which is nearly everything needed; the only omissions are the reversibility path and the account-type restriction for other account classes.
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 100% so the schema already documents both parameters, but the description adds meaning to allow_partial by explaining the default balancing rule (total debit = total credit) that the flag relaxes.
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?
States a specific verb and resource: lettering (reconciling) entry lines with each other, and clarifies the practical goal of matching invoices to payments. An agent can distinguish this from unletter_lines, but the description does not name the sibling it is complementary to.
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?
Gives implied usage context ('permet de pointer des factures avec des règlements') and prerequisites (same account, balanced by default), but never explicitly says when to prefer this over unletter_lines or list_lettered_lines, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_link_categoriesBIdempotent
Associe des catégories analytiques à une ligne d'écriture. Chaque catégorie a un poids (0 à 1, somme = 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line_id | Yes | ID de la ligne d'écriture. | |
| categories | Yes | Catégories analytiques avec poids. Chaque élément : {id: int, weight: str}. Poids de 0 à 1, somme = 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation is a non-read-only, idempotent, non-destructive, open-world mutation. The description adds only the weight constraint (0–1, sum=1), which is not behavioral context beyond the schema. No auth, rate-limit, or side-effect detail is given, but the annotation coverage lowers the bar.
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?
Two short sentences, front-loaded with the core action and no filler. The second sentence duplicates a schema constraint rather than adding new information, keeping it just below maximum efficiency.
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 an output schema present and annotations covering the safety profile, the main gaps are the absence of when-to-use guidance and any failure/edge-case notes. Adequate for a simple two-parameter tool but not fully self-sufficient.
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 100%, so both line_id and categories are fully documented in the schema. The description restates the weight rule but adds no syntax or format detail beyond what the schema already provides, warranting the baseline 3.
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 and resources: 'Associe des catégories analytiques à une ligne d'écriture' (associates analytical categories to an entry line). This distinguishes it reasonably from listing siblings like pennylane_list_line_categories, though it does not explicitly name or contrast with any sibling.
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 when-to-use guidance, no mention of prerequisites, and no alternatives offered. The agent must infer that this is the tool for attaching categories to a line versus the list/get variants in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_accountsARead-onlyIdempotent
Liste les comptes du plan comptable avec filtres et pagination. Utile pour consulter le plan comptable, chercher un compte par préfixe (411=clients, 401=fournisseurs, 512=banque, 6=charges, 7=produits).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id' ou '-id'. | |
| limit | No | Nombre de résultats (1-1000, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| enabled_only | No | Retourner uniquement les comptes actifs (défaut: true). | |
| number_prefix | No | Filtre par préfixe de numéro de compte (ex: '411' clients, '401' fournisseurs, '512' banque). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true. The description adds that the operation supports filters and pagination, which is useful context, but it does not disclose anything further about permissions, rate limits, or what filtering defaults (e.g., enabled_only) mean behaviorally. With annotations covering the safety profile, this is adequate but not rich.
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?
Two sentences with no wasted words. The tool's core function is front-loaded, and the second sentence provides immediately useful prefix examples without sprawling into unrelated detail.
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 read-only list tool with 5 fully documented parameters, rich annotations, and an output schema, the description covers purpose and usage well. It does not explicitly mention when to choose pennylane_get_account instead, but the gap is minor given the schema and annotations already carry the rest of the load.
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 100%, and the description's prefix examples largely repeat what is already in the number_prefix parameter description (e.g., '411' clients, '401' fournisseurs, '512' banque). It adds only the extra examples '6=charges, 7=produits', so the schema does the heavy lifting and baseline 3 is appropriate.
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?
States a specific verb ('Liste') and resource ('comptes du plan comptable') and scopes it with 'filtres et pagination'. The singular counterparts in the sibling list (pennylane_get_account, pennylane_create_account, pennylane_update_account) are implicitly distinguished by the plural list verb, so an agent can tell what this tool does without opening the schema.
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?
Provides concrete usage contexts: consulting the chart of accounts and searching by account-number prefix, with real examples (411=clients, 401=fournisseurs, 512=banque). It does not explicitly name alternatives such as pennylane_get_account for a single account or state when not to use this tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_all_entry_linesARead-onlyIdempotent
Liste toutes les lignes d'écriture comptable avec filtres par journal, compte et période. Utile pour analyser les mouvements d'un compte ou d'un journal sur une période.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| date_to | No | Date de fin (YYYY-MM-DD). | |
| date_from | No | Date de début (YYYY-MM-DD). | |
| journal_id | No | Filtrer par ID de journal. | |
| ledger_account_id | No | Filtrer par ID de compte comptable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, fully covering the safety profile. The description adds the filter dimensions but nothing about pagination behavior, result volume, or how the 'all vs scoped' retrieval differs from the sibling — so it adds only marginal behavioral context.
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?
Two tight sentences with the purpose front-loaded and no filler. The usage clause is a slight add-on but still earns its place.
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 an output schema present, return values need not be described, and all 7 optional params are covered by the schema. The one remaining gap is failure to disambiguate from the pennylane_list_entry_lines sibling, but otherwise the definition is sufficient for a low-complexity list tool.
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 100%, so each parameter (sort, limit, cursor, date_from/to, journal_id, ledger_account_id) is already documented in the schema. The description only restates the journal/account/period filter groups, adding no syntax or format detail beyond the schema; baseline 3 is appropriate.
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?
States a clear verb (Liste) and resource (lignes d'écriture comptable) plus the filter dimensions, so an agent knows this is a filtered bulk-listing tool. However, it never distinguishes itself from the near-identical sibling pennylane_list_entry_lines, leaving the 'all vs scoped' boundary ambiguous.
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 second sentence ('Utile pour analyser les mouvements d'un compte ou d'un journal sur une période') gives an implied use context, but there is no explicit when-to-use/when-not guidance and no mention of the competing siblings list_entry_lines, get_entry_line, or list_entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_billing_subscriptionsARead-onlyIdempotent
Liste les abonnements de facturation récurrente avec filtres et pagination. Utile pour consulter les abonnements actifs, filtrer par client ou statut.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| status | No | Filtrer par statut. | |
| customer_id | No | Filtrer par ID client. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds that results are filterable and paginated, but pagination is already evident from the cursor/limit parameters, so it contributes little beyond structured data.
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?
Two short sentences with the purpose front-loaded and no filler. Efficient, though the second sentence is somewhat redundant with the 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?
An output schema exists, all parameters are documented, and annotations cover the safety and idempotency profile. For a read-only list tool, nothing an agent needs to call it correctly is missing.
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 100%, so all five parameters (sort, limit, cursor, status, customer_id) are already documented in the schema. The description only gestures at 'filtres' and 'statut/client' without adding format or syntax detail, which is the expected baseline when the schema does the heavy lifting.
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?
States a specific verb ('Liste') and resource ('abonnements de facturation récurrente') and notes that filters and pagination are supported. It does not explicitly distinguish itself from siblings like pennylane_get_billing_subscription or pennylane_list_subscription_lines, but the scope is unambiguous.
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?
'Utile pour consulter les abonnements actifs, filtrer par client ou statut' gives implied usage context. However it offers no explicit when-to-use alternatives (e.g., use get_billing_subscription for a single record, or list_subscription_lines for line detail), so routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_categoriesARead-onlyIdempotent
Liste les catégories analytiques avec filtres et pagination. Utile pour consulter les axes analytiques disponibles.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| category_group_id | No | Filtrer par ID de groupe de catégories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered without the description. The description adds only that results are filtered and paginated, which is a minor behavioral note and largely duplicates what the schema's limit/cursor parameters already convey.
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?
Two short sentences, front-loaded with the operation and free of filler. The second sentence is mildly redundant with the first since it restates the same purpose rather than adding new information.
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 an output schema present, return values need not be explained, and annotations cover the read-only/idempotent profile, so the description is nearly sufficient for a simple list endpoint. The remaining gap is disambiguation from the many sibling category tools, which an agent would still have to resolve on its own.
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 100%, so all four parameters (sort, limit, cursor, category_group_id) are already documented with defaults and bounds. The phrase 'avec filtres et pagination' adds no syntax or semantics beyond what the schema states, making the baseline 3 correct.
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 names a specific verb and resource ('Liste les catégories analytiques'), so the operation is immediately identifiable. However, it does not differentiate this tool from close siblings such as pennylane_list_group_categories, pennylane_list_category_groups, pennylane_list_line_categories, or pennylane_get_category, so an agent must guess which category-listing tool is the right one.
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 second sentence ('Utile pour consulter les axes analytiques disponibles') implies the use case but gives no explicit when-to-use rule, no prerequisites, and never names an alternative tool for a related need. Usage is only inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_category_groupsARead-onlyIdempotent
Liste tous les groupes de catégories analytiques. Chaque groupe contient des catégories utilisées pour la ventilation analytique.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds domain context about analytical allocation but says nothing about pagination behaviour or result volume that the annotations do not already imply.
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?
Two short sentences, front-loaded with the action and object, with no filler. The second sentence is explanatory rather than essential, but it is brief and earns its place as domain context.
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 simple paginated read-only list tool with an output schema and full annotation coverage, the description is sufficient. Return shape is handled by the output schema and pagination parameters by the input schema; nothing critical for correct invocation is missing.
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 100%, so limit and cursor are already fully documented in the schema. The description adds no additional meaning about parameter behaviour, which is the expected baseline when the schema does the heavy lifting.
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?
States a specific verb ('Liste') and resource ('groupes de catégories analytiques'), and the second sentence clarifies what a group contains. It does not explicitly distinguish itself from nearby siblings such as pennylane_list_group_categories or pennylane_list_categories, so sibling differentiation is left to the reader.
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 listing intent implies this is the entry point for enumerating category groups, but there is no explicit when-to-use guidance or statement of when to prefer pennylane_list_group_categories or pennylane_get_category_group instead. Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_customer_invoice_linesCRead-onlyIdempotent
Liste les lignes (articles) d'une facture client spécifique.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| customer_invoice_id | Yes | ID de la facture client. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds no behavioral context beyond that (no pagination behavior, no note that the required invoice id must reference an existing customer invoice), so there is little extra disclosure to credit.
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 short sentence that front-loads the verb and resource with no filler. It is appropriately sized, though it is terse enough that it leaves obvious gaps unaddressed.
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 a full output schema, rich annotations and 100% parameter coverage, the description only needs to carry purpose and routing. Purpose is clear, but the missing usage/routing guidance against sibling line-list tools leaves a modest gap, making this minimally adequate rather than 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 100%, with limit, cursor and customer_invoice_id each documented in the schema itself. The description's parenthetical "(articles)" slightly clarifies what a line is, but it adds no format, range or pagination detail beyond the schema, so the baseline of 3 applies.
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 gives a specific verb ("Liste") and resource ("les lignes (articles) d'une facture client"), clearly distinguishing the line-item view from the invoice-header view of the sibling pennylane_list_customer_invoices. It also scopes to "client" invoices versus the supplier-invoice-line sibling, though it never names those siblings explicitly.
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 when-to-use or when-not-to-use guidance. The agent is left to infer that this is the drill-down from pennylane_list_customer_invoices or pennylane_get_customer_invoice, and no alternative is mentioned for retrieving invoice-level rather than line-level data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_customer_invoicesARead-onlyIdempotent
Liste les factures clients (et avoirs, montant négatif), en mode compact par défaut.
Filtré côté Pennylane : customer_id, date_from, date_to. L'API ne filtre ni par
statut, ni par échéance, ni par montant.
Filtré localement : status, unpaid_only, deadline_before. Dans ce cas l'outil pagine seul
(plafond 1 000 documents), renvoie toutes les correspondances et indique
is_complete ; limit et cursor sont ignorés.
« Payé » : le champ paid ne fait pas foi (les factures annulées ont paid=true).
Seuls status et remaining_amount_with_tax comptent. « Impayée » veut dire
« non rapprochée dans Pennylane » : pour savoir si l'argent est arrivé, voir Qonto.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri : 'id', '-id', 'date', '-date' (défaut : '-id'). En filtrage local, aussi 'deadline', '-deadline' (défaut : 'deadline'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20 ; ignoré en filtrage local). | |
| cursor | No | Curseur pour la pagination (ignoré en filtrage local). | |
| detail | No | true = JSON complet de chaque facture au lieu du mode compact. | |
| status | No | Statut exact (filtrage local) : 'upcoming', 'late', 'paid', 'cancelled', 'archived', 'draft', 'credit_note'. | |
| date_to | No | Date de facture maximale incluse, YYYY-MM-DD (côté Pennylane). | |
| date_from | No | Date de facture minimale incluse, YYYY-MM-DD (côté Pennylane). | |
| customer_id | No | Filtrer par ID client (côté Pennylane). | |
| unpaid_only | No | Seulement les impayées : ni brouillon, ni archivée, ni annulée, reste dû TTC > 0 (filtrage local). | |
| deadline_before | No | Échéance strictement antérieure à cette date, YYYY-MM-DD (filtrage local). Avec unpaid_only=true et la date du jour : les factures en retard. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and open-world hints. The description goes further by disclosing compact-mode default, local filtering pagination behavior (1000-document cap, is_complete indicator, ignored limit/cursor), and the critical caveat that the paid field is unreliable and only status and remaining_amount_with_tax should be trusted.
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 front-loaded with the main purpose and organized into clear paragraphs. It is somewhat lengthy, but every sentence conveys necessary nuance about filtering and semantics, so it earns its place without excessive 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?
Given 10 parameters, 100% schema coverage, an output schema, and rich annotations, the description fills the remaining gaps: local versus server-side filtering behavior, pagination side effects, and the ambiguous meaning of 'paid' and 'unpaid'. Nothing essential for correct invocation appears to be missing.
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 100%, so the baseline is 3. The description adds meaningful context by grouping parameters into server-side versus local filtering and explaining the consequences for pagination, which goes beyond the schema's individual parameter descriptions.
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?
Clearly states it lists customer invoices, including credit notes with negative amounts, in a compact mode by default. The verb+resource are unambiguous, but it does not explicitly name sibling alternatives such as get_customer_invoice or list_supplier_invoices to help an agent disambiguate in every case.
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?
Explains which filters are applied server-side versus locally, and notes that local filtering forces full pagination while limit and cursor are ignored. It also clarifies that 'unpaid' means not reconciled in Pennylane and points to Qonto for actual cash arrival, giving useful context but not explicit when-to-use-vs-alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_customersARead-onlyIdempotent
Liste les clients (entreprises et particuliers) avec filtres et pagination. Utile pour consulter la base clients, rechercher un client par nom ou type.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filtrer par nom (recherche partielle). | |
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| customer_type | No | Filtrer par type : 'company' ou 'individual'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description adds only that results are filtered and paginated, which is mild extra context; it says nothing the annotations don't about permissions or result behavior.
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?
Two short sentences with the core action front-loaded and no wasted preamble. The second sentence is slightly generic ('consulter la base clients') but still earns its place as usage hint.
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 an output schema present, rich annotations and full parameter documentation, the description needn't explain return values or safety. It is complete enough to call the tool correctly; the only gap is routing versus sibling list/get tools.
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 100%, so the baseline is 3. The description alludes to filters and pagination but adds no syntax, defaults or enum detail beyond what each schema property already documents (name, sort, limit, cursor, customer_type).
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?
States a specific verb ('Liste') and resource ('clients'), and even scopes the resource to companies and individuals. It does not explicitly contrast itself with sibling list/get pairs such as pennylane_get_customer or pennylane_list_suppliers, so it stops short of full differentiation.
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?
'Utile pour consulter la base clients, rechercher un client par nom ou type' implies usage context but gives no explicit when-not guidance or named alternative (e.g. use get_customer for a single record, list_suppliers for the other side of the ledger). Usage is inferable but never spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_dossiersARead-onlyIdempotent
Liste tous les dossiers comptables configurés avec leur statut. Les tokens sont masqués pour la sécurité.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond annotations – that tokens are masked for security in the output – but little else.
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?
Two short sentences, front-loaded with the core action and with zero filler. Every clause earns its place.
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 an output schema present, the return values need not be described, and the description still notes status and token masking. For a zero-argument list tool this is close to complete; only routing guidance versus sibling dossier tools is absent.
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 tool takes zero parameters, so the schema carries none of the semantic burden and the baseline of 4 applies. No parameter explanation is required.
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?
States a specific verb and resource ('Liste tous les dossiers comptables configurés') and adds scope detail about status and token masking. It is clearly distinguishable from siblings like switch_dossier or current_dossier, though it does not explicitly name them.
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?
Usage is implied by the operation itself (enumeration of configured dossiers), but there is no explicit when-to-use guidance or reference to sibling tools such as pennylane_current_dossier or pennylane_multi_dossier_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_entriesBRead-onlyIdempotent
Liste les écritures comptables (pièces) avec filtres par journal et période. Chaque écriture contient des lignes équilibrées (débit = crédit).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id', 'date', '-date'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| date_to | No | Date de fin (YYYY-MM-DD). | |
| date_from | No | Date de début (YYYY-MM-DD). | |
| journal_id | No | Filtrer par ID de journal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds a domain fact (entries contain balanced debit=credit lines), which is contextual but not operationally actionable; pagination and default limits live in the schema, not the prose.
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?
Two short sentences with no filler; the core action and filter scope are front-loaded. The second sentence about balanced lines is arguably the least load-bearing part but still compact.
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 rich annotations and an output schema, the description needn't explain returns; six optional params are fully documented in the schema. However, it omits routing guidance relative to the many sibling entry/entry-line tools, leaving a gap for a read-list tool in a crowded namespace.
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 100% (sort, limit, cursor, date_from/to, journal_id all documented), so the schema carries parameter semantics. The description's mention of journal and period filters loosely maps to journal_id and the date range but adds no syntax or format detail beyond 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?
States a specific verb ('Liste') and resource ('écritures comptables / pièces') and names the filter dimensions (journal, période). It does not distinguish itself from siblings like pennylane_get_entry or pennylane_list_entry_lines, so a 5 is not warranted.
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 indication of when to use this versus pennylane_get_entry (single entry), pennylane_list_entry_lines, or pennylane_list_all_entry_lines. Listing semantics are implied by the verb, but there is no explicit when-to-use or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_entry_linesCRead-onlyIdempotent
Liste les lignes d'écriture d'une pièce comptable spécifique.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| ledger_entry_id | Yes | ID de l'écriture comptable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, fully covering the safety profile, and an output schema exists. The description adds nothing beyond that: no note on pagination behavior, result size, or ordering, so it contributes no behavioral context of its own.
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 front-loaded sentence with no filler, which is appropriate for a simple read tool. It is efficient, though it is arguably too terse to carry the routing and pagination context an agent would benefit from.
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 annotations covering safety, a 100%-documented schema, and an output schema handling return values, the description is only marginally short of complete. The remaining gap is selection guidance against list_all_entry_lines/get_entry_line, which the description never addresses.
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 100%, so ledger_entry_id, limit and cursor are all documented in the schema itself. The phrase 'd'une pièce comptable spécifique' reinforces that ledger_entry_id is the scoping selector but adds no syntax or format detail beyond the schema, matching the baseline 3.
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 names a specific verb (Liste) and resource (lignes d'écriture) plus a scope qualifier ('d'une pièce comptable spécifique'), so an agent understands it returns lines belonging to one ledger entry. It does not name the close sibling pennylane_list_all_entry_lines, so no explicit differentiation is offered.
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 when-to-use guidance is given. The 'specific entry' phrasing implies scoping, but it never states the alternative (list_all_entry_lines for all lines, get_entry_line for a single line) or any prerequisite, so the agent must infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_fiscal_yearsARead-onlyIdempotent
Liste les exercices fiscaux avec leurs dates et statuts (open, closed, frozen). Utile pour connaître les périodes comptables.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id', 'start', '-start'. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful domain context by naming the possible statuses (open, closed, frozen), but says nothing about pagination or result volume beyond what the schema already states.
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?
Two short, front-loaded sentences that get to the point immediately with no filler. The trailing 'Utile pour...' clause is slightly redundant but still earns its place as a usage hint.
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 an output schema present and annotations carrying the safety profile, the description need not explain return values. It covers purpose, returned fields, and status values adequately; only explicit usage routing is missing.
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 100% – sort, limit, and cursor are all documented in the schema with formats, ranges, and defaults. The description adds no parameter-level meaning, so the baseline 3 applies.
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?
States a specific verb and resource ('Liste les exercices fiscaux') and enumerates the returned fields (dates, statuts). It is clear what the tool does, though it does not explicitly distinguish itself from any sibling, which is reasonable since no sibling lists fiscal years.
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?
'Utile pour connaître les périodes comptables' implies when the tool is relevant, but there is no explicit when-to-use, when-not-to-use, or pointer to an alternative tool. Usage is suggested rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_group_categoriesBRead-onlyIdempotent
Liste les catégories appartenant à un groupe spécifique.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| category_group_id | Yes | ID du groupe de catégories. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only the resource-scoping fact and no extra behavior (pagination, ordering, empty-group behavior), so it neither enriches nor misleads.
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 short sentence that front-loads the verb and the scoping constraint with zero filler. It is efficient, though the brevity comes at the cost of the usage guidance it omits.
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 a rich output schema, full parameter coverage, and complete annotations, most agent needs are met by structured fields. The description itself is adequate but leaves the key routing question against pennylane_list_categories and pennylane_list_category_groups unanswered.
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 100% and all three parameters (limit, cursor, category_group_id) are documented in the schema itself. The description adds no syntax or semantic detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb ('Liste') and resource ('catégories') scoped by 'appartenant à un groupe spécifique', so an agent can distinguish it from the all-categories sibling. It does not explicitly name pennylane_list_categories as the alternative, so sibling differentiation is only implicit.
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 when-to-use guidance or mention of alternatives. An agent must infer that this is chosen over pennylane_list_categories when filtering by group, but nothing in the text states that condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_journalsBRead-onlyIdempotent
Liste tous les journaux comptables (ventes, achats, banque, OD, paie...) avec filtres optionnels par type.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id' ou '-id'. | |
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| type_filter | No | Type de journal (sales, purchases, bank, payroll, miscellaneous). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered structurally. The description adds light context (the journal type taxonomy), but says nothing about pagination behaviour despite cursor/limit parameters, nor about ordering guarantees.
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 front-loaded sentence with no filler; the parenthetical examples earn their place by defining the domain vocabulary. It is appropriately sized for a simple list 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?
With an output schema present, return values need not be described, and annotations carry the safety profile, so the description's scope is reasonable. The only missing element an agent might want is routing guidance relative to sibling list/get tools.
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 100%, so the schema already documents sort, limit, cursor and type_filter comprehensively, establishing a baseline of 3. The description's 'filtres optionnels par type' merely restates what type_filter already conveys and adds no syntax or format detail beyond it.
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 and resource ('Liste tous les journaux comptables') and enumerates example journal categories (ventes, achats, banque, OD, paie), which removes ambiguity about what a 'journal' is. It does not explicitly distinguish itself from siblings like pennylane_get_journal or pennylane_create_journal, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions that optional filtering by type exists, but gives no guidance on when to use this tool versus pennylane_get_journal (single journal) or pennylane_list_entries, nor any prerequisites or exclusions. Usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_lettered_linesARead-onlyIdempotent
Liste les lignes lettrées (rapprochées) avec une ligne donnée. Permet de voir quels règlements sont pointés avec quelles factures.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| line_id | Yes | ID de la ligne de référence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful domain context by explaining that 'lettrées' means reconciled/matched lines, but it does not disclose additional traits like pagination behavior, auth requirements, or rate limits.
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?
Two short sentences with zero waste. The core action is front-loaded, followed immediately by a clarifying use case, and no unnecessary repetition 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?
An output schema exists, so return values need not be explained. Annotations cover the safety profile, and the schema covers parameters fully. The only minor gap is that the description does not mention pagination behavior, though the schema implies it.
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 100%, so the schema already documents limit, cursor, and line_id. The description echoes the required line_id ('avec une ligne donnée') but adds no syntax, format, or constraint details beyond the schema, making the baseline 3 appropriate.
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?
States a specific verb ('Liste') and resource ('lignes lettrées') tied to a given line, making the operation clear. It does not explicitly name or distinguish itself from siblings like pennylane_list_entry_lines or pennylane_letter_lines, so it falls short of full sibling differentiation.
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?
Provides a clear use case: seeing which payments are matched with which invoices. However, it does not specify when to prefer this over alternatives (e.g., list_entry_lines, letter_lines) or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_line_categoriesBRead-onlyIdempotent
Liste les catégories analytiques associées à une ligne d'écriture.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| line_id | Yes | ID de la ligne d'écriture. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond the annotations – no note on pagination behavior, no hint about what an empty result means, no scoping caveats. It carries no behavioral information the structured fields don't already provide.
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 front-loaded sentence with no filler. It is efficient, though its brevity is also why the usage and behavioral gaps exist.
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?
The tool is low-complexity, the input schema is fully described, an output schema exists so return values need no explanation, and annotations cover the safety profile. The only real omission is sibling disambiguation, which is captured under usage guidelines.
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 100%, so limit, cursor and line_id are each fully documented in the schema itself. The description adds no syntax, format or constraint detail beyond that, so the baseline 3 applies.
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?
States a specific verb ('Liste') and a precise scoped resource: the analytical categories attached to one entry line. That scope is narrower and clearer than a generic list. It does not, however, distinguish itself from siblings like pennylane_list_categories or pennylane_list_group_categories, which an agent could easily confuse it with.
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 when-to-use guidance, no prerequisites, and no mention of the adjacent siblings (pennylane_list_categories, pennylane_list_group_categories, pennylane_link_categories). The agent must infer from the name alone when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_productsARead-onlyIdempotent
Liste les produits/services du catalogue avec filtres et pagination. Utile pour consulter le catalogue, rechercher un produit par nom.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| label | No | Filtrer par libellé du produit. | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is fully covered. The description only adds that results are filtered and paginated, which is largely already in the schema, so it adds modest value.
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?
Two short sentences, front-loaded with purpose before the usage hint. No wasted words, though the second sentence is somewhat generic.
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?
An output schema exists, so return values need not be explained, and the input schema fully documents parameters. The description is adequate for a read-only list tool, missing only explicit sibling routing.
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 100%, so all four parameters (sort, label, limit, cursor) are already documented with defaults and constraints. The description mentions filters and pagination generically but adds no syntax or meaning beyond the schema, so baseline 3 applies.
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?
States a specific verb ('Liste') and resource ('produits/services du catalogue'), with scope modifiers for filters and pagination. It is distinguishable from the singular get_product sibling, though it does not name alternatives explicitly.
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?
'Utile pour consulter le catalogue, rechercher un produit par nom' gives implied usage context, but there is no explicit when-not guidance or routing to get_product/create_product compared to simply listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_quote_linesARead-onlyIdempotent
Liste les lignes (articles) d'un devis spécifique.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| quote_id | Yes | ID du devis. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only the notion that the list is scoped to a single specific quote; it says nothing about pagination behavior or ordering. With annotations carrying the behavioral load, a 3 is appropriate.
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, front-loaded sentence with zero filler. It is appropriately sized for a simple read tool, though its brevity is close to the minimum that conveys the purpose.
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 read-only, paginated list tool with an output schema and full annotation coverage, the definition supplies enough for correct invocation: the resource, the scoping by quote, and the required ID. Sibling differentiation (lines vs. sections) is the only meaningful gap.
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 100%: limit, cursor, and quote_id are all documented in the schema with defaults and bounds. The description adds no syntax or format detail beyond what the schema already provides, so the baseline of 3 applies.
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?
States a specific verb ('Liste') and resource ('lignes/articles d'un devis'), so an agent immediately knows it returns the line items of a quote rather than the quote itself. It does not, however, distinguish itself from the closely related sibling pennylane_list_quote_sections (sections vs. lines), 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'd'un devis spécifique' implies you must already have a quote ID, giving a basic usage context. But there is no explicit when-to-use vs. when-not, no mention of alternatives like list_quote_sections or get_quote, and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_quotesARead-onlyIdempotent
Liste les devis avec filtres et pagination, en mode compact par défaut. Utile pour consulter les devis émis, filtrer par statut ou client.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| detail | No | true = JSON complet de chaque devis au lieu du mode compact. | |
| status | No | Filtrer par statut : 'pending', 'accepted', 'denied', 'invoiced', 'expired'. | |
| customer_id | No | Filtrer par ID client. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The one behavioral claim, 'en mode compact par défaut', is also spelled out by the 'detail' parameter in the schema, so the description adds little beyond structured data and says nothing about result volume or rate limits.
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?
Two short sentences with the core purpose front-loaded and no filler; the second sentence is slightly vague but not wasteful.
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?
An output schema exists, so return values need no explanation, all six optional parameters are fully described in the schema, and annotations carry the safety profile. The description is adequate for a filtered list tool, missing only explicit sibling routing.
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 100% and every parameter (sort, limit, cursor, detail, status, customer_id) is documented inline. The description only gestures at filters and pagination generically, adding no syntax or format detail beyond the schema, so baseline 3 applies.
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?
States a specific verb and resource ('Liste les devis') plus the key traits of the operation (filtres, pagination, mode compact par défaut), which cleanly separates it from the singular sibling pennylane_get_quote. It does not, however, name any sibling explicitly to route the agent.
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?
'Utile pour consulter les devis émis, filtrer par statut ou client' implies when the tool is appropriate, but there is no when-not guidance and no mention of alternatives such as pennylane_get_quote for a single quote or the changelog_quotes tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_quote_sectionsCRead-onlyIdempotent
Liste les sections de lignes d'un devis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| quote_id | Yes | ID du devis. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered elsewhere. The description adds nothing beyond that baseline — no pagination behaviour, no note on ordering, no indication of what a 'section' contains relative to a line. It is a bare restatement of the resource.
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 short sentence with no padding, but it is terse to the point of under-specification — it reads like a title rather than an instruction. Concise yes, but it earns little of its (small) footprint.
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?
An output schema exists, so return values need not be explained, and the input schema is fully documented. What is missing is any description-level context for a read/list tool surrounded by many quote-related siblings: no routing hint, no scope note on the paginated result set, no indication of the relationship between sections and lines.
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 100% (limit, cursor, quote_id all documented in French with ranges and defaults), so the schema carries parameter semantics entirely. The description adds no additional meaning, which is the baseline 3 case.
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?
States a specific verb ('Liste') and resource ('sections de lignes d'un devis'), so an agent knows this returns quote line sections rather than quote lines or the quote itself. It does not, however, name the sibling it is distinguished from (e.g. pennylane_list_quote_lines), so it stops short of full sibling differentiation.
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 pennylane_list_quote_lines, pennylane_get_quote, or pennylane_list_subscription_sections. No prerequisites or exclusions are mentioned; the agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_subscription_linesCRead-onlyIdempotent
Liste les lignes de facturation d'un abonnement.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| subscription_id | Yes | ID de l'abonnement. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered externally. The description adds no behavioral context beyond the name — nothing about pagination semantics, scoping to a subscription, or expected contents. It does not contradict the annotations, but it contributes nothing extra.
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 short sentence with no waste and a front-loaded purpose, but brevity here comes from under-specification rather than efficiency. It is appropriately sized for what it says, but it says little.
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?
An output schema exists, so return values need not be described, and annotations carry the safety profile. For a filtered list tool among many near-named siblings, however, the description leaves the agent without any when-to-use or scoping context, which is a modest gap rather than a fatal 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 description coverage is 100%, and all three parameters (subscription_id, limit, cursor) are documented in the schema itself. The description adds no meaning beyond 'billing lines of a subscription', which is the baseline 3 case where the schema does the heavy lifting.
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 and resource: listing the billing lines of a subscription. An agent can understand the operation without opening the schema. However, it does not differentiate from close siblings like pennylane_list_billing_subscriptions or pennylane_list_subscription_sections, so sibling disambiguation is left to the name.
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 when-to-use guidance, no prerequisites, and no named alternatives. In a toolset with many list_*_lines siblings, the absence of any routing hint is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_subscription_sectionsCRead-onlyIdempotent
Liste les sections de lignes d'un abonnement de facturation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| subscription_id | Yes | ID de l'abonnement. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — no note on pagination behavior, result ordering, or what a 'section' contains, so it earns little beyond the structured fields.
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, front-loaded sentence with no wasted words. It is efficient, though its brevity is close to under-specification rather than optimal conciseness.
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?
An output schema exists so return values need not be explained, and the parameters are fully documented in the schema. However, for a list tool nested under billing subscriptions, the description omits what a 'section' is and how it relates to subscription lines, leaving the agent to infer the tool's place in the resource hierarchy.
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 100%: subscription_id, limit (1-100, default 20) and cursor are all documented in the schema, including pagination semantics. The description adds no extra parameter meaning, so the baseline of 3 applies.
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?
States a specific verb ('Liste') and resource ('sections de lignes d'un abonnement de facturation'), so the agent knows it returns section groupings of subscription lines. It is clear but does not explicitly differentiate itself from close siblings such as pennylane_list_subscription_lines or pennylane_list_quote_sections.
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, when not to, or which sibling to prefer (e.g., list_subscription_lines for the lines themselves vs. this for their sections). The agent must infer usage from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_supplier_invoice_linesARead-onlyIdempotent
Liste les lignes (articles) d'une facture fournisseur spécifique.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre de résultats (1-100, défaut: 50). | |
| cursor | No | Curseur pour la pagination. | |
| supplier_invoice_id | Yes | ID de la facture fournisseur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered without the description. The description adds no extra behavioral context beyond that, relying on the existing annotations and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that fully identifies the operation with zero padding. Nothing in it is redundant or wasted.
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 a complete schema (100% coverage), rich annotations, and an output schema, the minimal description is nearly sufficient for correct invocation. It could still note pagination behavior or how lines relate to the parent invoice, but nothing essential is missing.
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 100%, with limit, cursor, and supplier_invoice_id all documented in the schema itself. The description only alludes to the 'specific supplier invoice' ID, adding no semantics beyond what the schema provides, so the baseline 3 applies.
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 ('Liste') and resource ('les lignes (articles) d'une facture fournisseur'), making it immediately distinguishable from pennylane_list_supplier_invoices (invoices, not lines) and pennylane_get_supplier_invoice. It does not explicitly name siblings such as pennylane_list_customer_invoice_lines, but the supplier/customer split is self-evident.
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?
Usage is implied: call this to enumerate the line items belonging to a given supplier invoice. There is no explicit when-to-use/when-not guidance and no named alternatives, so an agent must infer the routing from the resource noun alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_supplier_invoicesBRead-onlyIdempotent
Liste les factures fournisseurs avec filtres et pagination. Utile pour consulter les factures reçues, filtrer par statut ou fournisseur.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. | |
| status | No | Filtrer par statut : 'pending', 'accounted', 'paid'. | |
| supplier_id | No | Filtrer par ID fournisseur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered by structured fields. The description only adds that filters and pagination are supported, which is thin additional context and says nothing about return format or result ordering beyond the schema.
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?
Two short, front-loaded sentences with no filler. The second sentence partially restates the first, but the whole thing is well within an appropriate size for a list 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?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. What is missing is any routing guidance among the many sibling invoice tools, leaving the definition minimally adequate for a fully documented list endpoint.
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 100%, so all five parameters (sort, limit, cursor, status, supplier_id) are already documented in the schema. The description's generic mention of 'filtres et pagination' adds no syntax or format detail beyond that baseline.
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?
States a specific verb and resource ('Liste les factures fournisseurs') plus scope modifiers (filters, pagination), so an agent knows this is a listing operation. However, it does not distinguish itself from sibling readers such as pennylane_get_supplier_invoice or pennylane_list_supplier_invoice_lines.
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?
'Utile pour consulter les factures reçues, filtrer par statut ou fournisseur' implies when to use it, but offers no explicit when-not conditions and does not name alternatives like get_supplier_invoice for a single record. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_list_suppliersARead-onlyIdempotent
Liste les fournisseurs avec filtres et pagination. Utile pour consulter la base fournisseurs, rechercher un fournisseur par nom.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filtrer par nom du fournisseur. | |
| sort | No | Tri: 'id', '-id' (défaut: '-id'). | |
| limit | No | Nombre de résultats (1-100, défaut: 20). | |
| cursor | No | Curseur pour la pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds only that results are filtered and paginated, which is already implied by the schema; no return/perf/auth context beyond that.
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?
Two front-loaded sentences with essentially no waste; the core action comes first and the use case second. Slightly thin rather than padded.
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?
An output schema exists and annotations carry the safety profile, so the description need not explain returns. For a simple filtered-list tool it is adequate, though it omits any routing hint to get_supplier or create/update_supplier siblings.
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 100%, so name, sort, limit and cursor are all fully documented in the schema. The description adds nothing beyond restating 'filtres et pagination', so baseline 3 applies.
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?
States a clear verb+resource: listing suppliers, with filters and pagination. It implicitly contrasts with pennylane_get_supplier (single lookup) via 'rechercher un fournisseur par nom', but does not name the alternative explicitly.
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 second sentence gives usage context ('consulter la base fournisseurs', 'rechercher un fournisseur par nom'), which implies browsing/searching scenarios. However, no when-not conditions or named alternatives (e.g. get_supplier for a known ID) are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_mark_customer_invoice_paidAIdempotent
Marque une facture client finalisée comme payée.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la facture à marquer comme payée. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety/idempotency profile is covered. The description adds only the eligibility constraint ('finalisée'); it says nothing about what happens on an already-paid or non-finalized invoice, or whether a payment date is recorded.
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 front-loaded sentence with the action and the key constraint; no filler.
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?
An output schema and rich annotations exist, so return values and safety need not be restated. What is missing is error/precondition behavior (what an agent sees if the invoice is not finalized or already paid) and whether the operation touches payment fields beyond status.
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?
With one parameter and 100% schema description coverage, the schema already documents 'id' as the invoice identifier to mark paid. The description adds no extra semantics, so the baseline 3 applies.
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?
Specific verb ('Marque ... comme payée') and specific resource ('facture client'), with the added constraint that the invoice must be finalized. It does not, however, distinguish itself from near-siblings such as pennylane_finalize_customer_invoice or pennylane_update_supplier_invoice_payment_status.
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?
'finalisée' implies a precondition on which invoices are eligible, so an agent can infer when this applies, but there is no explicit when-to-use/when-not statement and no routing to alternatives such as finalize_customer_invoice or the supplier counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_multi_dossier_queryARead-onlyIdempotent
Exécute une requête GET en parallèle sur plusieurs dossiers. Utile pour comparer des données entre clients ou consolider des informations (ex: balances, comptes, exercices).
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | Paramètres de requête optionnels (query string). | |
| endpoint | Yes | Endpoint API à appeler (ex: '/me', '/ledger_accounts', '/trial_balance'). | |
| dossier_slugs | Yes | Liste des slugs de dossiers à interroger. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, and the description adds a genuinely useful behavioral trait — that requests are dispatched in parallel across dossiers. However, nothing is said about partial-failure behavior (what happens if one dossier 404s or rejects auth), rate limits, or result ordering, which are the traits an agent most needs before fanning out.
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?
Two short sentences, front-loaded with what the tool does followed by the use case. No filler, no restatement of the name.
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 rich annotations, a full-coverage input schema, and an output schema, the description only needs to convey purpose and routing. It does that, but leaves the multi-dossier-specific failure and concurrency semantics unaddressed, which is the one area structured fields cannot cover.
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 100%, so all three parameters (dossier_slugs, endpoint, params) are already documented in the schema. The description's examples (balances, comptes, exercices) loosely hint at valid endpoints but add no syntax or format detail beyond the schema's own '/me', '/ledger_accounts', '/trial_balance' examples, so the baseline 3 applies.
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?
States a specific verb and resource: 'Exécute une requête GET en parallèle sur plusieurs dossiers'. The 'multi_dossier' framing and the parallel fan-out clearly separate it from the many single-dossier siblings, though no sibling is named explicitly.
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?
Gives the condition for use with concrete examples ('comparer des données entre clients ou consolider des informations (ex: balances, comptes, exercices)'). It states when to reach for this tool but never states when not to, e.g. preferring the single-dossier tool for one client.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_remove_dossierADestructive
Supprime un dossier comptable de la configuration. Si le dossier supprimé était actif, le premier dossier restant devient actif automatiquement.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug du dossier à supprimer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructive=true, readOnly=false, and idempotent=false, so the safety profile is structured. The description adds valuable non-obvious behavior: if the removed dossier was active, the first remaining dossier automatically becomes active. It does not add further details such as permission requirements or irreversibility beyond the destructive hint.
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?
Two short sentences with no wasted words. The deletion action is front-loaded, and the active-dossier fallback follows immediately as relevant behavior.
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 destructive tool with annotations covering safety and an output schema covering returns, the description is nearly complete. It states the deletion and the active-dossier side effect, though it omits prerequisites or alternatives that might help an agent decide when to use it.
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 100%, with the sole parameter 'slug' documented as 'Slug du dossier à supprimer.' The description does not add meaning, format, or constraints beyond the schema, so the baseline 3 applies.
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?
States a specific verb and resource: 'Supprime un dossier comptable de la configuration'. This clearly distinguishes it from sibling dossiers tools such as add, list, current, and switch. An agent can identify the operation without opening the schema.
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 gives no explicit guidance on when to use this tool versus alternatives like switch_dossier or add_dossier. Usage is only implied by the deletion verb, with no conditions, prerequisites, or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_send_quote_by_emailB
Envoie un devis par email au client ou à des destinataires spécifiques.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du devis à envoyer. | |
| recipients | No | Liste d'emails destinataires. Si vide, envoi aux emails du client. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the agent knows this is a non-idempotent write with external side effects. The description adds the recipient-selection behavior, but nothing about confirmation prompts, duplicate-send risk, or what happens after sending; with annotations covering the safety profile this lands at a baseline 3.
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 efficient sentence with no waste, and the action is front-loaded. It is appropriately sized for a two-parameter action tool, though it is arguably too terse given the missing usage context.
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?
An output schema exists so return values need not be explained, and both parameters are documented. However, for a non-idempotent, externally-visible send operation, the description leaves prerequisites and post-send behavior unstated, so it is only minimally 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 100% — both 'id' (quote identifier) and 'recipients' (fallback to client emails when empty) are fully documented in the schema. The description only paraphrases the recipients fallback, adding no syntax or format detail beyond what the schema already states, so the baseline 3 applies.
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?
States a specific verb (envoie) and resource (un devis) plus the medium (par email), so an agent immediately knows this triggers a quote email rather than a CRUD operation on quotes. It does not explicitly contrast with siblings like pennylane_get_quote or pennylane_update_quote_status, but the action is unambiguous.
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 says what gets sent and to whom, but gives no when/when-not guidance, no prerequisites (e.g. quote must be finalized first), and does not name any alternative. All routing context is left to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_switch_dossierAIdempotent
Bascule vers un autre dossier comptable. Toutes les requêtes suivantes utiliseront ce dossier par défaut. Vérifie la connexion avec l'endpoint /me après le switch.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Slug du dossier vers lequel basculer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuinely useful state context beyond them: the switch persists and changes the default dossier for all following requests. It also discloses a verification step (/me after switching), which no annotation conveys. It does not mention auth/permission requirements or how long the state persists.
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 short sentences, front-loaded with the action and its consequence, and each sentence contributes (action, state effect, verification). No filler, though the line breaks are cosmetic artifacts rather than structure.
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?
An output schema exists, so return-value explanation is not required, and the description covers the key non-obvious behavior (persistent default-dossier state) that the schema cannot express. The main remaining gap is the absence of prerequisite/permission context for a state-changing session operation.
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?
Only one parameter with 100% schema description coverage ('Slug du dossier vers lequel basculer'), so the schema already carries the semantics and the baseline is 3. The description adds no format guidance (where to obtain a valid slug, e.g. from pennylane_list_dossiers) or validation notes.
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 and resource ('Bascule vers un autre dossier comptable') and, crucially, its session-wide effect ('Toutes les requêtes suivantes utiliseront ce dossier par défaut'), which distinguishes it from list_dossiers/current_dossier/add_dossier/remove_dossier. It stops short of naming those siblings explicitly, so differentiation relies on the reader's inference.
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?
Usage is implied: call this when you want to change which dossier subsequent calls target, and the note to verify via /me afterwards gives a post-condition hint. But there is no explicit when-not guidance, no mention of prerequisites (e.g. whether the dossier must already be added via pennylane_add_dossier), and no named alternative for read-only inspection of the current dossier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_unletter_linesAIdempotent
Supprime le lettrage de lignes d'écriture. Utile pour corriger un rapprochement erroné.
| Name | Required | Description | Default |
|---|---|---|---|
| line_ids | Yes | IDs des lignes à délettrer. | |
| strategy | No | Stratégie de délettrage : 'none' (erreur si déséquilibre) ou 'partial' (autorisé). | none |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the mutation/idempotency profile is covered. The description adds the corrective-reconciliation context but discloses nothing about required permissions, whether unrelated line data is affected, or reversibility beyond what annotations imply. No contradiction with annotations.
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?
Two short sentences, front-loaded with the action and followed by the use case. No filler; every clause earns its place.
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 an output schema present, annotations carrying the safety profile, and 100% schema parameter coverage, the description covers what an agent needs to call the tool correctly. Only the absence of explicit sibling routing keeps it short of full completeness.
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 100%: line_ids and the strategy option ('none' vs 'partial') are fully documented in the schema, including the behavior of each strategy. The description adds no parameter meaning of its own, so the baseline of 3 applies.
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?
States a specific verb and resource: removing the matching/lettering ('lettrage') from entry lines, plus the corrective purpose ('corriger un rapprochement erroné'). It is clear what the tool does, though it never names its inverse sibling pennylane_letter_lines to sharpen the 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?
It gives one scenario where the tool is useful ('to correct an erroneous reconciliation'), which is genuine implied guidance. However it states no conditions for when-not to use it and never points to the counterpart tool (pennylane_letter_lines) or prerequisites, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_accountAIdempotent
Modifie le libellé ou le statut lettrable d'un compte existant.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du compte à modifier. | |
| label | No | Nouveau libellé du compte. | |
| letterable | No | Activer/désactiver le lettrage. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scoping context by enumerating exactly which fields may change, but says nothing about permissions, side effects on lettrage, or reversibility.
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 front-loaded sentence that states the action and the affected fields with no filler. Efficient, though extremely terse given the tool mutates accounting data.
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 narrow two-field update on a resource with an output schema present, the description is adequate: return-value details are covered by the output schema and param details by the schema. Only behavioral/permission context is thin.
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 100%, so both optional parameters (label, letterable) are already fully documented in the schema. The description merely names the same two fields, adding no syntax, format, or default-value meaning beyond what the schema provides.
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?
States a specific verb (Modifie) and resource (un compte existant) with the precise scope of modifiable fields (libellé, statut lettrable). The phrase 'compte existant' implicitly distinguishes it from pennylane_create_account, but no sibling is named explicitly.
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?
Usage is only implied by 'compte existant' — the agent can infer this is for editing rather than creating, but there is no explicit when-to-use guidance, no mention of prerequisites, and no reference to alternatives such as create_account or get_account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_billing_subscriptionAIdempotent
Modifie un abonnement de facturation existant. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de l'abonnement à modifier. | |
| label | No | Nouveau libellé. | |
| start | No | Nouvelle date de début (YYYY-MM-DD). | |
| payment_method | No | Nouvelle méthode de paiement. | |
| recurring_rule | No | Nouvelle règle de récurrence. | |
| payment_conditions | No | Nouvelles conditions de paiement. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false). The description adds genuinely new behavioral context beyond the annotations by stating 'Seuls les champs fournis sont mis à jour', i.e. partial/merge semantics. It stops short of describing permissions, side effects on subscriptions, or reversibility.
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?
Two short sentences, front-loaded with the operation and followed by the key behavioral note. Every sentence carries information; no filler.
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 an output schema, full annotation coverage, and 100% parameter descriptions, the structured fields carry most of the burden. The description supplies the operation and partial-update semantics, which is enough for correct invocation, though it could note the required id or any permission constraints.
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 100%, with each parameter documented in French in the schema itself, so the baseline is 3. The description adds no syntax or format detail beyond what the schema already provides.
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?
States a specific verb and resource ('Modifie un abonnement de facturation existant'), making it clearly an update operation on a billing subscription. It distinguishes from list/get/create siblings by the verb and the word 'existant', though it does not explicitly name an alternative tool.
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?
Usage is implied by 'existant' (use it to modify an already-existing subscription, not to create one), and the second sentence clarifies partial-update behavior. However, there is no explicit when-to-use/when-not guidance or stated prerequisites versus the create/get siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_categoryBIdempotent
Modifie une catégorie analytique existante. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la catégorie à modifier. | |
| label | No | Nouveau libellé. | |
| direction | No | Direction : 'cash_in', 'cash_out' (trésorerie uniquement). | |
| analytical_code | No | Code analytique. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, idempotent, non-destructive). The description usefully adds PATCH semantics — "Seuls les champs fournis sont mis à jour" — clarifying that omitted fields are left intact, which the annotations do not convey. It stops short of auth, rate-limit, or side-effect detail, so it is adequate rather than rich.
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?
Two tight sentences: purpose first, then the partial-update constraint. No filler, nothing redundant, and the most decision-relevant information is front-loaded.
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 simple 4-parameter update with an output schema (so return values need no explanation) and annotations covering safety, the definition supplies the one non-obvious trait — partial update semantics. It is nearly complete, with usage context the only real gap.
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 100%, so the schema already documents id, label, direction (with its cash_in/cash_out values), and analytical_code. The description adds no field-level meaning beyond the schema, so the baseline 3 applies.
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?
States a specific verb ("Modifie") and resource ("une catégorie analytique existante"), which cleanly separates it from create_category and get_category siblings by name. However, it never explicitly names or contrasts those alternatives, so sibling differentiation is implicit rather than stated.
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 when-to-use/when-not guidance, no prerequisites (e.g. the category must already exist, permission needs), and no mention of alternatives like create_category. The partial-update note is behavioral, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_company_customerAIdempotent
Modifie un client entreprise existant. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du client entreprise à modifier. | |
| name | No | Nouvelle raison sociale. | |
| notes | No | Notes. | |
| phone | No | Téléphone. | |
| emails | No | Emails mis à jour. | |
| reg_no | No | SIREN. | |
| reference | No | Référence interne. | |
| vat_number | No | Numéro de TVA. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, and destructive=false, covering the safety profile. The description usefully adds PATCH-style partial-update behavior (only supplied fields change), which isn't in the schema, but it omits other behavioral context like permission requirements or failure on an invalid id.
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?
Two tightly written sentences with zero filler, and the core purpose and update semantics are front-loaded. Nothing wasteful.
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 an output schema present, return values need not be described, and annotations carry the safety profile. The description covers purpose and partial-update behavior, leaving only minor gaps around permissions and error behavior, which is adequate for this tool's complexity.
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 100%, so every parameter (id, name, notes, phone, emails, reg_no, reference, vat_number) is already documented in the schema. The description adds no per-parameter meaning beyond what the schema provides, matching the baseline 3.
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?
States a specific verb ('Modifie') and resource ('client entreprise existant'), and the qualifier 'entreprise' distinguishes it from the sibling pennylane_update_individual_customer. However it does not explicitly name or route against that sibling, so differentiation is implied rather than stated.
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 second sentence clarifies update semantics ('only provided fields are updated'), which implies this is for modifying an existing customer rather than creating one. But there is no explicit when-to-use guidance, no mention of prerequisites, and no exclusion relative to create_company_customer or the individual variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_customer_invoiceAIdempotent
Modifie une facture client (brouillon uniquement). Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la facture à modifier. | |
| date | No | Nouvelle date (YYYY-MM-DD). | |
| deadline | No | Nouvelle échéance (YYYY-MM-DD). | |
| customer_id | No | Nouvel ID client. | |
| invoice_lines | No | Nouvelles lignes de facture (remplace les existantes). | |
| special_mention | No | Mention spéciale. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent=true, destructive=false, openWorld=true and readOnly=false. The description adds real value beyond them: the draft-only restriction and the partial-update semantics ('Seuls les champs fournis sont mis à jour'), which is behaviorally important for a PATCH-style mutation. It stops short of auth/permission or failure-mode detail.
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?
Two short, front-loaded sentences with no filler. The scope constraint and the partial-update rule each earn their place.
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 an output schema present, return values need not be described, and annotations cover the safety profile. The description supplies the two pieces an agent most needs (draft-only scope and partial update), though it omits how to handle non-draft invoices.
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 100%, so all six parameters (id, date, deadline, customer_id, invoice_lines, special_mention) are already documented in the schema, including the note that invoice_lines replaces existing lines. The description adds no per-parameter meaning beyond the schema, so baseline 3 applies.
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?
States a specific verb (Modifie) and resource (facture client), and the '(brouillon uniquement)' qualifier separates it from sibling write tools like create_customer_invoice and finalize_customer_invoice. It never names an alternative explicitly, but the verb+scope makes the target operation unambiguous.
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 parenthetical 'brouillon uniquement' implies the valid precondition (only draft invoices can be edited), which is useful usage context. However, it does not say what to do for finalized invoices or point to the relevant sibling (e.g., finalize/mark-paid), so guidance remains 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.
pennylane_update_entryAIdempotent
Modifie une écriture existante. Permet de changer l'en-tête et de créer/modifier/supprimer des lignes. L'écriture doit rester équilibrée.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de l'écriture à modifier. | |
| date | No | Nouvelle date (YYYY-MM-DD). | |
| label | No | Nouveau libellé. | |
| currency | No | Nouvelle devise. | |
| journal_id | No | Nouvel ID de journal. | |
| piece_number | No | Numéro de pièce. | |
| lines_to_create | No | Nouvelles lignes à ajouter. | |
| lines_to_delete | No | IDs des lignes à supprimer. | |
| lines_to_update | No | Lignes existantes à modifier (chaque élément doit contenir l'id de la ligne). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, and idempotent=true, so the safety profile is covered. The description adds a genuine domain rule not present in structured data: the entry must remain balanced after edits, and the permitted line operations (create/update/delete) are enumerated. It stops short of stating whether balance is validated server-side or what errors result from imbalance.
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 short sentences, no filler, with the core action front-loaded and the constraint (balance) placed last as a rule reminder. Every sentence carries information the agent needs.
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?
An output schema exists, so return values need not be explained, and the description covers the mutation scope plus the key balance constraint for a multi-parameter update. It is nearly complete, missing only error/validation behavior for an unbalanced entry, which is a minor gap given the annotation coverage.
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 100%, so every one of the nine parameters is already documented in the schema, setting the baseline at 3. The description adds only a coarse mapping (header vs lines) that the parameter names already convey, without clarifying formats or interactions such as the required id inside lines_to_update items.
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 ("Modifie") and resource ("une écriture existante"), and its emphasis on the entry already existing cleanly separates it from sibling pennylane_create_entry and pennylane_get_entry. It also scopes the operation to both header and line-level changes, so the agent knows exactly what surface is touched.
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?
Usage is implied by "écriture existante" (you need an existing entry with an id), but there is no explicit when-to-use vs alternative guidance, no prerequisites, and no when-not conditions. The balance rule is stated as a constraint rather than a routing hint, so the agent must infer the context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_individual_customerAIdempotent
Modifie un client particulier existant. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du client particulier à modifier. | |
| notes | No | Notes. | |
| phone | No | Téléphone. | |
| emails | No | Emails mis à jour. | |
| last_name | No | Nouveau nom. | |
| reference | No | Référence interne. | |
| first_name | No | Nouveau prénom. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: only the supplied fields are changed (patch-style), which directly informs how an agent should call it. It still omits permission/auth requirements and any side effects.
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?
Two tightly written sentences with zero filler, and the core purpose is front-loaded before the partial-update qualifier. Nothing is wasted.
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?
An output schema exists, so return values need not be described, and annotations carry the safety profile. Combined with full parameter documentation and the partial-update note, the description is adequate for correct invocation; only optional fields and scope details are left implicit.
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 100%, with each of the 7 parameters individually documented in the schema, so the baseline is 3. The description does not add syntax, format, or constraint details beyond what the schema already provides; its partial-update note is behavioral rather than parameter-specific.
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?
States a specific verb ("Modifie") and resource ("client particulier existant"), clearly distinguishing it from pennylane_create_individual_customer. However, it does not differentiate itself from pennylane_update_company_customer, which is the closest sibling and differs only by customer type.
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?
Usage is implied: modify an existing individual customer. The sentence "Seuls les champs fournis sont mis à jour" conveys partial-update semantics, which is useful, but there is no explicit when-to-use/when-not guidance and no routing to alternatives such as the company-customer variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_productAIdempotent
Modifie un produit existant. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du produit à modifier. | |
| unit | No | Nouvelle unité. | |
| label | No | Nouveau libellé. | |
| vat_rate | No | Nouveau taux de TVA. | |
| reference | No | Nouvelle référence. | |
| description | No | Nouvelle description. | |
| price_before_tax | No | Nouveau prix HT. | |
| ledger_account_id | No | Nouvel ID de compte comptable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the write/idempotency profile is covered. The description adds genuine value by disclosing PATCH semantics (only provided fields are modified), disambiguating it from a full replacement, but omits permission requirements and any side effects.
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?
Two short sentences, completely front-loaded: the verb+resource leads and the update semantics follow. Every word earns its place with no filler.
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 an output schema present, the description needn't explain return values, and annotations cover the safety profile. The PATCH clarification plus a required id make the call mechanically clear; only usage routing between sibling product tools is left implicit.
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 100%, so all eight parameters are already documented in the schema. The description adds nothing param-specific beyond the general PATCH note, so the baseline of 3 applies when the schema does the heavy lifting.
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?
"Modifie un produit existant" states a specific verb (update) and resource (product), and "existant" scopes it to existing entities. It does not explicitly name sibling tools like create_product or get_product, but the operation is unmistakably an edit, so an agent can place it correctly.
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 second sentence implies PATCH-style usage by signaling that only supplied fields change, which helps an agent decide which parameters to pass. However, there is no explicit when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as create_product or get_product.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_quoteBIdempotent
Modifie un devis existant. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du devis à modifier. | |
| date | No | Nouvelle date (YYYY-MM-DD). | |
| currency | No | Nouvelle devise. | |
| deadline | No | Nouvelle échéance (YYYY-MM-DD). | |
| customer_id | No | Nouvel ID client. | |
| special_mention | No | Mention spéciale. | |
| pdf_invoice_subject | No | Objet du devis PDF. | |
| pdf_invoice_free_text | No | Texte libre PDF. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true). The description adds the partial-update semantics ('only provided fields are updated'), which is genuinely useful behavior context, but it does not clarify how explicit nulls are treated versus omitted fields.
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?
Two short, front-loaded sentences with no filler; the mutation and its partial-update nature are stated immediately.
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 an output schema present and annotations covering safety, the description need not explain returns. For an 8-parameter mutation tool it is minimally adequate but omits any field/relationship context and any routing versus update_quote_status.
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 100%, so all eight parameters are already documented in the schema, setting the baseline at 3. The description adds only the generic partial-update rule and no per-parameter meaning beyond what the schema provides.
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?
States a specific verb+resource ('Modifie un devis existant'), which is enough to identify a partial-update operation on a quote. However it does not differentiate from the sibling pennylane_update_quote_status, which also 'updates' a quote, so the agent gets no help distinguishing the two.
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 when-to-use / when-not-to-use guidance and no mention of alternatives such as create_quote or update_quote_status. The only clause, 'Seuls les champs fournis sont mis à jour,' describes behavior rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_quote_statusBIdempotent
Met à jour le statut d'un devis (accepté, refusé, facturé, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du devis. | |
| status | Yes | Nouveau statut : 'pending', 'accepted', 'denied', 'invoiced', 'expired'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and repeat-safety profile is covered. The description adds nothing beyond naming example statuses, which the schema already enumerates. With annotation coverage this low-effort addition is acceptable but thin.
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 short sentence, front-loaded with the verb and resource, with zero filler. It is appropriately sized for a two-parameter status update, though the example list is slightly redundant with the schema.
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?
An output schema exists so return values need no explanation, and annotations carry the safety profile. The remaining gap is disambiguation from pennylane_update_quote, which is the one thing an agent genuinely needs here. Minimum-viable rather than 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 100% and both parameters are fully documented in the schema ('Identifiant du devis', explicit status value list). The description only restates example statuses in French, adding no format, ID type, or constraint detail beyond the schema. Baseline 3 applies.
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?
States a specific verb and resource (update the status of a quote), which is clear on its own. However it does not differentiate itself from the sibling pennylane_update_quote, so an agent cannot tell from the description alone which one to use when only the status changes.
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 when-to-use guidance, no prerequisites, and no mention of the alternative pennylane_update_quote. The parenthetical list of statuses is illustrative, not a routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_supplierBIdempotent
Modifie un fournisseur existant. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant du fournisseur à modifier. | |
| iban | No | IBAN. | |
| name | No | Nouveau nom. | |
| emails | No | Emails. | |
| reg_no | No | SIREN. | |
| vat_number | No | Numéro de TVA. | |
| payment_method | No | Méthode de paiement. | |
| establishment_no | No | SIRET. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety and mutation profile is covered. The description adds genuine value with PATCH semantics ('Seuls les champs fournis sont mis à jour'), telling the agent it need not resend every field. It says nothing about permissions, validation errors, or null handling, so 3 is appropriate against an already-rich annotation set.
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?
Two short sentences, zero padding, and the update semantics are front-loaded right after the action statement. Nothing needs trimming.
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 an output schema and full annotation coverage, the description need not explain return values. It is adequate for a mutation tool, but for a supplier update it omits useful context: whether null values clear fields, whether changing reg_no/vat_number triggers validation, and any auth requirements.
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 100%, so each of the 8 parameters (id, iban, name, emails, reg_no, vat_number, payment_method, establishment_no) is already documented in the schema. The description adds only the generic claim that unspecified fields are untouched, which is baseline for a partial-update tool.
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?
States a specific verb and resource ('Modifie un fournisseur existant'), which clearly separates it from pennylane_create_supplier and pennylane_get_supplier. It stops short of explicitly naming those siblings, so it lands at a solid 4 rather than 5.
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 when-to-use guidance, no prerequisites (e.g. the supplier must exist, the id must be valid), and no reference to alternatives such as pennylane_create_supplier or the changelog tools. The partial-update note implies usage but does not route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_supplier_invoiceAIdempotent
Modifie une facture fournisseur. Seuls les champs fournis sont mis à jour.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifiant de la facture fournisseur à modifier. | |
| date | No | Nouvelle date (YYYY-MM-DD). | |
| deadline | No | Nouvelle échéance (YYYY-MM-DD). | |
| supplier_id | No | Nouvel ID fournisseur. | |
| invoice_number | No | Numéro de facture. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=true). The description adds genuinely new information beyond them: the PATCH semantics that only supplied fields are modified, which is critical for a mutation tool and not stated by any annotation.
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?
Two short, front-loaded sentences: the mutation action first, then the most important behavioral constraint. Nothing extraneous.
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?
An output schema and rich annotations exist, so the description does not need to cover return values or the safety profile. However, for a mutation tool it omits meaningful context such as whether finalized invoices can be edited or what permission is required, leaving some gaps an agent might need.
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 100% and every parameter (id, date, deadline, supplier_id, invoice_number) is documented in the schema itself. The description adds no syntax, format, or inter-parameter constraints beyond that, so the baseline of 3 applies.
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?
States a specific verb and resource ('Modifie une facture fournisseur'), which clearly distinguishes it from get/list/create supplier invoice siblings. It does not, however, explicitly name the nearby alternative pennylane_update_supplier_invoice_payment_status, so differentiation relies on the agent reading sibling names.
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 explicit when-to-use, prerequisites, or exclusion guidance. The second sentence implies partial-update behaviour but does not tell the agent when this tool is appropriate versus related tools like the payment-status updater or the changelog tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_update_supplier_invoice_payment_statusCIdempotent
Met à jour le statut de paiement d'une facture fournisseur.
| Name | Required | Description | Default |
|---|---|---|---|
| payment_status | Yes | Nouveau statut : 'unpaid', 'paid', 'partially_paid'. | |
| supplier_invoice_id | Yes | ID de la facture fournisseur. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond the name – it does not say whether the change is reversible, whether it affects accounting entries or balances, or how the invoice in an already-paid state is handled.
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 with no wasted words, and the resource being acted on is front-loaded. It is efficient, though the brevity is partly what leaves the other dimensions thin.
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?
An output schema exists and annotations carry the safety profile, so return values and permissions need not be explained. Still, for a mutation tool, the description is minimally viable and omits any routing against the general supplier-invoice update sibling.
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 100% and the payment_status field already enumerates 'unpaid', 'paid', 'partially_paid' in the schema. The description adds no parameter-level meaning, so the baseline 3 applies.
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+resource: updating the payment status of a supplier invoice. It is unambiguous about which object and which field are affected. However, it does not distinguish this from the sibling pennylane_update_supplier_invoice, which could plausibly touch the same status.
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 when-to-use guidance, no prerequisites, and no mention of the alternative general-purpose update tool. An agent must guess whether to use this dedicated endpoint or pennylane_update_supplier_invoice for the same change.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pennylane_whoamiARead-onlyIdempotent
Vérifie la connexion à l'API Pennylane et retourne les infos de l'utilisateur et de la société connectée. Utilisez cet outil en premier pour valider que le token est fonctionnel.
Returns: str: JSON avec les informations du compte connecté.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/open-world, so safety is covered. The description adds genuinely non-redundant behavioral context: the tool validates the auth token and returns account/company identity, positioning it as a connectivity probe.
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?
Front-loaded with the primary action and the usage directive; the trailing "Returns: str: JSON..." line is largely redundant given an output schema exists, but it is brief and does not bloat the definition.
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 no-parameter connectivity/identity check with annotations covering the safety profile and an output schema handling return values, the description is complete enough to invoke correctly. Nothing critical is missing.
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?
Zero parameters, so the baseline is 4 by rule; there are no parameter semantics to document and the schema is trivially complete.
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?
States a concrete verb ("Vérifie la connexion") and resource ("API Pennylane") plus what it returns (user and connected company info). This is naturally distinct from the many CRUD siblings, though it doesn't explicitly name a contrast.
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?
"Utilisez cet outil en premier pour valider que le token est fonctionnel" gives a clear, actionable when-to-use instruction for first-run/health-check scenarios. It lacks explicit when-not-to-use guidance, but the routing intent is unambiguous.
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.
87 tool updates
v1.0.0- First observed
pennylane_add_dossier - First observed
pennylane_changelog_customer_invoices - First observed
pennylane_changelog_customers - First observed
pennylane_changelog_entry_lines - First observed
pennylane_changelog_products - First observed
pennylane_changelog_quotes - First observed
pennylane_changelog_supplier_invoices - First observed
pennylane_changelog_suppliers - First observed
pennylane_changelog_transactions - First observed
pennylane_create_account - First observed
pennylane_create_agl_export - First observed
pennylane_create_billing_subscription - First observed
pennylane_create_category - First observed
pennylane_create_company_customer - First observed
pennylane_create_customer_invoice - First observed
pennylane_create_entry - First observed
pennylane_create_fec_export - First observed
pennylane_create_individual_customer - First observed
pennylane_create_journal - First observed
pennylane_create_product - First observed
pennylane_create_quote - First observed
pennylane_create_supplier - First observed
pennylane_current_dossier - First observed
pennylane_finalize_customer_invoice - First observed
pennylane_get_account - First observed
pennylane_get_agl_export - First observed
pennylane_get_billing_subscription - First observed
pennylane_get_category - First observed
pennylane_get_category_group - First observed
pennylane_get_customer - First observed
pennylane_get_customer_invoice - First observed
pennylane_get_entry - First observed
pennylane_get_entry_line - First observed
pennylane_get_fec_export - First observed
pennylane_get_journal - First observed
pennylane_get_product - First observed
pennylane_get_quote - First observed
pennylane_get_supplier - First observed
pennylane_get_supplier_invoice - First observed
pennylane_get_trial_balance - First observed
pennylane_letter_lines - First observed
pennylane_link_categories - First observed
pennylane_list_accounts - First observed
pennylane_list_all_entry_lines - First observed
pennylane_list_billing_subscriptions - First observed
pennylane_list_categories - First observed
pennylane_list_category_groups - First observed
pennylane_list_customer_invoice_lines - First observed
pennylane_list_customer_invoices - First observed
pennylane_list_customers - First observed
pennylane_list_dossiers - First observed
pennylane_list_entries - First observed
pennylane_list_entry_lines - First observed
pennylane_list_fiscal_years - First observed
pennylane_list_group_categories - First observed
pennylane_list_journals - First observed
pennylane_list_lettered_lines - First observed
pennylane_list_line_categories - First observed
pennylane_list_products - First observed
pennylane_list_quote_lines - First observed
pennylane_list_quote_sections - First observed
pennylane_list_quotes - First observed
pennylane_list_subscription_lines - First observed
pennylane_list_subscription_sections - First observed
pennylane_list_supplier_invoice_lines - First observed
pennylane_list_supplier_invoices - First observed
pennylane_list_suppliers - First observed
pennylane_mark_customer_invoice_paid - First observed
pennylane_multi_dossier_query - First observed
pennylane_remove_dossier - First observed
pennylane_send_quote_by_email - First observed
pennylane_switch_dossier - First observed
pennylane_unletter_lines - First observed
pennylane_update_account - First observed
pennylane_update_billing_subscription - First observed
pennylane_update_category - First observed
pennylane_update_company_customer - First observed
pennylane_update_customer_invoice - First observed
pennylane_update_entry - First observed
pennylane_update_individual_customer - First observed
pennylane_update_product - First observed
pennylane_update_quote - First observed
pennylane_update_quote_status - First observed
pennylane_update_supplier - First observed
pennylane_update_supplier_invoice - First observed
pennylane_update_supplier_invoice_payment_status - First observed
pennylane_whoami
TDQS
Scored across 87 tools
Many tools target distinct resources and actions, but several line/section/category tools overlap in purpose (e.g. list_entry_lines vs list_all_entry_lines, list_categories vs list_group_categories vs list_category_groups). The undescribed changelog_* tools add further ambiguity, though most descriptions do help clarify boundaries.
All tools use the pennylane_ prefix and snake_case, and most follow a predictable verb_noun pattern. A few names break the pattern (changelog_customers, current_dossier, multi_dossier_query), but the overall convention is clear.
87 tools is an extreme mismatch for a single MCP server and far exceeds the 50+ threshold for a severe over-scoping. Even accounting for the broad domain, many CRUD variants could be consolidated or omitted.
The surface covers many accounting resources, including accounts, journals, entries, invoices, quotes, subscriptions, exports, and dossier management. However, delete operations are missing for most resources, journals lack update, and supplier invoices lack a create tool, creating notable lifecycle gaps.
Maintenance
Related MCP Connectors
QuickBooks Online in Claude and ChatGPT: 221 tools, full ledger, multi-company, Canada + US, FR/EN.
- ManiloOAuthapp.ledgy.api
Log, query, and edit expenses, budgets, and accounts in Manilo (formerly Ledgy) from any MCP-compatible AI assistant.
Connect Claude or Cursor to books, invoices, bills, payroll, and sealed closes.
Connect your ads, shop, analytics, social, CRM and finance platforms once, then let Claude, ChatGPT, Cursor or any MCP client read, join and explain your numbers. Public statistics from the World Bank, IMF, Eurostat, OECD, WHO and SEC filings come as context, searchable and chartable from the same tools. Read-only by design, every number carries its source.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceComplete Swiss accounting integration for Bexio via MCP. Works with Claude Desktop, n8n, and any MCP client. 221 tools for invoices, contacts, projects & more. Created by Lukas Hertig.34MIT
- FlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to the MonKey Office Connect JSON-API, enabling natural language queries for accounting data like bookings, invoices, and open items. It allows users to retrieve information about companies, accounts, customers, and projects through a set of specialized tools.-
- AlicenseAqualityCmaintenanceRead-only MCP server for the Ordis accounting API, exposing 11 typed tools to query financial data such as invoices, tax forms, KPIs, and more directly from Claude.11MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to interact with the BuchhaltungsButler accounting API via MCP, providing tools for managing receipts, transactions, invoices, postings, and master data directly from Claude Desktop and other MCP-compatible clients.2324 npmMIT