{"_id":"@cyanheads/sanctions-screening-mcp-server","_rev":"17-3c2f5f51425964572457fbc2b2f3202a","name":"@cyanheads/sanctions-screening-mcp-server","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.0","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"9a83568c31f868ef39cf08cfc4f2b9ee922b6c58","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.0.tgz","fileCount":110,"integrity":"sha512-h8C9f/PjQ5LEeR57BOI1XdVKwLIzE+6441mK8ziOMku/OcaLC6JaB1amjoD50ZcQOa96D2ufhh3vFNoPgVHp2Q==","signatures":[{"sig":"MEYCIQC+b3M7Uha2CfGRGPiOZIB2urLbI/AoGvqfLh8pUzzOlQIhAI0VFHeJq9s1FT5AdwihKbms7Hn26RoMD8IgxK/5YiZi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":520240},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"9a83568c31f868ef39cf08cfc4f2b9ee922b6c58","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-h8C9f/PjQ5LEeR57BOI1XdVKwLIzE+6441mK8ziOMku/OcaLC6JaB1amjoD50ZcQOa96D2ufhh3vFNoPgVHp2Q==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.4.1","fast-xml-parser":"^5.8.0","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.8","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.0_1781374531019_0.49655765898745896","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.1","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":{"url":"https://github.com/cyanheads","name":"cyanheads","email":"casey@caseyjhand.com"},"license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.1","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"bcfee3cde25f7045ef90b8fc77a7248090f8876e","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.1.tgz","fileCount":111,"integrity":"sha512-ebYKcjK6dbN5POfP48GNMhV94XzIapax1+4FjyhRgAuuVUeP9FZpIkx1ZFspVYWW7hd9xyqIE/NZh1zrtFQ3Xg==","signatures":[{"sig":"MEUCIQDTVuVp4o5NUIgfMqXKO3e5/JOW5YG1Dl9JmcKPDJ+fjwIgBEUix8T2P/egG4tPrFOSMhAA5KSaGYWJBrSOmMSk2ZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":520871},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"gitHead":"3996d90de8b28e3466ce86cb9754bd2a317e4651","mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"11.12.1","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.10.1","fast-xml-parser":"^5.8.0","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.8","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.1_1781434714490_0.8688823055739772","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.2","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.2","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"4992bb11dedc112edb6d0f81026ce973592dd5d7","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.2.tgz","fileCount":112,"integrity":"sha512-Lb+EcXEbSgO5Kab+V/e+LNI6X5D99FUkAmo5aghzL+uFT/jN+Ra9/bkRPbR3nY5zptmNhN5Z9YT3VVgtxWJY2g==","signatures":[{"sig":"MEYCIQDGjbv+Op653s880A55RP/I96H7F100b90fjfiqSdnKlwIhAL5ASp41ub2Mf3Jjn8b0PFmngh2ZnpXzLU6dVzgaO+gp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":522963},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"4992bb11dedc112edb6d0f81026ce973592dd5d7","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-Lb+EcXEbSgO5Kab+V/e+LNI6X5D99FUkAmo5aghzL+uFT/jN+Ra9/bkRPbR3nY5zptmNhN5Z9YT3VVgtxWJY2g==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.10.1","fast-xml-parser":"^5.9.0","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.2_1781545624981_0.3140793227073555","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.3","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.3","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"518a55695fec6b5d29697e7defa7ad08b9aaa1df","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.3.tgz","fileCount":113,"integrity":"sha512-IZd554v7+3sW/COurkJsH+sIMWGQsTZxuMgk3usWU5bxfKlZr8exR5ru3U9BcGy2mDTp14MNiYXARoteV2kZqQ==","signatures":[{"sig":"MEUCIH70XOBjJsiiE9GK+o0n7qz5yd6Apm+QM78OGFbbVpRUAiEAwrThq2K6uwjJAspVfTWSkZDd1BSjKKth82rJUEWuPTo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527366},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"518a55695fec6b5d29697e7defa7ad08b9aaa1df","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-IZd554v7+3sW/COurkJsH+sIMWGQsTZxuMgk3usWU5bxfKlZr8exR5ru3U9BcGy2mDTp14MNiYXARoteV2kZqQ==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","fast-xml-parser":"^5.9.3","@cyanheads/mcp-ts-core":"^0.10.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.3_1781924816017_0.8754036975455146","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.4","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.4","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"7a29578f323d568beb3677d98ed28082b8106823","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.4.tgz","fileCount":114,"integrity":"sha512-D5ohzsUOZJQ5VEH7xBLvVXTds/DAvv1ZH9cs7dCOx/NXUtMeUtYNxo/PsNbjaEIAqCBvH0n4927yCwMlJ0gPdg==","signatures":[{"sig":"MEQCHzzGaoR40qvhxNi4dLonJqbhBjXuJ7rdFxg5pAH2coACIQDyk5zfP9tdj68Y5VU4H7pmdCg0IJsczH+aDHSHrkfJ6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":529871},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"7a29578f323d568beb3677d98ed28082b8106823","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-D5ohzsUOZJQ5VEH7xBLvVXTds/DAvv1ZH9cs7dCOx/NXUtMeUtYNxo/PsNbjaEIAqCBvH0n4927yCwMlJ0gPdg==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","fast-xml-parser":"^5.9.3","@cyanheads/mcp-ts-core":"^0.10.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"26.0.0","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.4_1781933729728_0.8275647061686913","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.5","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.5","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"ccf1457d01869aba4afdea6d7e5221e27e23f002","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.5.tgz","fileCount":115,"integrity":"sha512-ESg6bF3AmMIqz+PlW0hONn/fXH2nH7ZDfbwXhPoYbLuZQ5jkIAyJE3Gc+U83E5myzXDY6L2qfwBKNJ2cdnrf7Q==","signatures":[{"sig":"MEQCIDkECOvEbiBiAOI1fi+YePBjWI1IegkU8OZLX/fjeQ2bAiAuwKRE4WqkXsd8H1AHOdgDDfsfHhUxlrn/w81QzBxiyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531892},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"ccf1457d01869aba4afdea6d7e5221e27e23f002","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-ESg6bF3AmMIqz+PlW0hONn/fXH2nH7ZDfbwXhPoYbLuZQ5jkIAyJE3Gc+U83E5myzXDY6L2qfwBKNJ2cdnrf7Q==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","fast-xml-parser":"^5.9.3","@cyanheads/mcp-ts-core":"^0.10.9"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.8.17","typescript":"^6.0.3","@types/node":"26.0.0","@biomejs/biome":"2.5.0"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.5_1781981938467_0.3513684830800794","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.6","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.6","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"058a14a6b151d44d8fd174455e16917373544d12","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.6.tgz","fileCount":116,"integrity":"sha512-hWeFqdc1n4mwhdzVNWx3ckpIiyL/SAh2YbEWY6KkeQnR3bf1UVTDMyJKfPN4/s5rpPKhVVP4z/kYm/iSR5lfKQ==","signatures":[{"sig":"MEUCIFPbideBiZMLOhTGuYJWrlB6QJGt6Q0l2A2OG544d9QrAiEAyd6/mBVUgWvS2qfJuJhmQy7ZbxdsWiTV2shefU9kPUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":573246},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"058a14a6b151d44d8fd174455e16917373544d12","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-hWeFqdc1n4mwhdzVNWx3ckpIiyL/SAh2YbEWY6KkeQnR3bf1UVTDMyJKfPN4/s5rpPKhVVP4z/kYm/iSR5lfKQ==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","fast-xml-parser":"^5.9.3","@cyanheads/mcp-ts-core":"^0.10.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.0","@biomejs/biome":"2.5.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.6_1783226326410_0.3219080322409018","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.7","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.7","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"3095968b88e2ea9862f532a6a71b798750065f52","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.7.tgz","fileCount":117,"integrity":"sha512-oJ7XBgVeUMg28YXQkO9m3um0EHtTPg6pzpXCBjib03bwiov1DuPzdZD+ce6kTGscCW8vsmxUDNs1alLJ6O90FQ==","signatures":[{"sig":"MEUCIQDit7u120u95eyXNa+tyrW9JyubqDUPFYiY4jGyl1IiSAIgawaZM/NMgYRg6ytbk6MB+fF+fdMMSMNRifOeCAPS3Og=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":583741},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"3095968b88e2ea9862f532a6a71b798750065f52","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-oJ7XBgVeUMg28YXQkO9m3um0EHtTPg6pzpXCBjib03bwiov1DuPzdZD+ce6kTGscCW8vsmxUDNs1alLJ6O90FQ==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^12.11.1","fast-xml-parser":"^5.9.3","@cyanheads/mcp-ts-core":"^0.10.10"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.11","devDependencies":{"ignore":"^7.0.5","vitest":"^4.1.9","depcheck":"^1.4.7","tsc-alias":"^1.9.0","typescript":"^6.0.3","@types/node":"26.1.0","@biomejs/biome":"2.5.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.7_1783229612323_0.17652303900611188","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.8","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.8","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"44883514fc1c92f5cdb7863877aaed08db82c744","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.8.tgz","fileCount":118,"integrity":"sha512-d7Bg4BjO262oGcNFShFuGgpu2dAKxO42LowRSbJGtDitINpt2Uqx40PBRPWk4s+KXvt041uDHo5T88zJ7oGPeg==","signatures":[{"sig":"MEYCIQCfShEhKxs5VMoPWN+tRPnrLHimUQkjNLvzaanX/RvlJQIhAOzkGiREPvUjPt4iUYBMBHtbulu0F+IGk3r+vn0b5BQm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":609663},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"44883514fc1c92f5cdb7863877aaed08db82c744","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-d7Bg4BjO262oGcNFShFuGgpu2dAKxO42LowRSbJGtDitINpt2Uqx40PBRPWk4s+KXvt041uDHo5T88zJ7oGPeg==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.10.1","@cyanheads/mcp-ts-core":"^0.11.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"26.2.0","@biomejs/biome":"2.5.8","@vitest/coverage-istanbul":"4.1.10","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.8_1786925597575_0.03239072520090924","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.9","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.9","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"9d160c8ca7e697f19024712e622105c0b5c4231e","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.9.tgz","fileCount":119,"integrity":"sha512-E8i8oByml+h47UiXoDnA40SOKB2S/GTNOobS2aDIYPgYRDrqWWmIyb5i/bawQ11PSEqVDEXWcDGgVp8oNa8f9g==","signatures":[{"sig":"MEUCIQCnq6ebF3EbZ27VVL9pxDrHgr3TIMddgPvrCZ98vDYa9AIgXKRhFTuQmm2J4P/zD33kargFDM6IXja45LEVTeQ5/FE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":640396},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"9d160c8ca7e697f19024712e622105c0b5c4231e","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-E8i8oByml+h47UiXoDnA40SOKB2S/GTNOobS2aDIYPgYRDrqWWmIyb5i/bawQ11PSEqVDEXWcDGgVp8oNa8f9g==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.10.1","@cyanheads/mcp-ts-core":"^0.11.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"26.2.0","@biomejs/biome":"2.5.8","@vitest/coverage-istanbul":"4.1.10","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.9_1786929146590_0.8751545964150633","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.10","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.10","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"07e2d824bae3c1c959018b8f9ed7577b7eb5d192","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.10.tgz","fileCount":128,"integrity":"sha512-wYvq9XXZbQOAIPAHGP33+0ro3A57jnFNufa77pUKXQp+ixYk/d37DdoG3bSQoIVz54U8Cy5OSjN7+NWpisx37g==","signatures":[{"sig":"MEUCIBS2TSf+GOZZfArSbEz+2N+lKqzDIzHQ0JLIx7HAsLovAiEAsbMBwZJFHexK4F6oWdI8ApxrPJvdPv2DMZjcbDHq/vM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":687989},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"07e2d824bae3c1c959018b8f9ed7577b7eb5d192","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-wYvq9XXZbQOAIPAHGP33+0ro3A57jnFNufa77pUKXQp+ixYk/d37DdoG3bSQoIVz54U8Cy5OSjN7+NWpisx37g==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.10.1","@cyanheads/mcp-ts-core":"^0.11.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.3.14","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.10","depcheck":"^1.4.7","tsc-alias":"^1.9.1","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"26.2.0","@biomejs/biome":"2.5.8","@vitest/coverage-istanbul":"4.1.10","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.10_1786933613373_0.6744552395958707","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.11","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.11","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"3224ab4825b2d3e435af4c3569dfb88145b38695","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.11.tgz","fileCount":129,"integrity":"sha512-fqrOJKjfZmvgzHxcPTQeevjCV1JcJWAXeOHcjXpPtToK+ZCFGzZhOmX3kb08Klo8dcmIL/p+uJv/BzLkNbM1iQ==","signatures":[{"sig":"MEQCIBK1oWmdFxUjHWuR+LCTqVFUTkgeiBsRFmMBQxCkBPcEAiB9caB41+O3HGZl9XYqfGpMUowVG0BLmGBXnxAIRLO1Ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":699696},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"3224ab4825b2d3e435af4c3569dfb88145b38695","engines":{"bun":">=1.3.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-fqrOJKjfZmvgzHxcPTQeevjCV1JcJWAXeOHcjXpPtToK+ZCFGzZhOmX3kb08Klo8dcmIL/p+uJv/BzLkNbM1iQ==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.4.3","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.11.0","@cyanheads/mcp-ts-core":"^0.12.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.6","vitest":"^4.1.11","depcheck":"^1.4.7","tsc-alias":"^1.9.2","fast-check":"^4.9.0","typescript":"^7.0.2","@types/node":"26.2.0","@biomejs/biome":"2.5.10","@vitest/coverage-istanbul":"4.1.11","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.11_1787646174529_0.9570958862099361","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.1.12","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.1.12","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"cf8efad7f9dc7cdecc410c537811b0fedff1b7ce","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.1.12.tgz","fileCount":130,"integrity":"sha512-iynFBQWrSMVBi+DpTWxkyBmc8DOqNja5ICkj72UJuPHcQ4crXoaJ7bjPG+HL1qAdyrDfCib7E5zKp+6/0r3kZw==","signatures":[{"sig":"MEUCIQDPiVMepTZdsAY29kkkP9eUI9eZmn8i+TQdgLqwzInJRQIgf9JwdrvVsuufvTEhYP9q+FiU0rjgvorJ/IqQAq2lExY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCYVn92+62hg7Davhh2P3W6T3wlLtg1S+MTEzw09OmeLgIgTIWyemLtMp7j9pBjFRaXGecEjwHrGg0TxICm68VcrPg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":710980},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"cf8efad7f9dc7cdecc410c537811b0fedff1b7ce","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-iynFBQWrSMVBi+DpTWxkyBmc8DOqNja5ICkj72UJuPHcQ4crXoaJ7bjPG+HL1qAdyrDfCib7E5zKp+6/0r3kZw==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.11.1","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^4.1.11","depcheck":"^1.4.7","tsc-alias":"^1.9.5","fast-check":"^4.10.1","typescript":"^7.0.2","@types/node":"26.6.1","@biomejs/biome":"2.5.14","@vitest/coverage-istanbul":"4.1.11","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.1.12_1789934974563_0.19427070549264713","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.2.0","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.2.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"ff2aaaa32ea9438d6991d1744d07714cc56e87fa","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.2.0.tgz","fileCount":131,"integrity":"sha512-6/XX2x5S86gXSxEDTI0r9KqkK47n7ebRRAJKhuuYZManpJg2DTk4LmZpCr+0FWTAb3k1ZqaSV/tURJ4QgxzfCA==","signatures":[{"sig":"MEUCIQCmAx3mlnhjPAVvlhGtIr2qA2yV48aF+eq7M2N9Lw6m4wIgHbYjVY4WPWI27o2kecTtmMcjKATvVazUsXVtz9R+iD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAQL08ZIySOoIsLo365+F2wSjEQiP7GMdL8ZTIL6cV5SAiEAjLKNY2AVXXmuHIjyXcF0/fAJw5GK++pTfIeHJe7CW4U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":776087},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"ff2aaaa32ea9438d6991d1744d07714cc56e87fa","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-6/XX2x5S86gXSxEDTI0r9KqkK47n7ebRRAJKhuuYZManpJg2DTk4LmZpCr+0FWTAb3k1ZqaSV/tURJ4QgxzfCA==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.11.1","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","fast-check":"^4.10.2","typescript":"^7.0.2","@types/node":"26.6.2","@biomejs/biome":"2.5.14","@vitest/coverage-istanbul":"5.0.1","@socketsecurity/bun-security-scanner":"^1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.2.0_1790277212787_0.36461925352626046","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.3.0","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.3.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"c1a0e97052b50733cf17906aa17de96933a5a739","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.3.0.tgz","fileCount":148,"integrity":"sha512-ZEhDZ2+BVvQC8rXC+A3J7DUxZ/EYkJwnLKNsGjDblW/e1hnz8BPxD8+jBwMxi8B2UEW19GwDms3Rb7ZsCK03NA==","signatures":[{"sig":"MEUCIF6U6FnyS6YqHQbg7WRz9dypIEixOfkw7/sMlosLyd+HAiEA64hMvU0TknX0wKcWvE20CvQ/gs584iVZtchszQBDMlo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBjyF25NzvZWnX2zLM3tmxThxpPZD52XvdX+1j9LV+UfAiAsSP2n/oP/dhgodXJDwRpeyb7oznODUhA73TJXEy5AFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911432},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"c1a0e97052b50733cf17906aa17de96933a5a739","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-ZEhDZ2+BVvQC8rXC+A3J7DUxZ/EYkJwnLKNsGjDblW/e1hnz8BPxD8+jBwMxi8B2UEW19GwDms3Rb7ZsCK03NA==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.11.1","@cyanheads/mcp-ts-core":"^0.13.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.0","devDependencies":{"ignore":"^7.0.9","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","fast-check":"^4.10.2","typescript":"^7.0.2","@types/node":"26.6.2","@biomejs/biome":"2.5.14","@vitest/coverage-istanbul":"5.0.1","@socketsecurity/bun-security-scanner":"^1.1.3"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.3.0_1790334620723_0.4449272359078347","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@cyanheads/sanctions-screening-mcp-server","version":"0.4.0","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","_id":"@cyanheads/sanctions-screening-mcp-server@0.4.0","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"bin":{"sanctions-screening-mcp-server":"dist/index.js"},"dist":{"shasum":"313d205a712a165b6bf4c31c11160c95e3cfcddb","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.4.0.tgz","fileCount":153,"integrity":"sha512-n+6C4a5PiaTck2QNigULok313RiE3Y/qQOY9oZgmPYUcAf3YpS9AjH1nzEtIo2jw7Sks3NV7xCOX0y0O9K3SCw==","signatures":[{"sig":"MEYCIQCUFm/hcQic71RkZm39t5hMAuh4gfQHw4dSJswVzTQKsQIhAM9ewi3qpZJ/nJ9m2HQwtUXklihtaoM5xkTHbSMDTTA2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDPIzm0Wlc951ThOWNS8/iaOnP2ghFlUl1+knlFJJruZAIgGHpHbGmVNtWSVPPCpNvwu/goiTx6fPxvRmQOXmB5YA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1020324},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","shasum":"313d205a712a165b6bf4c31c11160c95e3cfcddb","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"_integrity":"sha512-n+6C4a5PiaTck2QNigULok313RiE3Y/qQOY9oZgmPYUcAf3YpS9AjH1nzEtIo2jw7Sks3NV7xCOX0y0O9K3SCw==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.11.1","@cyanheads/mcp-ts-core":"^0.13.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.2","devDependencies":{"ignore":"^7.0.10","vitest":"^5.0.1","depcheck":"^1.4.7","tsc-alias":"^1.9.5","fast-check":"^4.10.2","typescript":"^7.0.2","@types/node":"26.6.2","@biomejs/biome":"2.5.14","@vitest/coverage-istanbul":"5.0.1","@socketsecurity/bun-security-scanner":"^1.1.3"},"_npmOperationalInternal":{"tmp":"tmp/sanctions-screening-mcp-server_0.4.0_1790355511931_0.09571411698106358","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"_id":"@cyanheads/sanctions-screening-mcp-server@0.5.0","bin":{"sanctions-screening-mcp-server":"dist/index.js"},"bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"dist":{"shasum":"e2153a106b4351d09385ba016b83b4e1799be659","tarball":"https://registry.npmjs.org/@cyanheads/sanctions-screening-mcp-server/-/sanctions-screening-mcp-server-0.5.0.tgz","fileCount":170,"integrity":"sha512-j7G+RMAa8GNm9daPHtlIKfW7T33voi6Sfd/bsEVVXcSZ5P6NsK8hc8bZ996+ohPs7ZwAbvm9Eh5/RTKgBq9rBQ==","signatures":[{"sig":"MEUCIQCVMgPrORQUWaMfPg6iz8/Nd3koQ6B9JlcQuHe2SrZY5wIgKVvYuUon69MJy9Fbh2mvHRp6kTDO9NDToeLl8pAfKBU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAkcgav3VGiMloEHXkWIScguN3kWl47gxAcf65p2+JRbAiB6XlsGxSefqvHOX1eGV1VQDJwe0jrUpUAlQB+Qi6D2tA=="}],"unpackedSize":1233039},"main":"dist/index.js","name":"@cyanheads/sanctions-screening-mcp-server","type":"module","types":"dist/index.d.ts","author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","shasum":"e2153a106b4351d09385ba016b83b4e1799be659","engines":{"bun":">=1.4.0","node":">=24.0.0"},"funding":[{"url":"https://github.com/sponsors/cyanheads","type":"github"},{"url":"https://www.buymeacoffee.com/cyanheads","type":"buy_me_a_coffee"}],"license":"Apache-2.0","mcpName":"io.github.cyanheads/sanctions-screening-mcp-server","scripts":{"test":"vitest run","tree":"bun run scripts/tree.ts","build":"bun run scripts/build.ts","clean":"bun run scripts/clean.ts","start":"node dist/index.js","bundle":"bun run build && npx -y @anthropic-ai/mcpb pack . dist/sanctions-screening-mcp-server.mcpb && bun run scripts/clean-mcpb.ts dist/sanctions-screening-mcp-server.mcpb","format":"biome check --write .","rebuild":"bun run scripts/clean.ts && bun run scripts/build.ts","devcheck":"bun run scripts/devcheck.ts","lint:mcp":"bun run scripts/lint-mcp.ts","audit:fix":"bun audit fix","start:http":"MCP_TRANSPORT_TYPE=http node dist/index.js","list-skills":"bun run scripts/list-skills.ts","mirror:init":"bun run scripts/mirror-init.ts","mirror:seed":"bun run scripts/mirror-seed.ts","publish-mcp":"mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish","start:stdio":"MCP_TRANSPORT_TYPE=stdio node dist/index.js","audit:refresh":"rm -f bun.lock && bun install && bun audit","format:unsafe":"biome check --write --unsafe .","mirror:verify":"bun run scripts/mirror-verify.ts","test:coverage":"vitest run --coverage","lint:packaging":"bun run scripts/lint-packaging.ts","mirror:refresh":"bun run scripts/mirror-refresh.ts","release:github":"bun run scripts/release-github.ts","changelog:build":"bun run scripts/build-changelog.ts","changelog:check":"bun run scripts/build-changelog.ts --check"},"version":"0.5.0","_npmUser":{"name":"cyanheads","email":"casey@caseyjhand.com"},"homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"_integrity":"sha512-j7G+RMAa8GNm9daPHtlIKfW7T33voi6Sfd/bsEVVXcSZ5P6NsK8hc8bZ996+ohPs7ZwAbvm9Eh5/RTKgBq9rBQ==","repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"_npmVersion":"10.8.3","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","directories":{},"maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"_nodeVersion":"26.3.0","dependencies":{"zod":"^4.6.5","node-cron":"^4.6.0","pino-pretty":"^13.1.3","better-sqlite3":"^13.0.3","fast-xml-parser":"^5.11.2","@cyanheads/mcp-ts-core":"^0.13.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"bun@1.4.2","devDependencies":{"ignore":"^7.0.11","vitest":"^5.0.3","depcheck":"^1.4.7","tsc-alias":"^1.9.7","fast-check":"^4.10.2","typescript":"^7.0.2","@types/node":"26.6.3","@biomejs/biome":"2.5.15","@vitest/coverage-istanbul":"5.0.3","@socketsecurity/bun-security-scanner":"^1.1.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sanctions-screening-mcp-server_0.5.0_1791080112633_0.05001293621994951"}}},"time":{"created":"2026-06-13T18:15:30.831Z","modified":"2026-10-04T02:15:12.927Z","0.1.0":"2026-06-13T18:15:31.218Z","0.1.1":"2026-06-14T10:58:34.622Z","0.1.2":"2026-06-15T17:47:05.148Z","0.1.3":"2026-06-20T03:06:56.174Z","0.1.4":"2026-06-20T05:35:29.889Z","0.1.5":"2026-06-20T18:58:58.598Z","0.1.6":"2026-07-05T04:38:46.541Z","0.1.7":"2026-07-05T05:33:32.488Z","0.1.8":"2026-08-17T00:13:17.701Z","0.1.9":"2026-08-17T01:12:26.750Z","0.1.10":"2026-08-17T02:26:53.523Z","0.1.11":"2026-08-25T08:22:54.675Z","0.1.12":"2026-09-20T20:09:34.682Z","0.2.0":"2026-09-24T19:13:32.895Z","0.3.0":"2026-09-25T11:10:20.848Z","0.4.0":"2026-09-25T16:58:32.049Z","0.5.0":"2026-10-04T02:15:12.720Z"},"bugs":{"url":"https://github.com/cyanheads/sanctions-screening-mcp-server/issues"},"author":"Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)","license":"Apache-2.0","homepage":"https://github.com/cyanheads/sanctions-screening-mcp-server#readme","keywords":["sanctions","sanctions-screening","ofac","ofac-sdn","aml","kyc","compliance","watchlist","gleif","lei","beneficial-ownership","due-diligence","mcp","mcp-server","model-context-protocol","typescript","bun","stdio","streamable-http","ai-agent"],"repository":{"url":"git+https://github.com/cyanheads/sanctions-screening-mcp-server.git","type":"git"},"description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","maintainers":[{"name":"cyanheads","email":"casey@caseyjhand.com"}],"readme":"<div align=\"center\">\n  <h1>@cyanheads/sanctions-screening-mcp-server</h1>\n  <p><b>Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.</b>\n  <div>7 Tools • 3 Resources • 1 Prompt</div>\n  </p>\n</div>\n\n<div align=\"center\">\n\n[![Version](https://img.shields.io/badge/Version-0.5.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.2.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.2-blueviolet.svg?style=flat-square)](https://bun.sh/)\n\n</div>\n\n<div align=\"center\">\n\n[![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/sanctions-screening-mcp-server/releases/latest/download/sanctions-screening-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=sanctions-screening-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvc2FuY3Rpb25zLXNjcmVlbmluZy1tY3Atc2VydmVyIl19) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22sanctions-screening-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fsanctions-screening-mcp-server%22%5D%7D)\n\n[![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)\n\n</div>\n\n<div align=\"center\">\n\n**Public Hosted Server:** [https://sanctions-screening.caseyjhand.com/mcp](https://sanctions-screening.caseyjhand.com/mcp)\n\n</div>\n\n---\n\n## Overview\n\nSanctions screening and legal-entity resolution over the consolidated OFAC, EU, UK, and UN lists plus the GLEIF LEI registry, matched offline against a local mirror. Screen a name for potential watchlist hits, resolve a company to its LEI, and trace its ownership chain. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.\n\n> [!IMPORTANT]\n> **A screening aid, not a compliance determination.** Every result is a potential match with a transparent score and source provenance, never a verdict. A hit is a candidate to verify against the official source; an empty result is never a clearance. Sanctions compliance needs human review and a qualified determination. This server feeds that process and does not perform it.\n\n### Tools\n\n| Tool | Description |\n|:---|:---|\n| `sanctions_screen_name` | Screen a person, company, vessel, or aircraft name against every loaded watchlist at once |\n| `sanctions_screen_identifier` | Look up an IMO number, SWIFT/BIC code, wallet address, or passport or national ID number exactly across every loaded watchlist |\n| `sanctions_get_designation` | Fetch the full record for one designation by source list and entry ID or published reference number |\n| `sanctions_resolve_entity` | Resolve a company name, optionally within a jurisdiction, to ranked GLEIF LEI candidates |\n| `sanctions_get_entity` | Fetch the GLEIF Level 1 record for an LEI, with a sanctions cross-reference of its names, LEI, and registration number |\n| `sanctions_trace_ownership` | Trace an LEI's parents and children, optionally cross-referencing every entity in the graph |\n| `sanctions_list_sources` | List the loaded sources with record counts, licenses, and mirror freshness |\n\n### Resources\n\n| Resource | Description |\n|:---|:---|\n| `sanctions://designation/{source}/{entryId}` | One sanctions designation by source and entry ID or published reference number |\n| `sanctions://entity/{lei}` | One GLEIF Level 1 entity by LEI |\n| `sanctions://sources` | Loaded sources with counts, plus each mirror's readiness and as-of timestamp |\n\nAll resource data is also reachable through the tools, for clients that don't surface resources.\n\n### Prompts\n\n| Prompt | Description |\n|:---|:---|\n| `sanctions_vet_counterparty` | Run a counterparty due-diligence pass: screen, resolve, trace ownership, summarize |\n\n## Capability reference\n\n### `sanctions_screen_name` <sub>tool</sub>\n\n- `name` in any script (at most 64 words and 1,024 characters) plus optional `sources`, `entityType`, and `minScore` filters; `matchMode` is `strict` (default) or `fuzzy`. Strict runs a fuzzy pass over each selected list it finds nothing on: a full pass when it finds nothing on any list, otherwise one that adds, after the strict hits, only candidates covering every word of the name other than legal forms, articles and other function words, and the jurisdiction codes `uk`, `usa`, `uae`, and `rf`. `fuzzySources` names the lists a fuzzy pass searched; up to 100 hits per page (`limit`, default 25) with `offset`\n- Hits carry `source`, `sourceEntryId`, the list's published `referenceNumber` where it has one, `matchedName` with its `matchedNameType`, and `matchType` (`exact` / `strong` / `approximate`); approximate hits add the raw Jaro-Winkler `score` (0–1) and `queryTokenCoverage`\n- `sources` names every selected list a hit's party is on. OFAC publishes a party on the SDN List and a non-SDN list under one entry ID in both of its files; with both OFAC lists selected that party is one hit, counted once, naming both even when the screen matched one record. Its other fields, the designation date included, come from the `source` record: `ofac_sdn`, unless the Consolidated record matched alone or better\n- `totalAvailable`, `hasMore`, and `nextOffset` page the rest, and paging reaches every match counted; `totalAvailableBasis` marks the count `exact` (strict matched on every selected list) or a `lower_bound` (a fuzzy pass ran), and a `notice` asks for a more distinctive word when a list's fuzzy candidate pool reached its budget\n\n---\n\n### `sanctions_screen_identifier` <sub>tool</sub>\n\n- `value` (an identifier as you hold it) plus optional `type` (`any` default, `imo`, `swift_bic`, `digital_currency_address`, `passport`, `national_id`) and `sources`\n- Exact match after normalization, never fuzzy and never scored: spacing, letter case, and `-` `.` `/` are ignored; an IMO number matches with or without its `IMO` prefix; a SWIFT/BIC compares on its first eight characters, so a branch BIC11 matches its institution's BIC8; a wallet address folds case only for hex (`0x…`), bech32 (`bc1…`, `ltc1…`, `bnb1…`), and cashaddr encodings, while base58 addresses compare exactly\n- `type` matches on each list's published label: `imo` is OFAC `Vessel Registration Identification`, UK `IMO Number`, and EU `IMO (vessel identification)`; `swift_bic` is `SWIFT/BIC` and `SWIFT BIC`; `digital_currency_address` is OFAC `Digital Currency Address - <code>`; `passport` and `national_id` cover the lists' passport and national-ID labels. `any` also reaches every label with no category (MMSI, call signs, tail numbers, tax and registration numbers, email, websites)\n- One hit per designation, ordered by list then entry ID, each with the `matchedIdentifiers` that matched as published and its `sources`, an OFAC party on both OFAC lists being one hit naming both; not paged. An identifier a list prints only in free-text remarks, or bundled with other numbers in one field, does not match\n\n---\n\n### `sanctions_get_designation` <sub>tool</sub>\n\n- `source` (`ofac_sdn`, `ofac_consolidated`, `eu`, `uk`, `un`) and `entryId`: the `sourceEntryId` from a screening hit, or the reference number the list publishes (UN `QDe.004`, EU `EU.27.28`, UK OFSI Group ID `14196`). Matched trimmed and case-insensitive, entry ID first; a reference number two designations share fails as `reference_ambiguous`, naming both\n- Returns `referenceNumber` beside `sourceEntryId` where the list publishes one; OFAC publishes none, its entry ID being its published number\n- All published aliases, identifiers, addresses, dates and places of birth, nationalities, descriptive features, program, legal basis, and designation date; a field the source omitted is absent, never filled in\n- Identifiers cover identity documents plus the SWIFT/BIC codes, digital-currency addresses, vessel call signs, aircraft tail and serial numbers, phone numbers, email addresses, and websites a list publishes, each typed with the list's own label and its value verbatim\n- Dates of birth are ISO 8601 at the precision the source published (`1952-10-07`, `1946-08`, `1938`, or an interval such as `1955/1957`), with `circa: true` where the source marks one approximate; `designationDate` is the source's own designation date as `YYYY-MM-DD`\n- An OFAC party is dated from its entries on the lists its file publishes: the SDN List for `ofac_sdn`, the non-SDN lists for `ofac_consolidated`, earliest first. A party on both files can carry a different date on each\n- `legalBasis` is the instrument the list cites, verbatim: OFAC's legal-basis references (`Executive Order 14024 (Russia)`), the EU regulation title (`2024/1488 (OJ L27052024)`), or the UK regime's regulations (`The Russia (Sanctions) (EU Exit) Regulations 2019`), several joined with `; `. The UN list publishes none\n- `features` carries what a list publishes to describe the party rather than identify it, each typed with the list's own label, in published order: OFAC's vessel flag, type, owner, and tonnage, aircraft model, operator, and manufacture date, title, gender, and sanctions notes (`Secondary sanctions risk:` `See Section 11 of Executive Order 14024.`), and the UK list's ship details (`CurrentBelievedFlagOfShip`, `TypeOfShip`, `YearBuilt`, …). A date is ISO 8601 at published precision, with `circa: true` where OFAC marks it approximate. The EU and UN lists contribute none, and no screening tool matches a feature value\n\n---\n\n### `sanctions_resolve_entity` <sub>tool</sub>\n\n- `name` in any script (same bound as `sanctions_screen_name`) plus optional `jurisdiction`, `status`, and `minScore`; `matchMode` is `strict` (default), which falls back to a fuzzy pass only when strict finds nothing, or `fuzzy`; up to 50 candidates per page (`limit`, default 10) with `offset`\n- `jurisdiction` is a country code, which matches the country and every subdivision under it (`US` matches `US-DE` and `US-CA`), or an ISO 3166-2 subdivision code (`US-DE`), matched exactly; case-insensitive\n- `status`: `issued` (default) matches `ISSUED`, `lapsed` matches exactly `LAPSED`, and `any` applies no filter — the only way to reach `RETIRED`, `DUPLICATE`, `ANNULLED`, `PENDING_TRANSFER`, `PENDING_ARCHIVAL`, or `MERGED` records, each candidate's `status` naming its state\n- Searches every name GLEIF publishes: the legal name, previous legal names, trading names, alternative-language legal names, and ASCII transliterations of a legal name in another script\n- Candidates carry `lei`, `legalName`, the `matchedName` and its `matchedNameType` (`LEGAL_NAME`, `PREVIOUS_LEGAL_NAME`, `TRADING_OR_OPERATING_NAME`, …, or `UNKNOWN` for a name stored without a type), and `matchType`, with `score` and `queryTokenCoverage` on approximate matches; one candidate per LEI, paged by the same `totalAvailable` / `totalAvailableBasis` / `hasMore` / `nextOffset` fields\n\n---\n\n### `sanctions_get_entity` <sub>tool</sub>\n\n- One 20-character `lei`; returns the legal name, `otherNames`, legal and headquarters addresses, `status`, `jurisdiction`, registration authority, and `lastUpdate`\n- `alternateNames` lists every other and transliterated name with its GLEIF type; a name the mirror stored before types were kept reads as `UNKNOWN`\n- `sanctionsHits` cross-references the entity against every watchlist: the legal name and every `alternateNames` entry screened strict (exact, then all tokens present, never fuzzy), and the LEI and `registrationAuthorityEntityId` looked up exactly as non-document identifiers (never passports, national IDs, IMO numbers, SWIFT/BIC codes, or wallets). The registration number matches only an identifier published for the country of the entity's `jurisdiction`, and is skipped when the entity publishes no jurisdiction or a not-available placeholder (`N/A`, `n.a.`) in place of a number\n- One hit per designation, an OFAC party on both OFAC lists being one hit whose `sources` names both, exact name and identifier matches first, then strong name matches, capped at 25 after the merge. `matchedOn` lists every input that produced a hit (`legal_name`, `other_name` with its GLEIF type, `lei`, `registration_number`); an identifier match adds `matchedIdentifiers` as the list publishes them, and a hit no name produced carries no `matchedName` or `matchType`. No hit carries a `score`: only an approximate (fuzzy) match has one, and every screen here is strict\n- `screeningStatus` (`screened` / `not_ready`) says whether the cross-reference ran; `sanctionsScreen` counts distinct designations across every input (`totalAvailable`), flags a capped list (`hasMore`), and lists in `screenedInputs` what was screened beyond the always-screened legal name and LEI\n\n---\n\n### `sanctions_trace_ownership` <sub>tool</sub>\n\n- Root `lei`, `direction` (`parents` / `children` / `both`, default `both`), and `depth` 1–5 (default 3); `screenNodes: true` cross-references every node as `sanctions_get_entity` does (its names strict, its LEI and country-matched registration number as identifiers), up to 10 merged hits per node; a node with no Level 1 record has no name to screen and is looked up by its LEI alone. `both` is a parents walk plus a children walk from the root, each to `depth`; it never reaches siblings or co-parents\n- `nodes` (with `role` and `depth`) and `edges` (with `relationshipType`, each joining two returned nodes); `role` is the side that reached the node. `depth` counts every relationship type except `IS_ULTIMATELY_CONSOLIDATED_BY`, a shortcut to the top of the group: a node only that edge reaches within `depth` is an unwalked leaf flagged `reachedVia: \"ultimate\"`, its depth that one hop. `complete` is false when the graph is `truncated` (relationships past the depth limit, or links of a flagged leaf, that it does not show; an ultimate-parent edge counts only when it leads to an entity the graph does not return) or `missingEntityLeis` lists nodes with no Level 1 record. It covers the loaded relationships only, and most entities publish no parent relationship.\n- Each node whose parents the walk read carries `parentStatus.direct` / `.ultimate`: `relationship`, `exception` (a GLEIF reporting exception, with every reason, such as `NATURAL_PERSONS`), `none`, or `unknown`. `unknown` means exception data is not loaded, which `reportingExceptionsLoaded: false` states.\n- `screeningStatus` (`screened` / `not_requested` / `not_ready`), `screenedNodeCount`, and `flaggedNodeCount`; each screened node carries its own `sanctionsScreen` (`hasMore`, `screenedInputs`) and hits with `matchedOn` and `matchedIdentifiers`, in the `sanctions_get_entity` shape\n\n---\n\n### `sanctions_list_sources` <sub>tool</sub>\n\n- No input; one row per sanctions list plus `gleif`, each with `recordCount`, `url` (the configured source URL), and `license`; the `gleif` row's `recordCount` is Level 1 entities and its `relationshipCount` Level 2 ownership relationships\n- `sanctionsReady` / `sanctionsAsOf` and `leiReady` / `leiAsOf` report whether each mirror has synced and when; `sanctionsAsOf` is the last sync in which every sanctions list refreshed. Not gated on readiness, so it reports an empty mirror instead of failing\n- `reportingExceptionsLoaded`, and on the `gleif` row a `reportingExceptionCount` once the reporting exceptions are loaded\n- `alternateNamesIndexed`: whether GLEIF's trading, previous, alternative-language, and transliterated names are indexed; until `mirror:init` builds the index, `sanctions_resolve_entity` searches legal names only\n\n---\n\n### `sanctions://designation/{source}/{entryId}` <sub>resource</sub>\n\n- `source` is one of the five list codes, `entryId` the list's own ID or its published reference number, resolved as `sanctions_get_designation` resolves it and decoded once when percent-encoded; returns the `sanctions_get_designation` payload as `application/json`\n- Cached for an hour, scoped `private`\n\n---\n\n### `sanctions://entity/{lei}` <sub>resource</sub>\n\n- The `sanctions_get_entity` Level 1 payload for one `lei`, without the sanctions cross-reference, which is tool-only\n- Cached for an hour, scoped `private`\n\n---\n\n### `sanctions://sources` <sub>resource</sub>\n\n- The `sanctions_list_sources` payload, unchanged\n- `ttlMs: 0`: never cached, because readiness and the as-of timestamps are the payload\n\n---\n\n### `sanctions_vet_counterparty` <sub>prompt</sub>\n\n- Arguments: `name` required; `jurisdiction` optional (a country code, which includes its subdivisions, or an ISO 3166-2 subdivision code)\n- Returns one user message that screens the name (and any identifier the caller holds, with `sanctions_screen_identifier`), resolves it to an LEI, traces ownership with `screenNodes: true`, pulls each hit's designation record, and asks for a summary that treats every match as a candidate to verify and says, from `matchedOn`, which of the entity's names or identifiers produced it. It names GLEIF parents as accounting-consolidation parents, not beneficial owners, and reports a reporting exception's reasons rather than reading it as \"no parent\"\n\n## Features\n\nBuilt on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): stdio and Streamable HTTP transports, pluggable auth (`none` / `jwt` / `oauth`), swappable storage (`in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`), structured logging with optional OpenTelemetry tracing.\n\nSanctions-screening-specific:\n\n- One screen covers OFAC SDN, OFAC Consolidated, EU, UK (UKSL), and UN; the matching list shows up as per-hit provenance\n- Offline and keyless, with no per-request rate limit: all five sources are normalized into local SQLite + FTS5 mirrors via the framework `MirrorService`\n- Per-alias name index, so a query matches any of an entity's names in one FTS scan, and a per-identifier index for exact lookup by IMO number, SWIFT/BIC, wallet address, or document number\n- Strict-then-fuzzy matching: exact-normalized, then all tokens present (FTS5), then Jaro-Winkler + Double-Metaphone over a 2,000-candidate pool per list, so adding a list never pushes another list's candidates out, with every admitted candidate reachable by paging\n- GLEIF Level 1 (who is who) and Level 2 (who owns whom) for entity resolution and ownership tracing\n\nAgent-friendly output:\n\n- Real signal with provenance: approximate hits carry the raw Jaro-Winkler `score` and a literal `queryTokenCoverage` count, never a blended confidence; every hit names its list, program, designation date, and the name that matched, typed `primary` / `aka` / `fka` / `low-quality-aka`\n- Decision-support `caveat` in the output of `sanctions_screen_name`, `sanctions_screen_identifier`, `sanctions_get_designation`, `sanctions_get_entity`, and `sanctions_trace_ownership`\n- Disclosed gaps: `totalAvailableBasis`, `screeningStatus`, `complete` / `truncated` / `missingEntityLeis`, and each node's `parentStatus` say what a response did not cover\n- Typed errors: every tool and resource except the sources listing fails as `mirror_not_ready` (retryable) until its mirror is loaded; unknown IDs fail as `designation_not_found` or `lei_not_found`, an LEI the mirror lacks whose ISO 17442 check digits fail as `invalid_lei_checksum` (a mistyped character), and a reference number two designations share as `reference_ambiguous`; a name with no letter or digit fails as `name_not_searchable`, one past the length bound as `name_too_long`, and an identifier with nothing left once spacing and separators are removed as `identifier_not_searchable`\n\n## Getting started\n\n### Public Hosted Instance\n\nA public instance is available at `https://sanctions-screening.caseyjhand.com/mcp` — no installation required. Point any MCP client at it via Streamable HTTP:\n\n```json\n{\n  \"mcpServers\": {\n    \"sanctions-screening-mcp-server\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://sanctions-screening.caseyjhand.com/mcp\"\n    }\n  }\n}\n```\n\n### Self-Hosted / Local\n\nAdd the following to your MCP client configuration file. The mirror is not bundled, and the npm package cannot build it: run `bun run mirror:init` from a clone ([Installation](#installation)) or inside the [Docker](#docker) image, then point `SANCTIONS_MIRROR_PATH` at the result (see [Mirror lifecycle](#mirror-lifecycle)).\n\n```json\n{\n  \"mcpServers\": {\n    \"sanctions-screening-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"bunx\",\n      \"args\": [\"@cyanheads/sanctions-screening-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nOr with npx (no Bun required):\n\n```json\n{\n  \"mcpServers\": {\n    \"sanctions-screening-mcp-server\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cyanheads/sanctions-screening-mcp-server@latest\"],\n      \"env\": {\n        \"MCP_TRANSPORT_TYPE\": \"stdio\",\n        \"MCP_LOG_LEVEL\": \"info\"\n      }\n    }\n  }\n}\n```\n\nFor Streamable HTTP, set the transport and start the server:\n\n```sh\nMCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http\n# Server listens at http://localhost:3010/mcp\n```\n\n### Prerequisites\n\n- [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).\n- Disk for the local mirror; GLEIF Level 1 takes most of it. No source needs an API key.\n\n### Installation\n\n1. **Clone the repository:**\n\n```sh\ngit clone https://github.com/cyanheads/sanctions-screening-mcp-server.git\n```\n\n2. **Navigate into the directory:**\n\n```sh\ncd sanctions-screening-mcp-server\n```\n\n3. **Install dependencies:**\n\n```sh\nbun install\n```\n\n4. **Configure environment:**\n\n```sh\ncp .env.example .env\n# edit .env if you need to override defaults (all optional)\n```\n\n5. **Populate the mirror:**\n\n```sh\nbun run mirror:init\n```\n\n## Configuration\n\nEvery source is keyless, so nothing here is required.\n\n| Variable | Description | Default |\n|:---|:---|:---|\n| `SANCTIONS_MIRROR_PATH` | Filesystem path for the SQLite mirror; use a persistent volume when hosted. | `./data/sanctions.db` |\n| `SANCTIONS_REFRESH_CRON` | Cron for the scheduled refresh (HTTP transport only). It refreshes the sanctions lists, then applies the GLEIF delta windows the checkpoint calls for, under one 4-hour bound. A GLEIF gap that needs `mirror:init` is logged, never loaded in-process. | `0 4 * * *` |\n| `SANCTIONS_REFRESH_SKIP_GLEIF` | Set to `1` to skip the GLEIF leg of the scheduled refresh and of `mirror:refresh`. | unset |\n| `SANCTIONS_FUZZY_MIN_SCORE` | Jaro-Winkler floor for fuzzy matches when `minScore` is omitted. | `0.85` |\n| `OFAC_SDN_URL` | OFAC SDN advanced-XML URL. | official OFAC URL |\n| `OFAC_CONSOLIDATED_URL` | OFAC Consolidated advanced-XML URL. | official OFAC URL |\n| `EU_FSF_URL` | EU consolidated XML URL. Its `token` query value is a static public path component, not a credential. | official EU URL |\n| `UK_SANCTIONS_URL` | UK Sanctions List (UKSL) XML URL. | official FCDO URL |\n| `UN_SC_URL` | UN Security Council consolidated XML URL. | official UN URL |\n| `GLEIF_GOLDEN_COPY_BASE_URL` | GLEIF golden-copy and delta download API. | `https://goldencopy.gleif.org` |\n| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |\n| `MCP_HTTP_PORT` | HTTP server port. | `3010` |\n| `MCP_SESSION_MODE` | HTTP session mode: `stateless`, `stateful`, or `auto`. `createApp()` declares `stateless`; setting the variable overrides it. | `stateless` |\n| `MCP_LOG_LEVEL` | Log level (`debug`, `info`, `warning`, `error`, etc.). | `info` |\n| `LOG_TOOL_FAILURE_PAYLOADS` | Log each failed tool call's arguments and result, redacted by key name and capped at `LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES` (default `16384`). A secret inside a free-form value is not redacted. | `false` |\n\nSee [`.env.example`](./.env.example) for the full list of optional overrides.\n\n## Running the server\n\n### Local development\n\n- **Build and run:**\n\n  ```sh\n  # One-time build\n  bun run rebuild\n\n  # Run the built server\n  bun run start:stdio\n  # or\n  bun run start:http\n  ```\n\n- **Run checks and tests:**\n\n  ```sh\n  bun run devcheck   # Lint, format, typecheck, security, changelog sync\n  bun run test       # Vitest test suite\n  bun run lint:mcp   # Validate MCP definitions against spec\n  ```\n\n### Mirror lifecycle\n\nThe mirror loads out-of-band, never on the request path.\n\n| Script | Purpose |\n|:---|:---|\n| `bun run mirror:init` | Full load: all five sanctions lists, the name and identifier indexes, then the GLEIF golden copies (Level 1 with its name index, Level 2, and reporting exceptions), recording each file's `ContentDate` as the GLEIF checkpoint, and last the GLEIF exact-name index that ranks exact names first when strict resolution reaches its bound. Safe to re-run; an interrupted run starts over. Set `SANCTIONS_INIT_SKIP_GLEIF=1` to load the sanctions lists only. |\n| `bun run mirror:refresh` | Re-harvest the sanctions lists, removing designations a list's complete document no longer publishes (at most half of a list per run). Then bring GLEIF current from its checkpoint: per dataset, the smallest delta window (`IntraDay` to `LastMonth`) that reaches back to the last file applied, deletions included. Reporting exceptions with no recorded load get their golden copy, and the script (never the cron) builds the GLEIF exact-name index if it is missing. The same refresh runs on `SANCTIONS_REFRESH_CRON` under HTTP (deltas only), bounded at 4 hours like this script. Set `SANCTIONS_REFRESH_SKIP_GLEIF=1` to skip GLEIF. |\n| `bun run mirror:verify` | Report mirror readiness, per-source record counts, the GLEIF Level 1 / Level 2 / reporting-exception counts, whether GLEIF alternate names are indexed, whether the exact-name index is built, and the GLEIF checkpoint. |\n| `bun run mirror:seed` | Load a small synthetic fixture for local smoke tests, with no downloads. |\n\nA list that fails to download or arrives truncated keeps its stored rows and removes nothing, while every other list still refreshes and the name and identifier indexes are rebuilt. GLEIF still refreshes after it, and the run then exits non-zero naming each failed list (`ofac_sdn`, `eu`, …). `sanctionsAsOf` advances only on a run in which every list refreshed, and a first `mirror:init` with a failed list leaves the mirror not ready.\n\nGLEIF advances all at once or not at all. `leiAsOf` and the checkpoint move only after every dataset's covering delta has applied, so an interrupted refresh leaves both where they were, and the next run re-applies from the same point. Two cases apply nothing to GLEIF, leave `leiAsOf` unchanged, and exit non-zero naming `mirror:init`: a checkpoint older than the one-month window, and a mirror with no checkpoint. Every mirror written by 0.3.0 or earlier has no checkpoint, so run `mirror:init` once after upgrading. Until then, traces read unpublished parents as `unknown`, and `sanctions_resolve_entity` searches legal names only, with a notice saying alternate names are not yet indexed; its fuzzy pass then blocks on the first three distinctive words of a longer name and says its candidate bound was reached. 0.3.0 stored other names without their types and no transliterated names at all, so the name index is built from the golden copy `mirror:init` loads, never from the stored rows. Every GLEIF write after that keeps the index current. A GLEIF write by an earlier release, after a rollback, leaves it behind, and resolution returns to legal names and the notice until the next `mirror:init`.\n\nA mirror written by an earlier release upgrades in place on first open: the `designation` table gains its `reference_number` column, the sanctions name index is rebuilt from the stored designations before the first screen (about 4 s on the 2026-10-03 lists), and the identifier index is built from the stored records before the first lookup, so `sanctions_screen_identifier` answers from a populated mirror without a re-init. What the earlier release did not read, or read wrongly — reference numbers, the OFAC and UK identifiers beyond identity documents, dates at published precision, OFAC designation dates taken from each file's own lists, `legalBasis`, and `features` — arrives with the next sanctions refresh, which rewrites every stored designation, so run `mirror:refresh` after upgrading rather than waiting for the cron. Until then `sanctions_get_designation` returns `features: []` for every stored record, and a placeholder an earlier release stored as an identifier (the UK's `N/A` passport) still matches in `sanctions_screen_identifier`. The same `mirror:refresh` builds the GLEIF exact-name index when its GLEIF leg runs; until then a strict resolution that reaches its 2,000-name bound runs without it and misses an exact name the scan did not reach. The identifier index is also rebuilt on open whenever a sync it did not follow has changed the stored records, such as one an earlier release ran after a rollback. The GLEIF mirror's first open drops the `lei_entity` status index, which no resolution query reads: about 2 s on the full corpus, freeing ~54 MiB that later writes reuse. The file shrinks only after a manual `VACUUM`.\n\nEvery leg of `mirror:init` and `mirror:refresh` streams in bounded batches, so peak memory tracks the batch size, not the source size. The sanctions XML totals about 172 MB. The GLEIF Level 1 golden copy is about 3.4M records (~890 MB compressed) and dominates disk use; its name index (~4M names) adds about 0.8 GB of that. The reporting exceptions add about 6.4M rows (~525 MiB on disk).\n\n### Docker\n\n```sh\ndocker build -t sanctions-screening-mcp-server .\ndocker run --rm -p 3010:3010 -v sanctions-data:/usr/src/app/data sanctions-screening-mcp-server\n```\n\nThe Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/sanctions-screening-mcp-server`. Mount a volume at `/usr/src/app/data` so the mirror survives restarts, and populate it with `bun run mirror:init` via `docker exec`. OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them.\n\n## Project structure\n\n| Directory | Purpose |\n|:---|:---|\n| `src/index.ts` | `createApp()` entry point: registers the surface, inits the screening service, schedules the HTTP refresh. |\n| `src/config` | Server-specific environment variable parsing and validation with Zod. |\n| `src/mcp-server/tools` | Tool definitions (`*.tool.ts`) and the shared screening caveat. |\n| `src/mcp-server/resources` | Resource definitions (`*.resource.ts`). |\n| `src/mcp-server/prompts` | Prompt definitions (`*.prompt.ts`). |\n| `src/services/screening` | Screening service: mirrors, normalized schema, OFAC/EU/UK/UN/GLEIF ingesters, matching engine. |\n| `scripts/mirror-*.ts` | Mirror lifecycle CLI: init, refresh, verify, seed. |\n| `tests/` | Tool, resource, prompt, service, integration, fuzz, and smoke tests. |\n\n## Development guide\n\nSee [`CLAUDE.md`/`AGENTS.md`](./CLAUDE.md) for development guidelines and architectural rules. The short version:\n\n- Handlers throw, framework catches — no `try/catch` in tool logic\n- Use `ctx.log` for request-scoped logging; the mirror is reached through `getScreeningService()`, not `ctx.state`\n- Register new tools and resources via the barrels in `src/mcp-server/*/definitions/index.ts`\n- Wrap external sources: validate raw → normalize to the common schema → return the output schema; never fabricate fields a source omits, and never synthesize a confidence score\n\n## Attribution\n\nThis server redistributes open data from these sources, cited per their terms:\n\n| Source | Publisher | License |\n|:---|:---|:---|\n| OFAC SDN and Consolidated lists | US Department of the Treasury, Office of Foreign Assets Control | US Government public domain |\n| EU Consolidated Financial Sanctions List | European Commission / EEAS | Freely redistributable |\n| UK Sanctions List (UKSL) | UK Foreign, Commonwealth & Development Office | [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/) (attribution required) |\n| UN Security Council Consolidated List | United Nations Security Council | Freely redistributable |\n| GLEIF LEI data (Level 1 + Level 2) | Global Legal Entity Identifier Foundation | [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/) |\n\nUKSL has been the single authoritative UK source since the OFSI Consolidated List closed on 28 January 2026.\n\n## Contributing\n\nIssues are welcome. Run checks and tests before submitting:\n\n```sh\nbun run devcheck\nbun run test\n```\n\n## License\n\nApache-2.0 — see [LICENSE](./LICENSE) for details.\n","readmeFilename":"README.md"}