HOUSINGFAX

Immediate home report for a building or flat in Spain: 22 checks from official public sources.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
95%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~8,011Tokens (tool definitions)
~8.4 KBTypical response size
Significant attention impact (6.26% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://housingfax.com/mcp"
    }
  }
}

Remote endpoints

https://housingfax.com/mcpstreamable-http

What it can do

Tool inventory

Tools (8)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_products(language)

Returns the three HOUSINGFAX report types for a home in Spain with prices in EUR, VAT included: Free report (€0), Essential report (€11 VAT included) and Complete report with building condition (€19 VAT included; upgrade from the essential one €8 VAT included). Also returns the free-report limits and the consent text (with its SHA-256) that the person must accept before create_free_report. Use it when someone asks what HOUSINGFAX offers, how much it costs, or before ordering. The complete report can only be ordered when the building has an IEE/ITE record. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "currency": {
      "type": "string",
      "const": "EUR"
    },
    "vatIncluded": {
      "type": "boolean",
      "const": true
    },
    "priceNote": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    },
    "products": {
      "minItems": 3,
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "tier": {
            "type": "string",
            "enum": [
              "free",
              "simple",
              "complete"
            ]
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          },
          "priceCents": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "price": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          },
          "requiresBuildingConditionRecord": {
            "type": "boolean"
          },
          "format": {
            "type": "string",
            "enum": [
              "redacted_web_preview",
              "web_and_pdf"
            ]
          },
          "emailRequired": {
            "type": "boolean"
          },
          "orderChannel": {
            "type": "string",
            "enum": [
              "agent_api",
              "web"
            ]
          }
        },
        "required": [
          "tier",
          "name",
          "priceCents",
          "price",
          "description",
          "requiresBuildingConditionRecord",
          "format",
          "emailRequired",
          "orderChannel"
        ],
        "additionalProperties": false
      }
    },
    "upgrade": {
      "type": "object",
      "properties": {
        "from": {
          "type": "string",
          "const": "simple"
        },
        "to": {
          "type": "string",
          "const": "complete"
        },
        "priceCents": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "price": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600
        }
      },
      "required": [
        "from",
        "to",
        "priceCents",
        "price"
      ],
      "additionalProperties": false
    },
    "freeReportLimits": {
      "type": "object",
      "properties": {
        "perEmail": {
          "type": "object",
          "properties": {
            "count": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            },
            "windowDays": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "count",
            "windowDays"
          ],
          "additionalProperties": false
        },
        "note": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600
        },
        "agentChannelPerDay": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "perEmail",
        "note",
        "agentChannelPerDay"
      ],
      "additionalProperties": false
    },
    "consent": {
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        },
        "statementSha256": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        },
        "termsVersion": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16
        },
        "termsUrl": {
          "type": "string",
          "maxLength": 400,
          "pattern": "^https:\\/\\/[^\\s]+$"
        },
        "agentContractingTermsUrl": {
          "type": "string",
          "maxLength": 400,
          "pattern": "^https:\\/\\/[^\\s]+$"
        },
        "privacyUrl": {
          "type": "string",
          "maxLength": 400,
          "pattern": "^https:\\/\\/[^\\s]+$"
        }
      },
      "required": [
        "text",
        "statementSha256",
        "termsVersion",
        "termsUrl",
        "privacyUrl"
      ],
      "additionalProperties": false
    },
    "checksCount": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "pricingUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "orderUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "exampleReportUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "disclaimer": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    }
  },
  "required": [
    "contract",
    "language",
    "currency",
    "vatIncluded",
    "priceNote",
    "products",
    "upgrade",
    "freeReportLimits",
    "consent",
    "checksCount",
    "pricingUrl",
    "orderUrl",
    "exampleReportUrl",
    "disclaimer"
  ],
  "additionalProperties": false
}
🟢list_checks(language)

Lists the 22 numbered checks of the report (title, question it answers, whether its source is integrated yet and which report types include it) and the meaning of the ✓ / ⚠ / ○ marks. Use it to explain what the report looks at. Checks marked pending_integration show as ○ no data, never as a negative result. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "count": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "checks": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "number": {
            "type": "integer",
            "minimum": 1,
            "maximum": 99
          },
          "key": {
            "type": "string",
            "enum": [
              "aluminosis",
              "iee",
              "risks_by_year",
              "asbestos",
              "cadastral_record",
              "building_condition",
              "energy_certificate",
              "land_history",
              "ground_motion",
              "geology_and_drainage",
              "flooding",
              "seismic",
              "radon",
              "sun_hours",
              "solar_potential",
              "price_and_market",
              "surroundings_and_noise",
              "land_affections",
              "land_classification",
              "climate_and_light",
              "wildfire",
              "industrial_facilities",
              "public_safety"
            ]
          },
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          },
          "question": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          },
          "integration": {
            "type": "string",
            "enum": [
              "integrated",
              "pending_integration"
            ]
          },
          "includedIn": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "free",
                "simple",
                "complete"
              ]
            }
          }
        },
        "required": [
          "number",
          "key",
          "title",
          "question",
          "integration",
          "includedIn"
        ],
        "additionalProperties": false
      }
    },
    "semaphore": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600
        },
        "attention": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600
        },
        "no_data": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600
        },
        "not_included": {
          "type": "string",
          "minLength": 1,
          "maxLength": 600
        }
      },
      "required": [
        "ok",
        "attention",
        "no_data",
        "not_included"
      ],
      "additionalProperties": false
    },
    "methodologyUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    }
  },
  "required": [
    "contract",
    "language",
    "count",
    "checks",
    "semaphore",
    "methodologyUrl"
  ],
  "additionalProperties": false
}
🟢check_coverage(language, province, municipality)

Says whether HOUSINGFAX can produce a report for a province (name or two-digit INE code) and, optionally, finds the municipality in the official street directory. Status covered, not_yet_covered (Navarra: foral adapter pending) or unrecognized; not_yet_covered never means no risk. In the Basque Country (Araba, Bizkaia, Gipuzkoa) the report covers the whole building, not a single flat. municipalityLookup unavailable means the directory did not answer: unknown, not missing. Call it before search_address when you are not sure the place is covered.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
    },
    "province": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Spanish province by name (Madrid, València, Bizkaia…) or two-digit INE code (28). Omit both fields to list every province."
    },
    "municipality": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80,
      "description": "Optional municipality name; it is looked up in the official street directory of the province."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "provinces": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "provinceCode": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "provinceLabel": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              {
                "type": "null"
              }
            ]
          },
          "territoryCode": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "covered",
              "not_yet_covered",
              "unrecognized"
            ]
          },
          "foral": {
            "type": "boolean"
          },
          "addressSource": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "dgc",
                  "nora_foral_cadastres"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "unitSelection": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "dwelling_or_building",
                  "building_only"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "buildingConditionRegistry": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "integrated",
                  "not_integrated"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "reason": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "foral_adapter_pending",
                  "not_a_spanish_province"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "note": {
            "type": "string",
            "minLength": 1,
            "maxLength": 600
          }
        },
        "required": [
          "provinceCode",
          "provinceLabel",
          "territoryCode",
          "status",
          "foral",
          "addressSource",
          "unitSelection",
          "buildingConditionRegistry",
          "reason",
          "note"
        ],
        "additionalProperties": false
      }
    },
    "municipalities": {
      "anyOf": [
        {
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "provinceCode": {
                "type": "string",
                "pattern": "^\\d{2}$"
              },
              "municipalityDgcCode": {
                "type": "string",
                "pattern": "^\\d{1,3}$"
              },
              "municipalityIneCode": {
                "type": "string",
                "pattern": "^\\d{3}$"
              },
              "officialLabel": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            },
            "required": [
              "provinceCode",
              "municipalityDgcCode",
              "municipalityIneCode",
              "officialLabel"
            ],
            "additionalProperties": false
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "municipalityLookup": {
      "type": "string",
      "enum": [
        "not_requested",
        "found",
        "not_found",
        "unavailable"
      ]
    },
    "coverageNote": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    }
  },
  "required": [
    "contract",
    "language",
    "provinces",
    "municipalities",
    "municipalityLookup",
    "coverageNote"
  ],
  "additionalProperties": false
}
🟢search_address(kind, language, provinceCode, q, municipalityDgcCode, ...)

Two steps to build an address. kind=municipality with provinceCode and q returns municipalities and their codes. kind=street with provinceCode, municipalityDgcCode, municipalityIneCode (from the first step) and q returns streets with streetTypeCode and streetCode (and localityId in the Basque Country). Pass the chosen street, the house number and the codes to resolve_building. Only for places check_coverage reports as covered. Do not store or publish the address.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "municipality",
        "street"
      ],
      "description": "municipality (step 1) or street (step 2)."
    },
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
    },
    "provinceCode": {
      "type": "string",
      "pattern": "^\\d{2}$",
      "description": "Two-digit INE province code (e.g. 28 Madrid, 08 Barcelona)."
    },
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Text to search: municipality name, or street name optionally followed by the number (\"Colón, 5\")."
    },
    "municipalityDgcCode": {
      "type": "string",
      "pattern": "^\\d{1,3}$",
      "description": "Only with kind=street: municipalityDgcCode from step 1."
    },
    "municipalityIneCode": {
      "type": "string",
      "pattern": "^\\d{3}$",
      "description": "Only with kind=street: municipalityIneCode from step 1."
    },
    "streetTypeCode": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,4}$",
      "description": "Only with kind=street, optional: street type code to narrow the search (CL, AV, PZ…)."
    }
  },
  "required": [
    "kind",
    "provinceCode",
    "q"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "kind": {
      "type": "string",
      "enum": [
        "municipality",
        "street"
      ]
    },
    "options": {
      "anyOf": [
        {
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "provinceCode": {
                "type": "string",
                "pattern": "^\\d{2}$"
              },
              "municipalityDgcCode": {
                "type": "string",
                "pattern": "^\\d{1,3}$"
              },
              "municipalityIneCode": {
                "type": "string",
                "pattern": "^\\d{3}$"
              },
              "officialLabel": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            },
            "required": [
              "provinceCode",
              "municipalityDgcCode",
              "municipalityIneCode",
              "officialLabel"
            ],
            "additionalProperties": false
          }
        },
        {
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "provinceCode": {
                "type": "string",
                "pattern": "^\\d{2}$"
              },
              "municipalityDgcCode": {
                "type": "string",
                "pattern": "^\\d{1,3}$"
              },
              "municipalityIneCode": {
                "type": "string",
                "pattern": "^\\d{3}$"
              },
              "officialLabel": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "streetTypeCode": {
                "type": "string",
                "pattern": "^[A-Z0-9]{1,4}$"
              },
              "streetCode": {
                "type": "string",
                "pattern": "^[A-Z0-9]{1,15}$"
              },
              "streetTypeLabel": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              },
              "localityId": {
                "type": "string",
                "pattern": "^[0-9]{14}$"
              },
              "localityLabel": {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            },
            "required": [
              "provinceCode",
              "municipalityDgcCode",
              "municipalityIneCode",
              "officialLabel",
              "streetTypeCode",
              "streetCode"
            ],
            "additionalProperties": false
          }
        }
      ]
    },
    "numberHint": {
      "type": "string",
      "minLength": 1,
      "maxLength": 16
    }
  },
  "required": [
    "contract",
    "language",
    "kind",
    "options"
  ],
  "additionalProperties": false
}
🟢resolve_building(language, cadastralReference, scope, address)

Identifies the building from an address found with search_address (object address) or from a cadastral reference (14 characters = building or plot; 18 or 20 = a single flat). Give either cadastralReference or address, not both. status resolved returns a resolutionToken (valid 15 minutes) for create_free_report, the building's public cadastral data, whether an IEE/ITE record exists (ieeAvailability; unverified means the registry did not answer, not that there is none) and the report types that can be ordered. status select_unit lists the units: ask the person which flat, or repeat with the 14-character reference and scope=building for the whole building. Only non-protected cadastral data is returned. Do not publish the address or reference.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
    },
    "cadastralReference": {
      "type": "string",
      "pattern": "^[A-Z0-9]{14}([A-Z0-9]{4}|[A-Z0-9]{6})?$",
      "description": "Cadastral reference: 14 characters (building or plot), 18 or 20 (a flat). Use instead of address."
    },
    "scope": {
      "type": "string",
      "const": "building",
      "description": "Only with a 14-character cadastralReference: building to report on the whole building."
    },
    "address": {
      "type": "object",
      "properties": {
        "provinceCode": {
          "type": "string",
          "pattern": "^\\d{2}$"
        },
        "municipalityDgcCode": {
          "type": "string",
          "pattern": "^\\d{1,3}$"
        },
        "municipalityIneCode": {
          "type": "string",
          "pattern": "^\\d{3}$"
        },
        "streetTypeCode": {
          "type": "string",
          "pattern": "^[A-Z0-9]{1,4}$"
        },
        "streetCode": {
          "type": "string",
          "pattern": "^[A-Z0-9]{1,15}$"
        },
        "number": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16,
          "pattern": "^[\\p{L}\\p{N}/ -]+$"
        },
        "localityId": {
          "type": "string",
          "pattern": "^[0-9]{14}$"
        },
        "block": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16,
          "pattern": "^[\\p{L}\\p{N}/ .-]+$"
        },
        "stair": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16,
          "pattern": "^[\\p{L}\\p{N}/ .-]+$"
        },
        "floor": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16,
          "pattern": "^[\\p{L}\\p{N}/ .-]+$"
        },
        "door": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16,
          "pattern": "^[\\p{L}\\p{N}/ .-]+$"
        }
      },
      "required": [
        "provinceCode",
        "municipalityDgcCode",
        "municipalityIneCode",
        "streetTypeCode",
        "streetCode",
        "number"
      ],
      "additionalProperties": false,
      "description": "Coded address from search_address (provinceCode, municipalityDgcCode, municipalityIneCode, streetTypeCode, streetCode, number; localityId in the Basque Country; optional block, stair, floor, door). Use instead of cadastralReference."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "resolved",
        "select_unit",
        "not_found",
        "unconfirmed"
      ]
    },
    "evaluationScope": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "building",
            "dwelling"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "building": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "cadastralReference": {
              "type": "string",
              "pattern": "^[A-Z0-9]{14,20}$"
            },
            "rc14": {
              "type": "string",
              "pattern": "^[A-Z0-9]{14}$"
            },
            "address": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            },
            "postalCode": {
              "type": "string",
              "pattern": "^\\d{5}$"
            },
            "municipality": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            },
            "province": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            },
            "use": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80
            },
            "surfaceAreaM2": {
              "type": "number",
              "exclusiveMinimum": 0
            },
            "constructionYear": {
              "type": "integer",
              "minimum": 1000,
              "maximum": 2100
            },
            "stair": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16
            },
            "floor": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16
            },
            "door": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16
            }
          },
          "required": [
            "cadastralReference",
            "rc14"
          ],
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "candidates": {
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "cadastralReference": {
            "type": "string",
            "pattern": "^[A-Z0-9]{14,20}$"
          },
          "rc14": {
            "type": "string",
            "pattern": "^[A-Z0-9]{14}$"
          },
          "address": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "postalCode": {
            "type": "string",
            "pattern": "^\\d{5}$"
          },
          "municipality": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "province": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "use": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "surfaceAreaM2": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "constructionYear": {
            "type": "integer",
            "minimum": 1000,
            "maximum": 2100
          },
          "stair": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16
          },
          "floor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16
          },
          "door": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16
          }
        },
        "required": [
          "cadastralReference",
          "rc14"
        ],
        "additionalProperties": false
      }
    },
    "availableNumbers": {
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 16
      }
    },
    "resolutionToken": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{43}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "resolutionExpiresInSeconds": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "ieeAvailability": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "available",
            "none",
            "not_integrated",
            "unverified"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "availableTiers": {
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "free",
          "simple",
          "complete"
        ]
      }
    },
    "notice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    }
  },
  "required": [
    "contract",
    "language",
    "status",
    "evaluationScope",
    "building",
    "candidates",
    "resolutionToken",
    "resolutionExpiresInSeconds",
    "ieeAvailability",
    "availableTiers",
    "notice"
  ],
  "additionalProperties": false
}
🟡create_free_report(language, resolutionToken, consent, consentStatementSha256, email)

Queues the free report for the building resolved with resolve_building and returns a private link (previewUrl) and a statusToken for get_report_status. The free report is a blurred web preview without PDF; it is generated in minutes. CONSENT: before calling, show the person the consent text returned by get_products (consent.text, same language) with its terms and privacy links, and set consent=true only if the person has explicitly accepted it in this conversation; pass consent.statementSha256 as consentStatementSha256. Never accept on the person's behalf. The email is optional (ready notice; at most 2 free reports per email every 14 days) and only with the person's permission. The link is private: give it only to the person, never publish it. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the report and of the texts: es, en, de, nl or fr. Default es. Must be the language of the consent text shown."
    },
    "resolutionToken": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}$",
      "description": "resolutionToken returned by resolve_building (valid 15 minutes)."
    },
    "consent": {
      "type": "boolean",
      "const": true,
      "description": "true only if the person explicitly accepted the consent text from get_products."
    },
    "consentStatementSha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "consent.statementSha256 from get_products for the same language."
    },
    "email": {
      "type": "string",
      "minLength": 6,
      "maxLength": 254,
      "pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
      "description": "Optional email of the person for the ready notice, only with their permission."
    }
  },
  "required": [
    "resolutionToken",
    "consent",
    "consentStatementSha256"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "jobId": {
      "type": "string",
      "pattern": "^scr_[A-Za-z0-9_-]{22}$"
    },
    "status": {
      "type": "string",
      "const": "queued"
    },
    "statusToken": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$"
    },
    "previewUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "pollAfterSeconds": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600
    },
    "emailNotice": {
      "type": "boolean"
    },
    "notice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    }
  },
  "required": [
    "contract",
    "language",
    "jobId",
    "status",
    "statusToken",
    "previewUrl",
    "pollAfterSeconds",
    "emailNotice",
    "notice"
  ],
  "additionalProperties": false
}
🟢get_report_status(language, jobId, statusToken)

Returns the status of a report created with create_free_report: queued, in_progress, ready, failed or expired, with the private link when ready. Wait pollAfterSeconds between calls. withLimitations=true means some source did not answer and its check shows ○ no data with the reason (unknown, not negative). Give the link only to the person.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
    },
    "jobId": {
      "type": "string",
      "pattern": "^scr_[A-Za-z0-9_-]{22}$",
      "description": "jobId returned by create_free_report or purchase_report."
    },
    "statusToken": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$",
      "description": "statusToken returned by create_free_report or purchase_report."
    }
  },
  "required": [
    "jobId",
    "statusToken"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "jobId": {
      "type": "string",
      "pattern": "^scr_[A-Za-z0-9_-]{22}$"
    },
    "status": {
      "type": "string",
      "enum": [
        "awaiting_payment",
        "payment_received",
        "queued",
        "in_progress",
        "ready",
        "failed",
        "expired",
        "payment_expired",
        "refunded"
      ]
    },
    "stage": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[A-Z0-9_]{1,64}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "queuePosition": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "estimatedSeconds": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "previewUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "withLimitations": {
      "type": "boolean"
    },
    "errorCode": {
      "type": "string",
      "pattern": "^[A-Z0-9_]{1,100}$"
    },
    "pollAfterSeconds": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600
    },
    "payment": {
      "type": "object",
      "properties": {
        "orderId": {
          "type": "string",
          "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
        },
        "status": {
          "type": "string",
          "enum": [
            "pending",
            "paid",
            "expired",
            "failed",
            "refunded"
          ]
        }
      },
      "required": [
        "orderId",
        "status"
      ],
      "additionalProperties": false
    },
    "notice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    }
  },
  "required": [
    "contract",
    "language",
    "jobId",
    "status",
    "stage",
    "notice"
  ],
  "additionalProperties": false
}
🟡purchase_report(language, tier, resolutionToken, freeReport, email, ...)

Opens an order for a paid report and returns a Stripe Checkout URL (checkoutUrl) where the person, or you on their behalf, pays: Essential report €11 VAT included or Complete report with building condition €19 VAT included, VAT included, one-off payment, no subscription. Use it only when the person has decided to buy that report type. The complete report can only be bought when resolve_building says ieeAvailability=available. The building comes from resolve_building (resolutionToken, valid 15 minutes) or from a free report that is ready (freeReport with its jobId and statusToken; the paid report then reuses its sources). ACCEPTANCE: by calling it you accept, on the person's behalf, the consent text from get_products (data processing, immediate execution and loss of the right of withdrawal) and the Terms in force, including the clause on contracting through an agent; the person who delegates to you is bound by it, so tell them before calling. Pass consent=true with consent.statementSha256, termsVersion from get_products, acceptTerms=true and waiveWithdrawalRight=true. The email is required: receipt, report link and withdrawal confirmation go there. Nothing is generated until Stripe confirms the payment; then the report is ready in minutes (the AI summary follows) and the link is emailed. Poll get_report_status with the returned jobId and statusToken: awaiting_payment, payment_received, queued, in_progress, ready (or payment_expired, refunded, failed). Never publish the checkout or report link. Always tell the person: it is a preliminary, automated report built from public records, not a technical inspection, valuation, certificate, safety assessment or legal advice; probabilities are given as words (very low to very high), never as percentages; a check without data (○) means unknown, not negative or safe; Navarra is not covered yet; the report is only available as a private link.

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "default": "es",
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ],
      "description": "Language of the report, the checkout page and the texts: es, en, de, nl or fr. Default es. Must be the language of the consent text shown."
    },
    "tier": {
      "type": "string",
      "enum": [
        "simple",
        "complete"
      ],
      "description": "simple (essential report) or complete (only when the building has an IEE/ITE record)."
    },
    "resolutionToken": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}$",
      "description": "resolutionToken returned by resolve_building (valid 15 minutes). Give this or freeReport, not both."
    },
    "freeReport": {
      "type": "object",
      "properties": {
        "jobId": {
          "type": "string",
          "pattern": "^scr_[A-Za-z0-9_-]{22}$"
        },
        "statusToken": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$"
        }
      },
      "required": [
        "jobId",
        "statusToken"
      ],
      "additionalProperties": false,
      "description": "A ready free report of the same person to buy from: { jobId, statusToken } from create_free_report. Give this or resolutionToken, not both."
    },
    "email": {
      "type": "string",
      "minLength": 6,
      "maxLength": 254,
      "pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
      "description": "Email of the person (required): receipt, private report link and withdrawal confirmation."
    },
    "consent": {
      "type": "boolean",
      "const": true,
      "description": "true: you accept the consent text from get_products on the person's behalf."
    },
    "consentStatementSha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "consent.statementSha256 from get_products for the same language."
    },
    "termsVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 16,
      "description": "consent.termsVersion from get_products (the Terms version you accept)."
    },
    "acceptTerms": {
      "type": "boolean",
      "const": true,
      "description": "true: you accept the Terms, including the clause on contracting through an agent (consent.agentContractingTermsUrl)."
    },
    "waiveWithdrawalRight": {
      "type": "boolean",
      "const": true,
      "description": "true: the person asks for immediate execution and loses the 14-day right of withdrawal once the report is supplied."
    }
  },
  "required": [
    "tier",
    "email",
    "consent",
    "consentStatementSha256",
    "termsVersion",
    "acceptTerms",
    "waiveWithdrawalRight"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "contract": {
      "type": "string",
      "const": "agent-api-1.1.0"
    },
    "language": {
      "type": "string",
      "enum": [
        "es",
        "en",
        "de",
        "nl",
        "fr"
      ]
    },
    "orderId": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
    },
    "status": {
      "type": "string",
      "const": "awaiting_payment"
    },
    "tier": {
      "type": "string",
      "enum": [
        "simple",
        "complete"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    },
    "priceCents": {
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "price": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    },
    "currency": {
      "type": "string",
      "const": "EUR"
    },
    "vatIncluded": {
      "type": "boolean",
      "const": true
    },
    "checkoutUrl": {
      "type": "string",
      "maxLength": 2048,
      "pattern": "^https:\\/\\/checkout\\.stripe\\.com\\/\\S+$"
    },
    "checkoutExpiresAt": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
    },
    "jobId": {
      "type": "string",
      "pattern": "^scr_[A-Za-z0-9_-]{22}$"
    },
    "statusToken": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$"
    },
    "reportUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "pollAfterSeconds": {
      "type": "integer",
      "minimum": 1,
      "maximum": 600
    },
    "termsVersion": {
      "type": "string",
      "minLength": 1,
      "maxLength": 16
    },
    "agentContractingTermsUrl": {
      "type": "string",
      "maxLength": 400,
      "pattern": "^https:\\/\\/[^\\s]+$"
    },
    "notice": {
      "type": "string",
      "minLength": 1,
      "maxLength": 600
    }
  },
  "required": [
    "contract",
    "language",
    "orderId",
    "status",
    "tier",
    "name",
    "priceCents",
    "price",
    "currency",
    "vatIncluded",
    "checkoutUrl",
    "checkoutExpiresAt",
    "jobId",
    "statusToken",
    "reportUrl",
    "pollAfterSeconds",
    "termsVersion",
    "agentContractingTermsUrl",
    "notice"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools