fispro-mcp
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., "@fispro-mcpPourquoi mon système recommande 55 minutes d'arrosage à 15 % d'humidité et 32 °C ?"
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.
fispro-mcp
Serveur MCP pour FisPro, le logiciel libre de systèmes d'inférence floue développé par l'INRAE et l'Institut Agro (Serge Guillaume, Brigitte Charnomordic).
Il permet à un assistant compatible MCP — Claude Desktop, Claude Code, Cursor, VS Code… — de lire vos fichiers .fis, d'exécuter des inférences, et surtout d'expliquer quelles règles se déclenchent et pourquoi. C'est là tout l'intérêt : la logique floue produit des modèles interprétables, encore faut-il pouvoir interroger cette interprétabilité en langage naturel.
Vous : Pourquoi mon système recommande 55 minutes d'arrosage à 15 % d'humidité et 32 °C ?
Claude: [explain_inference] Une seule règle se déclenche, R1 (« SI humidite_sol est sec
ET temperature est chaude »), avec une force de 0,625 — le sol est « sec » à 62,5 %
et la température « chaude » à 100 %. Comme aucune autre règle n'est active, la
sortie vaut exactement le conséquent de R1, soit 55.Deux dialectes .fis
Le format .fis existe en deux variantes, et le serveur lit les deux — le
dialecte est détecté à la lecture et exposé dans describe_fis.
MATLAB | FisPro natif | |
Écrit par | Fuzzy Logic Toolbox, exports tiers | le logiciel FisPro lui-même |
Compteurs |
|
|
Opérateur ET |
|
|
Défuzzification |
|
|
Agrégation |
|
|
Sous-ensemble |
|
|
Règle |
|
|
Formes |
|
|
En dialecte FisPro, une sortie Nature='crisp' porte ses conclusions
directement dans les règles (Sugeno d'ordre 0) ; une sortie Nature='fuzzy' se
défuzzifie sur une surface. Disjunction décide du sort des règles qui
partagent une conclusion : max les fusionne au degré le plus fort, sum les
additionne — un choix qui change le résultat, pas un détail.
Les opérateurs area, MeanMax, MaxCrisp et sugeno de FisPro sont calculés
analytiquement, sans discrétisation. Sur le contrôleur de chauffage de
référence, les dix combinaisons possibles donnent la même valeur que le moteur
C++ officiel, au dernier chiffre affiché.
Related MCP server: PCM
Deux moteurs, deux usages
Moteur R ( | Moteur Python (intégré) | |
Rôle | inférence faisant foi | introspection et explication |
Socle | bibliothèque C++ officielle | réimplémentation lisible |
Dépendances | R ≥ 3.6 + paquet | aucune |
Explique le raisonnement | non | oui |
Par défaut (backend="auto"), le serveur utilise R s'il est disponible et bascule sinon sur Python en le signalant. Les résultats numériques restent donc traçables.
Installation
git clone https://github.com/Kofi04/fispro-mcp.git
cd fispro-mcp
pip install -e .Backend R (recommandé, optionnel) :
install.packages("FisPro")Configuration du client
Dans claude_desktop_config.json (Claude Desktop) ou tout autre client MCP :
{
"mcpServers": {
"fispro": {
"command": "fispro-mcp",
"env": {
"FISPRO_MCP_ROOT": "/chemin/vers/vos/modeles"
}
}
}
}Pour Claude Code, voir la procédure d'ajout de serveurs MCP dans la documentation officielle.
Variables d'environnement
Variable | Défaut | Rôle |
|
| Racine autorisée. Aucun fichier hors de cette arborescence n'est lisible. |
|
| Exécutable R à utiliser |
|
| Délai maximal d'un appel R, en secondes |
Outils exposés
Outil | Ce qu'il fait |
| Racine autorisée, disponibilité de R et du paquet FisPro |
| Inventaire des |
| Variables, partitions floues, opérateurs, règles rédigées en français |
| Sorties pour un vecteur d'entrées (backend |
| Degrés d'appartenance et règles déclenchées, triées par force |
| Inférence par lot sur un CSV, avec export optionnel |
| Audit : sous-ensembles inutilisés, prémisses dupliquées, partitions non fortes, trous de la base de règles |
Toutes les réponses d'inférence portent un champ warnings : ce sont les anomalies
relevées à la lecture du fichier (règle tronquée, section inconnue…). Elles ne font
pas échouer le calcul mais peuvent le fausser — lisez-les avant d'exploiter un résultat.
Ce que validate_fis contrôle exactement
Partitions : la somme des degrés d'appartenance est échantillonnée en 101 points sur le domaine de chaque entrée. Un creux signale une partition non forte, une somme nulle une zone qu'aucun sous-ensemble ne représente, une somme supérieure à 1 un recouvrement excessif.
Base de règles : l'espace d'entrée est balayé sur une grille (budget de 4096 points, réparti sur les axes) pour repérer les régions où aucune règle ne se déclenche — celles où le système ne sait rien répondre.
Cohérence : sous-ensembles jamais employés en prémisse, prémisses dupliquées, plages invalides.
S'y ajoutent une ressource fispro://systems (inventaire) et une invite audit_prompt (audit guidé d'un modèle).
Exemple
Le dépôt contient tests/data/irrigation.fis, un système Sugeno à deux entrées (humidité du sol, température) et une sortie (durée d'arrosage) :
FISPRO_MCP_ROOT=tests/data fispro-mcpLimites, en toute franchise
Le lecteur
.fisreste le maillon fragile. Les deux dialectes sont couverts et les 15 fichiers d'exemple livrés avec FisPro se lisent sans avertissement, mais le format admet des variantes que ce lecteur ne connaît peut-être pas. Tout ce qu'il ne comprend pas atterrit danswarningsplutôt que d'être deviné en silence — lisez-les. Si vos fichiers déclenchent des avertissements, ouvrez une issue avec un extrait anonymisé : c'est la contribution la plus utile au projet.Le moteur Python couvre un sous-ensemble des fonctions d'appartenance :
trimf,trapmf,gaussmf,gbellmf,si,sd,universalcôté MATLAB ;triangular,trapezoidal,SemiTrapezoidalInf/Sup,doorcôté FisPro ; et les conséquentsconstant/linear. Les formessinus,discreteetgaussiande FisPro ne sont pas implémentées : elles lèvent une erreur explicite plutôt que de renvoyer un nombre faux.MeanMaxa un cas limite connu. L'opérateur est reproduit comme la moyenne de l'alpha-coupe de la conclusion la mieux notée, écrêtée àmin(1, degré). Sur les 150 lignes du jeu iris et les onze systèmes d'exemple de FisPro, une seule inférence diverge (configfpa.fis, ligne 107, 2,00 contre 2,49) : deux conclusions y sont presque à égalité et FisPro semble alors agréger différemment. Les autres opérateurs sont exacts.Côté Mamdani MATLAB, la défuzzification reste discrétisée. La grille est adaptée à la finesse de la partition de sortie, mais
centroiddemeure une approximation ; attendez-vous à un écart de l'ordre du pas de grille. Les systèmes en dialecte FisPro, eux, ne passent pas par la grille.Pas d'apprentissage automatique. Induction de règles, génération de partitions, réduction d'espace : ces algorithmes vivent dans la bibliothèque C++ et ne sont pas exposés par le paquet R. Les brancher demanderait un binding pybind11 ou un appel aux exécutables en ligne de commande — c'est la prochaine étape naturelle du projet.
Le serveur lit et calcule ; il n'écrit pas de
.fis. Concevez vos systèmes dans FisPro, exploitez-les ici.
Développement
pip install -e ".[dev]"
pytest # sans dépendance à R
ruff check .Arborescence :
src/fispro_mcp/ config.py, fis_model.py, inference.py, r_backend.py, server.py
tests/ tests unitaires + tests/data/irrigation.fisLicence
Code de ce serveur : MIT (voir LICENSE).
FisPro lui-même est distribué sous licence CeCILL et n'est pas redistribué ici : le backend R appelle une installation que vous réalisez vous-même. Si vous publiez des travaux s'appuyant sur FisPro, citez Guillaume & Charnomordic, Fuzzy Inference Systems: an integrated modelling environment for collaboration between expert knowledge and data using FisPro, Expert Systems with Applications 39(10), 2012.
Ce projet n'est pas affilié à l'INRAE ni aux auteurs de FisPro.
Available Tools
7 toolscheck_environmentA
Vérifie la configuration : racine autorisée, disponibilité de R et du paquet FisPro.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It adds context by naming the specific checks (authorized root, R/FisPro availability), which goes beyond the tool name, but it does not disclose the return/error behavior or explicitly state that the check is non-destructive.
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 French sentence naming the verb and the three specific checks. Every word earns its place; there is no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 0-parameter environment check with no output schema and no annotations, the description adequately covers purpose and scope, telling the agent exactly what is verified. The only gap is the lack of result-format details, which could help the agent interpret the outcome, but the simplicity of the tool makes this a minor omission.
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 zero properties, making schema coverage trivially 100%. With 0 parameters, the baseline is 4, and the description correctly avoids inventing parameter details, providing no additional syntactical burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Vérifie' (checks) with a clear resource ('la configuration' — the environment configuration) and lists concrete aspects verified (authorized root, R availability, FisPro package). This clearly distinguishes it from sibling tools like list_fis and infer, which operate on FIS objects rather than the runtime environment.
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 tool is a preflight check (verifying R and FisPro availability) before using the sibling FIS tools, but it does not explicitly state when to invoke it or when to prefer alternatives. No exclusions, prerequisites, or explicit 'use this when' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_fisB
Décrit un système : variables, partitions floues, opérateurs, règles en clair.
Args: path: chemin du fichier .fis. include_rules: inclure la liste des règles rédigées en français.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| include_rules | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states that the tool describes a system, but does not explicitly confirm it is read-only, mention side effects, or describe error handling (e.g., missing file). The operational behavior of reading a file is only implied via the parameter 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?
The description is concise, using a single sentence for the core purpose and a structured Args block for parameters. It avoids unnecessary verbosity while conveying essential information. The structure is easy to parse, though the Args block partially 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?
For a 2-parameter tool with no output schema, the description covers the main purpose and parameters, but lacks details about the return value format (though 'en clair' hints at human-readable output). It also does not situate the tool within its sibling set, missing an opportunity to clarify when this description is needed versus other FIS-related operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description compensates by providing clear meanings for both parameters: 'path' is the .fis file path and 'include_rules' indicates whether to include the list of rules in French. This goes beyond the schema's bare titles and types, though it doesn't mention the default value for include_rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Décrit un système' (describes a system) and enumerates the specific components covered: variables, fuzzy partitions, operators, and rules in plain language. This distinguishes it from sibling tools like 'infer' or 'list_fis' which serve different functions.
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 explicit guidance on when to use this tool versus alternatives. It implies usage through the 'path' argument but does not mention exclusion criteria or conditions under which other tools (e.g., explain_inference, validate_fis) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_inferenceA
Explique le raisonnement : degrés d'appartenance et règles déclenchées.
C'est l'outil à privilégier pour comprendre pourquoi le système produit une sortie donnée. Calculé par le moteur Python.
Args: path: chemin du fichier .fis. inputs: une valeur par entrée. top_k: nombre maximum de règles détaillées, triées par force décroissante.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| top_k | No | ||
| inputs | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool explains reasoning and is 'Calculé par le moteur Python,' but it does not explicitly state whether it is read-only or describe side effects. This is a moderate level of transparency, covering what it does but not a full safety profile.
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 efficiently structured, starting with the core purpose, followed by a usage recommendation and a brief implementation note, then a compact Args list. Every sentence earns its place without unnecessary fluff.
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 moderate complexity (3 params, no output schema, no annotations), the description covers purpose, usage, and all parameters, and hints at output content (membership degrees and rules). It would benefit from a more explicit description of the return format or potential errors, but it is sufficiently complete for an explanation 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 0%, so the description must compensate fully. It does so by explaining each parameter: path ('chemin du fichier .fis'), inputs ('une valeur par entrée'), and top_k ('nombre maximum de règles détaillées, triées par force décroissante'). This adds meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Explique le raisonnement : degrés d'appartenance et règles déclenchées' and positions it as the tool for understanding *why* the system produces a given output. This distinguishes it from siblings like infer and describe_fis, making the scope explicit.
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 explicitly says 'C'est l'outil à privilégier pour comprendre *pourquoi* le système produit une sortie donnée,' providing a clear when-to-use directive. However, it does not mention exclusions or alternatives by name, so it lacks the full when-not/alternatives guidance for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inferA
Calcule les sorties du système flou pour un vecteur d'entrées.
Args: path: chemin du fichier .fis. inputs: une valeur par entrée, dans l'ordre déclaré dans le fichier. backend: "auto" (R si disponible), "r" ou "python".
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| inputs | Yes | ||
| backend | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry full behavioral disclosure. It only states 'Calcule les sorties', implying a non-destructive computation, but does not describe return value format, error handling, or backend behavior (e.g., what happens if R is unavailable).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a single purpose sentence followed by a concise args list. No redundant or irrelevant content; 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?
For a simple inference tool with three parameters, the description covers purpose and all parameters, including the backend default. However, it does not describe the output format or error scenarios, though the output is implied by 'sorties'. Given the lack of an output schema, a bit more detail on the return value would improve completeness, but it is mostly 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?
The description fully explains each parameter beyond the bare schema names: 'path: chemin du fichier .fis', 'inputs: une valeur par entrée, dans l'ordre déclaré dans le fichier', and 'backend: "auto" (R si disponible), "r" ou "python"'. This adds critical meaning about input ordering and backend options, compensating for the 0% schema coverage.
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 'Calcule les sorties du système flou pour un vecteur d'entrées' identifies a specific verb (Calcule), resource (système flou), and scope (vecteur d'entrées). This clearly differentiates from the sibling 'infer_dataset' by explicitly focusing on a single input vector.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'infer_dataset' or 'explain_inference'. The description lacks explicit context, prerequisites, or exclusions, leaving the agent to infer usage only from the parameter list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infer_datasetA
Applique le système flou à toutes les lignes d'un fichier CSV.
Args: path: chemin du fichier .fis. csv_path: CSV dont les colonnes correspondent aux entrées (par nom, sinon par ordre). output_csv: si fourni, écrit le résultat complet dans ce fichier. backend: "auto", "r" ou "python". max_preview: nombre de lignes retournées dans la réponse.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| backend | No | auto | |
| csv_path | Yes | ||
| output_csv | No | ||
| max_preview | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behaviors like writing a full result to an optional output file and returning a preview limited by max_preview, but does not mention side effects such as file overwriting or error handling.
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 well-organized with a clear purpose statement followed by a parameter list. It is concise and relevant, though the 'Args:' header could be considered unnecessary 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?
The description covers the main flow of input files, optional output, backend, and preview size, but lacks details on the exact output structure and potential file system side effects. Given the absence of an output schema, this is a notable 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?
The description provides thorough explanations for all five parameters, including file paths, column matching, optional output, backend choices, and preview size. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool applies the fuzzy system to all rows of a CSV file, using a specific verb and resource. It distinguishes from sibling tools like 'infer' by the explicit batch scope, though it does not name alternatives.
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 guidance is given on when to use this tool versus alternatives such as 'infer' for single inferences. The description implies batch usage but lacks context about when not to use it or how it fits into the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fisB
Liste les fichiers .fis disponibles sous la racine autorisée.
Args: directory: sous-répertoire à explorer (relatif à la racine). recursive: explorer aussi les sous-dossiers.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | . | |
| recursive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states what the tool lists and defines parameters, but does not mention return format, error behavior, or that the operation is read-only. The agent is left without critical operational context such as what 'available' means or what the response contains.
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 appropriately short: one purpose sentence followed by a clean argument list. Every part earns its place, and the structure front-loads the main verb and resource. No unnecessary information 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?
The tool is simple but the description omits information about the output format or how the return value is structured. Since there is no output schema, the agent cannot predict whether paths, filenames, or other details are returned. The authorized root is also left undefined, making the tool's behavior incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides titles and defaults, but the description's Args section explains that 'directory' is a sub-directory relative to root and 'recursive' controls sub-folder exploration. This adds meaningful semantics that the schema lacks, fully compensating for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function using the specific verb 'Liste' and the resource '.fis files'. It also mentions the constrained scope of 'sous la racine autorisée', which adds precision. This clearly distinguishes it from sibling tools like describe_fis or validate_fis, which operate on files rather than listing 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?
There is no guidance on when to use this tool versus alternatives. The description only provides parameter definitions and does not mention use cases, prerequisites, or exclusions. Sibling tools are not referenced, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_fisA
Contrôle la santé d'un système : partitions, couverture des règles, incohérences.
Signale notamment les sous-ensembles flous jamais utilisés par une règle, les doublons de prémisses et les plages incohérentes.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It adds meaningful behavioral detail by specifying exactly what the tool detects and reports (unused subsets, duplicate premises, incoherent ranges). It does not mention side effects, but 'validate' and 'signale' strongly imply a read-only reporting operation.
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 concise, front-loaded sentences: the first states the purpose and main categories, the second adds concrete examples of detected problems. Every sentence adds value and there is 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?
The description gives a strong overview of the tool's behavior and checks, but lacks guidance on the meaning of the required 'path' parameter and the exact return/error behavior. Given there are no annotations or output schema, the description is adequate but not 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 0%, and the description does not mention the 'path' parameter at all. The only available meaning is the schema title 'Path', which is insufficient to clarify what path should point to (e.g., a file, directory, or system definition). The description fails to compensate for the low schema coverage.
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 uses a specific verb ('Contrôle') and enumerates concrete validation targets: partitions, rule coverage, inconsistencies, unused fuzzy subsets, duplicate premises, and incoherent ranges. This clearly distinguishes validate_fis from sibling tools like list_fis, describe_fis, and infer, which serve different purposes.
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 clearly implies when to use the tool: to check the health of a fuzzy inference system and detect structural problems. It does not explicitly mention alternatives or when not to use it, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.3.0- First observed
check_environment - First observed
describe_fis - First observed
explain_inference - First observed
infer - First observed
infer_dataset - First observed
list_fis - First observed
validate_fis
TDQS
Scored across 7 tools
Each tool has a clearly distinct purpose: environment check, file listing, system description, single inference, inference explanation, dataset inference, and validation. There is no overlap; even infer and explain_inference are clearly separated by output (results vs. reasoning).
All tool names follow a consistent snake_case verb_noun or verb pattern (check_environment, list_fis, describe_fis, infer, explain_inference, infer_dataset, validate_fis). The only minor deviation is the bare verb 'infer', but it is clean and understandable in context.
Seven tools is a well-scoped count for a fuzzy inference system server. Each tool covers a distinct operation needed to work with FIS files, and none feel redundant or excessive.
The tool surface covers the full workflow for the domain: preparing/checking the environment, discovering and inspecting FIS files, running single and batch inferences, understanding inference results, and validating system integrity. No obvious dead ends or missing core operations.
Maintenance
Related MCP Connectors
MCP server exposing the AceDataCloud Fish Audio API (text-to-speech with voice conditioning)
MCP server for Speech-to-Text
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Related MCP Servers
- AlicenseCqualityAmaintenanceMCP Server for automated reverse engineering with IDA Pro.431,061 PyPI12,188MIT
- AlicenseBqualityFmaintenanceMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.2446MIT
- FlicenseNot gradedqualityDmaintenanceA FastMCP-based server that enables interaction with MySQL databases, supporting client-server communication for querying and analyzing MySQL data.-
- AlicenseNot gradedqualityCmaintenanceMCP server for performing filesystem operations, enabling file management and manipulation through natural language.MIT