Portuguese address autocomplete, postal codes, list checks; typo-tolerant, municipality-first; free.
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.
Look up a Portuguese postal code (CP7, e.g. '1000-098'): localidade, concelho, distrito and the streets it covers.
Postal code NNNN-NNN
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Look up a Portuguese postal code (CP7, e.g. '1000-098'): localidade, concelho, distrito and the streets it covers.
| Argument | Type | Description |
|---|---|---|
| cp7* | string | Postal code NNNN-NNN |
{
"type": "object",
"required": [
"cp7"
],
"properties": {
"cp7": {
"type": "string",
"description": "Postal code NNNN-NNN"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| art_id* | integer | Street id from suggest_address |
| numero* | string | Door number, e.g. '196' or '27A' |
{
"type": "object",
"required": [
"art_id",
"numero"
],
"properties": {
"art_id": {
"type": "integer",
"description": "Street id from suggest_address"
},
"numero": {
"type": "string",
"description": "Door number, e.g. '196' or '27A'"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| q* | string | Street text (with optional door number) or a 4–7 digit postal code |
| count | integer | Max suggestions |
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Street text (with optional door number) or a 4–7 digit postal code"
},
"count": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1,
"description": "Max suggestions"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| items* | array | Addresses to check; results come back in this order |
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Address as free text — street, door number, locality — or a postal code"
},
"id": {
"type": [
"string",
"number"
],
"description": "Your identifier for the row (order number, record id); echoed back unchanged"
}
}
},
"maxItems": 100,
"description": "Addresses to check; results come back in this order"
}
}
}