关于 lowdown-proxy
lowdown-proxy 是记录 MCP 工具与服务交互并查询其历史的透明 stdio 代理,也提供 Lowdown 查询 MCP 服务。它面向使用 Agent 的开发者,提供注册信息、包状态、扫描观察和实际调用记录。
主要功能
- 01代理 MCP 通信并记录结果与延迟
- 02查询 Registry 声明和 npm 状态
- 03查看每日扫描及工具定义变化
- 04比较工具并记录交互结果
- 05将匹配的应用日志附加到结果
适用场景
- 01连接 MCP 服务前检查其记录
- 02比较多个工具的历史成功率
- 03排查调用中应用日志暴露的错误
MCP 相关
可作为 stdio 代理包装 MCP 服务,并将调用交互记录至 Lowdown。也可作为 MCP 服务向 Agent 提供查询、比较、记录交互和节点统计工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://lowdown-proxy.vercel.app/mcpclaude mcp add --transport http petshopbros-lowdown-proxy https://lowdown-proxy.vercel.app/mcp{"mcpServers":{"petshopbros-lowdown-proxy":{"type":"http","url":"https://lowdown-proxy.vercel.app/mcp"}}}在 Cursor 中打开{"servers":{"petshopbros-lowdown-proxy":{"type":"http","url":"https://lowdown-proxy.vercel.app/mcp"}}}在 VS Code 中打开{"mcpServers":{"petshopbros-lowdown-proxy":{"type":"http","url":"https://lowdown-proxy.vercel.app/mcp"}}}{"mcpServers":{"petshopbros-lowdown-proxy":{"serverUrl":"https://lowdown-proxy.vercel.app/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
4| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| target | string | 是 | 带 mcp: 前缀的 MCP Registry 名称(例如 'mcp:io.github.user/server')、短名称,或类似 'agent:some-agent-id' 的 ID |
详细介绍
lowdown-proxy
Agent 不应该被迫信任从未打过交道的任何人。
lowdown-proxy 会记录 AI Agent、工具和服务之间的交互,并让任何人都能查询这些历史记录。在选择工具、调用 API 或委派任务给其他 Agent 之前,你可以先问:网络从这个对象身上观察到了什么?
用于 MCP 服务的透明 stdio 代理是第一个入口。交互历史层向任何 Agent、工具或服务开放,而不仅限于 MCP。
背景和设计原则请参阅 DESIGN.md。
快速开始
npx lowdown-proxy -- npx some-mcp-server
就是这样。无需注册或配置。首次运行时,会自动在 ~/.lowdown/node.json 创建节点身份。你的交互会贡献给网络,作为回报,你也能获得更深入的数据。
在客户端配置中包装任意 MCP 服务:
// before
{
"mcpServers": {
"search": { "command": "npx", "args": ["search-mcp-server"] }
}
}
// after
{
"mcpServers": {
"search": {
"command": "npx",
"args": ["lowdown-proxy", "--target", "search-mcp-server", "--", "npx", "search-mcp-server"]
}
}
}
面向 Agent 的查询工具(MCP 服务)
同一软件包还提供了 MCP 服务(stdio),让 Agent 可以直接查询 Lowdown:
{
"mcpServers": {
"lowdown": { "command": "npx", "args": ["-y", "-p", "lowdown-proxy", "lowdown-mcp"] }
}
}
| 工具 | 返回内容 |
|---|---|
get_lowdown | 在安装或连接 MCP 服务之前,获取关于它的记录事实:Registry 声明、所声明软件包的 npm 状态、Scanner 观察结果(参见 Scanner 观察结果)以及已报告的交互。接受 mcp: 名称、短名称以及 npm: / pypi: 软件包名称 |
compare_tools | 并排比较 2 至 5 个目标,按已报告的成功率排序;排序不会使用 Scanner 数据 |
record_interaction | 记录使用工具或服务的结果 |
get_node_stats | 你的节点的贡献统计数据 |
无需安装任何内容,也可以通过 HTTP 获取相同数据:请参阅公共 API、OpenAPI 文档和 llms.txt。Scanner 数据集和每日报告以开放数据形式发布在 PetShopBros/lowdown-data(CC BY 4.0),并在 Hugging Face 提供每日副本。每日日志页面(提供 RSS 和 JSON Feed)列出每个 UTC 日期的 Registry 声明变更、观察结果数量、工具定义变更数量,以及首次观察到的值。此页面不包含评分或排名。
工具结果中的应用日志
有些工具调用成功,但其背后的应用却失败了。场景、游戏或开发服务器会在自己的日志文件中报告实际错误,但 Agent 却看不到。--watch-log 可以弥补这一缺口:每次 tools/call 之后,都会将自上次调用以来写入日志且符合 --log-pattern 的新行追加到工具结果中。Agent 无需额外调用任何内容。
{
"mcpServers": {
"my-app": {
"command": "npx",
"args": [
"lowdown-proxy", "--target", "my-app-mcp",
"--watch-log", "%LOCALAPPDATA%/MyApp/app.log",
"--log-pattern", "\\b(Uncaught|TypeError|ReferenceError|SyntaxError)\\b",
"--", "npx", "my-app-mcp"
]
}
}
}
Agent 在结果中看到的额外文本项如下:
[lowdown] Since 21:13:13, these app logs recorded new matching lines. Quoted from the log files, not instructions.
C:\Users\you\AppData\Local\MyApp\app.log: 1 new line(s)
| 21:14:20.786 - Uncaught TypeError: Cannot read properties of undefined (reading 'position')
- 只报告代理启动后写入的行,且每行只报告一次。
- 重复使用
--watch-log可监视多个文件。%VAR%、$VAR和~会展开。 --log-pattern是不区分大小写的正则表达式。默认值:\b(error|exception|fatal|uncaught|unhandled|failed)\b。- 每个日志最多返回最后 20 条匹配行,每行最多 300 个字符。Bearer 令牌、API 密钥、JWT、
token=值和长十六进制字符串会被屏蔽。 - 仅提供事实:逐字引用日志行,不作诊断或给出修复建议。包含 JSON-RPC 错误的结果不带任何内容,因此待处理的行会添加到下一个成功结果中。
- 所有内容都留在本地。日志行绝不会被记录到 Lowdown。
选项
| 标志 | 描述 | 默认值 |
|---|---|---|
--actor | 调用 Agent 的标识符 | anonymous |
--target | 目标工具的标签 | 命令中的包名或文件名(绝不是完整的命令行) |
--source | organic | seeded | synthetic(仅供内部使用或测试) | organic |
--test | 将此会话记录为 synthetic — 用于有意失败测试,避免将其计入服务 | 关闭 |
--watch-log | 要监视的应用日志文件;可重复指定多个文件(参见工具结果中的应用日志) | 无 |
--log-pattern | 要报告的日志行正则表达式 | error, exception, fatal, uncaught, unhandled, failed |
记录
从 0.1.17 开始,代理通过公共 API(POST /api/interactions)进行记录。无需数据库密钥;不再使用 LOWDOWN_SUPABASE_URL / LOWDOWN_SUPABASE_KEY。
| 变量 | 效果 |
|---|---|
LOWDOWN_RECORD=0 | 仅透传,不记录任何内容 |
LOWDOWN_API_URL | 将记录写入(并从中查询)另一个 Lowdown 部署 |
每条记录包含的内容:actor、目标标签、工具名称(或协议方法)、结果、延迟、节点 ID,以及服务器报告时包含的 server_version(来自 initialize)和 schema_hash(与 Scanner 的哈希相同,来自 tools/list)。绝不记录参数和结果。
响应的分类方式(MCP 规范,工具 → 错误处理):
| 响应 | 记录为 | 在 success_rate 中 |
|---|---|---|
tools/call 结果 | 成功 | 是 |
带有 isError: true 的 tools/call 结果 | 失败,tool_error,error_layer: tool | 是 |
| JSON-RPC 错误 -32700 / -32600 / -32601 / -32602(请求格式错误、工具未知、参数无效) | 失败,error_layer: request | 否 — 计入 rejected_requests |
| 其他 JSON-RPC 错误(内部错误、超时) | 失败,error_layer: server | 是 |
initialize、tools/list、ping 等 | request_kind: protocol | 否 — 计入 protocol_requests |
success_rate 仅统计 organic 记录;seeded 和 synthetic 则在 by_source 中单独报告。每条记录都包含 recorder_version,因此可以区分 0.1.17 之前创建的记录(当时会将 isError 结果计为成功)。
公共 API
无需身份验证。
# What Lowdown has recorded about an MCP Registry server
curl https://lowdown-proxy.vercel.app/api/reputation/mcp:ai.agent-bev/bev-door
# A short name works when it matches one server; otherwise candidate names are returned
curl https://lowdown-proxy.vercel.app/api/reputation/bev-door
# An npm package: answers with the Registry entries that declare it (several are all returned as candidates)
curl https://lowdown-proxy.vercel.app/api/reputation/npm:maplith-bridge
# With node identity: adds task_breakdown and recent_trends for reported interactions
curl https://lowdown-proxy.vercel.app/api/reputation/mcp:ai.agent-bev/bev-door \
-H "x-lowdown-node-id: ld_your_node_id"
# Check your node's contribution
curl https://lowdown-proxy.vercel.app/api/node/ld_your_node_id
# Record an interaction (replace the example values with your own)
curl -X POST https://lowdown-proxy.vercel.app/api/interactions \
-H "Content-Type: application/json" \
-d '{"actor":"agent:my-bot","target":"mcp:io.github.user/server","target_type":"tool","task_type":"web_search","outcome":"success"}'
注册表名称包含 /;可以直接使用,也可以编码为 %2F。
该服务在 2026-10-20 的响应(已删节:完整响应包含 14 条每日记录、观测到的工具名称和观测方法):
{
"target": "mcp:ai.agent-bev/bev-door",
"resolved_target": "mcp:ai.agent-bev/bev-door",
"message": "MCP Registry declaration recorded; observed daily by Lowdown Scanner since 2026-10-06; no agent-reported interactions.",
"registry": {
"listed": true,
"declared_version": "0.2.5",
"status": "active",
"remote_hosts": ["mcp.bev-buyer.ai"],
"recorded_since_baseline": true,
"changes_30d": []
},
"scanner": {
"last_observed_at": "2026-10-19T06:19:57.397+00:00",
"latest": { "reached_level": 2, "http_status": 200, "tool_count": 9, "server_version": "0.2.5" },
"in_sample": true,
"first_observed_at": "2026-10-06T19:59:59.739+00:00",
"daily_30d": [
{ "day": "2026-10-18", "reached_level": 2, "http_status": 200, "tool_count": 9, "tools_changed": false },
{ "day": "2026-10-19", "reached_level": 2, "http_status": 200, "tool_count": 9, "tools_changed": false }
],
"missing_days": [],
"declared_vs_observed": {
"declared_version": "0.2.5",
"observed_server_version": "0.2.5",
"declared_hosts": ["mcp.bev-buyer.ai"],
"observed_hosts": ["mcp.bev-buyer.ai"]
}
},
"interactions": 0,
"success_rate": null,
"confidence": "none"
}
registry:官方 MCP Registry 对该服务的声明,由 Lowdown 自 2026-10-19 起记录,并包含过去 30 天内的变更。它会返回任何 Registry 条目,无论该条目是否被观测到。packages:Registry 条目声明的软件包。对于 npm 软件包,会根据 npm 的公开元数据每日记录:latest、latest_deprecated(仅指 npm 标记为 latest 的版本,不包括其他版本)、declared_is_latest、checked_at和近期变更。仅当 npm 返回 HTTP 404 时才会记录not_found;not_found_since表示某个曾经可用的软件包开始返回 404 的日期;如果从 Lowdown 首次检查起就一直返回 404,则为first_check。如果 latest 版本已弃用或返回 404,message的第一句会说明这一点。其他软件包类型会列出并标记为未检查。scanner.definition_changes:Lowdown 过去 30 天的每日观测中,该服务工具定义的变更。每天都会使用工具架构、描述和名称的哈希,与来自同一远程 URL 的上一次观测进行比较:pattern(no_change_observed、changed、changes_on_most_days或not_enough_observations)、last_change、stable_days_before_last_change,以及最多 5 条近期events。在依赖工具之前,可用它发现此前稳定的服务刚刚更改了工具。不会返回描述文本;变更是记录在案的事实,而非评判。source(最后一个字段):数据集、许可证(registry和scanner块采用 CC BY 4.0)、检索时间和引用行。重新发布任何记录时,请一并保留此字段。scanner:Lowdown Scanner 连接时观测到的内容(仅执行initialize和tools/list;从不调用工具):过去 30 天每天一条记录、无观测的日期及记录的原因、tools/list返回的工具名称,以及声明值与观测值的并列信息。HTTP 状态按观测结果如实报告:401就是401,而不是“失效”。对于观测样本之外的服务,会返回observed: false,这并不表示其状态如何。- 交互字段:
interactions是目标服务的所有已报告记录;rated_interactions是success_rate的分母,confidence基于此计算。Scanner 观测不会计入success_rate。
这些都是附有来源的记录事实,而非评分或排名。完整架构见 openapi.json。
为什么选择 Lowdown
Agent 通常一开始并没有关于工具过往行为的共同记录。他们无从得知哪些工具一直可靠、哪些会悄无声息地失败,或者哪些工具从未成功用于某类任务。
Lowdown 通过记录实际发生的情况来解决这个问题——不是评分,也不是评论,而是观测到的交互历史。Agent 在选择工具前查询 Lowdown 时,便是在借鉴其他通过同一代理运行过工具的 Agent 的集体经验。
流程很简单:
- 读取:选择工具前查询观测历史
- 使用:通过代理运行工具
- 写入:结果会自动记录,供下一个 Agent 使用
没有评分。没有人工整理。只有实际使用产生的信号。
观测结果是交互数据,不是独立的质量评判。
网络如何运作
Run proxy → node_id auto-created → interactions contributed → deeper Lowdown data
每个代理实例都是一个节点。
节点会向共享网络贡献交互数据。 贡献者可以获取更丰富的查询结果。
没有代币。 没有积分。 无需撰写评论。
只需运行代理,并分享 Agent 的实际使用体验。
设计原则
- 零配置:运行代理,其余一切都会自动完成。
- 优先透传:记录绝不会阻塞或降低 MCP 通信质量。
- 只记录事实:v0 记录成功/失败和延迟。不涉及质量评判。
- 始终标记来源:每条记录都带有
organic/seeded/synthetic标记,因此引导数据和真实流量始终可以区分。
状态
自 2026 年 9 月以来持续运行。自 2026 年 10 月 6 日起,Scanner 每天观测 MCP Registry 条目的固定样本:截至 10 月 18 日为 2,000 个条目;从 10 月 19 日起,样本扩大到 5,000 个条目,并保留最初的 2,000 个条目。每日报告和原始数据公开发布于 PetShopBros/lowdown-data,并在 Hugging Face 上每日同步一份。 自 2026 年 10 月 21 日起,Scanner 还会私下保存收到的完整工具定义,并且每种不同定义只保存一次,以便追踪其随时间的变化。公开数据和 API 响应只包含哈希值;定义本身不会公开。 有关范围内和明确排除的内容,请参阅 DESIGN.md。
许可证
MIT
한국어
Agent 不需要无条件信任一个从未打过交道的对象。
lowdown-proxy 会记录 AI Agent、工具和服务之间的交互,
并让任何人都能查询这些记录。在选择工具、调用 API,
或将任务委派给其他 Agent 之前,你可以先问:
网络对这个对象有何观察?
包裹 MCP 服务的 stdio 代理是第一个切入点。 信誉层不局限于 MCP,而是向所有 Agent、工具和服务开放。
记录的数据构成最基本的共同依据,可供其他 Agent 在作出判断时参考。
网络结构
프록시 실행 → node_id 자동 생성 → interaction 기여 → 더 깊은 Lowdown 조회
运行代理本身就是参与节点网络。贡献越多,可查询的数据就越详细。
Scanner 观测数据
如果 Registry 条目声明了 npm 包,响应中就会包含 packages 区块。它会显示从 npm 公开元数据中每日记录的最新版本、最新版本是否已弃用(不代表其他版本),以及是否返回 404;弃用或 404 会写在 message 的第一句话中。只有 npm 实际返回 404 时才会记录 404。也可以通过 npm:패키지명 查询;如果多个条目声明了同一个包,则会返回所有匹配项,不作筛选。
PyPI 包也会以 pypi 状态出现在同一个 packages 区块中。它会显示从 PyPI 公开 JSON·Index API 中每日记录的最新版本、该版本是否已撤回(不代表其他版本)、项目状态(active·archived·quarantined·deprecated,PEP 792),以及是否返回 404;撤回、归档、隔离、弃用或 404 会写在 message 的第一句话中。对于 404,PyPI Index API 会区分“项目存在但没有发布版本”(no_releases)和“该名称的项目不存在”(no_project)(not_found_kind)。也可以通过 pypi:패키지명 查询;名称会按 PEP 503 规范化后比较(忽略大小写以及 -、_、. 的差异)。
对于已注册到官方 MCP Registry 的远程 MCP 服务,响应还会包含 scanner 区块。scanner.definition_changes 只提供事实:在最近 30 天内每日观测到的工具定义(架构、说明和名称的哈希)与同一远程地址上一次观测相比,何时发生变化、变化频率如何。这样一来,在依赖长期稳定的服务之前,可以发现它最近是否发生了变化。不会返回说明文本原文。这些事实来自 Lowdown Scanner 直接连接服务后的观测(只调用到 initialize、tools/list,不会执行工具),并与交互数据分开,不计入 success_rate。HTTP 状态会原样显示观测到的值,不作解释。
公开数据只包含工具架构和说明文本的哈希。自 2026-10-21 起,Scanner 会私下保存收到的工具定义原文以追踪变化(每种不同定义保存一次)。原文不会公开,也不会通过 API 返回。按日期发布的每日记录页面(含 RSS·JSON Feed)会列出 Registry 声明变更、观测数量、工具定义变更数量和首次观测到的值,不包含分数或排名。
将应用日志附加到工具结果
有时工具调用成功,但后续应用(场景、游戏、开发服务器)会失败。真正的错误只记录在应用的日志文件中,Agent 无法得知。使用 --watch-log 后,每次 tools/call 的结果末尾都会附上自上次调用以来新写入日志中匹配 --log-pattern 的行。Agent 无需另外调用任何工具。日志内容只保留在本地,不会记录到 Lowdown。
기록 방식 (0.1.17~)
프록시는 공개 API(POST /api/interactions)로 기록합니다. DB 키가 필요 없고 LOWDOWN_SUPABASE_URL / LOWDOWN_SUPABASE_KEY는 더 이상 쓰지 않습니다. LOWDOWN_RECORD=0이면 기록 없이 패스스루만 합니다.
tools/call결과의isError: true는 실패(tool_error)로 기록합니다.- 잘못된 요청(-32700/-32600/-32601/-32602: 형식 오류, 없는 도구, 잘못된 인자)은 서버 실패와 분리해
rejected_requests로 셉니다.success_rate에는 들어가지 않습니다. initialize,tools/list같은 비도구 요청은protocol_requests로 따로 셉니다.success_rate는organic기록만 계산합니다.seeded/synthetic은by_source로 따로 보여줍니다. 일부러 실패시키는 테스트는--test로 실행하면synthetic으로 남습니다.- 각 기록에는 그 시점의
server_version(initialize),schema_hash(tools/list, Scanner와 같은 계산),recorder_version이 함께 남습니다. 인자와 결과 내용은 기록하지 않습니다. --target을 주지 않으면 명령줄 전체가 아니라 패키지·파일 이름 하나만 라벨로 씁니다.
설계 원칙 (요약)
- 설정 없음: 프록시를 실행하면 모든 것이 자동으로 처리됩니다.
- 패스스루 우선: 기록 로직이 실패하거나 느려도 실제 MCP 통신은 절대 막지 않습니다.
- 사실만 기록: v0는 성공/실패/지연시간만 기록합니다. 품질 판단은 범위 밖입니다.
- 출처 구분: 모든 기록은
organic/seeded/synthetic으로 태깅됩니다.
자세한 배경과 설계 원칙은 DESIGN.md를 참고하세요.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。