mx-postal-codes
Mexikanische Postleitzahlen-API 🇲🇽
Ultra-schnelle RESTful-API, erstellt mit Python 3.12, FastAPI, SQLite im WAL-Modus und Docker, entwickelt, um in < 1 ms mit dem offiziellen Katalog der Postleitzahlen, Siedlungen, Gemeinden und Bundesstaaten Mexikos zu antworten.
📜 Klause der rechtlichen Zuschreibung (verpflichtend nach CC BY 4.0)
Diese API verwendet und verarbeitet geografische Informationen und Postleitzahldaten aus dem offiziellen Katalog, der vom Mexikanischen Postdienst (SEPOMEX) über datos.gob.mx unter der Creative Commons Attribution 4.0 International Lizenz veröffentlicht wurde.
🚀 Hauptmerkmale
API-Vertrag und Spezifikation: docs/api_contract.md
Geschwindigkeit und Leistung: Antwortzeiten im Sub-Millisekundenbereich mit SQLite im Write-Ahead Logging (WAL)-Modus und
orjson-Serialisierung.Cybersicherheit: OWASP-Härtung, Sicherheitsheader, Rate Limiting, strenge Pydantic v2-Regex-Validierung und Docker non-root user.
Enterprise-Fehlerbehandlung: Format RFC 7807 (Problem Details) mit eindeutigem
X-Correlation-IDpro Anfrage.Audit & Logging: Strukturierte JSON-Logs mittels
logurumit täglicher Rotation um Mitternacht (00:00),.zip-Komprimierung und 30-tägiger Aufbewahrung.Deadlock-Prävention: HTTP-Verbindungen im Nur-Lesen-Modus (
mode=ro) mitPRAGMA busy_timeout=5000;.Automatisches Ingest-Skript: Lädt herunter, bereinigt (ISO-8859-1 zu UTF-8) und befüllt die Datenbank atomar.
📦 Installation und lokale Ausführung
1. Voraussetzungen
Python 3.10+
Virtualenv oder Docker
2. Umgebung einrichten und Abhängigkeiten installieren
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt3. Daten-Ingest ausführen (SEPOMEX / datos.gob.mx)
python scripts/ingest_sepomex.pyDieser Befehl lädt die offizielle Datei CPdescarga.txt herunter und erzeugt sepomex.db mit über 148.000 Siedlungen und optimierten Indizes.
4. Entwicklungsserver starten
uvicorn app.main:app --reload --port 8000Besuche die interaktive Dokumentation unter: http://localhost:8000/docs
🐳 Ausführung mit Docker
Option A: Docker Build & Run
docker build -t codigos-postales-api .
docker run -p 8000:8000 codigos-postales-apiOption B: Docker Compose
docker-compose up -d🔐 Authentifizierung & Rate Limiting (API-Key & JWT)
Die API verfügt über ein hybrides Authentifizierungsschema, das über .env konfigurierbar ist:
1. Betriebsmodi (REQUIRE_AUTH)
REQUIRE_AUTH=False(Öffentlicher API-Modus, Standard): Die Endpunkte sind frei zugänglich. Die Anforderungskontrolle erfolgt über IP-basiertes Rate Limiting (Standard 120 req/min).REQUIRE_AUTH=True(Geschützter Enterprise-API-Modus): Erfordert, dass jede Anfrage gültige Anmeldeinformationen in den Headern sendet.
2. Unterstützte Authentifizierungsoptionen
Header
X-API-Key:curl -H "X-API-Key: key-dev-12345" http://localhost:8000/api/v1/codigo-postal/01000JWT-Bearer-Token (
Authorization: Bearer <token>):Einlösen eines JWT-Tokens (gültig für 24 Stunden):
curl -X POST http://localhost:8000/api/v1/auth/token -H "X-API-Key: key-dev-12345"Anfrage mit dem zurückgegebenen Token:
curl -H "Authorization: Bearer <tu_jwt_token>" http://localhost:8000/api/v1/codigo-postal/01000
🛠️ Verfügbare Endpunkte
Methode | Endpunkt | Beschreibung |
|
| Interaktives Web-Dashboard für Beobachtbarkeit, Statistiken und GeoJSON-Karte |
|
| Abfrage der Details einer PLZ (enthält |
|
| Massenvalidierung und -normalisierung von bis zu 100 Adressen in einer einzigen HTTP-Anfrage |
|
| Export von Koordinaten und Siedlungen im Standard-GeoJSON-Format ( |
|
| Echtzeit-Autovervollständigung nach 2- bis 5-stelligem Präfix |
|
| Suche nach geografischer Nähe (Haversine + Bounding Box) |
|
| FTS5-Suche ohne Akzente, kombinierte Filter, Paginierung und direkter Export ( |
|
| Schnelle Suche nach Siedlungen, unabhängig von Akzenten |
|
| Liste der 32 Bundesstaaten (mit |
|
| Gemeinden nach Staatsschlüssel |
|
| Vollständige Details einer Gemeinde mit allen PLZs und Siedlungen |
|
| Export vollständiger geografischer Ebenen des Bundesstaates im GeoJSON-Format ( |
|
| Erzeugung und Download eines PDF-Führungsberichts (optionale Parameter |
|
| JavaScript-Widget für automatische Vervollständigung von HTML-Formularen auf Client-Seite |
|
| Metrik-Statistiken und Aufschlüsselung des SEPOMEX-Katalogs |
|
| Live-Audit-Logs und Serverereignisse im JSON-Format |
|
| CC BY 4.0 Rechtliche Zuschreibungsklausel |
|
| Überwachungsmetriken im Prometheus-Standard |
|
| Healthcheck für Docker/K8s-Überwachung |
📦 Offizielle SDK-Client-Pakete (mx-postal-client)
Das Projekt enthält zwei schlanke SDK-Client-Pakete, um die API einfach zu nutzen, ohne manuelle HTTP-Anfragen schreiben zu müssen:
Python SDK (
sdk/python):pip install ./sdk/pythonfrom mx_postal_client import MXPostalClient client = MXPostalClient(base_url="http://localhost:8080") cp_data = client.get_codigo_postal("01000", colonia="San Ángel")TypeScript / Node.js SDK (
sdk/typescript):npm install ./sdk/typescriptimport { MXPostalClient } from 'mx-postal-client'; const client = new MXPostalClient({ baseUrl: 'http://localhost:8080' }); const detail = await client.getCodigoPostal('01000');
🤖 Integration mit KI-Agenten (Model Context Protocol - MCP)
Die API verfügt über einen offiziellen MCP-Server (scripts/mcp_server.py), der es KI-Agenten (Claude Desktop, ChatGPT, Antigravity IDE, LangChain, AutoGPT) ermöglicht, die offizielle geografische Datenbank Mexikos in natürlicher Sprache abzufragen und zu interagieren.
Für KI bereitgestellte Werkzeuge:
consultar_codigo_postal(cp): Gibt den vollständigen geografischen Steckbrief und die Liste der Siedlungen zurück.validar_direccion_postal(codigo_postal, colonia, estado, municipio): Validiert in Echtzeit die Übereinstimmung der Daten mit SEPOMEX.buscar_asentamientos_por_nombre(nombre_colonia, limite): Natürlichsprachliche Suche nach Schlüsselwörtern.
Konfiguration in Claude Desktop / Antigravity IDE (mcp.json):
{
"mcpServers": {
"mx-postal-codes": {
"command": "python3",
"args": ["/ruta/absoluta/a/codigos-postales-api/scripts/mcp_server.py"]
}
}
}🔄 Automatische Überprüfung des SEPOMEX-Katalogs
Der Container führt im Hintergrund einen asynchronen monatlichen Planer aus, der das Vorhandensein von Neuerungen auf datos.gob.mx überprüft, ohne die HTTP-Latenz zu beeinträchtigen (< 1 ms).
Zum manuellen Ausführen der Überprüfung oder zum Erzwingen einer Katalogaktualisierung innerhalb des Docker-Containers:
docker exec codigos_postales_api python3 scripts/check_updates.py --force🏆 Vergleich mit dem Stand der Technik (2026)
Technischer Vergleich unserer Lösung mit aktuellen Open-Source-Alternativen und kommerziellen SaaS-Diensten:
Technische Dimension / Funktionalität | 🚀 Dieses Projekt | 🟢 Tlaloc.sh | 🐍 Sepomex-MCP | ⚡ go-mexpost | 💳 Copomex |
Architektur | Self-Hosted (Docker/WAL) | SaaS Cloud | Self-Hosted / Python | Self-Hosted / Go | SaaS Cloud |
Latenz p99 | < 0.5 ms (L1-RAM-Cache) | ~120 ms | ~15 ms | ~2 ms | ~200 ms |
SAT CFDI 4.0 Standard | ✅ Nativ ( | ✅ Nativ | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ⚠️ Teilweise |
Massenvalidierung Batch ( | ✅ Bis zu 100 req/Anfrage | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar |
Vektorielles GeoJSON (PLZ und Bundesstaat) | ✅ Vollständig (Point & Bounds) | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar |
PDF-Führungsbericht | ✅ Nativ (ReportLab) | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar |
JavaScript-Frontend-Widget | ✅ | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ❌ Nicht verfügbar | ⚠️ Custom JS |
MCP-Server für KI-Agenten | ✅ | ❌ Nicht verfügbar | ✅ Enthalten | ❌ Nicht verfügbar | ❌ Nicht verfügbar |
Offizielle SDKs (Python/TS) | ✅ | ❌ HTTP-Anfragen | ❌ HTTP-Anfragen | ❌ HTTP-Anfragen | ❌ HTTP-Anfragen |
Payload-Größenschutz (1 MB) | ✅ | ⚠️ Unbekannt | ❌ Nicht verfügbar | ⚠️ Proxy-Ebene | ⚠️ Proxy-Ebene |
Betriebskosten | $0 USD (Unbegrenzt) | Pay-per-lookup | $0 USD | $0 USD | $15-$150 USD/Mon |
🔬 Experimente
Das Projekt verfügt über eine vollständige Suite von Lasttests, GPS-Geofencing, Steuer-Normalisierung und Interoperabilität mit KI-Agenten (MCP).
Phase 1 (Latenz und Batch): Beschleunigung um 58,91x bei der Batch-Validierung (
POST /batch-validate).Phase 2 (SAT-Normalisierung): Algorithmischer $F_1$-Score von 90,45% mit 100% Präzision in einem Datensatz von 1.000 verrauschten Stichproben.
Phase 3 (KI-Agenten / MCP): 99,43% Token-Einsparung bei der Interoperation über den MCP-Server.
🧪 Tests ausführen
pytestThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Official Mexican data for AI agents: CURP, RFC, CFDI, postal codes, phone, SPEI/CEP, DOF, geocoding.
Address validation & geocoding for AI agents: 240+ countries, UK PAF, free US/CA enrichment
Validate LatAm IDs: Mexican CLABE, Brazilian CNPJ/CPF checksums + BrasilAPI company/CEP/bank lookups
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alonsomaciasm/codigos-postales-api'
If you have feedback or need assistance with the MCP directory API, please join our Discord server