REPSE — Padrón de la STPS (servicios especializados)
RemoteAbout REPSE — Padrón de la STPS (servicios especializados)
A server that checks the live STPS REPSE register and determines registration validity and authorized activities. It is aimed at procurement, supplier onboarding, due diligence, and accounts-payable teams; validity is calculated from the expiry date rather than the register's presence flag.
Key features
- 01Live REPSE lookups
- 02RFC, folio, or company-name search
- 03Batch RFC checks
- 04Validity and expiry statuses
- 05Authorized activity details
- 06STPS source status and latency
Use cases
- 01Checking supplier REPSE status
- 02Screening a supplier portfolio
- 03Finding companies in the register
- 04Reviewing authorized activities before onboarding
MCP support
Exposes REPSE lookup, batch-check, register-search, and source-status tools to MCP clients. Queries are made live against the public STPS endpoints.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://repse.watr.mx/connectclaude mcp add --transport http edbror-repse https://repse.watr.mx/connect{"mcpServers":{"edbror-repse":{"type":"http","url":"https://repse.watr.mx/connect"}}}Open in Cursor{"servers":{"edbror-repse":{"type":"http","url":"https://repse.watr.mx/connect"}}}Open in VS Code{"mcpServers":{"edbror-repse":{"type":"http","url":"https://repse.watr.mx/connect"}}}{"mcpServers":{"edbror-repse":{"serverUrl":"https://repse.watr.mx/connect"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMErepse-mcp
MCP server para consultar el Padrón Público de Contratistas de Servicios Especializados u Obras Especializadas (REPSE) de la STPS, en vivo, desde cualquier cliente MCP (Claude Desktop, Claude Code, Cowork, apps propias).
Convierte una verificación manual —entrar al portal, capturar RFC por RFC, interpretar el resultado— en una capacidad programática de cumplimiento para compras, alta de proveedores, due diligence y cuentas por pagar.
Hermano de sat69-mcp (listas SAT 69/69-B). Se complementan: un proveedor con REPSE vigente que además es EFOS definitivo sigue siendo un "no".
Tools
| Tool | Qué hace |
|---|---|
verificar_repse(termino) | RFC, folio o razón social → veredicto de vigencia + actividades autorizadas |
verificar_lote(rfcs) | Cartera de proveedores → conteos y sólo los que requieren acción |
buscar_padron(texto) | Búsqueda por razón social en el padrón |
estado_fuente() | Disponibilidad y latencia del portal de la STPS |
Estados: VIGENTE · POR_VENCER (≤60 días, configurable) · VENCIDO · SIN_REGISTRO · INDETERMINADO.
El booleano vigente es el que debe gobernar un bloqueo de alta o de pago.
Arquitectura: en vivo, sin índice
El portal de la STPS no requiere scraping de HTML. Su bundle JS llama a dos endpoints JSON públicos y sin autenticación:
GET /busca_razon_social?term=… → [{id, text}] (RFC, folio o razón social)
POST /buscar-padron razon_social=<id> → detalle + actividades autorizadas
buscar-padron es POST de Laravel: exige cookie de sesión + X-CSRF-TOKEN, que el cliente toma del <meta csrf-token> del home y renueva solo ante un 419.
Consecuencia: no hay base de datos, ni Turso, ni pipeline de ingesta, ni navegador headless. Cada consulta va en vivo al padrón, así que la frescura del dato es total y no hay índice que se quede viejo. Se paga con latencia (~1 s) en vez de infraestructura.
Para búsqueda masiva y ventanas de vencimiento existe el índice local (
padron.py): SQLite+FTS5 reconstruido desde el xlsx públicoGET /padron-public-excel(~155k filas), rebuild-on-boot + cron diario. VerSPEC.md§2.
La trampa del campo registro
buscar-padron devuelve registro: 1 para registros ya vencidos: significa "lo encontré en el padrón", no "está vigente". Verificado contra el portal el 2026-08-01: el RFC ASE100712TT2 regresa registro: 1 con fecha_vencimiento_registro: 2024-09-10.
Quien lea registro como vigencia aprueba proveedores vencidos. La vigencia se calcula aquí, contra la fecha de vencimiento (src/repse/risk.py, cubierto en tests/test_risk.py).
Uso local (stdio)
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/repse-mcp # stdio
.venv/bin/pytest -q # tests
Registro en Claude Code (scope user, editando ~/.claude.json directamente):
"repse": {
"command": "/Users/ed/mcp-servers/repse-mcp/.venv/bin/repse-mcp"
}
Despliegue (Render)
render.yaml en la raíz. Runtime Python nativo, plan free, health check en /health, MCP en /connect, landing de venta en /.
Variables: MCP_API_KEY (bearer estático), AUTHKIT_DOMAIN + BASE_URL (OAuth WorkOS, opcional), REPSE_BASE_URL (override de fuente).
Aviso
Esta herramienta informa; no emite la constancia oficial ni sustituye la verificación directa en repse.stps.gob.mx ni el criterio legal. No afiliado a la STPS.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.