Skip to main content
Glama

墨西哥邮政编码 API 🇲🇽

基于 Python 3.12FastAPISQLite WAL 模式Docker 构建的超快速 RESTful API,旨在以 < 1 毫秒 的速度响应墨西哥官方邮政编码、定居点、市镇和州目录。


📜 法律归属条款(CC BY 4.0 强制要求)

本 API 使用并处理来自墨西哥邮政服务 (SEPOMEX) 通过 datos.gob.mx 发布的官方目录的地理和邮政编码信息,该目录采用 Creative Commons Attribution 4.0 International 许可。


🚀 主要特性

  • API 合同与规范: docs/api_contract.md

  • 速度与性能: 使用 SQLite 预写日志 (WAL) 模式和 orjson 序列化实现亚毫秒级响应时间。

  • 网络安全: OWASP 加固、安全标头、速率限制、Pydantic v2 严格正则表达式验证和 Docker 非 root 用户。

  • 企业级错误处理: RFC 7807(问题详情)格式,每个请求附带唯一的 X-Correlation-ID

  • 审计与日志: 通过 loguru 提供结构化 JSON 日志,每天午夜 (00:00) 轮换.zip 压缩,保留 30 天。

  • 死锁预防: 仅读模式 (mode=ro) 的 HTTP 连接,带 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.txt

3. 执行数据摄取(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 构建与运行

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

交互式 Web 仪表板,包含可观测性、统计信息和 GeoJSON 地图

GET

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

查询一个邮政编码的详细信息(包含 nombre_sat 和可选表单验证 coloniaestadomunicipio

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 + 包围盒)

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}

市镇完整详情,包含所有邮政编码和聚居区

GET

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

以 GeoJSON 格式 (FeatureCollection) 导出州的完整地理图层

GET

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

生成并下载 PDF 执行报告(可选参数 titulosubtitulologo_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)

该项目包含两个轻量级 SDK 客户端包,可轻松消费 API,无需手动编写 HTTP 请求:

  • 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 代理集成(模型上下文协议 - MCP)

该 API 配备了一个官方 MCP 服务器 (scripts/mcp_server.py),允许 AI 代理(Claude Desktop、ChatGPT、Antigravity IDE、LangChain、AutoGPT)以自然语言查询和交互墨西哥官方地理数据库。

为 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 目录自动验证

容器在后台运行一个异步月度计划任务,检查 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 标准

原生 (nombre_sat)

✅ 原生

❌ 不可用

❌ 不可用

⚠️ 部分

批量验证 (POST)

最多 100 个请求/次

❌ 不可用

❌ 不可用

❌ 不可用

❌ 不可用

矢量 GeoJSON (邮政编码和州)

完整 (点与边界)

❌ 不可用

❌ 不可用

❌ 不可用

❌ 不可用

PDF 执行报告

原生 (ReportLab)

❌ 不可用

❌ 不可用

❌ 不可用

❌ 不可用

JavaScript 前端小部件

mx-postal-widget.js

❌ 不可用

❌ 不可用

❌ 不可用

⚠️ 自定义 JS

AI 代理 MCP 服务器

scripts/mcp_server.py

❌ 不可用

✅ 已包含

❌ 不可用

❌ 不可用

官方 SDK (Python/TS)

mx-postal-client

❌ HTTP 请求

❌ HTTP 请求

❌ HTTP 请求

❌ HTTP 请求

请求体大小保护 (1 MB)

RequestBodyLimit

⚠️ 未知

❌ 不可用

⚠️ 代理级别

⚠️ 代理级别

运营成本

$0 美元 (无限)

按次付费

$0 美元

$0 美元

$15-$150 美元/月


🔬 实验

该项目包含一套完整的负载测试、GPS 地理围栏、税务标准化和与人工智能代理 (MCP) 的互操作性测试。

  • 阶段 1 (延迟与批量): 批量验证 (POST /batch-validate) 加速 58.91 倍

  • 阶段 2 (SAT 标准化): 算法 $F_1$ 分数达到 90.45%,在包含 1,000 个含噪样本的数据集上精确度 100%。

  • 阶段 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