Immediate home report for a building or flat in Spain: 22 checks from official public sources.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es.
Spanish province by name (Madrid, València, Bizkaia…) or two-digit INE code (28). Omit both fields to list every province.
Optional municipality name; it is looked up in the official street directory of the province.
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.
| Argument | Type | Description |
|---|---|---|
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
| province | string | Spanish province by name (Madrid, València, Bizkaia…) or two-digit INE code (28). Omit both fields to list every province. |
| municipality | string | Optional municipality name; it is looked up in the official street directory of the province. |
{
"type": "object",
"properties": {
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"province": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"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",
"maxLength": 80,
"minLength": 2,
"description": "Optional municipality name; it is looked up in the official street directory of the province."
}
},
"additionalProperties": false
}Queues the report for the building resolved with resolve_building and returns a private link (previewUrl) and a statusToken for get_report_status. Every report is free: it is the full report with PDF, with the building condition assessment when the building has an IEE/ITE record, 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 with the link and the PDF) and only with the person's permission. If the answer is CHANNEL_AT_CAPACITY or CLIENT_LIMIT, wait the retryAfterSeconds it gives and try again. 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.
| Argument | Type | Description |
|---|---|---|
| string | Optional email of the person for the ready notice with the link and the PDF, only with their permission. | |
| consent* | boolean | true only if the person explicitly accepted the consent text from get_products. |
| language | string | 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* |
Returns the HOUSINGFAX report for a home in Spain (productMode free): a single product, the full report with web view and PDF, free of charge, with the building condition assessment when the building has an IEE/ITE record. Also returns the capacity limits of the channel (no daily cap) 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 or before ordering. 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.
| Argument | Type | Description |
|---|---|---|
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
{
"type": "object",
"properties": {
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| jobId* | string | jobId returned by create_free_report or purchase_report. |
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
| statusToken* | string | statusToken returned by create_free_report or purchase_report. |
{
"type": "object",
"required": [
"jobId",
"statusToken"
],
"properties": {
"jobId": {
"type": "string",
"pattern": "^scr_[A-Za-z0-9_-]{22}$",
"description": "jobId returned by create_free_report or purchase_report."
},
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"statusToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}\\.[A-Za-z0-9_-]{43}$",
"description": "statusToken returned by create_free_report or purchase_report."
}
},
"additionalProperties": false
}Lists the 22 numbered checks of the report (title, question it answers and whether its source is integrated yet) 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.
| Argument | Type | Description |
|---|---|---|
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
{
"type": "object",
"properties": {
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
}
},
"additionalProperties": false
}Not available: every report is free; use create_free_report. This tool stays in the contract for compatibility and answers NOT_FOR_SALE without creating anything.
| Argument | Type | Description |
|---|---|---|
| tier* | string | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| email* | string | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| consent* | boolean | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
| freeReport | object | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| acceptTerms* | boolean | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| termsVersion |
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 and whether an IEE/ITE record exists (ieeAvailability; unverified means the registry did not answer, not that there is none), which decides whether the report includes the building condition assessment. 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.
| Argument | Type | Description |
|---|---|---|
| scope | string | Only with a 14-character cadastralReference: building to report on the whole building. |
| address | object | 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. |
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
| cadastralReference | string | Cadastral reference: 14 characters (building or plot), 18 or 20 (a flat). Use instead of address. |
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"const": "building",
"description": "Only with a 14-character cadastralReference: building to report on the whole building."
},
"address": {
"type": "object",
"required": [
"provinceCode",
"municipalityDgcCode",
"municipalityIneCode",
"streetTypeCode",
"streetCode",
"number"
],
"properties": {
"door": {
"type": "string",
"pattern": "^[\\p{L}\\p{N}/ .-]+$",
"maxLength": 16,
"minLength": 1
},
"block": {
"type": "string",
"pattern": "^[\\p{L}\\p{N}/ .-]+$",
"maxLength": 16,
"minLength": 1
},
"floor": {
"type": "string",
"pattern": "^[\\p{L}\\p{N}/ .-]+$",
"maxLength": 16,
"minLength": 1
},
"stair": {
"type": "string",
"pattern": "^[\\p{L}\\p{N}/ .-]+$",
"maxLength": 16,
"minLength": 1
},
"number": {
"type": "string",
"pattern": "^[\\p{L}\\p{N}/ -]+$",
"maxLength": 16,
"minLength": 1
},
"localityId": {
"type": "string",
"pattern": "^[0-9]{14}$"
},
"streetCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,15}$"
},
"provinceCode": {
"type": "string",
"pattern": "^\\d{2}$"
},
"streetTypeCode": {
"type": "string",
"pattern": "^[A-Z0-9]{1,4}$"
},
"municipalityDgcCode": {
"type": "string",
"pattern": "^\\d{1,3}$"
},
"municipalityIneCode": {
"type": "string",
"pattern": "^\\d{3}$"
}
},
"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
},
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| q* | string | Text to search: municipality name, or street name optionally followed by the number ("Colón, 5"). |
| kind* | string | municipality (step 1) or street (step 2). |
| language | string | Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es. |
| provinceCode* | string | Two-digit INE province code (e.g. 28 Madrid, 08 Barcelona). |
| streetTypeCode | string | Only with kind=street, optional: street type code to narrow the search (CL, AV, PZ…). |
| municipalityDgcCode | string | Only with kind=street: municipalityDgcCode from step 1. |
| municipalityIneCode |
| string |
| resolutionToken returned by resolve_building (valid 15 minutes). |
| consentStatementSha256* | string | consent.statementSha256 from get_products for the same language. |
{
"type": "object",
"required": [
"resolutionToken",
"consent",
"consentStatementSha256"
],
"properties": {
"email": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
"maxLength": 254,
"minLength": 6,
"description": "Optional email of the person for the ready notice with the link and the PDF, only with their permission."
},
"consent": {
"type": "boolean",
"const": true,
"description": "true only if the person explicitly accepted the consent text from get_products."
},
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"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)."
},
"consentStatementSha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "consent.statementSha256 from get_products for the same language."
}
},
"additionalProperties": false
}| string |
| Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| resolutionToken | string | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| waiveWithdrawalRight* | boolean | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
| consentStatementSha256* | string | Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE). |
{
"type": "object",
"required": [
"tier",
"email",
"consent",
"consentStatementSha256",
"termsVersion",
"acceptTerms",
"waiveWithdrawalRight"
],
"properties": {
"tier": {
"enum": [
"simple",
"complete"
],
"type": "string",
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"email": {
"type": "string",
"pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
"maxLength": 254,
"minLength": 6,
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"consent": {
"type": "boolean",
"const": true,
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"description": "Language of the texts in the answer (and of the report): es, en, de, nl or fr. Default es."
},
"freeReport": {
"type": "object",
"required": [
"jobId",
"statusToken"
],
"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}$"
}
},
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE).",
"additionalProperties": false
},
"acceptTerms": {
"type": "boolean",
"const": true,
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"termsVersion": {
"type": "string",
"maxLength": 16,
"minLength": 1,
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"resolutionToken": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{43}$",
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"waiveWithdrawalRight": {
"type": "boolean",
"const": true,
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
},
"consentStatementSha256": {
"type": "string",
"pattern": "^[0-9a-f]{64}$",
"description": "Kept for compatibility with contract 1.1.0; not used while every report is free (purchase_report answers NOT_FOR_SALE)."
}
},
"additionalProperties": false
}| string |
| Only with kind=street: municipalityIneCode from step 1. |
{
"type": "object",
"required": [
"kind",
"provinceCode",
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Text to search: municipality name, or street name optionally followed by the number (\"Colón, 5\")."
},
"kind": {
"enum": [
"municipality",
"street"
],
"type": "string",
"description": "municipality (step 1) or street (step 2)."
},
"language": {
"enum": [
"es",
"en",
"de",
"nl",
"fr"
],
"type": "string",
"default": "es",
"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)."
},
"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…)."
},
"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."
}
},
"additionalProperties": false
}