lowdown-proxy について
lowdown-proxyは、MCPツールやサービスとのやり取りを記録するstdioプロキシで、Lowdownを照会するMCPサーバーも備えています。Registry情報やパッケージ状況、スキャン結果、実利用履歴を確認したいAgent利用者向けです。
主な機能
- 01MCP通信を中継し結果と遅延を記録
- 02Registry宣言とnpmの状況を照会
- 03日次スキャンとツール定義の変更を確認
- 04ツールを比較し利用結果を記録
- 05条件に合うアプリログを結果に追加
活用シーン
- 01接続前にサービスの履歴を確認
- 02複数ツールの報告成功率を比較
- 03ツール呼び出し時のアプリログを確認
MCP 対応
stdioプロキシとしてMCPサーバーを包み、やり取りをLowdownに記録できます。またMCPサーバーとして、検索、比較、利用記録、ノード統計のツールを公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
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
エージェントは、これまで一度もやり取りしたことのない相手を信頼する必要はありません。
lowdown-proxy は、AI エージェント、ツール、サービス間のやり取りを記録し、その履歴を誰もが検索できるようにします。ツールを選ぶ前、API を呼び出す前、または別のエージェントに委任する前に、*この相手について、ネットワークは何を把握しているのか?*と尋ねることができます。
MCP サーバー向けの透過的な stdio プロキシが、最初のエントリーポイントです。やり取りの履歴レイヤーは、MCP に限らず、あらゆるエージェント、ツール、サービスで利用できます。
背景と設計原則については、DESIGN.md をご覧ください。
クイックスタート
npx lowdown-proxy -- npx some-mcp-server
これだけです。サインアップも設定も不要です。初回実行時に、~/.lowdown/node.json にノード ID が自動的に作成されます。やり取りをネットワークに提供すると、その見返りに、より詳細なデータを取得できます。
クライアント設定で、任意の 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"]
}
}
}
エージェント向け検索ツール(MCP サーバー)
同じパッケージには MCP サーバー(stdio)も同梱されており、エージェントが 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 経由でも利用できます。Public API、OpenAPI ドキュメント、llms.txtをご覧ください。Scanner のデータセットと日次レポートは、PetShopBros/lowdown-data(CC BY 4.0)で公開されており、Hugging Faceにも毎日コピーが掲載されます。日次記録ページ(RSS および JSON Feed 付き)には、各 UTC 日の Registry 宣言の変更、観測件数、ツール定義の変更件数、初めて観測された値が一覧表示されます。スコアやランキングはありません。
ツールの結果に含まれるアプリのログ
ツールが正常に動作しても、その背後にあるアプリが失敗することがあります。シーン、ゲーム、開発サーバーが実際のエラーを独自のログファイルに出力しても、エージェントには見えません。--watch-log を使うと、この問題を解消できます。各 tools/call の後、前回の呼び出し以降にログへ書き込まれた行のうち、--log-pattern に一致するものがツールの結果に追加されます。エージェントが別の操作を呼び出す必要はありません。
{
"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"
]
}
}
}
結果に追加のテキスト項目として、エージェントに表示される内容は次のとおりです。
[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=の値、長い 16 進文字列はマスクされます。 - 事実のみが対象です。行は診断や修正案を加えず、ログから引用されます。JSON-RPC エラーを含む結果にはコンテンツがないため、保留中の行は次に成功した結果へ追加されます。
- すべてローカルに保持されます。ログの行が Lowdown に記録されることはありません。
オプション
| フラグ | 説明 | デフォルト |
|---|---|---|
--actor | 呼び出し元エージェントの識別子 | anonymous |
--target | 対象ツールのラベル | コマンドに含まれるパッケージ名またはファイル名(コマンドライン全体ではありません) |
--source | organic | seeded | synthetic(内部/テスト専用) | organic |
--test | このセッションを synthetic として記録します。サーバーの集計対象にならないよう、意図的な失敗テストに使用してください | off |
--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 デプロイメントに記録(および照会)します |
各レコードに含まれる内容:エージェント、対象ラベル、ツール名(またはプロトコルメソッド)、結果、レイテンシ、ノード ID、さらにサーバーから報告された場合は server_version(initialize から取得)と schema_hash(Scanner と同じハッシュ。tools/list から取得)。引数と結果は記録されません。
応答の分類方法(MCP 仕様の Tools → Error Handling):
| 応答 | 記録内容 | 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 が含まれるため、isError の結果を成功として数えていた 0.1.17 より前に作成されたレコードと区別できます。
パブリック 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、最近の変更があります。not_foundは npm が HTTP 404 を返した場合にのみ記録されます。not_found_sinceは、利用可能だったパッケージが 404 を返し始めた日、または Lowdown による最初の確認以降 404 を返し続けている場合はfirst_checkを示します。非推奨の最新バージョンや 404 は、messageの最初の文に記載されます。その他のパッケージタイプは一覧表示され、未確認としてマークされます。scanner.definition_changes:過去 30 日間における Lowdown の毎日の観測で確認された、サーバーのツール定義の変更です。同じリモート URL からの前回の観測と、ツールスキーマ、説明、名前のハッシュを使って各日を比較します。pattern(no_change_observed、changed、changes_on_most_days、not_enough_observations)、last_change、stable_days_before_last_change、および最近のeventsを最大 5 件含みます。安定していたサーバーのツールが最近変更されたことに気づき、ツールに依存する前に確認するために使用してください。説明文は返されません。変更は記録された事実であり、評価ではありません。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はこれを基にしています。スキャナーによる観測はsuccess_rateには含まれません。
これらはスコアやランキングではなく、ソースを伴う記録済みの事実です。スキーマ全体は openapi.json にあります。
Lowdown を選ぶ理由
エージェントは、ツールの過去の挙動に関する共有履歴を持たずに使い始めることがよくあります。どのツールが信頼できるのか、どれがひそかに失敗するのか、特定のタスクタイプで一度も正常に使われたことがないツールはどれなのかを知る手段がありません。
Lowdown は、実際に起きたことを記録することでこの問題を解決します。評価でもレビューでもなく、観測されたインタラクションの履歴を記録します。ツールを選ぶ前にエージェントが Lowdown に問い合わせると、同じプロキシを実行した他のエージェントの集合的な経験を利用できます。
仕組みはシンプルです。
- 読み取る:ツールを選ぶ前に、観測された履歴を問い合わせます
- 使う:プロキシ経由でツールを実行します
- 書き込む:結果が自動的に記録され、次のエージェントに引き継がれます
評価なし。人による選別なし。実際の使用から得られるシグナルだけです。
観測内容はインタラクションデータであり、独立した品質評価ではありません。
ネットワークの仕組み
Run proxy → node_id auto-created → interactions contributed → deeper Lowdown data
すべてのプロキシインスタンスがノードです。
ノードはインタラクションデータを共有ネットワークに提供します。 貢献者は、より充実した問い合わせ結果を利用できます。
トークンなし。 ポイントなし。 書くべきレビューなし。
プロキシを実行して、エージェントが経験したことを共有するだけです。
設計原則
- 設定不要:プロキシを実行すれば、あとはすべて自動です。
- まずはパススルー:記録によってMCP通信がブロックされたり、性能が低下したりすることはありません。
- 事実のみ:v0では成功/失敗とレイテンシを記録します。品質の評価は対象外です。
- 常に由来をタグ付け:すべての記録に
organic/seeded/syntheticが付与されるため、ブートストラップデータと実際のトラフィックを常に区別できます。
ステータス
2026年9月から継続して稼働しています。2026年10月6日以降、ScannerはMCP Registryのエントリーから固定サンプルを毎日観察しています。10月18日までは2,000件、10月19日からは最初の2,000件をすべて含む5,000件のサンプルを観察しています。日次レポートと生データはPetShopBros/lowdown-dataで公開されており、Hugging Faceにも毎日コピーが掲載されます。 2026年10月21日以降、Scannerは受け取ったツール定義全体も、変更を時系列で追跡できるよう、非公開で、定義ごとに1回保存しています。公開データとAPIレスポンスに含まれるのはハッシュのみで、定義そのものは公開されません。 対象範囲と対象外とした事項については、DESIGN.mdをご覧ください。
ライセンス
MIT
韓国語
エージェントが、一度も取引したことのない相手を無条件に信頼する必要はありません。
lowdown-proxyは、AIエージェント、ツール、サービス間のやり取りを記録し、
その履歴を誰でも参照できるようにします。ツールを選択したり、APIを呼び出したり、
別のエージェントに作業を委任したりする前に、次のことを尋ねられます。
ネットワークはこの相手について何を確認したのか?
MCPサーバーをラップするstdioプロキシが、最初の入口です。 評判レイヤーはMCPに限定されず、あらゆるエージェント、ツール、サービスに開かれています。
記録されたデータは、ほかのエージェントが判断する際に参考にできる、最小限の共通根拠になります。
ネットワーク構造
프록시 실행 → node_id 자동 생성 → interaction 기여 → 더 깊은 Lowdown 조회
プロキシを実行すること自体が、ノードへの参加になります。貢献するほど、より詳細なデータを参照できます。
Scannerの観察データ
Registryのエントリーでnpmパッケージが宣言されている場合、レスポンスにはpackagesブロックが含まれます。npmの公開メタデータから毎日記録した最新バージョン、最新バージョンがdeprecatedかどうか(ほかのバージョンを示すものではありません)、404かどうかを示し、deprecatedまたは404の場合はmessageの最初の文に記載します。404は、npmが実際に404を返した場合に限り記録します。npm:パッケージ名でも照会でき、複数のエントリーが同じパッケージを宣言している場合は、選別せずに候補をすべて返します。
PyPIパッケージも、同じpackagesブロックにpypiの状態で含まれます。PyPIの公開JSON・Index APIから毎日記録した最新バージョン、そのバージョンがyankedかどうか(ほかのバージョンを示すものではありません)、プロジェクトの状態(active・archived・quarantined・deprecated、PEP 792)、404かどうかを示し、yanked・archived・quarantined・deprecated・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は受け取ったツール定義の原文を、変更追跡のために非公開で保管します(異なる定義ごとに1回)。原文は公開せず、APIからも返しません。日付ごとの日次記録ページ(RSS・JSON Feedを含む)には、Registryの宣言変更、観察数、ツール定義の変更数、初めて観察された値が、スコアや順位を付けずに掲載されます。
アプリログをツールの結果に添付する
ツール呼び出しが成功しても、その後のアプリ(シーン、ゲーム、開発サーバー)が失敗することがあります。本当のエラーはアプリのログファイルにしか記録されず、エージェントにはわかりません。--watch-logを指定すると、各tools/callの結果に、直前の呼び出し以降にログへ新たに記録された行のうち、--log-patternに一致するものが末尾に追加されます。エージェント側で別途呼び出す必要はありません。ログの内容はローカルにのみ保持され、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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。