sicop_mcp
# sicop_mcp
Servidor de datos SICOP (contratacion publica de Costa Rica, datos abiertos 2020-2026) expuesto como API REST y como servidor MCP para asistentes de IA.
Datos:
Salidas/del paquete SICOP (~4,3M filas cargadas en Postgres en 31 tablas: 13 conjuntos por anio 2020-2026 + 18 tablas derivadas gold).Stack: Django 6 + DRF + Celery + Postgres + Redis. Mismo patron que mwt/consola-mwt-one.
Regla del dominio: toda cifra de negocio de un proveedor declara su nivel de medicion (captacion = adjudicaciones · ejecucion = ordenes de pedido · entrega = recepciones).
Arranque local
Requiere: Python 3.12+ (probado en 3.14), PostgreSQL 16/18 local, Redis (o el broker que uses).
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
# crear DB (una vez):
# createuser -U postgres sicop -P
# createdb -U postgres -O sicop sicop
python manage.py migrate
python manage.py load_sicop --sync # carga los CSV de Salidas/ (SICOP_DATA_DIR en .env)
python manage.py runserver 127.0.0.1:8000Cargar datos via Celery (patron del stack)
celery -A config worker -l info # worker
python manage.py load_sicop # encola una tarea por archivo
python manage.py load_sicop --only contratos --forceServidor MCP
python -m sicop.mcp_server # stdio (para clientes MCP)
python -m sicop.mcp_server streamable-http --port 9010 # HTTPTools MCP (18): sicop_ficha_proveedor (ejecucion vs captacion), sicop_mercado_familia,
sicop_competencia_procedimiento, sicop_producto, sicop_producto_historia (serie de
precios por anio), sicop_cara_a_cara (dos proveedores), sicop_expediente,
sicop_adjudicaciones, sicop_carteles_objetados, sicop_representantes,
sicop_representante_competencia, sicop_excepciones, sicop_sanciones,
sicop_precios_institucion, sicop_perdidas_baratas (oferto mas barato y perdio),
sicop_campo_buscar, sicop_regimen_evaluacion, sicop_resumen.
Toda respuesta de negocio lleva el sobre (envelope del plan §5.4): nivel_medicion,
cobertura_cruce (0.626), moneda y caveats.
API REST
Recurso | Ejemplo |
| lineas adjudicadas |
| agregado por proveedor (monto, lineas, instituciones) |
| agregado por institucion |
| catalogo de productos |
| ejecucion vs captacion por anio |
| cumplimiento de entrega por proveedor |
| oferentes por linea |
| capa gold |
| comparacion directa de dos proveedores |
| serie de precios ofertados por anio de un producto |
| lineas donde oferto mas barato y perdio |
| busqueda en catalogo, proveedores e instituciones |
| factores y pesos de evaluacion de un procedimiento |
| diagnostico |
Filtros por igualdad con el nombre de columna exacto (CEDULA_PROVEEDOR, NRO_SICOP, ANO, ...)
y ?search= en los recursos con texto.
Related MCP server: chile-procurement
FASE 2 — ciclo diario (cron 06:00)
python manage.py ciclo_diario # corrida manual del ciclo
celery -A config worker -l info # worker (ya en tu stack)
celery -A config beat -l info # cron: ciclo-diario 06:00 · vigilancia 06:05 · consolidar 06:15Ciclo diario: vigilancia de reescritura (mes en curso + 3 cerrados + 2 rotativos) → consolidar PENDIENTES de resultado → señales de la watchlist → cola priorizada → gold + tests-gate.
resultado_decision(SCH_RESULTADO v1,/api/v1/resultados/, POST/api/v1/resultado-registrar/): grano(nro_sicop, nro_linea, decision_id), append-only, contexto congelado obligatorio (build_id/snapshot_ts/modelo_version/features_hash),overridecomo campo clave.Señales (
/api/v1/senales/): cliente_participa/adjudicado/perdio, cartel_objetado, sancion_nueva, institucion_vigilada, perdio_por_poco (watchlist.json).Vigilancia (
/api/v1/vigilancia/): ETag/Content-Length de los meses objetivo vsctl_mes_fuente.
Tools MCP: sicop_registrar_resultado, sicop_resultado, sicop_senales, sicop_vigilancia,
sicop_ciclo_diario, sicop_consolidar_resultados.
FASE 3 — enforcement físico + dos carriles + registro
Enforcement (
/api/v1/politica/): middleware que bloquea con 403 cualquier request con rutas crudas (/salidas/,.csv,.zip,file://,..\) o secretos; pruebas de política (no SQL libre, no mezcla de monedas, no rutas crudas) → 5/5 PASS.Dos carriles:
SICOP_CARRIL=operacion(canónico) oSICOP_CARRIL=laboratorio(toda respuesta etiquetadaNO_APTO_PARA_DECISION,decision_eligible:false). El carril laboratorio agrega la toolsicop_lab_sql(SQL read-only, solo SELECT/WITH, max 200 filas, rechaza DELETE).Registro de respuestas (
/api/v1/registro/, toolsicop_registro): cada llamada MCP y request API queda enregistro_respuesta(agente, herramienta, params, build_id, conteo, carril, duración, status).
FASE 4 — prueba (ficha ESOSA, backtest, holdout) + pendientes P1-P11
python manage.py fase4 --json # ficha ESOSA desde gold + backtest + holdout (gate de muerte)
python manage.py pendientes --json # P1-P7Ficha ESOSA (
/api/v1/prueba-fase4/?solo=ficha, toolsicop_ficha_esosa): reproducida desde la capa canonica — desempeno EXACTO (98,6% / 577 lineas), captacion reproduce el patron (pico 2022, colapso 2023), competencia/cara-a-cara limitados a la cobertura del cruce (62,6%) hasta que cargue el recuperado.Backtest (tool
sicop_backtest_invitaciones): replay de invitaciones pasadas (descuento necesario para ganar).Holdout + gate de muerte (tool
sicop_holdout): entrenar <=2024, probar 2025-26; si el modelo no supera el ancla del pliego se descarta (queda memoria + vigilancia).Pendientes:
p1_conversion_cartera(TC implicito 460-690 CRC/USD, BCCR oficial gate pendiente) ·p3_catalogo_familias(9.295 familias derivadas) ·p5_recurrente_vs_recurrido·p6_sanciones_vigencia(1 sancionado ganando vigente) ·p7_tamano_historico(1,04% cambio → no SCD2) ·p10_bronze_zip_miembro(bronze desde zip, fila cruda literal). P11resultado_decisioncerrado en FASE 2.
Extras del plan — Atlas, CGR, BCCR
Atlas (
/atlas/): app de navegación del corpus. Decisiones del plan respetadas: ninguna cifra viaja sola (cada pantalla muestra su sobre), la calidad entra primero (/atlas/calidad/: deriva por año, tests-gate, corridas, vigilancia, trampas), trampas bloqueadas no documentadas (la UI advierte sobre comparar monedas y precios cross-año sin CL), y la app le pone cara al harness (señales del día visibles). Pantallas: dashboard, buscar, proveedores, ficha de proveedor, producto (historia), procedimiento (expediente+competencia+régimen+invitados+recursos), mercado por familia.Buscador CGR (
/api/v1/cgr/?termino=, toolsicop_cgr_buscar): PDFs de resoluciones de texto nativo. USO DIRIGIDO, no barrido; gate legal pendiente (términos CGR no leídos).TC BCCR (
/api/v1/bccr-tc/?fecha=, toolsicop_bccr_tc): BCCR oficial (series 317/318) siBCCR_TOKEN/BCCR_EMAILen.env; sin token devuelve el TC implícito de la fuente (mediana anual CRC/USD) marcado como tal.Invitaciones: 42,2M filas cargadas +
invitados_vs_ofertantes.
Docker (VPS)
docker compose up -d --build
# expone 8400 -> django (puerto libre, no choca con 8100 de consola-mwt-one), con Salidas montado en /data/salidasFASE 1 — capa canonica (bronze + silver + control)
python manage.py fase1 # bronze -> silver (6 hechos) -> tests-gate -> gold atomico
python manage.py fase1 --solo-tests # solo correr los tests como gate
python manage.py recalcular_derivadas # producto_firma, recursos_desenlace, tiempos_por_etapa, precios_identicos, invitados_vs_ofertantes, regimen_evaluacion, ctl_deriva, catalogo_campoBronze (
/api/v1/bronze/): fila cruda inmutable +HASH_FILA+CORRIDA_ID+ mes.Silver — 6 hechos (grano correcto,
DECIMAL(18,4), trio de moneda, bitemporalidadOBSERVADO_DESDE/HASTA/ES_VIGENTE):/fact-requerimiento(cartel, proc x linea x partida) ·/fact-oferta(proc x oferta x linea) ·/fact-adjudicacion(acto x proc x linea x proveedor) ·/fact-contrato-linea·/fact-orden(una fila por NRO_ORDEN,TOTAL_ORDENuna sola vez, solo CRC sumable) ·/fact-recepcion.Control (
/api/v1/ctl-*): corrida, mes fuente (hash zip), esquema, cuarentena, tests como gate.catalogo_campo (
/api/v1/catalogo-campo/): diccionario de datos navegable (tipo, llenado, clave, trampa, unidad, regla de join).Publicacion atomica: gold no se publica si un test del gate falla (queda la version anterior).
Tools MCP: sicop_fact_requerimiento/oferta/adjudicacion/contrato/orden/recepcion, sicop_catalogo_campo,
sicop_ctl_deriva, sicop_regimen, sicop_competencia_por_regimen, sicop_gold_status.
Datos
NIVEL DE MEDICION:
carteracomparaMONTO_EJECUTADO_CRC(solo colones, dedupe porNRO_ORDEN) contraMONTO_ADJUDICADO_CRC. Medir por adjudicaciones subestima hasta 59x (caso SONDEL 2026: 64x).Monedas: las ordenes traen 5 monedas (CRC/USD/EUR/JPY/GBP); solo se suman colones.
Cobertura:
competencia_por_lineacubre el 62,6% del cruce oferta x oferente (documentado en el paquete).Privacidad:
inhibicionescontiene funcionarios; no publicar consolidados sin decision expresa (Ley 8968).Limpieza: las celdas invalidas de montos/fechas se cargan como NULL (contadas en
estado-carga).
This server cannot be installed
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
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Public Data Ukraine Mcp connects AI agents to real public APIs via MCP. Tools include
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Real-time Amazon, WIPO & PACER data for AI agents — 19 tools via the MCP protocol.
Related MCP Servers
- AlicenseAqualityDmaintenanceAllows AI assistants to query public procurement opportunities, purchase orders, and government entities from Chile's Mercado Público (ChileCompra) API in real time.12131MIT
- AlicenseNot gradedqualityCmaintenanceEnables access to Chile's government procurement data (Mercado Público / ChileCompra) via MCP, allowing AI agents to query public procurement information.13MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query Colombian government procurement data via MCP tools or natural language questions.12MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to query Ecuador government procurement (SERCOP/Compras Públicas) data without API keys, via natural language or direct tools.12MIT
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/Ale241302/sicop_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server