Skip to main content
Glama

멕시코 우편번호 API 🇲🇽

Python 3.12, FastAPI, SQLite(WAL 모드)Docker로 구축된 초고속 RESTful API로, 멕시코의 공식 우편번호, 주거지, 지방자치단체 및 주 카탈로그를 1ms 미만으로 응답하도록 설계되었습니다.


📜 법적 저작권 표시 조항 (CC BY 4.0에 따라 필수)

이 API는 datos.gob.mx를 통해 멕시코 우편 서비스(SEPOMEX)가 발행한 공식 카탈로그에서 제공되는 지리 정보 및 우편번호 정보를 사용 및 처리하며, Creative Commons Attribution 4.0 International 라이선스에 따라 제공됩니다.


🚀 주요 특징

  • API 계약 및 명세: docs/api_contract.md

  • 속도 및 성능: SQLite Write-Ahead Logging(WAL) 모드 및 orjson 직렬화를 통한 서브 밀리초 응답 시간.

  • 사이버 보안: OWASP 강화, 보안 헤더, 속도 제한, Pydantic v2 엄격한 정규식 검증 및 Docker non-root 사용자.

  • 엔터프라이즈 오류 처리: 요청별 고유 X-Correlation-ID를 포함한 RFC 7807(문제 세부 정보) 형식.

  • 감사 및 로깅: loguru를 통한 구조화된 JSON 로그, 자정(00:00) 일일 로테이션, .zip 압축 및 30일 보관.

  • 데드락 방지: PRAGMA busy_timeout=5000;을 사용한 읽기 전용(mode=ro) HTTP 연결.

  • 자동 수집 스크립트: 데이터베이스를 원자적으로 다운로드, 정리(ISO-8859-1에서 UTF-8로) 및 채웁니다.


📦 로컬 설치 및 실행

1. 사전 요구 사항

  • Python 3.10+

  • Virtualenv 또는 Docker

2. 환경 설정 및 종속성 설치

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

3. 데이터 수집 실행 (SEPOMEX / datos.gob.mx)

python scripts/ingest_sepomex.py

이 명령은 공식 CPdescarga.txt 파일을 다운로드하고 148,000개 이상의 주거지와 최적화된 인덱스가 포함된 sepomex.db를 생성합니다.

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 키 및 JWT)

API는 .env에서 구성 가능한 하이브리드 인증 체계를 제공합니다:

1. 작동 모드 (REQUIRE_AUTH)

  • REQUIRE_AUTH=False (공개 API 모드, 기본값): 엔드포인트에 자유롭게 액세스할 수 있습니다. 요청 제어는 IP별 속도 제한(기본적으로 분당 120개 요청)을 통해 수행됩니다.

  • REQUIRE_AUTH=True (보호된 엔터프라이즈 API 모드): 각 요청이 헤더에 유효한 자격 증명을 보내야 합니다.

2. 지원되는 인증 옵션

  1. X-API-Key 헤더:

    curl -H "X-API-Key: key-dev-12345" http://localhost:8000/api/v1/codigo-postal/01000
  2. 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

🛠️ 사용 가능한 엔드포인트

메서드

엔드포인트

설명

GET

/dashboard

관찰 가능성, 통계 및 GeoJSON 지도를 위한 대화형 웹 대시보드

GET

/api/v1/codigo-postal/{cp}

CP 세부 정보 조회 (nombre_sat 및 선택적 양식 유효성 검사 colonia, estado, municipio 포함)

POST

/api/v1/codigo-postal/batch-validate

단일 HTTP 요청에서 최대 100개 주소의 대량 일괄 유효성 검사 및 정규화

GET

/api/v1/codigo-postal/{cp}/geojson

표준 GeoJSON 형식(FeatureCollection)으로 좌표 및 주거지 내보내기

GET

/api/v1/codigo-postal/autocomplete?prefix=01

2~5자리 접두사로 실시간 자동 완성

GET

/api/v1/codigo-postal/cercanos?lat=19.43&lng=-99.13

지리적 근접성 검색 (Haversine + Bounding Box)

GET

/api/v1/asentamientos

악센트 없는 FTS5 검색, 결합 필터, 페이지 매김 및 직접 내보내기 (format=csv)

GET

/api/v1/asentamientos/search?query=juarez

악센트 구분 없는 빠른 주거지 검색

GET

/api/v1/estados

32개 연방实体 목록 (nombre_sat 포함)

GET

/api/v1/estados/{c_estado}/municipios

주 코드별 지방자치단체

GET

/api/v1/estados/{c_estado}/municipios/{c_municipio}

모든 CP 및 주거지가 포함된 지방자치단체의 전체 세부 정보

GET

/api/v1/estados/{c_estado}/geojson

GeoJSON 형식(FeatureCollection)으로 주의 전체 지리적 레이어 내보내기

GET

/api/v1/estados/{c_estado}/pdf

PDF 실행 보고서 생성 및 다운로드 (선택적 매개변수 titulo, subtitulo, logo_url)

GET

/static/mx-postal-widget.js

클라이언트 측 HTML 양식 자동 완성을 위한 JavaScript 위젯

GET

/api/v1/stats

SEPOMEX 카탈로그의 메트릭 통계 및 분석

GET

/api/v1/logs

JSON 형식의 실시간 감사 로그 및 서버 이벤트

GET

/api/v1/attribution

CC BY 4.0 법적 저작권 표시 조항

GET

/metrics

Prometheus 표준 모니터링 메트릭

GET

/health

Docker/K8s 모니터링을 위한 상태 확인


📦 공식 SDK 클라이언트 (mx-postal-client)

프로젝트에는 수동 HTTP 요청을 작성하지 않고도 API를 쉽게 사용할 수 있는 두 개의 경량 SDK 클라이언트 패키지가 포함되어 있습니다:

  • Python SDK (sdk/python):

    pip install ./sdk/python
    from 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/typescript
    import { MXPostalClient } from 'mx-postal-client';
    const client = new MXPostalClient({ baseUrl: 'http://localhost:8080' });
    const detail = await client.getCodigoPostal('01000');

🤖 AI 에이전트와의 통합 (Model Context Protocol - MCP)

API에는 AI 에이전트(Claude Desktop, ChatGPT, Antigravity IDE, LangChain, AutoGPT)가 자연어로 멕시코 공식 지리 데이터베이스를 쿼리하고 상호 작용할 수 있도록 하는 공식 MCP 서버(scripts/mcp_server.py)가 포함되어 있습니다.

AI에 노출된 도구:

  1. consultar_codigo_postal(cp): 전체 지리 정보 및 주거지 목록을 반환합니다.

  2. validar_direccion_postal(codigo_postal, colonia, estado, municipio): SEPOMEX와 데이터 일치 여부를 실시간으로 확인합니다.

  3. 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 카탈로그 자동 확인

컨테이너는 HTTP 지연 시간(< 1 ms)에 영향을 주지 않고 datos.gob.mx의 새로운 소식을 확인하는 백그라운드 비동기 월별 스케줄러를 실행합니다.

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.5ms (RAM L1 캐시)

~120ms

~15ms

~2ms

~200ms

SAT CFDI 4.0 표준

네이티브 (nombre_sat)

✅ 네이티브

❌ 사용 불가

❌ 사용 불가

⚠️ 부분

대량 일괄 유효성 검사 (POST)

요청당 최대 100개

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

벡터 GeoJSON (CP 및 주)

전체 (Point & Bounds)

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

PDF 실행 보고서

네이티브 (ReportLab)

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

JavaScript 프론트엔드 위젯

mx-postal-widget.js

❌ 사용 불가

❌ 사용 불가

❌ 사용 불가

⚠️ 사용자 정의 JS

AI 에이전트용 MCP 서버

scripts/mcp_server.py

❌ 사용 불가

✅ 포함

❌ 사용 불가

❌ 사용 불가

공식 SDK (Python/TS)

mx-postal-client

❌ HTTP 요청

❌ HTTP 요청

❌ HTTP 요청

❌ HTTP 요청

페이로드 크기 보호 (1MB)

RequestBodyLimit

⚠️ 알 수 없음

❌ 사용 불가

⚠️ 프록시 수준

⚠️ 프록시 수준

운영 비용

$0 USD (무제한)

조회당 과금

$0 USD

$0 USD

$15-$150 USD/월


🔬 실험

프로젝트에는 부하 테스트, GPS 지오펜싱, 세금 정규화 및 인공 지능 에이전트(MCP)와의 상호 운용성을 위한 전체 테스트 스위트가 포함되어 있습니다.

  • 1단계 (지연 시간 및 일괄 처리): 일괄 유효성 검사(POST /batch-validate)에서 58.91배 가속.

  • 2단계 (SAT 정규화): 노이즈가 있는 1,000개 샘플 데이터 세트에서 100% 정밀도로 알고리즘 $F_1$-점수 90.45%.

  • 3단계 (AI 에이전트 / MCP): MCP 서버를 통한 상호 운용 시 99.43% 토큰 절약.


🧪 테스트 실행

pytest
-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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