Moradas — Portuguese addresses & postal codes
Portuguese address autocomplete, postal codes, list checks; typo-tolerant, municipality-first; free.
Should I use this
Quality & Safety
Findings (1)
- LOWin postal_code_info
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"moradas": {
"url": "https://moradas.dev/mcp"
}
}
}Remote endpoints
https://moradas.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
⚪suggest_address(q, count)
Autocomplete a Portuguese address or postal code. Pass free text (street, optionally locality and door number, e.g. 'av liberdade lisboa 196') or a postal code (e.g. '1000-098'). Returns suggestions with street, localidade (postal locality), concelho, distrito and cp7. When cp7 is null the street spans several postal codes: call resolve_postal_code with art_id and the door number. The beginning of a municipality or large locality name ('lisb', 'carcav') returns that place itself first (art_id 0). A suggestion found after correcting a typo in q carries corrected: true.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Street text (with optional door number) or a 4–7 digit postal code"
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 8,
"description": "Max suggestions"
}
},
"required": [
"q"
]
}🟢resolve_postal_code(art_id, numero)
Resolve the exact 7-digit postal code (CP7) for a street and door number. art_id comes from suggest_address (art_id 0 is a whole locality or municipality and cannot be resolved). Returns resolved address (or null) and the list of postal-code segments of that street.
Input Schema
{
"type": "object",
"properties": {
"art_id": {
"type": "integer",
"description": "Street id from suggest_address"
},
"numero": {
"type": "string",
"description": "Door number, e.g. '196' or '27A'"
}
},
"required": [
"art_id",
"numero"
]
}⚪postal_code_info(cp7)
Look up a Portuguese postal code (CP7, e.g. '1000-098'): localidade, concelho, distrito and the streets it covers.
Input Schema
{
"type": "object",
"properties": {
"cp7": {
"type": "string",
"description": "Postal code NNNN-NNN"
}
},
"required": [
"cp7"
]
}🟡verify_addresses(items)
Check a list of Portuguese addresses in one call: a column from a CRM or spreadsheet, an order import, a customer base before shipping or mailing. Each item is checked like suggest_address (a door number in the text picks the exact postal code; a postal code is looked up as such). Results come back in input order, one per item: id exactly as sent (null when not sent), q, status, cp7 and suggestion. status 'ok' — the postal code was determined and is in cp7; 'ambiguous' — no single answer (several candidates with nothing to tell them apart, a street with several postal codes and no door number, or just a locality): cp7 is null and suggestion is the best candidate for a person to confirm; 'not_found' — nothing matched: suggestion is null. suggestion has the same shape as a suggest_address suggestion. Up to 100 items per call; a call with N items counts as N requests against the rate limit (about 50 per 10 seconds per IP), so send up to 50 at a time. For a single address use suggest_address.
Input Schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"maxItems": 100,
"description": "Addresses to check; results come back in this order",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"number"
],
"description": "Your identifier for the row (order number, record id); echoed back unchanged"
},
"q": {
"type": "string",
"description": "Address as free text — street, door number, locality — or a postal code"
}
},
"required": [
"q"
]
}
}
},
"required": [
"items"
]
}Community
Evidence