关于 HISTOR — MCP tool-definition transparency log
HISTOR 是 MCP 工具定义的公开透明日志,记录远程端点及本地包所展示的工具集,并提供签名历史和变更核对。它适合希望比较客户端收到的工具定义与公开观测记录的用户。
主要功能
- 01记录工具定义及变更历史
- 02签名并追加到 Merkle 日志
- 03核对客户端收到的工具集
- 04监测工具定义变化并提供差异
- 05按关注列表提供变更动态
适用场景
- 01检查端点展示的工具定义是否与记录一致
- 02跟踪所用 MCP 服务的定义变动
- 03审查工具描述和输入架构的变化
MCP 相关
MCP 服务提供 histor_check、histor_server 和 histor_changes 工具,用于查询公开日志;也可配置为使用本地日志。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
HISTOR
🔄 从 AI-Factory monorepo 同步而来(仅追加历史记录)。欢迎提交拉取请求——已合并的 PR 会导入并重新同步到此处。问题 · 拉取请求
HISTOR(ἵστωρ,“亲眼所见而知晓之人”)——一个公开的 MCP 工具定义透明日志
官方注册表中的每个远程 MCP 端点曾公布的内容 · 变更时间 · 已签名、追加式、可审计
English · Русский · Español · Français · 中文
在线服务: histor.modelmarket.dev ·
落地页: alexar76.github.io/histor ·
功能: histor.check@v1 · histor.server@v1 · histor.changes@v1 ·
端口: 9490
用一段话说明问题
MCP 服务可以凭借无害的工具描述通过审核,之后再更改这些描述 — 描述中只需新增一句话,就足以发动提示词注入,而客户端会不再征求你的同意就将其传给模型。MCP 没有为工具定义提供内容寻址机制,官方注册表验证的是命名空间,而不是内容;你笔记本电脑上的扫描器只能看到服务向你的笔记本电脑展示的内容。HISTOR 填补了缺失的公共记忆:它记录每个服务曾公布的内容并为其签名,还会告诉任何来询问的人,他们收到的内容是否与其他所有人看到的相同。
它的功能
flowchart LR
R["Official MCP registry<br/>~21k servers"] --> C["Crawler<br/>server/discover + tools/list<br/>never a tool call"]
C --> D["MTL/1 digest<br/>RFC 8785 + SHA-256"]
D --> L["Four signed labels<br/>AWR/2 · did:key"]
W["WARDEN sidecar<br/>published pattern set"] --> L
L --> M["Merkle log<br/>RFC 9162"]
M --> S["Signed tree head<br/>after every crawl"]
M --> API["Desk · API · badge · Atom feed"]
CL["Your client"] -- "tools it received" --> K["/api/v1/check"]
K -- "signed: same · different · seen before" --> CL
K -. "opt-in digest count" .-> M
- 读取官方注册表中的每个远程端点:
server/discover,然后是分页读取的tools/list(旧版服务使用初始化流程)。 不会调用任何工具,不会安装或执行任何内容;在建立连接前会拒绝私有地址。 - 也会读取注册表未收录的一小批热门远程服务(
histor/curated.json,其中包括 DeepWiki),并将其列在 HISTOR 自己的命名空间urn:awr:mtl:1:registry:histor.modelmarket.dev/curated下,因此不会有标签声称其已在注册表中列出。这类服务在注册表发布后,注册表中的条目会取代我们的条目。 - 运行 npm 和 PyPI 包 — 也就是人们用
npx或uvx在本地启动的服务 — 并在沙箱中运行:安装时不执行其代码,在带有伪造凭据且无法向外路由的 gVisor 中启动,通过 discovery 和tools/list读取(必要时对旧版服务使用初始化流程),然后在沙箱内使用诱饵参数各调用最多 15 个工具一次。gVisor 自身的跟踪记录会显示包在安装、启动和工具调用时的行为 — 启动的程序、查询的名称、访问的诱饵。已完成的观察结果会按已发布版本缓存;未完成的观察结果会重试;如果新版本改变了其工具告知模型的内容,这会像任何端点的变化一样记录在日志中。 - 按 MTL/1 定义的方式为工具集计算摘要 — 包括名称、描述、输入和输出架构,并按 UTF-16 代码单元顺序和 RFC 8785 处理。
- 为四类标签签名,每类都是独立的 AWR/2
VerificationVerdict:观察到的内容、匹配到的 WARDEN 模式集、自上一个标签以来定义是否发生变化,以及名称是否列在威胁列表中。 - 将每个标签追加到 RFC 9162 Merkle 日志,并在每次爬取后为树头签名,以便通过一致性证明表明历史记录始终只增不改。
- 响应
/check:发送客户端收到的工具;即可获得签名回复,说明 HISTOR 是否在该端点观察到了相同的工具集、更早版本的工具集,或未观察到任何工具集。
远程检查独立于每日注册表和软件包周期运行。默认目标间隔为六小时;过去七天内观察到至少两次变化的端点每 30 分钟检查一次。这些是调度目标:主机限制、故障和队列容量都可能导致实际间隔更长。仍可能错过中间状态。配置和实测间隔请参阅远程轮询运维。
发布变更和升级说明:CHANGELOG.md。
MCP 2026-07-28:新版与旧版兼容性。
**本地升级简报:**选择依赖项和工作流、比较已保存的观察结果,并获取重新测试清单。
在此源目录中运行 python3 -m histor upgrade-brief --watchlist examples/upgrade-brief/watchlist.json --out-dir ../output/histor-upgrade-brief-example/en(Python 3.11+)。
报告和清单支持 --lang ru|en|es|fr|zh(默认值为 en)。
请参阅指南和可复现的合成示例,两者均提供五种语言。
标签无法说明的内容
配置文件禁止使用 safe、secure、audited、certified、approved 和 trusted 这些词,本 README 也一样。匹配到某个模式,只是阅读定义的理由,并非判定结果。四种方法中有三种永远不会返回 fail;第四种(连续性)只会在机械意义上失败,即两个摘要不同。不会读取源代码、解析软件包或观察行为。变更仅以日期和差异呈现,绝不作为指控。详情:docs/labels.md。
工具列表的代价。 客户端会在每次模型请求中重新发送所有已连接服务的工具列表。在日志记录的 18,204 个软件包和 16,170 个远程服务中,列表的中位数约为 1,300 个 token,第 90 百分位数约为 8,000 个 token,还有 31 个软件包的列表超过 100,000 个 token:docs/tool-list-cost.md。每项计数都细分为名称、描述和输入架构;每次变更都会附带其成本差异(/api/v1/changes/<id>/cost),而 histor tool-cost check 会在软件包的 CI 中执行同样的计数,并阻止会增加列表开销的版本发布:docs/tool-list-cost.md。
监测你使用的服务。 https://histor.modelmarket.dev/feed.xml?watch=<id>,<id> 是你关注的最多 100 个服务的变更订阅;/api/v1/changes?watch=…&after=<cursor> 提供相同内容,供程序使用,按时间从旧到新排列,并支持续传。团队可以将每项变更签名后推送到 Slack 或自己的端点:docs/watch.md。注册表、扫描器和评级服务:docs/data-feed.md。
下载数据。 每周一次,日志的完整视图都会以文件形式发布到 histor.modelmarket.dev/datasets/:其中包括每个列出的服务、每套展示过的工具、每条记录的变更以及 WARDEN 扫描结果。文件采用 JSON Lines 格式(gzip),并附有由日志密钥签名的清单;汇编内容采用 CC BY 4.0 许可。每个快照的 README 都列出字段,并说明如何在 pandas 或 DuckDB 中加载(histor/dataset.py)。数据也发布在 Hugging Face;引用某个数字时,请提供该数字所依据快照的版本 DOI(每个归档快照都有自己的 DOI,列于数据集页面);doi:10.5281/zenodo.23512759 代表所有快照,并会打开最新的快照。
与另一个观察者交叉核验。 HISTOR 每天都会将自己的工具集摘要与 CrawlCheck 针对相同服务发布的摘要进行比较,并在 histor.modelmarket.dev/datasets/xcheck-crawlcheck/ 发布结果,包括不一致之处。这两项服务会独立计算相同的摘要:docs/cross-check.md。
公开的付款方证据。 histor payer-audit 命令(自 0.4.1 起提供)会检查 Base USDC 收据,并导出来源明确的行为指示,同时保留付款总额和未知情况。它不需要生产数据库或钱包:docs/payer-audit.md。
安装
pip install aimarket-histor # the package is aimarket-histor — "histor" on PyPI is an unrelated project
histor audit https://histor.modelmarket.dev # verify the public log's tree heads and proofs; needs no keys or database
uvx aimarket-histor # MCP server over stdio against the public log: histor_changes, histor_check, histor_server
需要 Python 3.11 或更高版本。首先应运行 histor audit:它会像陌生人应有的做法那样检查实时日志,而不是信任 HISTOR(docs/log.md)。
在 MCP 客户端(Claude Code、Cursor,……)中:{ "mcpServers": { "histor": { "command": "uvx", "args": ["aimarket-histor"] } } } —
提供三个用于查询公开日志的工具;不会抓取或在本地存储任何内容。aimarket-histor --local
(或 histor mcp)则会改为从 HISTOR_DATA_DIR 提供你自己的日志。已列入官方 MCP 注册表,名称为
io.github.alexar76/histor。
连接后,可以询问:“Use histor_server with endpoint npm:mongodb-mcp-server.
Show the last observation, the number of tools, and the link to its HISTOR record.”
替换为你自己的 npm: 或 pypi: 软件包,或者
在浏览器中查找。
快速开始
从源代码运行自己的日志:
git clone https://github.com/alexar76/histor && cd histor
npm ci --prefix scanner # the WARDEN sidecar (node >= 20)
uv sync --extra dev --project .
HISTOR_CRAWL_LIMIT=40 uv run --project . python -m histor crawl # observe 40 endpoints
uv run --project . python -m histor serve # desk + API on :9490 (SQLite under ./data)
对于本地 MCP 客户端或 Glama,运行 python -m histor mcp。它使用本地日志,通过 stdio 提供
histor_changes、histor_check 和 histor_server。
它不会开放 HTTP 端口,也不会启动抓取;要填充新的日志,请使用上面的独立 crawl 命令。
请参阅 Glama 构建设置。
生产环境使用 Postgres,且 HISTOR_PROFILE=prod 未配置 Postgres 时会拒绝启动:
HISTOR_POSTGRES_PASSWORD=… HISTOR_OPERATOR_TOKEN=… HISTOR_PUBLIC_BASE=https://histor.example \
docker compose -f docker-compose.yml -f docker-compose.postgres.yml up -d
架构更改通过编号迁移进行(python -m histor migrate up|status),并在服务开始监听前应用;请参阅 docs/operations.md。
查询日志
# Is what my client received what HISTOR observed at that endpoint? Three lines that run as
# written: take a listed server, send its endpoint and tool list to /check, read the signed answer.
# With your own client, replace the second line by the endpoint and the tools/list result it received.
H=https://histor.modelmarket.dev/api/v1
S=$(curl -sS "$H/servers?limit=1" | jq -r '.servers[0].id')
curl -sS "$H/servers/$S" | jq '{endpoint: .server.endpoint, tools: .tools}' > received.json
curl -sS "$H/check" -H 'Content-Type: application/json' -d @received.json | jq '.verdict, .target.page'
# The signed tree head, and a proof that today's log extends yesterday's
curl -sS https://histor.modelmarket.dev/api/v1/log/sth
curl -sS "https://histor.modelmarket.dev/api/v1/log/proof/consistency?first=1000&second=1200"
所有端点都列在 docs/api.md 中。如何在不信任 HISTOR 的情况下审计日志,见 docs/log.md;日志格式本身(叶子输入、树、签名头、验证规则)在 docs/spec/transparency-log.md 中规定,规范性向量见 test-vectors/。内部实现见 docs/architecture.md。
测试
make test # unit tests; set HISTOR_TEST_DATABASE_URL to run each storage test on Postgres too
make integration # real sockets: a loopback registry and MCP servers, uvicorn, the real WARDEN sidecar
上方的测试和覆盖率徽章由 CI 在每次 Pages 部署时测量,并通过 shields.io 读取;日志徽章读取实时服务,因此其中的每个数字都是最新的。
ERC-8004 身份
HISTOR 是 ERC-8004 Agent,96683 on Base,于
2026-10-01 在规范的 IdentityRegistry 0x8004A169…a432 上注册,所有者为 AIMarket 运营方
钱包 0x1218ff36…Ad0a。其注册文件
列出了网页、托管的 histor-check 端点,以及为每个标签签名的 did:key,因此可以将标签的
签名追溯到已注册的 Agent。交易及其核验方法:
ERC-8004 身份。
所处位置
| 组件 | 角色 |
|---|---|
| WARDEN | 在连接时于客户端检查工具定义 |
| HISTOR | 公开记录服务器曾公告的内容 |
| THEMIS | 在 Hub 上发布时准入一项能力 |
| AIMarket Hub | 在目录中列出 histor.check@v1 |
| AWR | 每个标签使用的签名文档格式 |
许可证
MIT — 请参阅 LICENSE。它是 AIMarket 生态系统的一部分。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。