Skip to main content
Glama

Chercher un animal à adopter / Search pets for adoption

chercher_adoptions
Read-onlyIdempotent

Search cats and dogs for adoption in France, at Mission Museaux and other shelters, near a town, in a department or region, or nationwide, by breed, sex, age and gets-on-with. Returns up to 25 animals with shelter, fee, photo, dates and link; else the closest within 300 km. Accepts French or English; replies in French, or English with langue "en".

Input Schema

NameRequiredDescriptionDefault
raceNoBreed in French or English (string, 2 to 60 characters), e.g. "labrador", "Maine coon" or "berger australien". A partial name such as "lévrier" covers every breed containing it.
sexeNoSex: male or femelle (female). Animals of unstated sex are kept and flagged as not stated.
especeNoSpecies: chat (cat) or chien (dog); adoptions only cover cats and dogs. cat, kitten, dog or puppy are accepted. Omit for both.
langueNoResponse language: "fr" (French, default) or "en" (English). A request written in English is answered in English even without it.fr
limiteNoNumber of animals to return (whole number, 1 to 25, default 10); a larger value is lowered to 25. Use decalage for the next page.
communeNoFrench town name or 5-digit postcode (string, 2 to 80 characters), e.g. "Nemours", "77140" or "Chaumont 52" (department number to tell namesakes apart). France only; a place abroad returns no result.
decalageNoNumber of animals to skip, for paging (whole number, 0 to 500, default 0), e.g. 10 for the second page of 10.
ententesNoGets on with (list of 1 to 4 values): chats (cats), chiens (dogs), enfants (children), premier_animal (suits a first-time owner), e.g. ["chats", "enfants"]. Only animals whose profile says so are kept.
latitudeNoLatitude of the search centre in decimal degrees (number, -90 to 90), e.g. 48.267. Give it with longitude, instead of commune.
rayon_kmNoSearch radius in km around commune or the coordinates (number, 1 to 300, default 60). Without a centre or departement, all of France.
longitudeNoLongitude of the search centre in decimal degrees (number, -180 to 180), e.g. 2.693. Give it with latitude, instead of commune.
departementNoDepartment or region instead of a radius (string): code or name, several separated by commas, e.g. "77", "2A", "Bretagne" or "75, 92, 93". A commune given with it only sorts by distance.
age_max_moisNoMaximum age in months, inclusive (whole number, 0 to 300), e.g. 11 for under one year or 23 for under two. Animals of unstated age are left out.
age_min_moisNoMinimum age in months, inclusive (whole number, 0 to 300), e.g. 96 for 8 years or older. Read from the age the shelter wrote; animals of unstated age are left out.

Output Schema

NameRequiredDescriptionDefault
totalYes
centreYes
rappelYes
animauxYes
criteresYes
decalageYes
rayon_kmYes
homonymesYesWhen several towns have exactly the given name and no department tells them apart; null otherwise.
plus_procheYesIn an empty answer, the closest animal meeting the same criteria, up to rayon_max_km from the centre or the prefecture, with its dates and source.
repartitionYes
total_exactYes
departementsYes
lieu_non_couvertNoPresent when the given town is not a French town: without a requested department, no search took place; Mission Museaux covers France.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changed
    • changedInput schema / properties / age_max_mois / description
      Previous value: -"Âge maximal en mois, compris (11 pour moins d'un an, 23 pour moins de 2 ans). / Maximum age in months, inclusive (11 for under one year, 23 for under two)."New value: +"Maximum age in months, inclusive (whole number, 0 to 300), e.g. 11 for under one year or 23 for under two. Animals of unstated age are left out."
    • changedInput schema / properties / age_min_mois / description
      Previous value: -"Âge minimal en mois, compris (96 pour 8 ans ou plus), d'après l'âge écrit par l'association : « 2 ans » compte 24 mois. Un animal d'âge non indiqué est écarté. / Minimum age in months, inclusive (96 for 8 years or more), from the age the association wrote; animals of unstated age are left out."New value: +"Minimum age in months, inclusive (whole number, 0 to 300), e.g. 96 for 8 years or older. Read from the age the shelter wrote; animals of unstated age are left out."
    • changedInput schema / properties / commune / description
      Previous value: -"Commune française (nom ou code postal), par exemple « Nemours », « Chaumont 52 » (avec le département) ou « 77140 ». / French town (name or postcode), e.g. “Chaumont 52” with the department."New value: +"French town name or 5-digit postcode (string, 2 to 80 characters), e.g. \"Nemours\", \"77140\" or \"Chaumont 52\" (department number to tell namesakes apart). France only; a place abroad returns no result."
    • changedInput schema / properties / decalage / description
      Previous value: -"Nombre d'animaux à passer, pour lire la suite d'une liste : 10 donne la deuxième page de 10. / Number of animals to skip, to read the next page."New value: +"Number of animals to skip, for paging (whole number, 0 to 500, default 0), e.g. 10 for the second page of 10."
    • changedInput schema / properties / departement / description
      Previous value: -"Département ou région : code (« 77 », « 2A », « 971 ») ou nom (« Seine-et-Marne », « Bretagne », « Île-de-France »), plusieurs séparés par des virgules. Remplace le rayon ; une commune ou des coordonnées données avec lui servent à classer par distance. / Department or region: code or name, several separated by commas. Replaces the radius; a commune or coordinates given with it sort by distance."New value: +"Department or region instead of a radius (string): code or name, several separated by commas, e.g. \"77\", \"2A\", \"Bretagne\" or \"75, 92, 93\". A commune given with it only sorts by distance."
    • changedInput schema / properties / ententes / description
      Previous value: -"S'entend avec : chats, chiens, enfants, premier_animal (convient à qui n'a jamais eu d'animal). Seuls restent les animaux dont la fiche le dit ; la réponse dit pour combien l'information manque. / Gets on with: chats (cats), chiens (dogs), enfants (children), premier_animal (suits a first-time owner); only animals whose listing says so are kept, and the answer says how many lack the information."New value: +"Gets on with (list of 1 to 4 values): chats (cats), chiens (dogs), enfants (children), premier_animal (suits a first-time owner), e.g. [\"chats\", \"enfants\"]. Only animals whose profile says so are kept."
    • addedInput schema / properties / espece / description
      Added value: +"Species: chat (cat) or chien (dog); adoptions only cover cats and dogs. cat, kitten, dog or puppy are accepted. Omit for both."
    • changedInput schema / properties / langue / description
      Previous value: -"Langue de la réponse : fr (par défaut) ou en. / Response language: fr (default) or en."New value: +"Response language: \"fr\" (French, default) or \"en\" (English). A request written in English is answered in English even without it."
    • changedInput schema / properties / latitude / description
      Previous value: -"Latitude du centre de recherche, à la place de la commune. / Search centre latitude."New value: +"Latitude of the search centre in decimal degrees (number, -90 to 90), e.g. 48.267. Give it with longitude, instead of commune."
    • addedInput schema / properties / limite / description
      Added value: +"Number of animals to return (whole number, 1 to 25, default 10); a larger value is lowered to 25. Use decalage for the next page."
    • changedInput schema / properties / longitude / description
      Previous value: -"Longitude du centre de recherche. / Search centre longitude."New value: +"Longitude of the search centre in decimal degrees (number, -180 to 180), e.g. 2.693. Give it with latitude, instead of commune."
    • changedInput schema / properties / race / description
      Previous value: -"Race, en français ou en anglais (« labrador », « berger australien », « Maine coon ») ; un nom partiel (« lévrier ») couvre les races de l'annuaire qui le contiennent. / Breed in French or English; a partial name covers every breed that contains it."New value: +"Breed in French or English (string, 2 to 60 characters), e.g. \"labrador\", \"Maine coon\" or \"berger australien\". A partial name such as \"lévrier\" covers every breed containing it."
    • changedInput schema / properties / rayon_km / description
      Previous value: -"Rayon autour du centre ; sans centre, toute la France. / Radius; without centre, all of France."New value: +"Search radius in km around commune or the coordinates (number, 1 to 300, default 60). Without a centre or departement, all of France."
    • changedInput schema / properties / sexe / description
      Previous value: -"male ou femelle ; les animaux de sexe non indiqué restent compris. / male or femelle (female); animals of unstated sex are kept."New value: +"Sex: male or femelle (female). Animals of unstated sex are kept and flagged as not stated."
    • addedOutput schema / properties / animaux / items / properties / criteres_demandes
      Added value: +{
      +  "description": "For each criterion of the request (breed, colour, sex, age, gets-on-with), whether the record states it. Empty when no such criterion was asked.",
      +  "items": {
      +    "properties": {
      +      "critere": {
      +        "enum": [
      +          "race",
      +          "couleur",
      +          "sexe",
      +          "age",
      +          "ententes"
      +        ],
      +        "type": "string"
      +      },
      +      "precise": {
      +        "description": "true when the record states this criterion (and matches it); false when it does not say, so it is kept as a possible match.",
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "critere",
      +      "precise"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / animaux / items / properties / mise_a_jour_le
      Added value: +{
      +  "description": "When the association offering the animal last changed its listing (ISO date); null when unknown, and for Mission Museaux's own animals.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / animaux / items / properties / publiee_le
      Added value: +{
      +  "description": "When the record was first published (ISO date): on Mission Museaux, at the original platform for a reprise, or by the association offering the animal. null when unknown.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / animaux / items / properties / source
      Added value: +{
      +  "description": "Where the record comes from: mission_museaux (published on Mission Museaux), reprise (a listing relayed from another platform, not named; contact goes through the original listing) or association_partenaire (an animal offered by another French association or shelter, not registered on Mission Museaux, whose listing Mission Museaux relays).",
      +  "enum": [
      +    "mission_museaux",
      +    "reprise",
      +    "association_partenaire"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / animaux / items / properties / verifiee_le
      Added value: +{
      +  "description": "When Mission Museaux last re-read the listing of the association offering the animal and found it still listed (ISO date); a freshness check, not a verification of the animal. null for Mission Museaux's own animals.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / animaux / items / required
      Previous value: -[
      -  "id",
      -  "url",
      -  "nom",
      -  "espece",
      -  "race",
      -  "age",
      -  "sexe",
      -  "lieu",
      -  "departement",
      -  "association",
      -  "frais",
      -  "photo",
      -  "distance_km",
      -  "date",
      -  "reserve",
      -  "pays_mentionnes"
      -]New value: +[
      +  "id",
      +  "url",
      +  "nom",
      +  "espece",
      +  "race",
      +  "age",
      +  "sexe",
      +  "lieu",
      +  "departement",
      +  "association",
      +  "frais",
      +  "photo",
      +  "distance_km",
      +  "date",
      +  "reserve",
      +  "pays_mentionnes",
      +  "publiee_le",
      +  "mise_a_jour_le",
      +  "verifiee_le",
      +  "source",
      +  "criteres_demandes"
      +]
    • changedOutput schema / properties / homonymes / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "autres": {
      -        "description": "Les autres, à demander avec leur département (« Saint-Denis (93) »). / The others, to ask for with their department.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "commune": {
      -        "type": "string"
      -      },
      -      "retenue": {
      -        "description": "La commune qui a servi, la plus peuplée (« Saint-Denis (974) »). / The town used, the most populous.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "commune",
      -      "retenue",
      -      "autres"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "autres": {
      +        "description": "The others, to ask for with their department (“Saint-Denis (93)”).",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "commune": {
      +        "type": "string"
      +      },
      +      "retenue": {
      +        "description": "The town used, the most populous (“Saint-Denis (974)”).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "commune",
      +      "retenue",
      +      "autres"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / homonymes / description
      Previous value: -"Quand plusieurs communes portent exactement le nom donné et qu'aucun département ne les départage ; null sinon. / When several towns have exactly the given name and no department tells them apart; null otherwise."New value: +"When several towns have exactly the given name and no department tells them apart; null otherwise."
    • addedOutput schema / properties / lieu_non_couvert
      Added value: +{
      +  "description": "Present when the given town is not a French town: without a requested department, no search took place; Mission Museaux covers France.",
      +  "properties": {
      +    "commune": {
      +      "description": "The town as given.",
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "raison": {
      +      "description": "hors_france: a place abroad (Madrid, London); introuvable: no town of that name.",
      +      "enum": [
      +        "hors_france",
      +        "introuvable"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "commune",
      +    "raison",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / plus_proche / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "association": {
      -        "type": "string"
      -      },
      -      "departement": {
      -        "description": "Le code du département où se trouve l'animal (« 01 »). / Code of the department where the animal is.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "departement_nom": {
      -        "description": "Le nom de ce département (« Ain »). / Name of that department.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "departement_suffisant": {
      -        "description": "Pour une recherche par départements : la valeur de departement qui comprend aussi cet animal (« Rhône, 01 »). / For a department search: the departement value that also includes this animal.",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "depuis": {
      -        "description": "D'où se mesure la distance : le centre de la recherche, ou, pour une recherche par départements sans commune, une préfecture (« Lyon (préfecture, 69) »). / Where the distance is measured from: the search centre, or a prefecture for a department search without a town.",
      -        "type": "string"
      -      },
      -      "distance_km": {
      -        "type": "number"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "lieu": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "nom": {
      -        "type": "string"
      -      },
      -      "rayon_km_suffisant": {
      -        "type": "number"
      -      },
      -      "rayon_max_km": {
      -        "type": "number"
      -      },
      -      "total_exact": {
      -        "type": "boolean"
      -      },
      -      "total_rayon_max": {
      -        "type": "number"
      -      },
      -      "url": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "url",
      -      "nom",
      -      "lieu",
      -      "distance_km",
      -      "rayon_km_suffisant",
      -      "association",
      -      "total_rayon_max",
      -      "total_exact",
      -      "rayon_max_km",
      -      "depuis",
      -      "departement",
      -      "departement_nom",
      -      "departement_suffisant"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "association": {
      +        "type": "string"
      +      },
      +      "departement": {
      +        "description": "Code of the department where the animal is (“01”).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "departement_nom": {
      +        "description": "Name of that department (“Ain”).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "departement_suffisant": {
      +        "description": "For a department search: the departement value that also includes this animal (“Rhône, 01”).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "depuis": {
      +        "description": "Where the distance is measured from: the search centre, or a prefecture for a department search without a town (“Lyon (préfecture, 69)”).",
      +        "type": "string"
      +      },
      +      "distance_km": {
      +        "type": "number"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "lieu": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "mise_a_jour_le": {
      +        "description": "When the association offering the animal last changed its listing (ISO date); null when unknown, and for Mission Museaux's own animals.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "nom": {
      +        "type": "string"
      +      },
      +      "publiee_le": {
      +        "description": "When the record was first published (ISO date): on Mission Museaux, at the original platform for a reprise, or by the association offering the animal. null when unknown.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "rayon_km_suffisant": {
      +        "type": "number"
      +      },
      +      "rayon_max_km": {
      +        "type": "number"
      +      },
      +      "source": {
      +        "description": "Where the record comes from: mission_museaux (published on Mission Museaux), reprise (a listing relayed from another platform, not named; contact goes through the original listing) or association_partenaire (an animal offered by another French association or shelter, not registered on Mission Museaux, whose listing Mission Museaux relays).",
      +        "enum": [
      +          "mission_museaux",
      +          "reprise",
      +          "association_partenaire"
      +        ],
      +        "type": "string"
      +      },
      +      "total_exact": {
      +        "type": "boolean"
      +      },
      +      "total_rayon_max": {
      +        "type": "number"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "verifiee_le": {
      +        "description": "When Mission Museaux last re-read the listing of the association offering the animal and found it still listed (ISO date); a freshness check, not a verification of the animal. null for Mission Museaux's own animals.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "id",
      +      "url",
      +      "nom",
      +      "lieu",
      +      "distance_km",
      +      "rayon_km_suffisant",
      +      "association",
      +      "publiee_le",
      +      "mise_a_jour_le",
      +      "verifiee_le",
      +      "source",
      +      "total_rayon_max",
      +      "total_exact",
      +      "rayon_max_km",
      +      "depuis",
      +      "departement",
      +      "departement_nom",
      +      "departement_suffisant"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / plus_proche / description
      Previous value: -"Dans une réponse vide, l'animal le plus proche qui répond aux mêmes critères, jusqu'à rayon_max_km du centre ou de la préfecture. / In an empty answer, the closest animal meeting the same criteria, up to rayon_max_km from the centre or the prefecture."New value: +"In an empty answer, the closest animal meeting the same criteria, up to rayon_max_km from the centre or the prefecture, with its dates and source."
  2. Changed9 schema fields changed
    • addedInput schema / properties / age_max_mois
      Added value: +{
      +  "description": "Âge maximal en mois, compris (11 pour moins d'un an, 23 pour moins de 2 ans). / Maximum age in months, inclusive (11 for under one year, 23 for under two).",
      +  "maximum": 300,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / age_min_mois
      Added value: +{
      +  "description": "Âge minimal en mois, compris (96 pour 8 ans ou plus), d'après l'âge écrit par l'association : « 2 ans » compte 24 mois. Un animal d'âge non indiqué est écarté. / Minimum age in months, inclusive (96 for 8 years or more), from the age the association wrote; animals of unstated age are left out.",
      +  "maximum": 300,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / commune / description
      Previous value: -"Commune française (nom ou code postal), par exemple « Nemours » ou « 77140 ». / French town (name or postcode)."New value: +"Commune française (nom ou code postal), par exemple « Nemours », « Chaumont 52 » (avec le département) ou « 77140 ». / French town (name or postcode), e.g. “Chaumont 52” with the department."
    • addedInput schema / properties / decalage
      Added value: +{
      +  "default": 0,
      +  "description": "Nombre d'animaux à passer, pour lire la suite d'une liste : 10 donne la deuxième page de 10. / Number of animals to skip, to read the next page.",
      +  "maximum": 500,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / departement
      Added value: +{
      +  "description": "Département ou région : code (« 77 », « 2A », « 971 ») ou nom (« Seine-et-Marne », « Bretagne », « Île-de-France »), plusieurs séparés par des virgules. Remplace le rayon ; une commune ou des coordonnées données avec lui servent à classer par distance. / Department or region: code or name, several separated by commas. Replaces the radius; a commune or coordinates given with it sort by distance.",
      +  "maxLength": 120,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / ententes
      Added value: +{
      +  "description": "S'entend avec : chats, chiens, enfants, premier_animal (convient à qui n'a jamais eu d'animal). Seuls restent les animaux dont la fiche le dit ; la réponse dit pour combien l'information manque. / Gets on with: chats (cats), chiens (dogs), enfants (children), premier_animal (suits a first-time owner); only animals whose listing says so are kept, and the answer says how many lack the information.",
      +  "items": {
      +    "enum": [
      +      "chats",
      +      "chiens",
      +      "enfants",
      +      "premier_animal"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 4,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / race
      Added value: +{
      +  "description": "Race, en français ou en anglais (« labrador », « berger australien », « Maine coon ») ; un nom partiel (« lévrier ») couvre les races de l'annuaire qui le contiennent. / Breed in French or English; a partial name covers every breed that contains it.",
      +  "maxLength": 60,
      +  "minLength": 2,
      +  "type": "string"
      +}
    • addedInput schema / properties / sexe
      Added value: +{
      +  "description": "male ou femelle ; les animaux de sexe non indiqué restent compris. / male or femelle (female); animals of unstated sex are kept.",
      +  "enum": [
      +    "male",
      +    "femelle"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "animaux": {
      +      "items": {
      +        "properties": {
      +          "age": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "association": {
      +            "type": "string"
      +          },
      +          "date": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "departement": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "distance_km": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "espece": {
      +            "type": "string"
      +          },
      +          "frais": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "lieu": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "nom": {
      +            "type": "string"
      +          },
      +          "pays_mentionnes": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "photo": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "race": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reserve": {
      +            "type": "boolean"
      +          },
      +          "sexe": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "url",
      +          "nom",
      +          "espece",
      +          "race",
      +          "age",
      +          "sexe",
      +          "lieu",
      +          "departement",
      +          "association",
      +          "frais",
      +          "photo",
      +          "distance_km",
      +          "date",
      +          "reserve",
      +          "pays_mentionnes"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "centre": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "criteres": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "decalage": {
      +      "type": "number"
      +    },
      +    "departements": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "homonymes": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "autres": {
      +              "description": "Les autres, à demander avec leur département (« Saint-Denis (93) »). / The others, to ask for with their department.",
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "commune": {
      +              "type": "string"
      +            },
      +            "retenue": {
      +              "description": "La commune qui a servi, la plus peuplée (« Saint-Denis (974) »). / The town used, the most populous.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "commune",
      +            "retenue",
      +            "autres"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Quand plusieurs communes portent exactement le nom donné et qu'aucun département ne les départage ; null sinon. / When several towns have exactly the given name and no department tells them apart; null otherwise."
      +    },
      +    "plus_proche": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "association": {
      +              "type": "string"
      +            },
      +            "departement": {
      +              "description": "Le code du département où se trouve l'animal (« 01 »). / Code of the department where the animal is.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "departement_nom": {
      +              "description": "Le nom de ce département (« Ain »). / Name of that department.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "departement_suffisant": {
      +              "description": "Pour une recherche par départements : la valeur de departement qui comprend aussi cet animal (« Rhône, 01 »). / For a department search: the departement value that also includes this animal.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "depuis": {
      +              "description": "D'où se mesure la distance : le centre de la recherche, ou, pour une recherche par départements sans commune, une préfecture (« Lyon (préfecture, 69) »). / Where the distance is measured from: the search centre, or a prefecture for a department search without a town.",
      +              "type": "string"
      +            },
      +            "distance_km": {
      +              "type": "number"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "lieu": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "nom": {
      +              "type": "string"
      +            },
      +            "rayon_km_suffisant": {
      +              "type": "number"
      +            },
      +            "rayon_max_km": {
      +              "type": "number"
      +            },
      +            "total_exact": {
      +              "type": "boolean"
      +            },
      +            "total_rayon_max": {
      +              "type": "number"
      +            },
      +            "url": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "url",
      +            "nom",
      +            "lieu",
      +            "distance_km",
      +            "rayon_km_suffisant",
      +            "association",
      +            "total_rayon_max",
      +            "total_exact",
      +            "rayon_max_km",
      +            "depuis",
      +            "departement",
      +            "departement_nom",
      +            "departement_suffisant"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Dans une réponse vide, l'animal le plus proche qui répond aux mêmes critères, jusqu'à rayon_max_km du centre ou de la préfecture. / In an empty answer, the closest animal meeting the same criteria, up to rayon_max_km from the centre or the prefecture."
      +    },
      +    "rappel": {
      +      "type": "string"
      +    },
      +    "rayon_km": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "repartition": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "properties": {
      +              "association": {
      +                "type": "string"
      +              },
      +              "commune": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "nombre": {
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "association",
      +              "nombre",
      +              "commune"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "total": {
      +      "type": "number"
      +    },
      +    "total_exact": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "total",
      +    "total_exact",
      +    "centre",
      +    "homonymes",
      +    "rayon_km",
      +    "departements",
      +    "decalage",
      +    "criteres",
      +    "repartition",
      +    "animaux",
      +    "plus_proche",
      +    "rappel"
      +  ],
      +  "type": "object"
      +}
  3. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, and openWorldHint=false. Beyond that, the description discloses the 25-result cap, the fallback behaviour ('else the closest within 300 km'), and language handling ('accepts French or English; replies in French, or English with langue "en"') — genuine behavioural traits not visible in annotations.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose then return/fallback behaviour then language, with no filler. Slightly dense and partially overlapping with schema-documented facts, but structured and appropriately sized for a 14-parameter tool.

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

Completeness4/5

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 it sensibly focuses on scope, fallback and language. For a 14-parameter, zero-required search tool, this is nearly complete; only the sibling-routing boundary is left unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, and each of the 14 parameters already documents format, ranges and examples. The description's 'by breed, sex, age and gets-on-with' merely names a subset of those parameters and adds no syntax or format 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.

Purpose4/5

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

States a specific verb (search) and resource (cats and dogs for adoption in France), with concrete scope (Mission Museaux and other shelters, geographic modes). It is distinguishable from most siblings, but never explicitly names or contrasts with the closest alternative chercher_annonces, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through its geographic modes (near a town, department/region, nationwide) and filter list, which tells the agent when the tool is applicable. However, it offers no explicit when-to-use-vs-alternative guidance or exclusions relative to chercher_annonces or chercher_par_photo, leaving routing to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources