
Pulls normalized Swiss federal datasets into Claude: TARES customs tariff codes, FINMA's financial institution registry, and NOGA economic activity classifications. You get nine tools that query production APIs hosted at mcp.openswissdata.com. Reach for this when you're building compliance workflows, need to validate Swiss business registrations, or are working with import/export documentation that references official tariff nomenclature. The maintainer runs ETL pipelines to keep each dataset synced with government sources and versions the releases. Built for data engineers who'd rather query clean APIs than scrape PDF tables from admin.ch.
claude mcp add --transport http openswissdata https://mcp.openswissdata.com/jsonrpcRun in your terminal. Add --scope user to make it available in every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
tariff_lookupLookup a Swiss customs tariff (HS8) and return the full TARES row including MFN duty, preferential regimes, restrictions and customs relief codes. Always returns a non-official disclaimer that the agent must surface to the end user.2 paramsLookup a Swiss customs tariff (HS8) and return the full TARES row including MFN duty, preferential regimes, restrictions and customs relief codes. Always returns a non-official disclaimer that the agent must surface to the end user.
hs8*stringlangstringfr · de · it · endefault: frkyc_checkSearch the FINMA registry of supervised entities and the FINMA warnings list by name. Returns up to top_k authorised entities + any matching warning entries. Use this for basic counterparty KYC screening.2 paramsSearch the FINMA registry of supervised entities and the FINMA warnings list by name. Returns up to top_k authorised entities + any matching warning entries. Use this for basic counterparty KYC screening.
name*stringtop_kintegercross_walkTranslate an industry classification code between schemes (NOGA 2008/2025, NACE 2.0/2.1, ISIC 4). Returns all mappings with their type (exact, partial, aggregated, derived) and notes.3 paramsTranslate an industry classification code between schemes (NOGA 2008/2025, NACE 2.0/2.1, ISIC 4). Returns all mappings with their type (exact, partial, aggregated, derived) and notes.
code*stringsource*stringNOGA_2008 · NOGA_2025 · NACE_2.0 · NACE_2.1 · ISIC_4target*stringNOGA_2008 · NOGA_2025 · NACE_2.0 · NACE_2.1 · ISIC_4tariff_semantic_searchSemantic search across Swiss customs tariff (TARES) descriptions in French. Uses pre-computed Xenova/paraphrase-multilingual-mpnet-base-v2 embeddings (768d, FR) shipped with the TARES Pro bundle. Returns top-K HS8 codes by cosine similarity. Always inlines a non-official discl...3 paramsSemantic search across Swiss customs tariff (TARES) descriptions in French. Uses pre-computed Xenova/paraphrase-multilingual-mpnet-base-v2 embeddings (768d, FR) shipped with the TARES Pro bundle. Returns top-K HS8 codes by cosine similarity. Always inlines a non-official discl...
langstringfrdefault: frquery*stringtop_kintegerclassify_textClassify a free-text business description into top-K NOGA 2025 codes with confidence scores. Uses pre-computed Xenova/paraphrase-multilingual-mpnet-base-v2 embeddings (768d, FR). NACE 2.1 mode falls back to NOGA 2025 in v1 — combine with cross_walk for translation.4 paramsClassify a free-text business description into top-K NOGA 2025 codes with confidence scores. Uses pre-computed Xenova/paraphrase-multilingual-mpnet-base-v2 embeddings (768d, FR). NACE 2.1 mode falls back to NOGA 2025 in v1 — combine with cross_walk for translation.
langstringfrdefault: frschemestringNOGA_2025 · NACE_2.1default: NOGA_2025text*stringtop_kintegerfinma_searchFuzzy search the FINMA registry by name (tolerates typos and legal-suffix variants like 'UBS Switzerland AG' vs 'UBS AG'). Returns top-K matches with confidence score, including LEI/UID where available. Set include_warnings=true to also surface entries from the FINMA warnings...3 paramsFuzzy search the FINMA registry by name (tolerates typos and legal-suffix variants like 'UBS Switzerland AG' vs 'UBS AG'). Returns top-K matches with confidence score, including LEI/UID where available. Set include_warnings=true to also surface entries from the FINMA warnings...
include_warningsbooleanname*stringtop_kintegertariff_changelogReturns the historical changelog of MFN duty rates (and adjacent fields) for a Swiss customs tariff (HS8) code. Window: rolling 12-24 months. Irreplicable by scraping — xtares.admin.ch only serves the current version. Requires `hs8`; optional `since` (ISO date) to bound the wi...2 paramsReturns the historical changelog of MFN duty rates (and adjacent fields) for a Swiss customs tariff (HS8) code. Window: rolling 12-24 months. Irreplicable by scraping — xtares.admin.ch only serves the current version. Requires `hs8`; optional `since` (ISO date) to bound the wi...
hs8*stringsincestringentity_historyReturns the timeline of changes for a FINMA-supervised entity (registration, authorisation type changes, status mutations, address moves, warning-list flag transitions). Keyed by Swiss UID (CHE-xxx.xxx.xxx). Irreplicable by scraping — finma.ch only publishes the current state.1 paramsReturns the timeline of changes for a FINMA-supervised entity (registration, authorisation type changes, status mutations, address moves, warning-list flag transitions). Keyed by Swiss UID (CHE-xxx.xxx.xxx). Irreplicable by scraping — finma.ch only publishes the current state.
uid*stringstatent_lookupSwiss enterprise statistics (STATENT, BFS) for a NOGA 2-digit division and optional canton. Returns count of establishments, jobs, and full-time equivalents (FTE). 2023 data. Always inlines a BFS attribution disclaimer.2 paramsSwiss enterprise statistics (STATENT, BFS) for a NOGA 2-digit division and optional canton. Returns count of establishments, jobs, and full-time equivalents (FTE). 2023 data. Always inlines a BFS attribution disclaimer.
canton_codestringnoga_division*stringSwiss federal reference data for AI agents and developers: the Swiss customs tariff (TARES, 8-digit tariff numbers with MFN duty and preferential regimes), the FINMA register of supervised institutions and the FINMA warnings list, and NOGA / NACE / ISIC activity-code correspondences.
https://mcp.openswissdata.com/jsonrpc, four tools (tariff_lookup, kyc_check, company_check, cross_walk), 100 calls per hour per IP address, plus a free trial of the three search tools (tariff_semantic_search, classify_text, finma_search): 20 calls per day per IP address in total. Claude Code: claude mcp add --transport http openswissdata https://mcp.openswissdata.com/jsonrpc. Local-process clients: npx -y @openswissdata/mcp./api/v1/company/:uid, /api/v1/localities, /api/v1/communes/:bfs_id and /api/v1/sources, limited per network address; see the REST API section of llms.txt and openapi.json.| Tool | Access | What it answers |
|---|---|---|
tariff_lookup | Free, no key | Swiss customs tariff line for an 8-digit tariff number (MFN duty, preferential regimes, restrictions, relief codes), or the Swiss lines under a 2- to 7-digit HS prefix |
kyc_check | Free, no key | FINMA register of supervised institutions and FINMA warning list, searched by name, closest matches first |
cross_walk | Free, no key | Correspondence of an activity code between NOGA 2008/2025, NACE 2.0/2.1 and ISIC 4, with the relation type and its source |
tariff_semantic_search | Free trial, no key (20 calls/day in total) | TARES lines from a description in French, German, Italian or English, using each line's official hierarchy |
tariff_changelog | Existing access grant | MFN duty history of a tariff number across archived releases |
classify_text | Free trial, no key (20 calls/day in total) | NOGA 2025 subclasses suggested for an activity description (FR/DE/IT/EN) |
finma_search | Free trial, no key (20 calls/day in total) | FINMA register search tolerant of accents, legal forms and typos, each match labelled with its type |
entity_history | Existing access grant | Change history of a FINMA-supervised entity by Swiss UID |
New Pro subscriptions are closed; the three free tools and the search trial need no sign-up. The endpoint accepts browser calls (CORS, any origin, no cookies).
Jeux de données publics suisses normalisés : FINMA, TARES et classifications. API Hono, site Astro et collectes TypeScript dans ce dépôt. Les données des clients et les preuves privées restent hors Git.
Node 22.12 ou ultérieur ; la CI et Railway utilisent Node 22. Utiliser une copie isolée et lire AGENTS.md avant de commencer. Depuis la racine de cette copie :
npm ci
npm --prefix web ci
npm run typecheck
npm test
npm run build
Ces contrôles ne demandent aucun secret de production. Ne pas copier un .env ni une base de clients pour tester. Le build prépare des modèles publics figés : le premier passage demande le réseau et plusieurs gigaoctets ; les suivants contrôlent et réutilisent dist/models. La construction du site vérifie ensuite liens, langues et sitemap.
Les tests créent des bases fictives dans des dossiers temporaires et injectent explicitement leurs clés Ed25519 éphémères. Ils ne remplacent jamais la clé publique officielle et ne contactent pas les autorités d’horodatage pour fabriquer les archives de test. La CI vérifie que les fichiers suivis sont inchangés après les tests.
Après construction, depuis la copie isolée, sans variables de production :
npm run db:migrate
npm run dev
L’application est accessible sur http://localhost:3000. DATABASE_PATH permet de choisir une base locale fictive ; par défaut, elle est créée dans data/openswissdata.sqlite. Le site servi vient de web/dist et se reconstruit avec npm run web:build. npm run web:dev lance séparément le serveur Astro.
Une base vide permet de démarrer, mais ne satisfait pas /api/health/ready : ce contrôle exige les trois versions distribuées et les ressources du site. Ne pas inventer des versions pour contourner la disponibilité. Les tests créent leurs propres références fictives. Paiement, messagerie et stockage ne fonctionnent qu’avec leurs connexions configurées ; les commandes de vérification ci-dessus n’en ont pas besoin.
db:migrate initialise le schéma et applique les évolutions idempotentes de getDb(). Ce n’est pas un exécuteur de toutes les anciennes migrations SQL : l’élargissement historique Business reste une intervention distincte avant réouverture de cette offre.
| Dossier | Rôle |
|---|---|
src/routes, src/lib | API, comptes, CRM privé, droits, files de livraison et suivi financier |
src/db | Schéma SQLite ; le volume Railway conserve la base |
src/legal | Contrats datés immuables et registre des versions |
src/mcp | Outils MCP, OAuth, données réellement chargées et rafraîchissement R2 |
etl | Sources en bronze, validation, archives signées, publication des jeux de données |
web | Site Astro, pages de produits, compte, bureau et centre juridique FR/DE/EN |
sdks | Intégrations publiables avec installation et tests indépendants |
tests | Scénarios fictifs, pannes, reprises et contrats techniques |
docs/internal | Rapports et preuves privés, ignorés par Git |
Les archives vendues résident dans R2. La base référence leurs versions ; catalogue, échantillons et caches MCP suivent les publications validées. Les fiches publiques FINMA et les index vectoriels historiques sont distincts : voir docs/fiches-publiques.md et les limites dans AGENTS.md.
La procédure de sauvegarde et de reprise distingue les contrôles réels de la base, les témoins indépendants dans le stockage et l’exercice complet du service restant à réaliser.
main alimente Railway, qui attend les tests GitHub puis /api/health/ready. Un changement uniquement documentaire ou ETL peut être ignoré par les filtres de railway.json : le SHA de l’application demeure alors celui du dernier déploiement. Un push réussi ne prouve pas la publication.
Après modification : tests adaptés, typage, build si application/site, npm run security:public, puis contrôle de la CI et de la version réellement servie à /api/health/ready. Vérifier les parcours concernés dans un navigateur, aussi sur mobile. Les contrôles /ready (démarrage), /freshness (FINMA) et /deep (diagnostic privé des dépendances externes) ont des rôles différents. /deep exige une session administrateur ; le bureau propose le contrôle dans Automatisations. Les moniteurs sans session utilisent /ready et /freshness, sans lancer d’appels Stripe ou R2.
Ne pas lancer les commandes etl:* comme un simple test : elles peuvent publier. Utiliser les simulations prévues dans AGENTS.md et les workflows manuels, qui démarrent en simulation. Ne pas rouvrir les abonnements ou l’offre Pro sans traiter leurs conditions spécifiques.
OPENSWISSDATA_API_KEYsecretOptional Bearer token for higher quotas / Pro tools. Anonymous tier works without it (~100 req/day/IP).
OPENSWISSDATA_BASE_URLdefault: https://mcp.openswissdata.comOverride the remote MCP endpoint (default: https://mcp.openswissdata.com). Useful for staging or self-hosting.
OPENSWISSDATA_TIMEOUT_MSdefault: 30000Per-request timeout in milliseconds.