Skip to main content
Glama

flatin.pt — Portuguese homes: taxes, construction, new-builds

Prepare a request to flatin.pt, a licensed estate agency

request_consultation
Read-onlyIdempotent

Use this when the person wants flatin.pt (licensed estate agency, AMI 28163) to contact them about buying a new-build apartment in Portugal. Do not use it to send the request (submit_consultation) or for emails about new projects (subscribe_digest). mode=link returns the form link and the consent text; mode=prepare checks the details and returns a summary, the GDPR (RGPD) consent text and a confirmation_token. Nothing is sent.

Input Schema

NameRequiredDescriptionDefault
cityNoOlder name for places: one place. Merged with places, city first
modeNolink: only the form link and the consent text. prepare: check the details, get a summary, the consent text and a confirmation_token for submit_consultation; nothing is sentlink
nameNoThe person's name
emailNoOnly if the person gives no phone
phoneNoPhone in international format. Preferred over email
budgetNoDeprecated: use budget_max. Read as budget_max when budget_min and budget_max are both empty
clientNoOptional. Your app's host or name: recorded as the request's source
intentNoOptional. visit and reserve only with a project on sale, notify only with a project not yet on sale
placesNoWhere the person wants to buy: municipalities in Portugal (Lisboa or Lisbon) or districts, most important first. At least one place, unless project is given (the project's municipality comes first then)
channelNoHow the person wants to be contacted on that phone
messageNoOptional. The person's own words
projectNoOptional. Slug of the development the request is about: the slug field of search_newbuilds
languageNoThe person's language: the consent text, the emails and the page links come in it. Another value is refused, except in mode=link, which falls back to English. uk is accepted as ua.en
typologyNoOptional. Bedroom counts wanted (T2 = two bedrooms)
deal_typeNoDeprecated and ignored: every request is to buy
budget_maxNoOptional. Upper end of the budget in whole euros; if lower than budget_min, the two are swapped
budget_minNoOptional. Lower end of the budget in whole euros
budget_bandNoDeprecated: use budget_min and budget_max. An old band (0-250k, 250-400k, 400-600k, 600k+), read as its range when both are empty
property_typeNoDeprecated and ignored: every request is for a new-build apartment
preferred_timeNoOptional, with intent=visit: when suits the person

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • removedInput schema / properties / confirmation_token
      Removed value: -{
      -  "description": "submit only: the token returned by prepare",
      -  "type": "string"
      -}
    • removedInput schema / properties / consent
      Removed value: -{
      -  "description": "submit only: true once the person has read the consent text returned by prepare and explicitly agreed",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / consent_text_version
      Removed value: -{
      -  "description": "submit only: consent_text_version returned by prepare",
      -  "type": "string"
      -}
    • changedInput schema / properties / mode / description
      Previous value: -"link: only the form link and the consent text. prepare: check the details, get a summary, the consent text and a confirmation_token; nothing is sent. submit: send the request — the same details as in prepare plus confirmation_token, consent=true and consent_text_version, only after the person has read the consent text and explicitly agreed"New value: +"link: only the form link and the consent text. prepare: check the details, get a summary, the consent text and a confirmation_token for submit_consultation; nothing is sent"
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "link",
      -  "prepare",
      -  "submit"
      -]New value: +[
      +  "link",
      +  "prepare"
      +]
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "description": "mode=link: the form link and the consent text; nothing is sent.",
      -    "properties": {
      -      "attribution": {
      -        "type": "object"
      -      },
      -      "consent_language": {
      -        "type": "string"
      -      },
      -      "consent_text": {
      -        "type": "string"
      -      },
      -      "consent_text_version": {
      -        "type": "string"
      -      },
      -      "consent_version": {
      -        "description": "Same as consent_text_version",
      -        "type": "string"
      -      },
      -      "form_url": {
      -        "description": "Absolute URL",
      -        "type": "string"
      -      },
      -      "language": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "type": "string"
      -      },
      -      "what_happens_next": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "form_url",
      -      "consent_text",
      -      "consent_text_version",
      -      "consent_language",
      -      "consent_version",
      -      "what_happens_next",
      -      "language",
      -      "attribution"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "description": "mode=prepare: summary, consent text and token; nothing is sent.",
      -    "properties": {
      -      "confirmation_token": {
      -        "type": "string"
      -      },
      -      "consent_language": {
      -        "type": "string"
      -      },
      -      "consent_text": {
      -        "type": "string"
      -      },
      -      "consent_text_version": {
      -        "type": "string"
      -      },
      -      "expires_in_seconds": {
      -        "type": "integer"
      -      },
      -      "mode": {
      -        "type": "string"
      -      },
      -      "summary": {
      -        "type": "object"
      -      },
      -      "what_happens_next": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "summary",
      -      "consent_text",
      -      "consent_text_version",
      -      "consent_language",
      -      "confirmation_token",
      -      "expires_in_seconds",
      -      "what_happens_next"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "description": "mode=submit: the request was received; flatin.pt answers it.",
      -    "properties": {
      -      "mode": {
      -        "type": "string"
      -      },
      -      "privacy_policy": {
      -        "description": "Absolute URL",
      -        "type": "string"
      -      },
      -      "status": {
      -        "type": "string"
      -      },
      -      "what_happens_next": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "status",
      -      "what_happens_next",
      -      "privacy_policy"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "consent_language": {
      -        "type": "string"
      -      },
      -      "consent_text": {
      -        "type": "string"
      -      },
      -      "consent_text_version": {
      -        "type": "string"
      -      },
      -      "error": {
      -        "type": "string"
      -      },
      -      "field": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "problems": {
      -        "items": {
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "retry_after_seconds": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "message"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "mode=link: the form link and the consent text; nothing is sent.",
      +    "properties": {
      +      "attribution": {
      +        "type": "object"
      +      },
      +      "consent_language": {
      +        "type": "string"
      +      },
      +      "consent_text": {
      +        "type": "string"
      +      },
      +      "consent_text_version": {
      +        "type": "string"
      +      },
      +      "consent_version": {
      +        "description": "Same as consent_text_version",
      +        "type": "string"
      +      },
      +      "form_url": {
      +        "description": "Absolute URL",
      +        "type": "string"
      +      },
      +      "language": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "type": "string"
      +      },
      +      "what_happens_next": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "form_url",
      +      "consent_text",
      +      "consent_text_version",
      +      "consent_language",
      +      "consent_version",
      +      "what_happens_next",
      +      "language",
      +      "attribution"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "description": "mode=prepare: summary, consent text and token; nothing is sent.",
      +    "properties": {
      +      "confirmation_token": {
      +        "type": "string"
      +      },
      +      "consent_language": {
      +        "type": "string"
      +      },
      +      "consent_text": {
      +        "type": "string"
      +      },
      +      "consent_text_version": {
      +        "type": "string"
      +      },
      +      "expires_in_seconds": {
      +        "type": "integer"
      +      },
      +      "mode": {
      +        "type": "string"
      +      },
      +      "summary": {
      +        "type": "object"
      +      },
      +      "what_happens_next": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "summary",
      +      "consent_text",
      +      "consent_text_version",
      +      "consent_language",
      +      "confirmation_token",
      +      "expires_in_seconds",
      +      "what_happens_next"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "consent_language": {
      +        "type": "string"
      +      },
      +      "consent_text": {
      +        "type": "string"
      +      },
      +      "consent_text_version": {
      +        "type": "string"
      +      },
      +      "error": {
      +        "type": "string"
      +      },
      +      "field": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "problems": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "retry_after_seconds": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "message"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed17 schema fields changed
    • addedInput schema / properties / budget / deprecated
      Added value: +true
    • changedInput schema / properties / budget / description
      Previous value: -"Optional. Budget in whole euros, e.g. 350000"New value: +"Deprecated: use budget_max. Read as budget_max when budget_min and budget_max are both empty"
    • addedInput schema / properties / budget_band
      Added value: +{
      +  "deprecated": true,
      +  "description": "Deprecated: use budget_min and budget_max. An old band (0-250k, 250-400k, 400-600k, 600k+), read as its range when both are empty",
      +  "examples": [
      +    "250-400k"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / budget_max
      Added value: +{
      +  "description": "Optional. Upper end of the budget in whole euros; if lower than budget_min, the two are swapped",
      +  "examples": [
      +    400000
      +  ],
      +  "type": "integer"
      +}
    • addedInput schema / properties / budget_min
      Added value: +{
      +  "description": "Optional. Lower end of the budget in whole euros",
      +  "examples": [
      +    250000
      +  ],
      +  "type": "integer"
      +}
    • changedInput schema / properties / city / description
      Previous value: -"Municipality in Portugal (Lisboa or Lisbon) or a district. Not needed with project, which sets the place"New value: +"Older name for places: one place. Merged with places, city first"
    • changedInput schema / properties / city / examples
      Previous value: -[
      -  "Porto",
      -  "Matosinhos"
      -]New value: +[
      +  "Porto"
      +]
    • removedInput schema / properties / deal_type / default
      Removed value: -"buy"
    • addedInput schema / properties / deal_type / deprecated
      Added value: +true
    • changedInput schema / properties / deal_type / description
      Previous value: -"Renting is not handled"New value: +"Deprecated and ignored: every request is to buy"
    • removedInput schema / properties / deal_type / enum
      Removed value: -[
      -  "buy",
      -  "sell"
      -]
    • addedInput schema / properties / deal_type / examples
      Added value: +[
      +  "buy"
      +]
    • addedInput schema / properties / places
      Added value: +{
      +  "description": "Where the person wants to buy: municipalities in Portugal (Lisboa or Lisbon) or districts, most important first. At least one place, unless project is given (the project's municipality comes first then)",
      +  "examples": [
      +    [
      +      "Porto",
      +      "Matosinhos"
      +    ]
      +  ],
      +  "items": {
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedInput schema / properties / property_type / deprecated
      Added value: +true
    • changedInput schema / properties / property_type / description
      Previous value: -"apartment if not given, or new_build when project is given"New value: +"Deprecated and ignored: every request is for a new-build apartment"
    • removedInput schema / properties / property_type / enum
      Removed value: -[
      -  "apartment",
      -  "house",
      -  "commercial",
      -  "new_build"
      -]
    • addedInput schema / properties / property_type / examples
      Added value: +[
      +  "apartment"
      +]
  3. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "description": "mode=link: the form link and the consent text; nothing is sent.",
      -    "properties": {
      -      "attribution": {
      -        "type": "object"
      -      },
      -      "consent_language": {
      -        "type": "string"
      -      },
      -      "consent_text": {
      -        "type": "string"
      -      },
      -      "consent_text_version": {
      -        "type": "string"
      -      },
      -      "consent_version": {
      -        "description": "Same as consent_text_version",
      -        "type": "string"
      -      },
      -      "form_url": {
      -        "description": "Absolute URL",
      -        "type": "string"
      -      },
      -      "language": {
      -        "type": "string"
      -      },
      -      "mode": {
      -        "type": "string"
      -      },
      -      "what_happens_next": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "form_url",
      -      "consent_text",
      -      "consent_text_version",
      -      "consent_language",
      -      "consent_version",
      -      "what_happens_next",
      -      "language",
      -      "attribution"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "description": "mode=prepare: summary, consent text and token; nothing is sent.",
      -    "properties": {
      -      "confirmation_token": {
      -        "type": "string"
      -      },
      -      "consent_language": {
      -        "type": "string"
      -      },
      -      "consent_text": {
      -        "type": "string"
      -      },
      -      "consent_text_version": {
      -        "type": "string"
      -      },
      -      "expires_in_seconds": {
      -        "type": "integer"
      -      },
      -      "mode": {
      -        "type": "string"
      -      },
      -      "summary": {
      -        "type": "object"
      -      },
      -      "what_happens_next": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "summary",
      -      "consent_text",
      -      "consent_text_version",
      -      "consent_language",
      -      "confirmation_token",
      -      "expires_in_seconds",
      -      "what_happens_next"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "description": "mode=submit: the request was received and passed on.",
      -    "properties": {
      -      "mode": {
      -        "type": "string"
      -      },
      -      "privacy_policy": {
      -        "description": "Absolute URL",
      -        "type": "string"
      -      },
      -      "status": {
      -        "type": "string"
      -      },
      -      "what_happens_next": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "mode",
      -      "status",
      -      "what_happens_next",
      -      "privacy_policy"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "consent_language": {
      -        "type": "string"
      -      },
      -      "consent_text": {
      -        "type": "string"
      -      },
      -      "consent_text_version": {
      -        "type": "string"
      -      },
      -      "error": {
      -        "type": "string"
      -      },
      -      "field": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "problems": {
      -        "items": {
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "retry_after_seconds": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "error",
      -      "message"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "mode=link: the form link and the consent text; nothing is sent.",
      +    "properties": {
      +      "attribution": {
      +        "type": "object"
      +      },
      +      "consent_language": {
      +        "type": "string"
      +      },
      +      "consent_text": {
      +        "type": "string"
      +      },
      +      "consent_text_version": {
      +        "type": "string"
      +      },
      +      "consent_version": {
      +        "description": "Same as consent_text_version",
      +        "type": "string"
      +      },
      +      "form_url": {
      +        "description": "Absolute URL",
      +        "type": "string"
      +      },
      +      "language": {
      +        "type": "string"
      +      },
      +      "mode": {
      +        "type": "string"
      +      },
      +      "what_happens_next": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "form_url",
      +      "consent_text",
      +      "consent_text_version",
      +      "consent_language",
      +      "consent_version",
      +      "what_happens_next",
      +      "language",
      +      "attribution"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "description": "mode=prepare: summary, consent text and token; nothing is sent.",
      +    "properties": {
      +      "confirmation_token": {
      +        "type": "string"
      +      },
      +      "consent_language": {
      +        "type": "string"
      +      },
      +      "consent_text": {
      +        "type": "string"
      +      },
      +      "consent_text_version": {
      +        "type": "string"
      +      },
      +      "expires_in_seconds": {
      +        "type": "integer"
      +      },
      +      "mode": {
      +        "type": "string"
      +      },
      +      "summary": {
      +        "type": "object"
      +      },
      +      "what_happens_next": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "summary",
      +      "consent_text",
      +      "consent_text_version",
      +      "consent_language",
      +      "confirmation_token",
      +      "expires_in_seconds",
      +      "what_happens_next"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "description": "mode=submit: the request was received; flatin.pt answers it.",
      +    "properties": {
      +      "mode": {
      +        "type": "string"
      +      },
      +      "privacy_policy": {
      +        "description": "Absolute URL",
      +        "type": "string"
      +      },
      +      "status": {
      +        "type": "string"
      +      },
      +      "what_happens_next": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "mode",
      +      "status",
      +      "what_happens_next",
      +      "privacy_policy"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "consent_language": {
      +        "type": "string"
      +      },
      +      "consent_text": {
      +        "type": "string"
      +      },
      +      "consent_text_version": {
      +        "type": "string"
      +      },
      +      "error": {
      +        "type": "string"
      +      },
      +      "field": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "problems": {
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "retry_after_seconds": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "error",
      +      "message"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed25 schema fields changed
    • changedInput schema / properties / city / description
      Previous value: -"Municipality in Portugal, Portuguese name (Porto, Matosinhos, Lisboa). Not needed with project"New value: +"Municipality in Portugal (Lisboa or Lisbon) or a district. Not needed with project, which sets the place"
    • addedInput schema / properties / city / examples
      Added value: +[
      +  "Porto",
      +  "Matosinhos"
      +]
    • changedInput schema / properties / client / description
      Previous value: -"Optional. Your app's host or name, e.g. claude.ai or chatgpt.com: recorded as the request's source"New value: +"Optional. Your app's host or name: recorded as the request's source"
    • addedInput schema / properties / client / examples
      Added value: +[
      +  "claude.ai",
      +  "chatgpt.com"
      +]
    • addedInput schema / properties / deal_type / default
      Added value: +"buy"
    • changedInput schema / properties / deal_type / description
      Previous value: -"Default: buy"New value: +"Renting is not handled"
    • addedInput schema / properties / email / examples
      Added value: +[
      +  "maria@example.com"
      +]
    • addedInput schema / properties / email / format
      Added value: +"email"
    • addedInput schema / properties / language / default
      Added value: +"en"
    • changedInput schema / properties / language / description
      Previous value: -"The person's language: pt, en, ru, ua, de, fr, nl (uk is accepted too). The consent text and the emails come in it. Default: en"New value: +"The person's language: the consent text, the emails and the page links come in it. Another value is refused, except in mode=link, which falls back to English. uk is accepted as ua."
    • addedInput schema / properties / language / enum
      Added value: +[
      +  "pt",
      +  "en",
      +  "ru",
      +  "ua",
      +  "de",
      +  "fr",
      +  "nl",
      +  "uk"
      +]
    • changedInput schema / properties / message / description
      Previous value: -"Optional. The person's own words, up to 2000 characters"New value: +"Optional. The person's own words"
    • addedInput schema / properties / message / examples
      Added value: +[
      +  "Close to the metro, with a balcony"
      +]
    • addedInput schema / properties / message / maxLength
      Added value: +2000
    • addedInput schema / properties / mode / default
      Added value: +"link"
    • changedInput schema / properties / mode / description
      Previous value: -"link (default): only the form link and the consent text. prepare: check the details, get a summary, the consent text and a confirmation_token; nothing is sent. submit: send the request — the same details as in prepare plus confirmation_token, consent=true and consent_text_version, only after the person has read the consent text and explicitly agreed"New value: +"link: only the form link and the consent text. prepare: check the details, get a summary, the consent text and a confirmation_token; nothing is sent. submit: send the request — the same details as in prepare plus confirmation_token, consent=true and consent_text_version, only after the person has read the consent text and explicitly agreed"
    • addedInput schema / properties / name / examples
      Added value: +[
      +  "Maria Silva"
      +]
    • addedInput schema / properties / name / maxLength
      Added value: +120
    • changedInput schema / properties / phone / description
      Previous value: -"Phone in international format (+351 912 345 678). Preferred over email"New value: +"Phone in international format. Preferred over email"
    • addedInput schema / properties / phone / examples
      Added value: +[
      +  "+351 912 345 678"
      +]
    • addedInput schema / properties / preferred_time / examples
      Added value: +[
      +  "weekday mornings"
      +]
    • addedInput schema / properties / preferred_time / maxLength
      Added value: +120
    • changedInput schema / properties / project / description
      Previous value: -"Optional. Slug of a development from the flatin.pt catalogue the request is about"New value: +"Optional. Slug of the development the request is about: the slug field of search_newbuilds"
    • changedInput schema / properties / property_type / description
      Previous value: -"Default: apartment (new_build with project)"New value: +"apartment if not given, or new_build when project is given"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "anyOf": [
      +    {
      +      "description": "mode=link: the form link and the consent text; nothing is sent.",
      +      "properties": {
      +        "attribution": {
      +          "type": "object"
      +        },
      +        "consent_language": {
      +          "type": "string"
      +        },
      +        "consent_text": {
      +          "type": "string"
      +        },
      +        "consent_text_version": {
      +          "type": "string"
      +        },
      +        "consent_version": {
      +          "description": "Same as consent_text_version",
      +          "type": "string"
      +        },
      +        "form_url": {
      +          "description": "Absolute URL",
      +          "type": "string"
      +        },
      +        "language": {
      +          "type": "string"
      +        },
      +        "mode": {
      +          "type": "string"
      +        },
      +        "what_happens_next": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "mode",
      +        "form_url",
      +        "consent_text",
      +        "consent_text_version",
      +        "consent_language",
      +        "consent_version",
      +        "what_happens_next",
      +        "language",
      +        "attribution"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "description": "mode=prepare: summary, consent text and token; nothing is sent.",
      +      "properties": {
      +        "confirmation_token": {
      +          "type": "string"
      +        },
      +        "consent_language": {
      +          "type": "string"
      +        },
      +        "consent_text": {
      +          "type": "string"
      +        },
      +        "consent_text_version": {
      +          "type": "string"
      +        },
      +        "expires_in_seconds": {
      +          "type": "integer"
      +        },
      +        "mode": {
      +          "type": "string"
      +        },
      +        "summary": {
      +          "type": "object"
      +        },
      +        "what_happens_next": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "mode",
      +        "summary",
      +        "consent_text",
      +        "consent_text_version",
      +        "consent_language",
      +        "confirmation_token",
      +        "expires_in_seconds",
      +        "what_happens_next"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "description": "mode=submit: the request was received and passed on.",
      +      "properties": {
      +        "mode": {
      +          "type": "string"
      +        },
      +        "privacy_policy": {
      +          "description": "Absolute URL",
      +          "type": "string"
      +        },
      +        "status": {
      +          "type": "string"
      +        },
      +        "what_happens_next": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "mode",
      +        "status",
      +        "what_happens_next",
      +        "privacy_policy"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "properties": {
      +        "consent_language": {
      +          "type": "string"
      +        },
      +        "consent_text": {
      +          "type": "string"
      +        },
      +        "consent_text_version": {
      +          "type": "string"
      +        },
      +        "error": {
      +          "type": "string"
      +        },
      +        "field": {
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "problems": {
      +          "items": {
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "retry_after_seconds": {
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "error",
      +        "message"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "description": "Success, or a refusal with an error code. Units: *_cents euro cents, *_eur euros, *_eur_m2 euros per m², *_pct and percent in percent.",
      +  "type": "object"
      +}
  5. Changed19 schema fields changed
    • addedInput schema / properties / budget
      Added value: +{
      +  "description": "Optional. Budget in whole euros, e.g. 350000",
      +  "type": "integer"
      +}
    • addedInput schema / properties / channel
      Added value: +{
      +  "description": "How the person wants to be contacted on that phone",
      +  "enum": [
      +    "whatsapp",
      +    "telegram",
      +    "call"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / city
      Added value: +{
      +  "description": "Municipality in Portugal, Portuguese name (Porto, Matosinhos, Lisboa). Not needed with project",
      +  "type": "string"
      +}
    • addedInput schema / properties / client
      Added value: +{
      +  "description": "Optional. Your app's host or name, e.g. claude.ai or chatgpt.com: recorded as the request's source",
      +  "type": "string"
      +}
    • addedInput schema / properties / confirmation_token
      Added value: +{
      +  "description": "submit only: the token returned by prepare",
      +  "type": "string"
      +}
    • addedInput schema / properties / consent
      Added value: +{
      +  "description": "submit only: true once the person has read the consent text returned by prepare and explicitly agreed",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / consent_text_version
      Added value: +{
      +  "description": "submit only: consent_text_version returned by prepare",
      +  "type": "string"
      +}
    • addedInput schema / properties / deal_type
      Added value: +{
      +  "description": "Default: buy",
      +  "enum": [
      +    "buy",
      +    "sell"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / email
      Added value: +{
      +  "description": "Only if the person gives no phone",
      +  "type": "string"
      +}
    • addedInput schema / properties / intent
      Added value: +{
      +  "description": "Optional. visit and reserve only with a project on sale, notify only with a project not yet on sale",
      +  "enum": [
      +    "info",
      +    "callback",
      +    "visit",
      +    "reserve",
      +    "notify"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / language / description
      Previous value: -"The user's language: pt, en, ru, ua, de, fr, nl (uk is accepted too). Default: en"New value: +"The person's language: pt, en, ru, ua, de, fr, nl (uk is accepted too). The consent text and the emails come in it. Default: en"
    • addedInput schema / properties / message
      Added value: +{
      +  "description": "Optional. The person's own words, up to 2000 characters",
      +  "type": "string"
      +}
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "link (default): only the form link and the consent text. prepare: check the details, get a summary, the consent text and a confirmation_token; nothing is sent. submit: send the request — the same details as in prepare plus confirmation_token, consent=true and consent_text_version, only after the person has read the consent text and explicitly agreed",
      +  "enum": [
      +    "link",
      +    "prepare",
      +    "submit"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "The person's name",
      +  "type": "string"
      +}
    • addedInput schema / properties / phone
      Added value: +{
      +  "description": "Phone in international format (+351 912 345 678). Preferred over email",
      +  "type": "string"
      +}
    • addedInput schema / properties / preferred_time
      Added value: +{
      +  "description": "Optional, with intent=visit: when suits the person",
      +  "type": "string"
      +}
    • addedInput schema / properties / project
      Added value: +{
      +  "description": "Optional. Slug of a development from the flatin.pt catalogue the request is about",
      +  "type": "string"
      +}
    • addedInput schema / properties / property_type
      Added value: +{
      +  "description": "Default: apartment (new_build with project)",
      +  "enum": [
      +    "apartment",
      +    "house",
      +    "commercial",
      +    "new_build"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / typology
      Added value: +{
      +  "description": "Optional. Bedroom counts wanted (T2 = two bedrooms)",
      +  "items": {
      +    "enum": [
      +      "T0",
      +      "T1",
      +      "T2",
      +      "T3",
      +      "T4+"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  6. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false; the description reinforces this with "Nothing is sent" and discloses what each mode returns, including that the GDPR/RGPD consent text and a confirmation_token come back from prepare. That goes beyond the annotations by explaining the two-phase flow rather than just the safety profile. What it omits is failure behaviour — e.g. whether prepare rejects invalid details, or that language values outside the enum are refused (which is only in 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.

Conciseness5/5

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

Three sentences, front-loaded with the use case, then exclusions, then mode behaviour, and the key reassurance ("Nothing is sent") lands at the end where it is most likely to be read. No sentence is filler.

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?

For a 20-parameter tool with an output schema and zero required parameters, the description covers purpose, routing, mode branching and the no-side-effect guarantee. It stops short of hinting at the important non-obvious rules — phone preferred over email, places required unless project is supplied, deprecated fields to avoid — though those are documented in the schema.

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 20 parameters are fully annotated, so the baseline is 3. The description adds real value only for `mode`, whose two branches it spells out in prose; the remaining parameters, including the deprecated budget/band/property_type aliases and the places-vs-project interaction, are left entirely to the schema.

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

Purpose5/5

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

The description names a specific action (prepare a consultation request) against a named, licensed counterparty, and pins the object down to a new-build apartment purchase in Portugal. It explicitly distinguishes itself from the two nearest siblings, submit_consultation and subscribe_digest, so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

It opens with an explicit use condition ("Use this when the person wants flatin.pt to contact them"), then gives two explicit when-not cases naming the alternative tools. The mode split is also framed functionally: mode=link for just the link and consent, mode=prepare for validation plus a confirmation_token that gates submit_consultation.

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