关于 EMPORION — business facts from public registers
EMPORION 是面向贸易和企业核查 Agent 的公共记录 MCP 服务。它在 VAT、企业、制裁名单、汇率等查询结果中附带来源、获取时间和 SHA-256 证据。
主要功能
- 01核验欧盟 VAT 和 EORI 编号
- 02查询企业和 LEI 信息
- 03按制裁名单筛查姓名及钱包
- 04查询历史 ECB 汇率
- 05捕获网页并生成时间戳证据
- 06设置签名计时器和回调
适用场景
- 01核验企业的 VAT 或 EORI 信息
- 02交易前查看企业登记信息
- 03按公开名单筛查姓名或钱包
- 04保存网页作为可验证证据
MCP 相关
它通过能力 API 向 Agent 提供公共记录查询、筛查、证据捕获和计时器功能。请求经过签名;通过 Hub 调用时会计费并生成收据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://modelmarket.dev/tools/mcp/emporionclaude mcp add --transport http dev-modelmarket-emporion https://modelmarket.dev/tools/mcp/emporion{"mcpServers":{"dev-modelmarket-emporion":{"type":"http","url":"https://modelmarket.dev/tools/mcp/emporion"}}}在 Cursor 中打开{"servers":{"dev-modelmarket-emporion":{"type":"http","url":"https://modelmarket.dev/tools/mcp/emporion"}}}在 VS Code 中打开{"mcpServers":{"dev-modelmarket-emporion":{"type":"http","url":"https://modelmarket.dev/tools/mcp/emporion"}}}{"mcpServers":{"dev-modelmarket-emporion":{"serverUrl":"https://modelmarket.dev/tools/mcp/emporion"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
🔄 从单体仓库同步而来,并保留完整历史。
emporion镜像了规范的 AI-Factory 单体仓库。此处的历史仅追加(不会强制推送)。 欢迎提交拉取请求——已合并的 PR 会被导入单体仓库,并重新同步到此处,因此你的贡献将成为规范版本。 💬 欢迎提交 问题 · 拉取请求。
EMPORION — 为交易 Agent 提供公共记录事实
买卖或付款的 Agent 需要模型无法编造的事实:这个 VAT 号码有效吗?这家公司是谁?那天的欧元汇率是多少?这个钱包是否列在制裁名单上?我能否证明这份文件昨天就已存在?EMPORION 从公共记录中逐一回答这些问题——数据来源包括欧盟委员会、GLEIF、欧洲央行、美国财政部、欧盟、英国和 Bitcoin——并为每个答案签名,同时注明答案的来源、时间,以及来源返回内容的 SHA-256 哈希值。
Emporion(ἐμπόριον):希腊城市的贸易站,商人在此相聚并进行结算。
自 0.2.0 起,它还能回答接下来的问题:这家公司是否在本国登记册中?它的 EORI 号码是否适用于海关?这家商店所用域名已有多少年历史?在巴伐利亚州或 TARGET2 中,第五个工作日是哪天?此外,它还为 Agent 提供两种模型无法提供的工具:作为证据捕获的网页(锚定在 Bitcoin 上),以及一个计时器,其中包括死信开关;它会通过带签名的事件回调 Agent。
能力
| 能力 | 价格 | 可解答的问题 | 来源 |
|---|---|---|---|
emporion.vat.check@v1 | $0.002 | 这个欧盟 VAT 号码今天有效吗?名称、地址、查询时间;如果你将自己的 VAT 号码作为请求方,还会返回 VIES 的查询编号:以你的名义进行查询的官方证明 | EU VIES |
emporion.lei.lookup@v1 | $0.001 | 这个法律实体是谁?可按 LEI 查询(在本地验证校验位),也可按名称查询(候选结果按相关性排序):法定名称、司法管辖区、法律形式、状态、地址、续期信息、直接和最终母公司 | GLEIF (CC0) |
emporion.fx.rate@v1 | $0.001 | 自 1999 年以来任意日期的任意货币对欧元参考汇率、对应的欧洲央行日期、以 Decimal 表示的欧元交叉汇率,以及按货币最小单位舍入的金额 | ECB |
emporion.sanctions.screen@v1 | $0.002 | 这个钱包地址或名称是否出现在公开制裁名单中?OFAC SDN(含约 1,050 个数字货币地址)、欧盟和英国名单(其中包含联合国指定对象,每个命中项均带有联合国编号),并提供每份名单的日期和 SHA-256 | OFAC · EU · UK |
emporion.timestamp.stamp@v1 | $0.001 | 通过 OpenTimestamps 日历将 SHA-256 摘要锚定到 Bitcoin;返回标准 .ots 证明 | OpenTimestamps |
emporion.timestamp.verify@v1 | $0.001 | 升级并验证证明:当结果等于 EMPORION 从 Bitcoin 网络本身获取的 Bitcoin 区块头 Merkle 根时,即确认成功(检查每个区块头的工作量证明,并由两个节点确认链) | Bitcoin |
emporion.web.capture@v1 | $0.003 | 网页证据:最终 URL、所有重定向、IP、状态、关键标头、TLS 证书和正文的 SHA-256(以及正文,最多 512 KB);记录的 SHA-256 已锚定到 Bitcoin | 网页本身 · OpenTimestamps |
emporion.domain.rdap@v1 | $0.001 | 谁在何时注册了这个域名:创建时间、到期时间、天数、注册商、状态、名称服务器、DNSSEC;或 registered: false | IANA 引导信息 → TLD 注册局 |
emporion.company.lookup@v1 | $0.001 | 这家公司是否真实且仍在运营?可按编号或名称查询:名称、状态、法律形式、成立日期、地址、VAT 号码,以及登记处自身的字段 | Brønnøysund (NO) · SIRENE/RNE (FR) · ARES (CZ) · PRH (FI) · Companies House (GB,需使用运营方的密钥) |
emporion.eori.check@v1 | $0.002 | 这个 EORI 号码是否有效,可用于欧盟海关?每次最多查询 10 个;运营方同意公开时会返回名称和地址 | European Commission (EOS) |
emporion.calendar.check@v1 | $0.001 | 约 250 个国家(和地区)或某个市场(TARGET2、NYSE、LSE…)的工作日信息:节假日、下一个/上一个工作日、日期加 N 个工作日、两日期间的天数、一整年的节假日 | python-holidays(离线) |
emporion.timer.set@v1 | $0.002 | 在指定时间向你的 HTTPS 回调发送签名 POST,或设置一个定时触发的死手开关,除非你每隔 N 秒签到 | — |
emporion.timer.checkin@v1 · .cancel@v1 · .status@v1 | 免费 | 维持死手开关运行、取消计时器、读取其状态(需提供计时器令牌) | — |
emporion.sources@v1 | 免费 | 每个来源的许可证和署名信息、当前持有的制裁名单、欧洲央行的最新日期 | — |
flowchart LR
A[Agent] -->|invoke + payment| H[AIMarket hub]
H -->|X-Provider-Signature required| E[EMPORION]
E --> N{allowlist<br/>per source}
N --> V[VIES]
N --> G[GLEIF]
N --> C[ECB]
N --> S[OFAC · EU · UK lists<br/>refreshed every 6 h]
N --> O[OpenTimestamps calendars]
E --> X[Bitcoin P2P network<br/>headers · proof of work checked]
E -->|answer + evidence:<br/>url · fetched_at · sha256| H
H -->|signed receipt| A
简要说明信任保障
- 每个答案都有证据——来源 URL、抓取时间、返回字节的 SHA-256,以及来源的许可证和署名信息。
- 两种签名——网关的签名回执(oracle-core、Ed25519;当
ORACLE_PQC=1时使用混合 ML-DSA),以及 Hub 验证的、绑定请求的X-Provider-Signature。 - 无法给出答案的来源不收费——答案为
ok:false,Hub 不会因ok:false扣费:成员国的 VAT 登记系统宕机、制裁名单未加载或已超过 48 h、时间戳日历少于两个,或区块头链尚未延伸到目标区块。 - 每个来源的出站请求都使用允许列表;重定向由系统手动跟进,且只能跳转到该来源自己的主机;响应正文大小设有限制。
- 两个可访问调用方指定 URL 的功能(网页捕获和计时器回调)仅访问公共地址:仅允许端口为 80/443 的 http(s) 请求;检查名称对应的每个地址(不允许环回、私有、链路本地、CGNAT 或元数据范围地址);连接固定到已检查的地址;再次检查每次重定向;每分钟对同一主机最多捕获 20 次。
示例
H=https://emporion.modelmarket.dev
inv() { curl -s -X POST $H/ai-market/v2/invoke -H 'Content-Type: application/json' -d "$1"; }
inv '{"capability_id":"emporion.vat.check@v1","input":{"vat":"NL004495445B01","requester_vat":"DE811569869"}}'
inv '{"capability_id":"emporion.lei.lookup@v1","input":{"name":"Deutsche Bank"}}'
inv '{"capability_id":"emporion.fx.rate@v1","input":{"base":"USD","quote":"JPY","date":"2026-10-11","amount":"100"}}'
inv '{"capability_id":"emporion.sanctions.screen@v1","input":{"address":"0x…"}}'
inv '{"capability_id":"emporion.timestamp.stamp@v1","input":{"digest":"'"$(sha256sum contract.pdf | cut -d' ' -f1)"'"}}'
inv '{"capability_id":"emporion.web.capture@v1","input":{"url":"https://shop.example/terms"}}'
inv '{"capability_id":"emporion.domain.rdap@v1","input":{"domain":"shop.example"}}'
inv '{"capability_id":"emporion.company.lookup@v1","input":{"country":"FR","number":"552032534"}}'
inv '{"capability_id":"emporion.eori.check@v1","input":{"eori":"CZ00177041"}}'
inv '{"capability_id":"emporion.calendar.check@v1","input":{"market":"XECB","add_business_days":5}}'
inv '{"capability_id":"emporion.timer.set@v1","input":{"callback":"https://agent.example/hook","deadman_seconds":3600,"payload":{"release":"escrow-7"}}}'
通过 Hub 调用时,同样的调用需要付费并生成回执:POST https://modelmarket.dev/ai-market/v2/invoke,其中 "product_id":"emporion"。
VAT:查询编号
VIES 仅向作为请求方提供的有效 EU VAT 编号签发查询编号。该编号是请求方保留的凭证:将你自己的编号作为 requester_vat 传入,答案中的查询编号便是以你的名义生成的证据,表明你在 checked_at 查询了交易对方。即使不提供该编号,系统仍会执行检查;答案会说明如何获取该编号。
FX:日期选择
某日期的汇率,是 ECB 在该日期当天或之前发布的最新汇率;答案会注明对应日期(ecb_date):周日会采用周五的汇率,并明确显示这一点。对于 ECB 已停止报价的货币(RUB 自 2022 年 3 月起),系统会拒绝回答,而不会提供多年前的汇率。
制裁:查询,不是认定
钱包地址采用精确匹配(EVM 和 bech32 地址不区分大小写)。姓名按词语集合匹配——忽略顺序、大小写、重音符号和法律形式(“DOE, John” 与 “John Doe” 相同);存在拼写错误的词计为 0.9 分,且绝不会视为同一姓名;即使较长姓名中包含了所有查询词(例如父名、中间名),仍会匹配。默认阈值为 0.85;每条命中结果都会说明匹配的姓名和分数。
命中表示需要进一步核查;未命中不代表已排除风险。 姓名可能重名,别名也可能不完整。每个答案都会说明这一点,并列出所用名单的名称、发布日期和 SHA-256。名单过期时会拒绝查询,而不会使用过期名单。
联合国指定名单通过英国和 EU 名单获取。 联合国安理会自己的文件不包含再利用许可,因此 EMPORION 不会读取该文件。英国《制裁名单》(Open Government Licence v3.0)会为英国执行的每项联合国指定提供其联合国参考编号,EU 文件也会为部分指定提供该编号:命中结果包含 un_ref,而 lists: ["UN"] 仅筛查 UK 和 EU 名单中带有该编号的条目。截至 2026-10-17,三份名单合计包含全部 1010 条联合国记录(其中 991 条在 UK 名单中按联合国编号列出,其余则按姓名列于 EU 和 OFAC 名单中)。最新的联合国决定会在 UK 和 EU 完成执行后才出现在这些名单中,通常会延迟数天。
时间戳
sequenceDiagram
autonumber
participant A as Agent
participant E as EMPORION
participant C as OpenTimestamps calendars
participant B as Bitcoin nodes (P2P, ×2)
A->>E: stamp {digest}
E->>E: sha256(digest ‖ 16 random bytes) — calendars never see the digest
E->>C: submit to all four, at least two must accept
C-->>E: pending attestations
E-->>A: .ots proof (pending)
Note over C: a few hours later the calendars' aggregate<br/>transaction is mined in a Bitcoin block
A->>E: verify {digest, proof}
E->>C: upgrade at each calendar the proof names (allowlisted only)
C-->>E: path to the block
E->>B: getheaders — the whole chain, kept and refreshed
B-->>E: every header's proof of work and difficulty checked, a second node agrees
E->>E: proof result == header Merkle root
E-->>A: confirmed · existed no later than the block time · upgraded proof
该证明采用标准 OpenTimestamps 文件格式:无需 EMPORION,使用任何 OpenTimestamps 客户端即可验证。参考示例(hello-world.txt)可验证到区块 358 391,时间为 2015-05-28。
网页抓取:页面内容
EMPORION 像浏览器一样抓取一次页面,并返回一条 record:请求的 URL、最终 URL、每次重定向及其状态和 IP、时间、状态、说明页面信息的标头(内容类型、长度、Last-Modified、ETag、Date、Server……)、服务提供的 TLS 证书(主题、颁发者、有效期、名称、证书的 SHA-256)、页面标题和 body_sha256。当正文不超过 512 KB 时,正文会以 body_b64 返回(页面上限为 5 MB)。record_sha256 是对采用排序键和紧凑分隔符的 JSON 格式记录计算出的 SHA-256,并通过 OpenTimestamps 锚定在 Bitcoin 上——稍后可使用 emporion.timestamp.verify@v1 验证。404 也算一次抓取(这就是页面返回的内容);无法连接的主机或验证失败的证书不收费。
定时器与死者开关
sequenceDiagram
autonumber
participant A as Agent
participant E as EMPORION
participant C as Agent callback (https)
A->>E: timer.set {callback, deadman_seconds: 3600, payload}
E-->>A: timer_id + token (once)
loop while the agent is alive
A->>E: timer.checkin {timer_id, token}
E-->>A: due_at moved 3600 s ahead
end
Note over A: the agent stops
E->>C: POST {event, signature} — Ed25519 (+ ML-DSA) over the event
C-->>E: 2xx (else retried after 1, 5, 30 min)
at(带时区的 ISO 时间)或 after_seconds 可设置一次性调用。事件包含定时器 ID、类型、到期时间和触发时间、尝试次数以及你的负载(最多 4 KB);签名由 EMPORION 在其签名清单中的密钥生成,签名对象是采用排序键和紧凑分隔符的 JSON 格式事件。令牌只以其 SHA-256 形式保存。定时器最长可运行 90 天,存储在 EMPORION 数据卷中的一个 SQLite 文件里。
公司登记处、EORI、域名、工作日
- 公司登记处直接从登记处获取信息:挪威 Brønnøysund Register Centre(NLOD 2.0)、法国 SIRENE 和国家登记处(通过国家开放 API,Licence Ouverte 2.0)、捷克 ARES、芬兰 PRH(CC BY 4.0);如果运营方设置了
COMPANIES_HOUSE_API_KEY(免费密钥),还可查询英国 Companies House(OGL v3.0);没有该密钥时不提供 GB 查询。首先在本地校验编号(挪威、捷克和芬兰的校验位;法国 SIRET 会转换为 SIREN)。状态包括:有效、停止经营/解散/删除、破产、清算中、重组中。 - EORI 信息来自欧盟委员会的 EOS 服务;“无效”也是一种查询结果。
- 仅向 IANA 引导文件中为该顶级域名列出的服务器查询 RDAP(仅限 https);子域名或 URL 会通过查询注册局转换为注册名称。某些国家代码(
.de、.ru……)尚未提供 RDAP 服务——此类查询会被拒绝,且不收费。 - RDAP 查询规范。 注册局的条款禁止高频自动查询和重新打包,因此 EMPORION 每分钟最多向一个注册局查询 30 次,每条结果缓存 24 小时(“未注册”的结果缓存一小时;缓存结果会标记
cached: true,并保留原始获取时间),同时会透传注册局自己的声明——包括其服务条款——作为registry_terms。 - 个人数据。 登记处也列有个体经营者,其记录均属于个人数据,无论登记处的许可如何规定。每条公司查询结果都包含
personal_data:用途(验证交易对手方)、依据(合法利益,GDPR 第 6(1)(f) 条)和保留期限(EMPORION 不保留副本;其调用日志仅保存输入的哈希)。 - 工作日由编译进 EMPORION 的 python-holidays 提供:无需联网,也没有服务中断的风险;结果会注明该库的版本,因为该版本发布后公布的假日不会包含在内。
明确的限制
- VIES 返回成员国登记机构当时提供的信息;有些国家不会返回名称或地址。EMPORION 不存储任何内容。
- GLEIF 覆盖拥有 LEI 的实体——许多小型公司并没有 LEI。
- 参考汇率仅供参考,不可用于交易。
- 制裁筛查是在三个公开名单中进行查询,不构成法律建议或合规计划;不包括其他司法管辖区的名单。
- 时间戳证明某事物最迟在区块所示时间已存在,但不能证明作者身份。
- 网页捕获显示服务器当时向 EMPORION 返回的内容;其他访客、国家或 Cookie 可能会看到不同页面。它不代表内容属实。
- 各登记机构公布的信息有所不同;目前覆盖四个国家的登记机构(加上英国密钥则为五个);尝试时,波兰 KRS API 没有响应。
- 如果回调在四次尝试内返回 2xx,计时器至少会发送一次;接收方应将具有相同
due_at的重复timer_id视为同一事件。
运行
# from this repository
docker build -f Dockerfile.standalone -t emporion .
docker run -d --name emporion -p 127.0.0.1:9351:9351 -v emporion-data:/data \
-e EMPORION_PUBLIC_URL=http://127.0.0.1:9351 emporion
curl -s http://127.0.0.1:9351/health
在 aicom monorepo 中,可从根目录运行相同命令:docker compose -f emporion/docker-compose.yml up -d --build。EMPORION_PUBLIC_URL 是买家访问的地址;该地址会写入签名清单。
生产环境部署(从 aicom monorepo 执行):./scripts/deploy_emporion.sh --remote <host> 会通过现有 nginx 在 https://modelmarket.dev/providers/emporion/ 提供服务(使用一个配置片段,先备份,再在重新加载前运行 nginx -t),将正在运行的镜像保留为 emporion:prev,并在构建不健康时回滚。稳定运行时内存约为 200 MB;容器内存上限为 768 MB。进程以 uid 10001 运行。
其自身地址为 https://emporion.modelmarket.dev/——面向用户的首页位于 /,其他路径则为 Agent 提供相同的 API(deploy/nginx/emporion.modelmarket.dev.conf);/providers/emporion/ 路径仍是 hub 进行联邦调用时使用的地址。
| 变量 | 默认值 | 含义 |
|---|---|---|
EMPORION_PUBLIC_URL | https://modelmarket.dev/providers/emporion | 清单中的基础 URL |
EMPORION_PORT | 9351 | 监听端口 |
EMPORION_RATE_LIMIT | 120 | 每个客户端每分钟可调用的次数 |
EMPORION_CORS_ORIGINS | empty (no browser origin) | CORS 允许列表 |
COMPANIES_HOUSE_API_KEY | empty (GB not offered) | 运营方免费的 Companies House API 密钥 |
EMPORION_TIMERS_DB | timers.sqlite beside the signing key | 计时器的存储位置 |
ORACLE_PQC | 1 in compose | 混合 ML-DSA-65 签名 |
测试:pip install -e "vendor/oracle-core[pqc]" -e '.[dev]' && pytest(在 monorepo 中:-e ../oracles/core)——针对真实响应摘录运行 160 项测试,不会访问任何实时数据源;在 monorepo 中,还会逐字节对照 hub 自有函数检查签名规范化内容。
来源和许可证
| 来源 | 许可证 | 答案中附带的署名 |
|---|---|---|
| EU VIES | 欧盟委员会再利用政策(Decision 2011/833/EU) | European Commission,VIES |
| GLEIF | CC0 1.0 | Global Legal Entity Identifier Foundation (GLEIF),CC0 |
| ECB | 转载时注明来源 | 来源:European Central Bank |
| OFAC SDN | 美国政府作品(公共领域) | U.S. Department of the Treasury,OFAC |
| EU Financial Sanctions Files | 欧盟委员会再利用政策 | European Commission,FSF |
| UK Sanctions List (FCDO) | Open Government Licence v3.0 | 包含依据 Open Government Licence v3.0 授权的公共部门信息(UK Sanctions List,FCDO) |
| OpenTimestamps | 免费公共日历 | OpenTimestamps (opentimestamps.org) |
| Bitcoin 区块头 | 公共链数据,通过点对点方式获取 | Bitcoin 网络 |
| EU EORI (EOS) | 欧盟委员会再利用政策 | European Commission,EORI 验证(EOS) |
| Brønnøysund Register Centre | NLOD 2.0 | Brønnøysundregistrene,Enhetsregisteret (NLOD 2.0) |
| API Recherche d'entreprises | Licence Ouverte 2.0 (Etalab) | DINUM,API Recherche d'entreprises (INSEE SIRENE,INPI RNE) |
| ARES | 捷克公共行政开放数据 | Ministerstvo financí ČR,ARES |
| PRH / YTJ | CC BY 4.0 | Finnish Patent and Registration Office (PRH),YTJ 开放数据 |
| Companies House (with a key) | Open Government Licence v3.0 | 包含来自 Companies House 的公共部门信息,OGL v3.0 |
| RDAP | 公共注册数据(RFC 9083) | IANA RDAP 引导信息和顶级域注册机构 |
| python-holidays | MIT | python-holidays (vacanza/holidays) |
代码:MIT — 请参阅 LICENSE。本项目使用的 OpenTimestamps 参考库采用 LGPL-3.0 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。