mcpField
O
ofac-match

ofac-match

本地服务
github.com/krunalsolanki法律与政务13 天前更新

关于 ofac-match

OfacMatch 是用于对照 OFAC SDN 名单筛查姓名的 .NET 库和本地 MCP 服务。它为潜在匹配评分,并说明命中的姓名或别名及各部分的比对情况,合规判断仍由人工负责。

主要功能

  1. 01按 OFAC SDN 名单筛查姓名
  2. 02为潜在匹配评分并解释原因
  3. 03处理别名、重音符号和姓名变体
  4. 04标记出生年份或国家不一致
  5. 05加载名单以离线筛查

适用场景

  1. 01在合规审查中筛查借款人姓名
  2. 02调查姓名触发匹配的原因
  3. 03核查不同拼写或别名的姓名
  4. 04通过 AI 客户端筛查姓名并查询条目

MCP 相关

OfacMatch.Mcp 提供单个或批量姓名筛查、SDN 条目查询、姓名比较和名单信息查询工具。它在本地运行,无需 API 密钥。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetOfacMatch.Mcp2.0.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

OfacMatch

Software DOI Paper DOI

面向 .NET 的 OFAC 制裁名单姓名筛查工具,并会告诉你姓名为何匹配。

OfacMatch 筛查拼写有误的姓名,标记出生年份冲突,并排除常见姓名

在浏览器中试用:无需安装,你输入的姓名绝不会离开浏览器。

我为什么构建它

我曾在 First American 用十年时间构建产权和抵押贷款系统,其中包括 OFAC 筛查,用于阻止贷款发放给美国财政部制裁名单上的对象。姓名匹配听起来很简单,直到合规分析师问起某个姓名为何被标记,或某个拼写有误的姓名为何没有被标记。

许多团队仍在手动搜索 OFAC 网站,或依赖无法查看内部逻辑的筛查系统。我想要一个小巧且开源的工具:加载官方名单,按照 OFAC 在其常见问题中的说明对姓名评分,并展示每项评分背后的依据。

功能

OfacMatch 会从 OFAC 下载特别指定国民(SDN)名单,对照名单筛查姓名,并为每个潜在匹配项给出 0 到 100 的评分,采用与 OFAC搜索工具相同的量表。每个匹配项都会附带说明:命中了哪个姓名或别名,以及姓名的各个部分是如何对应的。

它能处理真实姓名中常见的复杂情况:重音符号、LAST, First 顺序、撇号和连字符、“Dr.” 之类的头衔、LLC 或 LTD 之类的公司后缀(即使拼写有误),以及别名。如果你提供的出生年份或国家与名单记录不符,匹配项会被标记,而不是隐藏,因为是否匹配应由人来判断。

它没有依赖项,在你自己的进程中运行(姓名绝不会离开你的系统),并且兼容现代 .NET 和 .NET Framework 4.7.2+。

我没有凭空猜测,而是用真实名单进行了测试:在阈值为 85 时,它能找到 4,255 个真实模拟的名单姓名拼写错误和变体中的 99.8%。评估报告列出了详细信息,包括目前仍会漏掉的情况。

这是一个早期版本(0.1)。非常欢迎反馈、错误报告,以及评分不理想的姓名变体。

OfacMatch 可帮助你进行筛查;它不会做出合规决定,也不是法律建议。评分表示两个姓名的书写方式有多相似,并不表示两条记录是否属于同一个人。请根据自己的风险评估选择阈值,并安排人员审核每个潜在匹配项。更多内容请参阅负责任地使用 OfacMatch。

快速开始

dotnet add package OfacMatch
using OfacMatch.Data;
using OfacMatch.Screening;

using var http = new HttpClient();
var list = await SanctionsList.DownloadAsync(http, saveToDirectory: "ofac-data");

var screener = new SanctionsScreener(list, new ScreeningOptions { MinScore = 85 });

foreach (var match in screener.Screen("Aymen Zawahri"))
{
    Console.WriteLine(match.Explain());
}

根据 2026 年 10 月 27 日发布的 SDN 名单生成的输出:

Score 95.8 via NameParts against Primary name "AL ZAWAHIRI, Dr. Ayman"
  Entry 2676: AL ZAWAHIRI, Dr. Ayman (Individual; programs: SDGT)
  Full-name score 84.5; name-parts score 95.8
  AYMEN -> AYMAN: similarity 0.907, sounds alike
  ZAWAHRI -> ZAWAHIRI: similarity 0.946, sounds alike

评分原理将逐步讲解这个示例。

使用更多背景信息进行筛查
var request = new ScreeningRequest("John Michael Doe")
{
    Type = EntryType.Individual, // a borrower is a person, so skip companies and vessels
    YearOfBirth = 1971,          // flags matches whose listed dates of birth disagree
    Country = "United States",   // flags matches whose listed addresses are all elsewhere
};

var matches = screener.Screen(request);
离线使用
var list = SanctionsList.LoadFromDirectory("ofac-data"); // SDN.CSV, ALT.CSV, ADD.CSV

OFAC 会频繁更新名单。请至少每天重新加载,并在每次做出决定前,根据当前名单进行筛查。

在 AI 助手中使用(MCP 服务)

OfacMatch.Mcp 可让 Claude、GitHub Copilot 和其他 MCP 客户端筛查姓名、查询 SDN 条目并说明评分。它在本地运行,无需 API 密钥。

Claude Desktop: 从最新发布版本下载适用于你电脑的扩展(ofac-match-windows.mcpb 或 ofac-match-mac-*.mcpb),然后双击即可。无需 .NET 或配置文件。

Claude Code 插件(添加服务和一个用于负责任地报告结果的技能;需要 .NET 10 SDK):

/plugin install ofac-match --marketplace krunalsolanki/ofac-match

Claude Code 和其他客户端(需要 .NET 10 SDK):

claude mcp add ofac-match -- dnx OfacMatch.Mcp --yes

工具:screen_name、screen_names、get_sanctions_entry、compare_names、get_list_info。有关其他客户端和设置,请参阅 MCP 服务指南。

命令行
dotnet run --project samples/OfacMatch.Cli -- "Aymen Zawahri" --min 85 --yob 1951

在真实 SDN 名单上的结果

根据评估:使用 2026 年 10 月 27 日发布的 SDN 名单,对 600 个名单中的对象(400 名个人、200 家公司)及其 4,255 种逼真的姓名变体,以及 2,000 个普通姓名进行了测试。

阈值找到的名单对象触发警报的普通姓名
8099.9%83.4%
8599.8%47.9%
9099.8%15.9%
9599.5%3.8%

测试的变体包括:完全匹配、姓氏在前、去除标点并转为小写、一个字母错误、两个字母互换、缺少一个字母、不同的转写方式、合并词缀(“ALZAWAHIRI”)、省略中间名,以及更改公司后缀。

这些数字中有两点让我感到意外。第一,仅按姓名筛查会触发很多警报:大约一半的普通双词姓名看起来都像名单上的某个对象,其中少数甚至与名单中某人的姓名完全拼写相同。出生日期和国家/地区信息能让审核人员快速排除这些情况。第二,将阈值从 85 提高到 90,警报减少了三分之二,同时没有漏掉这些变体中的任何一个,因此应当审慎选择阈值,而不是直接采用默认值。

你可以自行重新运行:

dotnet run -c Release --project eval/OfacMatch.Evaluation -- --data ofac-data --out docs/evaluation.md

文档

指南内容
为什么选择 OfacMatch优势以及与其他选项的比较
评分原理每个步骤,并附完整示例
API 和配置参考类型、选项和默认值
负责任地使用 OfacMatch阈值、审核、记录保存和限制
评估按变体和设置划分的完整结果
MCP 服务在 AI 助手中使用 OfacMatch

后续计划

我希望开展的工作,大致按优先顺序排列:

  • 在真实名单上进行评估
  • 提高罕见词的权重(“CUBA”应比“BANK”更重要),以减少常见姓名触发的警报
  • 识别公司名称后缀开头的拼写错误(“LTMITED”)
  • 支持 OFAC 的 Consolidated(非 SDN)名单和 Advanced XML 格式
  • 加快批量筛查
  • 提供 ASP.NET Core 示例和 dotnet tool 包

如果你想参与其中任何一项,或遇到评分不理想的案例,请提交 issue。CONTRIBUTING.md 中提供了详情。

引用

如果您在研究或文稿中使用 OfacMatch,请引用这篇论文:

Solanki, K. (2026). 针对 OFAC SDN 名单的可解释姓名筛查:开源实现与可复现评估(预印本)。Zenodo. https://doi.org/10.5281/zenodo.23930926

@misc{solanki2026ofacmatch,
  author    = {Solanki, Krunal},
  title     = {Explainable Name Screening Against the {OFAC} {SDN} List: An Open Implementation and Reproducible Evaluation},
  year      = {2026},
  publisher = {Zenodo},
  note      = {Preprint},
  doi       = {10.5281/zenodo.23930926},
  url       = {https://doi.org/10.5281/zenodo.23930926}
}

引用软件本身:

Solanki, K. OfacMatch:可解释的 OFAC 制裁姓名筛查(软件)。Zenodo. https://doi.org/10.5281/zenodo.23926803

两个 DOI 始终指向最新版本;每个版本在 Zenodo 上也有自己的 DOI。GitHub 的 引用此仓库按钮可提供其他格式的论文引用。

致谢

由 Krunal Solanki 开发。这个想法和合规背景源自我在抵押贷款业务中开展 OFAC 筛查的工作。

隐私政策

OfacMatch 不收集任何信息。您筛查的姓名会在自己的计算机上处理;如果使用网页,则会在浏览器中处理,绝不会发送到任何地方。唯一的网络请求是从 OFAC 下载公开的 SDN 名单,该名单会缓存在本地。详情请参阅:PRIVACY.md。

数据

SDN 名单由美国财政部外国资产控制办公室发布。OfacMatch 从 OFAC 的制裁名单服务下载该名单,不会重新分发。单元测试仅使用虚构姓名。

许可证

Apache License 2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。