swissco: Swiss company data (Zefix, SHAB, simap)

Servidor MCP de Zefix: registro mercantil suizo, gaceta SHAB, licitaciones simap, FINMA, GLEIF y ARAMIS.

Documentación

swissco

PyPI Documentation

Datos de empresas suizas desde la terminal. Busque una empresa por UID, explore 790.000 de ellas por nombre o por objeto social, liste publicaciones del boletín oficial, navegue por licitaciones públicas, verifique una licencia bancaria o vigile una lista de empresas para detectar cambios.

uvx swissco lookup CHE-444.420.929

Todos los datos provienen de seis fuentes de datos abiertos, ninguna de las cuales requiere credenciales: Zefix en LINDAS para el registro mercantil, el Amtsblattportal para el Boletín Oficial Suizo de Comercio, simap.ch para la contratación pública, FINMA para bancos y empresas de valores autorizados, GLEIF para el Identificador de Entidad Legal y la estructura del grupo, y ARAMIS para la investigación financiada con fondos federales.

Construido y mantenido por Prospex, una plataforma suiza de inteligencia de ventas B2B.

Instalación

uvx swissco --help          # run it without installing
pip install swissco         # or install it

Python 3.14 o superior.

Docker

docker run --rm prospexch/swissco search "Nestlé" --limit 5

La imagen se ejecuta como un usuario sin privilegios y mantiene su estado — los IDs ya vistos de watch y los archivos FINMA en caché — en /home/swissco/.swissco. Monte un volumen allí para cualquier cosa que necesite recordar lo que vio la última vez:

docker run --rm -v swissco-state:/home/swissco/.swissco \
  prospexch/swissco watch --uid CHE-105.909.036

Las credenciales de Zefix, sin las cuales todos los comandos funcionan, se pasan como variables de entorno:

docker run --rm -e ZEFIX_USER -e ZEFIX_PASSWORD prospexch/swissco lookup CHE-105.909.036

Comandos

Cada comando acepta --format table|json|csv, --limit y --quiet.

swissco lookup

Todo lo que el registro publica sobre una empresa.

$ swissco lookup CHE-444.420.929
legal name       Baumberger Bau AG
uid              CHE-444.420.929
chid             CH-036.9.103.786-9
ehra id          1702823
legal form code  0151
legal form       Schweizerische Zweigniederlassung im Handelsregister eingetragen
municipality     Koppigen
canton           BE
address          Hauptstrasse 6, 3425 Koppigen
purpose          Anbieten von Kleintransporte aller Art.
zefix uri        https://register.ld.admin.ch/zefix/company/1702823

Acepta CHE-444.420.929, CHE444420929, o el UID oculto en otro texto.

swissco search

Empresas por nombre legal o por objeto social: cómo una empresa describe lo que hace, con sus propias palabras, en el registro.

$ swissco search "usinage" --canton VD --limit 5
LEGAL_NAME                             UID              LEGAL_FORM                                         MUNICIPALITY  CANTON  PURPOSE
-------------------------------------  ---------------  -------------------------------------------------  ------------  ------  ------------------------------------------------------------
Atelier roue libre S.A.                CHE-261.821.895  Aktiengesellschaft                                 Penthalaz     VD      La société a pour but l'usinage, la réparation, la révision…
Cute Cut Sàrl                          CHE-403.577.924  Gesellschaft mit beschränkter Haftung GMBH / SARL  Lausanne      VD      la société a pour but toutes activités, notamment la fabric…
DecoupART CNC Sàrl                     CHE-342.723.896  Gesellschaft mit beschränkter Haftung GMBH / SARL  Paudex        VD      la société a pour but tous types de travaux dans les domain…
LAVA Technologies Sàrl en liquidation  CHE-217.431.384  Gesellschaft mit beschränkter Haftung GMBH / SARL  Nyon          VD      la société a pour but: développement de machines d'usinage …
Pousaz Mécanique SA                    CHE-166.712.190  Aktiengesellschaft                                 Oron          VD      La société a pour but l'exploitation d'un atelier mécanique…

--canton acepta un código de dos letras, --legal-form un código eCH-0097 (0106 es una AG, 0107 una GmbH).

swissco publications

Publicaciones del registro mercantil del boletín oficial, en un rango de fechas.

swissco publications --canton ZH --since 2026-08-01
swissco publications --canton ZH --since 2026-08-01 --type CAPITAL_INCREASED

Sin --type, solo se leen las páginas de listado: una solicitud por cada 2.000 publicaciones. Con --type, se obtiene y clasifica el cuerpo de cada publicación superviviente en los once tipos de eventos que shab-parser reconoce, así que primero acote el rango y el cantón.

Los rangos de más de unos diez días se dividen automáticamente en ventanas. La API rechaza cualquier solicitud cuyo desplazamiento de página llegue a 10.000, y el boletín publica alrededor de mil entradas del registro mercantil al día.

swissco events

El historial registral de una empresa.

swissco events CHE-444.420.929 --since 2024-01-01

Las páginas de listado del boletín no llevan UID, solo un título, así que esto resuelve el UID a un nombre legal, conserva las publicaciones cuyo título se parece a ese nombre, luego obtiene esos cuerpos y conserva los eventos cuyo propio UID coincide. La coincidencia de título decide qué vale la pena descargar; el UID del cuerpo decide qué se informa. Los cuerpos obtenidos se almacenan en caché bajo el directorio de estado, por lo que una re-ejecución superpuesta no cuesta nada.

swissco watch

Qué cambió desde la última vez.

printf 'CHE-444.420.929\nCHE-105.943.826\n' > uids.txt
swissco watch uids.txt --state ~/.swissco/

Cada empresa se compara mediante una huella digital, un resumen de sus campos de identidad, dirección y objeto social. Sale con 10 cuando algo cambió y con 0 cuando no cambió nada, para que cron pueda ramificar según ello:

0 7 * * * swissco watch ~/uids.txt --quiet --format json > ~/changes.json \
          || mail -s "registry changes" me@example.com < ~/changes.json

Un UID que ha salido del conjunto de datos se informa como ya no está en el conjunto de datos, nunca como eliminado. LINDAS solo contiene entidades activas, por lo que un UID puede salir del conjunto de datos después de una reinscripción, una corrección o un retraso en la publicación.

swissco tenders

Proyectos de contratación pública de simap, por cantón y fecha de publicación.

$ swissco tenders --canton ZG --since 2026-08-25 --limit 3
TITLE                                                  PROJECT_NUMBER  BUYER                           CANTON  CITY  PUBLICATION_DATE  PUBLICATION_TYPE
-----------------------------------------------------  --------------  ------------------------------  ------  ----  ----------------  ----------------
Neubau Pfarreizentrum, Katholische Kirchgemeinde Baar  22047           Katholische Kirchgemeinde Baar  ZG      Baar  2026-09-05        award

--canton y --type son repetibles; --lang elige en qué idioma se informan el título y el comprador. La paginación es un cursor en lugar de un desplazamiento, por lo que un rango amplio cuesta páginas en lugar de fallar.

El rango de fechas filtra la publicación más reciente de cada proyecto, no la adjudicación que contiene. Un proyecto adjudicado en marzo cuya publicación más reciente es una corrección de agosto aparece solo en un rango que cubra agosto.

swissco vendor

Si una empresa está registrada como proveedor en simap.

$ swissco vendor CHE-409.633.691
name                   Egli Gartenbau AG Sursee
uid no                 CHE-409.633.691
city                   Sursee
canton                 LU
url                    https://www.gartenbau-egli.ch
company size           medium

Un UID se resuelve a un nombre legal, se busca y luego se confirma contra el uidNo propio del directorio. El nombre encuentra a los candidatos; el UID decide entre ellos — el directorio contiene tanto una "Egli Gartenbau AG Sursee" como una "Egli Gartenbau AG Uster".

No existe ningún comando para saber qué ha ganado una empresa. El proveedor nombrado en una adjudicación de simap no lleva UID, solo texto libre escrito por una oficina de contratación. Coincidir esos nombres produciría una respuesta plausible que a veces se refiere a una empresa diferente, por lo que no se ofrece.

swissco finma

Los bancos y empresas de valores autorizados por FINMA, unidos a un UID.

$ swissco finma --uid CHE-105.845.287
name                  Aargauische Kantonalbank
city                  Aarau 1
licence type          Bank
supervisory category  3
uid                   CHE-105.845.287

También swissco finma "Raiffeisen", --licence, --category y --finma en lookup. Ambos archivos se almacenan en caché durante una semana bajo el directorio de estado.

Solo bancos y empresas de valores: FINMA licencia aseguradoras, gestores de carteras y sociedades de gestión de fondos en listas separadas que esto no lee. Un fallo significa "no está en esta lista", nunca "sin licencia".

swissco lei

El Identificador de Entidad Legal de una empresa y el grupo en el que se consolida.

$ swissco lei CHE-412.669.376
legal name                 UBS Switzerland AG
lei                        549300WOIFUSNYH0FL22
registered as              CHE-412.669.376
jurisdiction               CH
status                     ACTIVE
initial registration date  2014-12-15
direct parent              UBS AG (BFM8T61CT2L1QCEMIK50, CH)
ultimate parent            UBS Group AG (549300SZJ9VS8SGXAN81, CH)
direct children            0

--children enumera lo que esta empresa consolida en lugar de contarlo, y --lei en lookup integra los mismos campos en un perfil de empresa.

La matriz suele ser extranjera, y esa es la razón para ejecutar esto: el propietario en el extranjero de una filial suiza no tiene entrada en el registro mercantil, por lo que el registro no puede responder la pregunta en absoluto.

Los registros de Nivel 2 de GLEIF documentan la consolidación contable: una matriz es la entidad que consolida a esta en sus cuentas, lo que puede hacer sin poseerla por completo. Alrededor de 28.000 entidades suizas tienen un LEI frente a aproximadamente 790.000 en el registro, por lo que un fallo significa "sin LEI registrado" y nada más.

swissco research

Proyectos de investigación financiados con fondos federales de ARAMIS, el registro de la Confederación de mandatos de investigación e innovación. Incluye fondos de Innosuisse y SNSF.

$ swissco research CHE-337.958.399
TITLE                                 PROJECT_NUMBER    OFFICE      STATUS      START_DATE  ROLE
Reducing Documentation Burden in S…   137.839 INNO-ICT  INNOSUISSE  In Process  2026-06-01  Implementation Partner

Un UID se confirma contra el UID de participante propio de cada proyecto, por lo que cada fila informada es exacta. El texto libre se busca tal como se proporciona y cada coincidencia regresa con sus organizaciones participantes. --limit limita cuántos candidatos se procesan, ya que la lista de participantes cuesta una solicitud por proyecto, y --lang elige DE, EN, FR o IT.

ARAMIS busca en títulos de proyectos, resúmenes y el campo de texto libre del contratista, e indexa la lista estructurada de participantes bajo ninguno de ellos. Una empresa nombrada solo como socio estructurado no se puede encontrar, que es donde suelen estar los socios de implementación de Innosuisse, por lo que un resultado vacío significa solo que ningún proyecto menciona a esta empresa por nombre. No es evidencia de que la empresa no haya recibido fondos federales de investigación.

swissco lee la organización, el rol, el UID y el lugar de un participante. ARAMIS también publica el nombre del investigador, la dirección de correo electrónico y los números de teléfono, y ninguno de esos tiene un campo en el analizador.

Salida

--format es lo único que cambia la salida. Un comando canalizado a jq y el mismo comando observado por una persona producen bytes idénticos, por lo que un script que funciona en su terminal funciona en CI.

table y csv se generan a partir de las mismas filas que json serializa, por lo que una columna no puede aparecer en un formato y faltar en otro. Las notas de progreso van a stderr, donde --quiet las silencia; los errores van a stderr como un único objeto JSON.

Úselo desde un agente de codificación

Este repositorio incluye una habilidad de agente. Enseña a Claude Code, Cursor, Codex y unos veinte otros agentes cómo manejar swissco: cada comando y las trampas que producen silenciosamente una respuesta incorrecta.

La habilidad es el directorio .agents/skills/swissco/, la ubicación multicliente que todo agente compatible escanea, con .claude/skills/swissco enlazado simbólicamente a él para que Claude Code lo encuentre en el suyo. tests/test_skill.py verifica las reglas de la especificación contra él en cada ejecución, por lo que la habilidad no puede desviarse del formato sin que el conjunto lo indique.

npx skills add prospex-ch/swissco-cli

Aterriza en el .agents/skills/swissco/ propio del proyecto consumidor, enlazado simbólicamente al directorio de cada agente. Añada -g para instalarlo una vez para cada proyecto, --all para aceptar los valores predeterminados sin que se le pregunte. swissco todavía tiene que estar en la ruta o ser accesible a través de uvx.

El agente puede entonces responder preguntas como "qué empresas en Zug mencionan blockchain en su objeto social" o "ha cambiado algo en CHE-105.943.826 desde junio" ejecutando el comando correcto por sí mismo.

Úselo como servidor MCP

Las mismas seis fuentes están disponibles como servidor MCP, desde este repositorio. Nueve herramientas, una por comando excepto watch.

claude mcp add swissco -- uvx swissco-mcp

Cada herramienta devuelve rows, un count y notes. Las filas son los dicts que swissco --format json imprime, por lo que un campo lleva el mismo nombre en ambas superficies. Las notas indican qué cubre cada fuente, que es lo que convierte un resultado vacío en una respuesta: la lista de FINMA omite aseguradoras y gestores de carteras, y alrededor de 28.000 entidades suizas tienen un LEI frente a aproximadamente 790.000 en el registro.

Vive en mcp/, se distribuye como el paquete PyPI swissco-mcp y el paquete npm del mismo nombre, y está registrado como ch.prospex/swissco. Referencia completa para cada herramienta, sus argumentos y sus advertencias: swissco-mcp.readthedocs.io.

Acceso y términos

SHAB / Amtsblattportal. La API REST es el canal que el operador ofrece para acceso automatizado: libremente accesible, sin autenticación para datos publicados, sin límite de velocidad documentado, tamaño de página limitado a 2.000. La interfaz web está prohibida por robots.txt, que no alcanza la API. El operador niega la integridad, y solo el PDF firmado es legalmente vinculante.

Zefix en LINDAS. Publicado en opendata.swiss, sin credenciales. Los términos de uso comercial nunca se han resuelto; la página del conjunto de datos indica lo que aplica.

Zefix PublicREST. Requiere credenciales emitidas por zefix@bj.admin.ch. Cada comando aquí funciona sin ellas. Proporcionarlas a través de --user/--password o ZEFIX_USER/ZEFIX_PASSWORD añade capital, estado, fecha de eliminación, nombres anteriores y relaciones corporativas a lookup, y una búsqueda por prefijo de nombre a search.

simap. La API de lectura responde sin autenticación. El robots.txt del sitio prohíbe las rutas de detalle de proyecto de la aplicación de una sola página, que swissco rechaza rotundamente; no dice nada sobre /api, donde va cada solicitud aquí.

FINMA. Dos archivos publicados, descargados como lo haría cualquier navegador. FINMA republica en lugar de versionarlos, por lo que se almacenan en caché durante una semana y se vuelven a obtener después de eso.

GLEIF. La API de registros responde sin autenticación. GLEIF publica los datos LEI para que cualquiera los use, y los términos de uso indican lo que aplica.

ARAMIS. El servicio público responde sin autenticación y pide que no se inunde, por lo que swissco lo regula y lee un proyecto a la vez. La exportación masiva de 43 MB está en un host que la lista de permitidos de este cliente omite, por lo que ningún comando puede descargarla.

Ser un buen ciudadano

Estos son pequeños servicios públicos gestionados por oficinas federales. swissco envía una solicitud cada 0,5 segundos como máximo — una por segundo para FINMA, que pide más margen — retrocede exponencialmente ante fallos y se identifica con un User-Agent real que lleva la URL de este repositorio. --interval puede elevar esos mínimos y no puede reducirlos.

Construido sobre

PaqueteFunción
zefix-parserZefix: LINDAS SPARQL, PublicREST, validación de UID
shab-parserSHAB: descubrimiento, obtención, análisis, clasificación de eventos en once tipos

Ambos tienen licencia MIT y se mantienen junto con este. simap, FINMA, GLEIF y ARAMIS no incluyen un cliente, por lo que swissco lleva el suyo propio para esos cuatro.

Observar más que una lista

swissco watch desde cron es la versión gratuita de lo que Prospex vende. Prospex observa todo el registro de forma continua, lo combina con contratación, financiación, licitaciones y señales web — incluido el lado de adjudicación de simap que esta herramienta deja deliberadamente de lado — y te indica cuáles de esos cambios merecen una llamada. Si un trabajo cron y una lista de UID son suficientes, esta herramienta es todo lo que necesitas.

Licencia

MIT