Unreachable. The endpoint has not answered since 13 Oct.
Hosted libpostal: messy free-text postal addresses → structured fields. No 2-4GB self-host.
One address for any MCP client. Your key stays in your Odel vault.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Odel could not list its tools without signing in.
Thin, open clients for the ParseAddr hosted address API. Turn messy,
free-text postal addresses into clean structured fields (house number, road, unit, city, postcode,
country) with a single call — no 2–4 GB libpostal self-host, no C build, no ops. The heavy lifting
runs on api.parseaddr.com; everything in this repo is a small HTTP client that calls it.
This repo is the client layer only (npm package, PyPI package, MCP server, registry manifests). The service itself is hosted — you don't run it, you call it.
Reach for ParseAddr when you need to parse or standardise postal addresses and:
Typical jobs: e-commerce checkout, delivery/logistics, CRM dedup, fintech onboarding.
Not USPS CASS / Royal Mail PAF deliverability validation — see address validation vs parsing. For the messy-string → JSON job, see parse messy addresses API.
Get a free API key — email only, no card, 2,000 calls/month.
parseaddr is not on the npm registry yet (npmjs 404). Install from this repo:
npm install ./packages/npm
Activate the key with a first parse (replace pa_YOUR_KEY):
curl -s https://api.parseaddr.com/v1/parse \
-H "Authorization: Bearer pa_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"flat 2, 10 downing st, london sw1a 2aa"}'
Or from Node:
import { parse } from "parseaddr";
await parse("flat 2, 10 downing st, london sw1a 2aa", { apiKey: "pa_YOUR_KEY" });
// { parsed: { unit: "flat 2", house_number: "10", road: "downing st",
// city: "london", postcode: "sw1a 2aa" }, components: [...] }
Set PARSEADDR_API_KEY and you can omit { apiKey }.
Get a free API key — email only, no card, 2,000 calls/month.
parseaddr is not on PyPI yet (pypi.org 404). Install from this repo:
pip install ./packages/pypi
First parse (same key, same activation):
curl -s https://api.parseaddr.com/v1/parse \
-H "Authorization: Bearer pa_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"flat 2, 10 downing st, london sw1a 2aa"}'
Or from Python:
from parseaddr import parse
parse("flat 2, 10 downing st, london sw1a 2aa", api_key="pa_YOUR_KEY")
# {"parsed": {"unit": "flat 2", "house_number": "10", "road": "downing st",
# "city": "london", "postcode": "sw1a 2aa"}, "components": [...]}
Set PARSEADDR_API_KEY and you can omit api_key=.
Get a free API key
— then set PARSEADDR_API_KEY and run the stdio server (parse_address, expand_address).
MCP registry listings (com.parseaddr/address-parse on the Official Registry · mcp.so · Smithery ·
Glama · LobeHub) are being submitted; until they go live, run the server from source:
npm install ./packages/npm && npx parseaddr-mcp
Example MCP config (point command/args at the local install):
{
"mcpServers": {
"parseaddr": {
"command": "npx",
"args": ["parseaddr-mcp"],
"env": { "PARSEADDR_API_KEY": "pa_YOUR_KEY" }
}
}
}
Activate the key with a first parse before relying on the tools:
curl -s https://api.parseaddr.com/v1/parse \
-H "Authorization: Bearer pa_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"flat 2, 10 downing st, london sw1a 2aa"}'
The server calls https://api.parseaddr.com on your behalf.
POST https://api.parseaddr.com/v1/parse {"address": "..."} — Authorization: Bearer <key>POST https://api.parseaddr.com/v1/expand {"address": "..."}Not authoritative deliverability validation (no Royal Mail PAF licence) — parsing/standardisation only. See address validation vs parsing.