ポリシーの適用、Human-in-the-loopによるゲート制御、および改ざん耐性のある検証レジャーを実装した、MCP server向けのノーコードプロキシを提供します。
別名 dev-prathap/ATTEST, attest-proxy, attestlayer
- スター
- 1
- ツール
- —
- ダウンロード数(30日間)
- 206
- 最新バージョン
- 0.1.0
- 最終コミット
- 2026年9月24日
- ライセンス
- MIT
Attest proxy MCPとは
Attest proxyはMCPサーバーです。 ポリシーの適用、Human-in-the-loopによるゲート制御、および改ざん耐性のある検証レジャーを実装した、MCP server向けのノーコードプロキシを提供します。.
プロジェクトのREADMEから生成された概要
Attest proxy MCP server について
Attest proxyは、ポリシーの適用とHuman-in-the-loopによるゲート制御を通じて、MCP serverを保護するためのノーコードソリューションを提供します。これは、アクションが許可されるかどうかを判断し、必要に応じて人間の承認を待機し、リードバック検証を使用してエージェントが報告した成功がシステム記録の実際の状態と一致することを確認する中間レイヤーとして機能します。この構成により、開発者は既存のツールロジックを書き換えることなく、AIエージェントに責任のレイヤーを追加できます。
ユーザーは、PythonまたはTypeScriptのSDKを使用するか、任意のMCP serverの前面にプロキシを配置することでこれを実装できます。システムは、verified、acknowledged、unverifiedなどの特定の検証レベルとともに、すべての操作を記録する改ざん耐性のあるハッシュチェーン型レジャーを維持します。SDKはMITライセンスのオープンソースですが、Attest Cloudでは、共有レジャー、組織ポリシー、コンプライアンスエクスポートを備えたマネージドバージョンを提供しています。プロキシは、ハッシュとプレビューのみをクラウドに送信するため、機密性の高いベンダー用トークンがお客様のプロセス内に留まることを保証します。
できること
- 1機密性の高いアクションに対する人間の承認の強制開発者はプロキシを設定して、コマンドが送信される前にエージェントの実行を一時停止し、人間が承認またはパラメータを編集するのを待機させることができます。
- 2実データに基づいたエージェントアクションの検証ソースからデータをリードバックすることで、エージェントが実際にCRMを正しく更新したかどうかを確認するためにシステムを使用できます。
- 3セキュアなレジャーによるエージェントの動作監査ツールが成功を報告したものの、基盤となるシステムが更新に失敗した場合を検知するために、すべてのエージェント活動の改ざん耐性のある記録を保持します。
プロジェクトの README から作成されています。すべてのユースケースは、その引用と照らし合わせて確認されています。
Attest proxy MCPのインストール方法
フォーマット検証日 2026年11月10日Cursor に追加Gooseに追加Claude CodeにAttest proxy MCPをインストール
$ claude mcp add --env 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' attest-proxy -- uvx attestlayerCursorにAttest proxy MCPをインストール
~/.cursor/mcp.json
{
"mcpServers": {
"attest-proxy": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
}
}
}
}VS CodeにAttest proxy MCPをインストール
.vscode/mcp.json
{
"servers": {
"attest-proxy": {
"type": "stdio",
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
}
}
}
}VS Code CLIにAttest proxy MCPをインストール
$ code --add-mcp '{"name":"attest-proxy","type":"stdio","command":"uvx","args":["attestlayer"],"env":{"SLACK_BOT_TOKEN":"<YOUR_SLACK_BOT_TOKEN>"}}'Claude DesktopにAttest proxy MCPをインストール
claude_desktop_config.json
{
"mcpServers": {
"attest-proxy": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
}
}
}
}CodexにAttest proxy MCPをインストール
$ codex mcp add attest-proxy --env 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' -- uvx attestlayerCodex config.tomlにAttest proxy MCPをインストール
~/.codex/config.toml
[mcp_servers.attest-proxy] command = "uvx" args = ["attestlayer"] [mcp_servers.attest-proxy.env] SLACK_BOT_TOKEN = "<YOUR_SLACK_BOT_TOKEN>"
Gemini CLIにAttest proxy MCPをインストール
$ gemini mcp add -s user -e 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' attest-proxy uvx -- attestlayerGemini settings.jsonにAttest proxy MCPをインストール
~/.gemini/settings.json
{
"mcpServers": {
"attest-proxy": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
}
}
}
}設定
SLACK_BOT_TOKENシークレットSlack bot token for confirm cards
ATTEST_AUTO_APPROVEATTEST_INBOX_URLURL of the confirm inbox (attest serve) linked from Slack cards
ATTEST_LEDGERLedger SQLite path (default .attest/ledger.sqlite)
ATTEST_POLICYPath to a policy YAML
ATTEST_SLACK_CHANNELSlack channel for confirm cards
| 名前 | 説明 | 種類 |
|---|---|---|
| SLACK_BOT_TOKEN | Slack bot token for confirm cards | シークレット |
| ATTEST_AUTO_APPROVE | — | |
| ATTEST_INBOX_URL | URL of the confirm inbox (attest serve) linked from Slack cards | |
| ATTEST_LEDGER | Ledger SQLite path (default .attest/ledger.sqlite) | |
| ATTEST_POLICY | Path to a policy YAML | |
| ATTEST_SLACK_CHANNEL | Slack channel for confirm cards |
自動チェック
実行日 2026年11月14日完全なレポート →自動チェックに合格しました。これはセキュリティ監査ではありません。コードを読み、サーバーに必要最小限のアクセス権を与えてください。 チェックの仕組み
- ソースリポジトリがリンクされており、アクセス可能dev-prathap/attest is public and reachablegithub.com/dev-prathap/attest ↗合格
- パッケージがこのリポジトリをソースとして指定attestlayer names dev-prathap/attest as sourcepypi.org/project/attestlayer/ ↗合格
- ビルドの来歴 (Sigstore 証明)No build attestation published for this release未チェック
- オープンソースライセンス (OSI)MITspdx.org/licenses/MIT.html ↗合格
- 過去1年以内にコミットまたはリリースありLast commit or release 2026-09-24github.com/dev-prathap/attest ↗合格
- OpenSSF Scorecard未チェック
- パッケージ名が有名なパッケージに酷似していないNo popular package one edit away from attestlayer合格
- パッケージおよびその依存関係に重大な勧告なし7 resolved dependencies checked; no critical advisoryosv.dev ↗合格
- モデルへの隠れた指示がない0 tool descriptions and the README read; no override phrases, credential paths or hidden characters合格
- 破壊的なツールがラベル付けされている未チェック
- リモートエンドポイントが MCP ハンドシェイクに応答未チェック
README
GitHubで見るAttest — prove what your AI agent actually did
Decide → Gate → Verify → Attest. Your agent sends the email, updates the CRM, moves the money. Attest decides whether it may, gates it behind a human when it matters, reads back from the system of record to check it actually happened, and records tamper-evident evidence either way.
Attest never executes your action. Your tool does. That is why it works with any app and any framework on day one.
Your agent says it worked. Did it?
Two identical CRM writes, both reported success by the tool, both approved by a human:
$ attest ledger
#2 2026-09-19 10:16:46 someweirdcrm.create → leads ask approved unverified a09e7641db12
#1 2026-09-19 10:16:46 someweirdcrm.create → leads ask approved verified 77a6d99a60f6
The second one read back clean. The first did not, and the ledger says which field disagreed:
{ "level": "unverified", "matched": false,
"evidence": { "compared": 4, "exists": true, "failed": ["stage"],
"fields": { "stage": { "want": "qualified", "got": "new", "ok": false } } } }
A trace would have shown two green steps. That gap is the entire product.
Install
pip install attestlayer # Python
npm install attestlayer # TypeScript — byte-identical ledger format
import attest
@attest.action(system="gmail", verb="send", target="to")
def send_email(to, subject, body): ...
import { Attest } from "attestlayer";
const at = new Attest({ agent: "followup-agent@v3", readers: { gmail: process.env.GMAIL_TOKEN! } });
const sendEmail = at.wrap({ system: "gmail", verb: "send", target: "to" },
async ({ to, subject, body }) => gmail.send({ to, subject, body }));
That is the whole change. The first external send now pauses for a human, and the ledger row says
acknowledged, or verified once Attest can read back with the agent's own credentials
(Attest(readers={"gmail": service})). Nothing else in your code moves.
Verification is layered, and it never overstates
Every row states exactly how much was checked. A check that could not run is never dressed up as a pass.
| level | what it means |
|---|---|
verified |
read back from the system of record, and the fields matched |
verified-custom |
your own check ran and passed |
acknowledged |
the action was accepted, but no read-back could run here |
attested-only |
recorded with no verifier available for this action |
unverified |
a check ran and contradicted the claim |
Only a contradiction earns unverified. Missing credentials, a read-only scope or an unsupported verb
degrade to acknowledged, because "we could not check" and "it did not happen" are different facts.
Where it plugs in
| surface | how |
|---|---|
| Decorator / wrapper | @attest.action(...) · at.wrap(...) |
| LangGraph | tool node wrapper, gate as a graph interrupt |
| OpenAI Agents · Claude Agent SDK · CrewAI · DeerFlow | adapters in attest/ |
| MCP | zero-code proxy in front of any server, plus a verify server |
| HTTP gateway | point outbound traffic at it, no SDK at all |
| API only | POST the descriptor yourself |
Human confirmation lands where the team already works: Slack, the web inbox, a webhook, a LangGraph interrupt, or the console. Approvers can edit the parameters before approving, and the edit is recorded.
The record itself
Hash-chained ledger, SQLite locally and Postgres per organisation in the cloud. Signed checkpoints let
you prune old rows and still verify the chain. Optional Ed25519 signing, and external anchoring to a
file, a git repo or an HTTP endpoint. Exports: JSON, CSV, the IETF draft-sharif-agent-audit-trail
JSONL format, and an EU AI Act event-log pack.
Overhead is roughly a sixth of a millisecond per action, measured in benchmarks/ (published numbers).
Try it locally
python examples/unknown_app.py # an app Attest has never seen, L1 → L3
ATTEST_AUTO_APPROVE=1 python examples/langgraph_agent.py
cd deploy && cp .env.example .env && docker compose up # cloud API :8400 + dashboard :3400
Attest Cloud
The SDK is MIT and works standalone with a local ledger. Attest Cloud adds the shared ledger, the
confirm inbox, versioned org policy, agent keys and compliance exports. Your vendor tokens never reach
it: read-back happens in your process with your own credentials, and only hashes and previews are sent.
Self-host it from deploy/, or read DEPLOY.md.
Install channels
| where | how |
|---|---|
| PyPI | pip install attestlayer → attest, attest-mcp, attest-mcp-server, attest-gateway |
| npm | npm install attestlayer |
| MCP Registry | io.github.dev-prathap/attest (verify server) · io.github.dev-prathap/attest-proxy (zero-code proxy) |
| Smithery | attestlayer/attest |
| Claude Desktop | attest-<version>.mcpb on the latest release |
| Docker | ghcr.io/dev-prathap/attest-api · ghcr.io/dev-prathap/attest-dashboard |
Documentation
Full docs at dev-prathap.github.io/ATTEST — quickstart · verification levels · policy · read-back recipes · ledger & exports · hardening
Repository
| path | what |
|---|---|
| attest/ | Python SDK — descriptor, policy, ledger, verification ladder, gates, adapters, MCP proxy, CLI |
| packages/attest-ts/ | TypeScript SDK — same canonical hashes, fixture-tested against Python |
| cloud/ | Attest Cloud — FastAPI + Postgres: orgs, keys, policy versions, ledger, confirm inbox, exports |
| dashboard/ | Next.js dashboard — ledger drill-down, confirm inbox, policy and keys |
| examples/ | unknown app, LangGraph, OpenAI Agents, MCP config, API-only, cloud |
| deploy/ | Dockerfiles and compose |
| benchmarks/ | what the layer costs per action |
| docs/ | documentation site source, plus design notes |
pytest -q && (cd cloud && pytest -q) # 355 + 37 offline tests
pytest tests/live # 8 live suites; need real credentials, skipped without them
Contributing
Read-back recipes are the easiest place to start: each one teaches Attest how to confirm a write in one more app, and needs nothing but that app's read API. See CONTRIBUTING.md, and SECURITY.md for reporting a vulnerability.
Principles
- We never execute your action. Your tool executes; we decide, gate, verify and record.
- Coverage is universal. Verification depth is layered and stated honestly on every row.
- Open-source SDK under MIT. Paid cloud for the shared ledger, inbox, policy and exports.
Design notes
The thinking behind the product, kept in the open: vision · product · universal adapter · architecture · market · build plan · decisions · phase plan
Lineage
Attest's core mechanisms are extracted from two working codebases: DO (policy engine, read-back
verification pairs, evidence ledger) and DeerFlow (tool receipts, verification patterns, MCP and
chat-channel adapters), which run against real Gmail, Slack, HubSpot, Notion, Linear and Google
Workspace. Attest ships its own live suites for those systems in tests/live/; they
need real credentials and are skipped without them.
Attest proxy MCPのよくある質問
Attest proxy MCPをClaude Codeに追加するには
ターミナルでclaude mcp add --env 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' attest-proxy -- uvx attestlayerを実行します。すべてのプロジェクトで利用するには--scope userを追加します。
Attest proxy MCPをCursorに追加するには
~/.cursor/mcp.jsonを開き、上記のインストールセクションに示すCursor設定を使ってmcpServersの下にサーバーを追加します。
Attestはエージェントに代わってアクションを実行しますか?
いいえ、Attest自体がアクションを実行することはありません。お客様自身のツールやエージェントが実行を行い、Attestは意思決定、ゲート制御、および検証を管理します。
Attestはアクションが実際に実行されたことをどのように検証しますか?
システム記録(system of record)からのリードバックメカニズムを使用して、システムのフィールドが意図したアクションと一致するかどうかを確認します。
検証レベルにはどのようなものがありますか?
検証レベルには、verified(リードバックにより一致)、verified-custom(カスタムチェックに合格)、acknowledged(アクションは承認されたがリードバック不可)、attested-only(検証なしで記録)、unverified(チェック結果が主張と矛盾)があります。