mx-postal-codes
API почтовых индексов Мексики 🇲🇽
Сверхбыстрый RESTful API, построенный на Python 3.12, FastAPI, SQLite в режиме WAL и Docker, предназначенный для ответа за < 1 мс с использованием официального каталога почтовых индексов, населенных пунктов, муниципалитетов и штатов Мексики.
📜 Пункт о юридической атрибуции (обязательный по CC BY 4.0)
Этот API использует и обрабатывает географическую информацию и информацию о почтовых индексах из официального каталога, опубликованного Почтовой службой Мексики (SEPOMEX) на datos.gob.mx по лицензии Creative Commons Attribution 4.0 International.
🚀 Основные характеристики
Контракт API и спецификация: docs/api_contract.md
Скорость и производительность: Время ответа менее миллисекунды с SQLite в режиме Write-Ahead Logging (WAL) и сериализацией
orjson.Кибербезопасность: Усиление по OWASP, заголовки безопасности, ограничение скорости, строгая валидация regex Pydantic v2 и non-root пользователь Docker.
Обработка ошибок корпоративного уровня: Формат RFC 7807 (Problem Details) с уникальным
X-Correlation-IDдля каждого запроса.Аудит и логирование: Логи в структурированном JSON с помощью
loguruс ежедневной ротацией в полночь (00:00), сжатием.zipи хранением в течение 30 дней.Предотвращение взаимоблокировок: HTTP-соединения в режиме только чтения (
mode=ro) сPRAGMA busy_timeout=5000;.Автоматический скрипт загрузки: Скачивает, очищает (ISO-8859-1 в UTF-8) и атомарно заполняет базу данных.
📦 Установка и локальный запуск
1. Предварительные требования
Python 3.10+
Virtualenv или Docker
2. Настройка окружения и установка зависимостей
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt3. Выполнение загрузки данных (SEPOMEX / datos.gob.mx)
python scripts/ingest_sepomex.pyЭта команда загрузит официальный файл CPdescarga.txt и создаст sepomex.db с более чем 148 000 населенных пунктов и оптимизированными индексами.
4. Запуск сервера разработки
uvicorn app.main:app --reload --port 8000Посетите интерактивную документацию по адресу: http://localhost:8000/docs
🐳 Запуск с Docker
Вариант A: Docker Build & Run
docker build -t codigos-postales-api .
docker run -p 8000:8000 codigos-postales-apiВариант B: Docker Compose
docker-compose up -d🔐 Аутентификация и ограничение скорости (API Key и JWT)
API имеет гибридную схему аутентификации, настраиваемую через .env:
1. Режимы работы (REQUIRE_AUTH)
REQUIRE_AUTH=False(Режим публичного API, по умолчанию): Конечные точки доступны свободно. Контроль запросов осуществляется через ограничение скорости по IP (120 запросов/мин по умолчанию).REQUIRE_AUTH=True(Режим защищенного корпоративного API): Требует отправки действительных учетных данных в заголовках каждого запроса.
2. Поддерживаемые варианты аутентификации
Заголовок
X-API-Key:curl -H "X-API-Key: key-dev-12345" http://localhost:8000/api/v1/codigo-postal/01000Токен JWT Bearer (
Authorization: Bearer <token>):Обмен на токен JWT (действителен 24 часа):
curl -X POST http://localhost:8000/api/v1/auth/token -H "X-API-Key: key-dev-12345"Запрос с полученным токеном:
curl -H "Authorization: Bearer <tu_jwt_token>" http://localhost:8000/api/v1/codigo-postal/01000
🛠️ Доступные конечные точки
Метод | Endpoint | Описание |
|
| Интерактивная веб-панель мониторинга, статистики и карты GeoJSON |
|
| Запрос деталей почтового индекса (включает |
|
| Пакетная проверка и нормализация до 100 адресов в одном HTTP-запросе |
|
| Экспорт координат и населенных пунктов в стандартном формате GeoJSON ( |
|
| Автодополнение в реальном времени по префиксу из 2-5 цифр |
|
| Поиск по географической близости (Haversine + Bounding Box) |
|
| Поиск FTS5 без учета ударений, комбинированные фильтры, пагинация и прямой экспорт ( |
|
| Быстрый поиск населенных пунктов без учета ударений |
|
| Список 32 федеративных образований (с |
|
| Муниципалитеты по ключу штата |
|
| Полная информация о муниципалитете со всеми его почтовыми индексами и населенными пунктами |
|
| Экспорт полных географических слоев штата в формате GeoJSON ( |
|
| Создание и скачивание исполнительного PDF-отчета (необязательные параметры |
|
| JavaScript-виджет для автоматического автозаполнения HTML-форм на стороне клиента |
|
| Метрики и разбивка каталога SEPOMEX |
|
| Живые журналы аудита и события сервера в формате JSON |
|
| Пункт о юридической атрибуции CC BY 4.0 |
|
| Метрики мониторинга в стандарте Prometheus |
|
| Проверка работоспособности для мониторинга Docker/K8s |
📦 Официальные SDK-клиенты (mx-postal-client)
Проект включает два легковесных пакета SDK-клиентов для удобного использования API без написания HTTP-запросов вручную:
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');
🤖 Интеграция с ИИ-агентами (Model Context Protocol - MCP)
API имеет официальный MCP-сервер (scripts/mcp_server.py), который позволяет ИИ-агентам (Claude Desktop, ChatGPT, Antigravity IDE, LangChain, AutoGPT) запрашивать и взаимодействовать с официальной географической базой данных Мексики на естественном языке.
Инструменты, доступные для ИИ:
consultar_codigo_postal(cp): Возвращает полную географическую карточку и список населенных пунктов.validar_direccion_postal(codigo_postal, colonia, estado, municipio): Проверяет в реальном времени соответствие данных с SEPOMEX.buscar_asentamientos_por_nombre(nombre_colonia, limite): Поиск на естественном языке по ключевым словам.
Настройка в Claude Desktop / Antigravity IDE (mcp.json):
{
"mcpServers": {
"mx-postal-codes": {
"command": "python3",
"args": ["/ruta/absoluta/a/codigos-postales-api/scripts/mcp_server.py"]
}
}
}🔄 Автоматическая проверка каталога SEPOMEX
Контейнер выполняет в фоне асинхронный ежемесячный планировщик, который проверяет наличие обновлений на datos.gob.mx без влияния на задержку HTTP (< 1 мс).
Для ручного запуска проверки или принудительного обновления каталога внутри Docker-контейнера:
docker exec codigos_postales_api python3 scripts/check_updates.py --force🏆 Сравнение с современными аналогами (2026)
Техническое сравнение нашего решения с открытыми альтернативами и коммерческими SaaS-сервисами на текущем рынке:
Техническое измерение / Функциональность | 🚀 Этот проект | 🟢 Tlaloc.sh | 🐍 Sepomex-MCP | ⚡ go-mexpost | 💳 Copomex |
Архитектура | Самодеплой (Docker/WAL) | SaaS Облако | Самодеплой / Python | Самодеплой / Go | SaaS Облако |
Задержка p99 | < 0.5 мс (кэш RAM L1) | ~120 мс | ~15 мс | ~2 мс | ~200 мс |
Стандарт SAT CFDI 4.0 | ✅ Встроенная ( | ✅ Встроенная | ❌ Недоступно | ❌ Недоступно | ⚠️ Частично |
Пакетная валидация ( | ✅ До 100 запросов/вызов | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно |
Векторный GeoJSON (ПИ и штат) | ✅ Полный (Point & Bounds) | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно |
Исполнительный PDF-отчет | ✅ Встроенный (ReportLab) | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно |
JavaScript-виджет для фронтенда | ✅ | ❌ Недоступно | ❌ Недоступно | ❌ Недоступно | ⚠️ Пользовательский JS |
MCP-сервер для ИИ-агентов | ✅ | ❌ Недоступно | ✅ Включен | ❌ Недоступно | ❌ Недоступно |
Официальные SDK (Python/TS) | ✅ | ❌ HTTP-запросы | ❌ HTTP-запросы | ❌ HTTP-запросы | ❌ HTTP-запросы |
Защита размера полезной нагрузки (1 МБ) | ✅ | ⚠️ Неизвестно | ❌ Недоступно | ⚠️ На уровне прокси | ⚠️ На уровне прокси |
Операционные затраты | $0 USD (безлимитно) | Оплата за запрос | $0 USD | $0 USD | $15-$150 USD/мес |
🔬 Эксперименты
Проект включает полный набор тестов нагрузки, GPS-геозонирования, налоговой нормализации и совместимости с агентами искусственного интеллекта (MCP).
Фаза 1 (Задержка и пакетная обработка): Ускорение в 58.91x при пакетной валидации (
POST /batch-validate).Фаза 2 (Нормализация SAT): Алгоритмический $F_1$-Score 90.45% при 100% точности на наборе данных из 1000 образцов с шумом.
Фаза 3 (ИИ-агенты / MCP): 99.43% экономии токенов при взаимодействии через MCP-сервер.
🧪 Запуск тестов
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