@cyanheads/sanctions-screening-mcp-server
Official
Servidor público alojado: https://sanctions-screening.caseyjhand.com/mcp
[!IMPORTANT] Esto es una ayuda de cribado, no una certificación legal o de cumplimiento. Cada herramienta devuelve posibles coincidencias con una puntuación transparente y la procedencia de la fuente — nunca un veredicto. Una coincidencia significa "revisa este candidato contra la fuente oficial"; un resultado vacío nunca significa "exento". El cumplimiento real de sanciones es un proceso legal — requiere revisión humana y una determinación de cumplimiento cualificada. Este servidor alimenta ese proceso; no lo realiza, y su salida no es un registro de cumplimiento.
Resumen
sanctions-screening-mcp-server convierte los datos abiertos de sanciones del mundo más el registro global de entidades legales en un único flujo de trabajo de cribado y resolución, respondido sin conexión y con coincidencia difusa. Examina un nombre contra las listas consolidadas de sanciones de EE. UU. (OFAC), UE, Reino Unido y ONU a la vez, y resuelve entidades legales contra la base de datos de Identificadores de Entidades Legales (LEI) de GLEIF con trazado de propiedad corporativa.
Todas las fuentes son descargables en bloque, sin clave y claras para redistribución. El servidor las refleja en un índice local SQLite + FTS5 y sirve coincidencias desde ese espejo — sin clave de API en vivo, sin límite de tasa por solicitud en la ruta crítica. El agente ve verbos de cribado (screen_name, resolve_entity, trace_ownership); qué lista respondió a una consulta aparece solo como procedencia en cada coincidencia.
El modelo de coincidencia es transparente por diseño: primero coincidencia estricta de tokens (normalización exacta, luego todos los tokens presentes vía FTS5), con un respaldo difuso puntuado de Jaro-Winkler + fonético. Las coincidencias aproximadas llevan la similitud bruta de Jaro-Winkler (0–1) — una medición real, nunca un "porcentaje de confianza" inventado.
Related MCP server: sanctionwise
Herramientas
Seis herramientas organizadas en torno a dos flujos de trabajo — examinar un nombre contra las listas de vigilancia, y resolver una entidad legal a su identificador global y grafo de propiedad:
Herramienta | Descripción |
| Examina un nombre (persona, empresa, buque, aeronave) contra todas las listas de vigilancia cargadas a la vez — OFAC SDN + Consolidada, UE, Reino Unido, ONU — con conocimiento de alias y difuso. Devuelve posibles coincidencias puntuadas con lista fuente, programa, fecha de designación y el alias coincidente. |
| Obtiene el registro completo de una designación de sanciones por lista fuente + ID de entrada: todos los alias, identificadores, direcciones, fechas/lugares de nacimiento, nacionalidades, programa, base legal y fecha de designación. |
| Resuelve un nombre de empresa / organización (+ jurisdicción opcional) a candidatos LEI de GLEIF clasificados. Convierte un nombre de contraparte en texto libre en un identificador global estable. |
| Obtiene el registro completo de Nivel 1 de GLEIF para un LEI — nombre legal, nombres comerciales, direcciones, estado de registro, jurisdicción — más una referencia cruzada de sanciones examinada sobre el nombre legal. |
| Traza el grafo de propiedad corporativa de Nivel 2 de GLEIF para un LEI (padres y/o hijos, BFS a una profundidad limitada), examinando opcionalmente cada nodo para cribado de propiedad beneficiaria. |
| Lista las listas de vigilancia cargadas y los conjuntos de datos de GLEIF con recuentos de registros, URLs de fuente, licencias, y la preparación del espejo y marcas de tiempo de actualización. |
sanctions_screen_name
El punto de entrada del 80% — "¿está esta entidad en una lista de vigilancia?"
Se expande a través de las cuatro listas de sanciones (OFAC SDN + Consolidada, UE, Reino Unido, ONU) en una sola llamada; la fuente aparece solo como procedencia por coincidencia
Con conocimiento de alias: coincide con cada nombre primario publicado, a.k.a., y f.k.a., no solo el nombre canónico
Modo estricto (predeterminado): igualdad normalizada exacta, luego todos los tokens presentes vía FTS5 — maneja intercambios de orden de palabras y palabras interiores faltantes sin biblioteca difusa
Modo difuso (opt-in, o automático cuando el estricto no encuentra nada): añade similitud de Jaro-Winkler y coincidencia fonética Double-Metaphone para fallos de clase de transliteración
Coincidencias etiquetadas
exact/strong/approximate; las coincidencias aproximadas llevan la puntuación bruta de Jaro-Winkler (0–1) másqueryTokenCoverage— cuántos tokens de consulta explica el candidato, lo que clasifica candidatos que un solo token exacto compartido fija en la misma puntuaciónFiltra por tipo de entidad, subconjunto de lista fuente, umbral de similitud (
min_score) y límite de resultadosPaginado:
totalAvailableyhasMoreinforman coincidencias más allá de la página devuelta ynextOffsetlas recupera, contotalAvailableBasismarcando ese recuento como exacto (estricto) o un mínimo del conjunto escaneado (difuso)En un resultado vacío, devuelve orientación sobre cómo ampliar — y establece explícitamente que ninguna coincidencia no es una exención
sanctions_get_designation
El detalle después de que sanctions_screen_name muestre un candidato.
Registro completo normalizado por
source+entry_id(elsourceEntryIdde una coincidencia de cribado)Todos los alias publicados, identificadores estructurados (pasaporte / ID nacional / impuestos / registro), direcciones, fechas y lugares de nacimiento, nacionalidades, programa sancionador, base legal y fecha de designación
Preserva la escasez de la fuente — los campos faltantes significan que la fuente los omitió; el registro nunca se rellena con datos fabricados
sanctions_resolve_entity
El puente desde un nombre de contraparte en texto libre a un LEI estable del que dependen las herramientas de entidad.
Resuelve un nombre de empresa / organización a candidatos LEI de GLEIF clasificados
Filtro opcional de jurisdicción ISO 3166-1 alfa-2 y filtro de estado de registro (
issuedpredeterminado,lapsed, oany)Mismo modelo de coincidencia estricto-luego-difuso que el cribado de nombres; las coincidencias aproximadas llevan la puntuación bruta de Jaro-Winkler y el mismo recuento de
queryTokenCoverageCoincide contra nombres legales y otros nombres comerciales publicados
Paginado en el mismo contrato que
sanctions_screen_name—totalAvailable,totalAvailableBasis,hasMore,nextOffset
sanctions_get_entity
Quién es esta entidad legal — más una referencia cruzada de lista de vigilancia en la misma llamada.
Registro completo de Nivel 1 de GLEIF: nombre legal, otros nombres comerciales, direcciones legal y de sede, estado de registro, jurisdicción, autoridad de registro e ID, fecha de última actualización
Referencia cruzada del nombre legal de la entidad contra todas las listas de vigilancia cargadas (solo coincidencia estricta — el difuso automático en un nombre legal genérico inundaría el resultado con falsos positivos de un solo token común)
screeningStatusindica si esa referencia cruzada realmente se ejecutó: una lista de coincidencias vacía bajonot_readysignifica que el espejo de sanciones no estaba disponible, no que nada coincidióUna entidad examinada lleva
sanctionsScreen—totalAvailable,totalAvailableBasis,hasMore— ya que la lista de coincidencias está limitada a veinticinco; vuelve a examinar el nombre legal consanctions_screen_namepara el conjunto completoLa entrada LEI se valida con regex (20 caracteres: 18 alfanuméricos + 2 dígitos de verificación)
sanctions_trace_ownership
Cribado de propiedad beneficiaria — el flujo de trabajo entre fuentes que las herramientas de lista única no pueden hacer.
Recorre el grafo de propiedad de Nivel 2 de GLEIF en anchura hasta una profundidad limitada (1–5)
direction: caminaparents(quién lo posee),children(qué posee), obothDevuelve nodos (con rol y profundidad) y aristas de propiedad dirigidas con tipo de relación
screenNodes: trueexamina cada entidad en el grafo contra todas las listas de vigilancia — "¿está alguien en esta cadena de propiedad sancionado?"El cribado por nodo es solo estricto e informa
screenedNodeCount/flaggedNodeCountpara que un llamador vea la cobertura de un vistazoInforma si el grafo es la imagen completa conocida:
complete,truncated(existen más relaciones más allá de la profundidad solicitada), ymissingEntityLeis(nodos sin registro de Nivel 1 de GLEIF, que llevan su LEI donde estaría un nombre legal)screeningStatussepara un cribado de nodo completado de uno nunca solicitado y de uno que el espejo de sanciones no pudo ejecutar; cada nodo examinado llevasanctionsScreen—totalAvailable,totalAvailableBasis,hasMore— ya que su lista de coincidencias está limitada a diez
Recursos y prompts
Tipo | Nombre | Descripción |
Recurso |
| Una designación de sanciones por fuente + ID de entrada (espejo URI de |
Recurso |
| Una entidad GLEIF de Nivel 1 por LEI (espejo URI del payload de entidad de |
Recurso |
| Listas cargadas + conjuntos de datos GLEIF con recuentos y marcas de tiempo de actualización (espejo URI de |
Prompt |
| Secuencia las herramientas en un proceso completo de diligencia debida de contraparte: resolver → rastrear propiedad → examinar la entidad y cada beneficiario final → resumir con procedencia y la advertencia de apoyo a la decisión. |
Todos los datos de recursos también son accesibles a través de las herramientas, que son la vía principal para clientes MCP solo de herramientas. Los recursos son una conveniencia solo para clientes con capacidad de recursos.
Listas de fuentes
El servidor agrega cinco fuentes upstream detrás de la superficie de screening. Todas son masivas, sin clave y claras para redistribución.
Fuente | Rol | Licencia |
OFAC SDN + Consolidated (Tesoro de EE. UU.) | Lista principal de sanciones/vigilancia de EE. UU. — individuos, entidades, embarcaciones, aeronaves, con alias a.k.a. | Dominio público del Gobierno de EE. UU. |
Lista Consolidada de Sanciones Financieras de la UE | Personas y entidades designadas por la UE | Redistribución libre |
Lista de Sanciones del Reino Unido (UKSL, FCDO) | Objetivos de sanciones del Reino Unido — personas, entidades, buques | Licencia de Gobierno Abierto v3.0 |
Lista Consolidada del Consejo de Seguridad de la ONU | Individuos y entidades designados por la ONU en todos los regímenes | Redistribución libre |
GLEIF LEI (Nivel 1 + Nivel 2) | Quién es quién (referencia de entidad) y quién posee a quién (propiedad corporativa) | CC0 1.0 Universal |
La fuente del Reino Unido es la Lista de Sanciones del Reino Unido (UKSL), la única fuente autoritativa del Reino Unido desde que la Lista Consolidada de OFSI cerró el 28 de enero de 2026.
Primera ejecución: poblar el espejo
El espejo no está incluido — las listas de sanciones y la copia dorada de GLEIF se descargan y normalizan en la primera ejecución. Ejecute el script del ciclo de vida de init fuera de banda antes del screening:
bun run mirror:initEsto transmite las cinco listas de sanciones completas, reconstruye el índice de nombres por alias y luego transmite la copia dorada de GLEIF (entidades de Nivel 1 + relaciones de propiedad de Nivel 2). Es reanudable y está diseñado para ejecutarse una vez, fuera de la ruta de solicitudes.
Script | Propósito |
| Carga inicial completa de todas las fuentes (listas de sanciones + copia dorada de GLEIF). |
| Re-cosechar las listas de sanciones y aplicar deltas de GLEIF. La mitad de sanciones (listas + índice de nombres) también se ejecuta en un cron bajo transporte HTTP; los deltas de GLEIF son manuales. |
| Informar sobre la preparación del espejo y los recuentos de registros por fuente. |
| Cargar un pequeño fixture sintético para pruebas de humo locales (sin descargas). |
Establezca SANCTIONS_INIT_SKIP_GLEIF=1 en mirror:init para cargar solo las listas de sanciones y omitir GLEIF.
Nota de memoria: cada tramo de
mirror:inittransmite. Los documentos de sanciones suman aproximadamente 172 MB, de los cualesSDN_ADVANCED.XMLde OFAC es de unos 120 MB por sí solo; la copia dorada de GLEIF de Nivel 1 es de aproximadamente 3,3 millones de registros LEI (~892 MB comprimidos, varios GB descomprimidos). Cada fuente se escanea un registro a la vez y se ingiere en lotes acotados, por lo que la memoria residente máxima sigue el tamaño del lote en lugar del tamaño de cualquier documento fuente. Dimensione el disco para el espejo en consecuencia — GLEIF domina allí — u omita GLEIF conSANCTIONS_INIT_SKIP_GLEIF=1si solo necesita screening de listas de vigilancia.
Características
Construido sobre @cyanheads/mcp-ts-core:
Definiciones declarativas de herramientas, recursos y prompts — un archivo por primitiva, el framework maneja el registro y la validación
Manejo de errores unificado — los handlers lanzan, el framework captura, clasifica y formatea
Contratos de error tipados con sugerencias de recuperación (
mirror_not_ready,designation_not_found,lei_not_found)Autenticación conectable:
none,jwt,oauth(por defectonone— todos los datos son públicos)Registro estructurado con trazado opcional de OpenTelemetry
Transportes STDIO y HTTP Streamable
Específico de sanciones:
Superficie multi-fuente organizada por flujo de trabajo — una pantalla se expande internamente a OFAC, UE, RU y ONU; las fuentes aparecen solo como procedencia
Espejo local SQLite + FTS5 a través del
MirrorServicedel framework — sin conexión, sin clave API en vivo, sin límite de tasa por solicitudEsquema común normalizado en las cuatro listas de sanciones, con un índice de nombres por alias desnormalizado (una fila por nombre y por alias) para que una consulta coincida con cualquiera de los nombres de una entidad en un solo escaneo FTS
Coincidencia estricta-luego-difusa: normalizado exacto → todos los tokens presentes (FTS5) → Jaro-Winkler + Double-Metaphone, con límite para acotar el trabajo en consultas cortas
Ingesta de GLEIF Nivel 1 + Nivel 2 para resolución de entidades y rastreo de propiedad beneficiaria
Salida amigable para agentes:
Señal real, no confianza sintética — los aciertos aproximados llevan la similitud bruta de Jaro-Winkler (0–1) y un recuento literal de cobertura de tokens de consulta, dos mediciones separadas en lugar de un veredicto combinado; los aciertos estrictos llevan un
match_type(exact/strong), nunca un porcentaje fabricadoClasificación que el llamador puede tener en cuenta — los aciertos se ordenan por tipo de coincidencia, luego puntuación, luego cobertura, luego un identificador estable, y la cobertura que rompió el empate está en el propio acierto
Procedencia en cada acierto — lista de fuentes, programa de sanciones, fecha de designación, el nombre/alias exacto que coincidió y su tipo (
primary/aka/fka/low-quality-aka)Advertencia de apoyo a la decisión incluida en la salida de cada herramienta de screening — un acierto es un candidato a verificar, un resultado vacío no es una exención
Frescura expuesta a través de
sanctions_list_sources— el recuento de registros de cada fuente y la marca de tiempo del espejo, para que un agente pueda juzgar la obsolescencia
Primeros pasos
Instancia pública alojada
Hay una instancia pública disponible en https://sanctions-screening.caseyjhand.com/mcp — sin necesidad de instalación. Apunte cualquier cliente MCP a ella a través de HTTP Streamable, con esta configuración de cliente:
{
"mcpServers": {
"sanctions-screening-mcp-server": {
"type": "streamable-http",
"url": "https://sanctions-screening.caseyjhand.com/mcp"
}
}
}Autoalojado / local
Añada lo siguiente a su archivo de configuración del cliente MCP. El servidor es offline-first — pueble el espejo con bun run mirror:init antes del screening (consulte Listas de fuentes).
{
"mcpServers": {
"sanctions-screening-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/sanctions-screening-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}O con npx (sin necesidad de Bun):
{
"mcpServers": {
"sanctions-screening-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/sanctions-screening-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}Para HTTP Streamable, configure el transporte e inicie el servidor:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcpRequisitos previos
Bun v1.3 o superior (o Node.js v24+).
Disco para el espejo local (los archivos SQLite poblados; GLEIF Nivel 1 domina). Sin clave API para ninguna fuente.
Instalación
Clone el repositorio:
git clone https://github.com/cyanheads/sanctions-screening-mcp-server.gitNavegue al directorio:
cd sanctions-screening-mcp-serverInstale las dependencias:
bun installConfigure el entorno:
cp .env.example .env
# edit .env if you need to override defaults (all optional)Pueble el espejo:
bun run mirror:initConfiguración
Todas las fuentes no requieren clave — no hay clave API obligatoria. Cada variable a continuación es opcional con un valor predeterminado sensato.
Variable | Description | Default |
| Ruta del sistema de archivos para el espejo SQLite; un volumen persistente en un despliegue alojado. |
|
| Cron para la actualización programada de las listas de sanciones + índice de nombres (solo transporte HTTP). Los deltas de GLEIF se actualizan manualmente mediante |
|
| Umbral de similitud Jaro-Winkler predeterminado para coincidencias difusas cuando se omite |
|
| Límite máximo de candidatos difusos evaluados por consulta, para acotar el trabajo en consultas cortas. |
|
| Anulación para el archivo XML avanzado de OFAC SDN. | URL oficial de SLS |
| Anulación para el archivo XML avanzado consolidado de OFAC. | URL oficial de SLS |
| Anulación para el archivo XML consolidado de la UE (incluye el componente de ruta de token público estático). | URL oficial de la UE |
| Anulación para el archivo XML de la Lista de Sanciones del Reino Unido (UKSL). | URL oficial de FCDO |
| Anulación para el archivo XML consolidado del Consejo de Seguridad de la ONU. | URL oficial de la ONU |
| Anulación para la API de descarga de copia dorada / delta de GLEIF. |
|
| Transporte: |
|
| Puerto para el servidor HTTP. |
|
| Nivel de registro (RFC 5424). |
|
Las URL de origen tienen como valor predeterminado los endpoints oficiales verificados; existen anulaciones para pruebas y para fijar un espejo en entornos restringidos. El "token" de la UE es un componente de ruta público estático, no una credencial.
Consulte .env.example para obtener la lista completa de anulaciones opcionales.
Ejecución del servidor
Desarrollo local
Compilar y ejecutar:
# One-time build
bun run rebuild
# Run the built server
bun run start:stdio
# or
bun run start:httpEjecutar comprobaciones y pruebas:
bun run devcheck # Lint, format, typecheck, security, changelog sync
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against specDocker
docker build -t sanctions-screening-mcp-server .
docker run --rm -p 3010:3010 -v sanctions-data:/usr/src/app/data sanctions-screening-mcp-serverEl Dockerfile tiene como valores predeterminados el transporte HTTP, el modo de sesión sin estado y los registros en /var/log/sanctions-screening-mcp-server. La imagen se ejecuta bajo Bun, por lo que el espejo usa bun:sqlite (sin compilación nativa). Monte un volumen en la ruta del espejo (/usr/src/app/data por defecto) para que el espejo poblado sobreviva a los reinicios del contenedor, y ejecute bun run mirror:init dentro del contenedor (docker exec) para poblarlo. Las dependencias de pares de OpenTelemetry se instalan por defecto; compile con --build-arg OTEL_ENABLED=false para omitirlas.
Estructura del proyecto
Directorio | Propósito |
| Punto de entrada de |
| Análisis y validación de variables de entorno específicas del servidor con Zod. |
| Definiciones de herramientas ( |
| Definiciones de recursos ( |
| Definiciones de indicaciones ( |
| El servicio de detección: espejo local, esquema normalizado, ingesta de fuentes (OFAC/UE/RU/ONU/GLEIF) y el motor de coincidencias estrictas/difusas. |
| CLI del ciclo de vida del espejo: init, refresh, verify, seed. |
| Pruebas unitarias y de integración que reflejan |
Guía de desarrollo
Consulte CLAUDE.md/AGENTS.md para obtener las pautas de desarrollo y las reglas arquitectónicas. La versión breve:
Los manejadores lanzan excepciones, el marco las captura: no hay
try/catchen la lógica de las herramientasUse
ctx.logpara el registro con ámbito de solicitud,ctx.statepara el almacenamiento con ámbito de inquilinoRegistre nuevas herramientas y recursos mediante los barriles en
src/mcp-server/*/definitions/index.tsEnvuelva las fuentes externas: valide los datos sin procesar → normalícelos al esquema común → devuelva el esquema de salida; nunca invente campos que una fuente omita y nunca sintetice una puntuación de confianza
Atribución
Este servidor redistribuye datos abiertos de las siguientes fuentes, citadas aquí según sus términos:
OFAC listas SDN y Consolidadas — Departamento del Tesoro de EE. UU., Oficina de Control de Activos Extranjeros (dominio público del Gobierno de EE. UU.).
UE Lista Consolidada de Sanciones Financieras — Comisión Europea / SEAE (redistribuible libremente).
Lista de Sanciones del Reino Unido — Oficina de Asuntos Exteriores, Commonwealth y Desarrollo del Reino Unido, bajo la Licencia de Gobierno Abierto v3.0 (se requiere atribución).
ONU Lista Consolidada del Consejo de Seguridad — Consejo de Seguridad de las Naciones Unidas (redistribuible libremente).
GLEIF datos LEI — Global Legal Entity Identifier Foundation, CC0 1.0 Universal.
Contribuciones
Se aceptan problemas y solicitudes de extracción. Ejecute comprobaciones y pruebas antes de enviar:
bun run devcheck
bun run testLicencia
Apache-2.0 — consulte LICENSE para obtener detalles.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
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
Screen a name or entity against OFAC SDN, the EU Consolidated list and the UK list.
Screen people & companies against 12 US sanctions & exclusion lists (OFAC, LEIE, SAM, Medicaid).
Screen names against the US Consolidated Screening List: OFAC SDN, BIS Entity List +10 more lists
Screen names against OFAC SDN and 7 more global sanctions lists. Free, no account required.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceTrust Intelligence API - entity screening, sanctions, risk scoring, IBAN validation, and compliance checks via MCPMIT
- AlicenseAqualityBmaintenanceScreens names against the official UK FCDO Sanctions List to identify possible matches with designation details, and retrieves full sanctions entries by unique ID.235Apache 2.0
- AlicenseNot gradedqualityCmaintenanceScreens names against the US Consolidated Screening List including OFAC SDN and BIS Entity List, keyless.2MIT
- FlicenseNot gradedqualityBmaintenanceScreens names and companies against OFAC, EU, UK, and UN sanctions lists with fuzzy-match scores, supporting bulk lookups for AML/KYC checks. Data is sourced directly from official government lists and cached for fast repeat checks.-
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/cyanheads/sanctions-screening-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server