关于 Sanction
Sanction 是面向团队的 AI Agent 授权服务,用于治理支出、工具调用、凭证和资源配置。它可批准、拒绝或转交人工处理,并记录可审计的决策,支持策略重放。
主要功能
- 01支出与预算授权
- 02允许、拦截或升级工具调用
- 03人工审批及限时单次授权
- 04带范围限制的凭证库
- 05不可变策略版本与可重放凭证
- 06基于历史决策模拟策略
适用场景
- 01要求 Agent 购买前先获批准
- 02控制 Agent 可调用的 MCP 工具
- 03在团队及 Agent 钱包间实施预算
- 04依据历史决策评估策略变更
MCP 相关
Sanction 提供供 Agent 连接并请求授权的 MCP 钱包服务,也提供可拦截工具调用、筛选工具列表的 MCP 代理。宿主必须主动请求并遵守其决策;仅建立连接不会强制执行其他工具的规则。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://getsanction.com/mcpclaude mcp add --transport http ericlovold-sanction https://getsanction.com/mcp{"mcpServers":{"ericlovold-sanction":{"type":"http","url":"https://getsanction.com/mcp"}}}在 Cursor 中打开{"servers":{"ericlovold-sanction":{"type":"http","url":"https://getsanction.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"ericlovold-sanction":{"type":"http","url":"https://getsanction.com/mcp"}}}{"mcpServers":{"ericlovold-sanction":{"serverUrl":"https://getsanction.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://getsanction.com/mcp需要授权工具
详细介绍
Sanction
面向 AI Agent 的独立授权平面。
在 Agent 花钱、调用工具、接触凭证或配置资源之前,它会先向 Sanction 申请授权。Sanction 会批准、升级至人工审批,或拒绝。每项决策都会记录并可审计。Sanction 不隶属于任何平台:一个策略引擎即可跨模型提供商、支付渠道、身份体系和 Agent 生态系统作出响应。
需要一次人工审批?
将 Sanction 连接到你的 Agent,然后让它调用 sanction_authorize_tool,并设置 require_approval: true,同时提交确切的拟执行操作。通过现有审批链接或已配置的 Slack 频道批准或拒绝。批准后,该请求会获得一个限时、仅可使用一次的授权;Agent 必须先兑换授权才能执行操作。无需修改策略,被拦截的操作仍会被拦截。
个人用户可以免费使用 Sanction,无需银行卡。宿主必须询问并遵循决策;仅建立连接并不会强制执行对其他工具的授权。 选择你的宿主并尝试一次审批。
谁在使用 Sanction
- 治理自身 AI 的组织 — 这是主要应用场景。团队和部门会成为树状结构中的钱包;预算、工具规则和审批等级会得到强制执行,而不仅仅是在仪表板上展示 — 底层还提供可用于分摊费用的报告。警报会告知发生了什么;决策则会先行作出。
- 嵌入治理功能的平台和代理机构 — 你交付或为客户运行的 Agent,无论在哪里执行,都携带一个钱包:MCP 宿主、Bedrock,或通过 SDK 或 REST 接入你自己的技术栈。
- 个人用户 — 免费,无需银行卡,可用于个人和生产环境。
功能
一个策略决策引擎即可治理各类 Agent 操作:
| 受治理的操作 | Sanction 强制执行的内容 |
|---|---|
支出 (/authorize) | 自动批准额度、人工升级区间、单笔交易硬上限、每日和每月预算 — 检查和扣款以原子方式完成。 |
工具 (/authorize/tool) | 针对任意 MCP 工具或外部操作的阻止/允许/升级列表。升级请求会像支出请求一样进入审批收件箱。 |
凭证 (/exec + /mandate/verify + /credentials/inject) | 使用信封加密的 AES-256-GCM 凭证库(由 KMS 封装,密钥轮换)。注入凭证需要具有指定范围、有效期为 15 分钟的 mandate JWT,且权限级别 ≥ 凭证要求的级别。交易对手无需 API 密钥即可验证该授权。每次访问都会记录在审计日志中。 |
资源配置 (/authorize/provision) | 一次调用即可授权席位、许可证、基础设施 — 包括资源、条目、数量和金额。 |
能力 (/authorize/capability) | 技能、插件、新 API — 获取能力的治理方式与花钱相同。一份有序规则列表(阻止/允许/升级,前缀 glob 模式)会在新能力进入 Agent 之前对其进行限制。 |
实际决策流程如下 — 一次 POST /authorize 请求包含金额,并会产生三种可能结果,均为终结状态或可恢复状态:
- 已批准 →
{ "status": "approved" };预算计数器会在决策持久化的同一事务中扣减(咨询锁会让同级 Agent 排队,而非争抢)。 - 已升级 →
{ "status": "escalated", "request_id": "…" };人工审批者会在审批收件箱中看到请求。批准后会签发一次性授权,Agent 重试并附上grant_id即可兑换。策略会决定超时意味着什么(批准或拒绝)— 不会有请求无限期挂起。 - 已拒绝 →
{ "status": "denied", "decision_code": "PER_TXN_LIMIT", "remediation": "金额超过单笔交易限额。请拆分为更小的扣款,或请所有者提高限额。" }。代码是稳定的机器字符串(DAILY_BUDGET_EXCEEDED、CATEGORY_BLOCKED、WALLET_FROZEN、…),因此 Agent 可以据此分支并重新规划,而不必解析说明文字。同一请求的重放会返回相同代码。
引擎周边:
- 人工审批 → 一次性授权。 升级请求会进入审批收件箱 (仪表板 PWA、电子邮件、Slack)。批准后会生成一个单次使用、会过期的授权, 由 Agent 在重试时兑换。策略超时可确保最终得到明确结果。
- 席位。 Agent 就是一个席位,可交给任何持有者:指定持有者、承包商自动过期(超过 日期后密钥会默认拒绝访问)、保留历史记录的密钥轮换,以及根据同一模板批量创建。
- 逐级联动的预算。 钱包可嵌套成树;子树上限会以原子方式强制执行,因此同级 Agent 无法竞相突破父级限制。控制台的支出视图会绘制当月的预算续航情况——从钱包到席位, 显示累计消耗与上限、消耗速度和预计耗尽日期。
- 能主动找到你的通知。 默认通过电子邮件发送;机器可使用带签名的 JSON Webhook;
Slack 提供两种方式:粘贴传入 Webhook URL,直接链接到决策;或使用 添加到 Slack,
通过 OAuth 为每个工作区安装,并发送交互式 批准 / 拒绝 按钮。这些按钮会调用与
仪表板相同的
resolveApproval路径,并记录操作者。每种路由都会订阅各自的事件。 指南 - 可重放的证据。 每次策略编辑都会生成不可变的修订版本;每个决策都会存储当时生效的
修订版本,以及引擎评估的精确上下文。
GET /authorize/{id}/evidence会基于存储的上下文 重新运行纯规则,并证明结果可以复现。 - 基于真实历史进行假设分析。
POST /policy/simulate会在候选策略下重放已存储的决策—— 哪些调用会改变结果、哪些支出无法通过——让你在更改任何内容前先行了解。 - 审计层。
GET /audit-events会将每项决策、令牌日志和密钥访问合并为一个信息流 (包含 CSV 导出);GET /reporting/summary可涵盖任意时段,按天分桶并按席位汇总; 钱包统计会预测消耗速度和预计耗尽时间;每周一会在 Slack 中发送每周摘要。 - 防篡改导出。
GET /audit/export会提供受治理决策的签名哈希链快照:修改、删除或 重新排序任何行都会破坏哈希链,且链头由 Sanction 使用 HMAC 签名。监管机构或受治理的 客户可运行POST /audit/verify——无需数据库且自包含——证明签名后没有任何更改,精确 定位到第一个断裂的链接。 - 打开即显示名册的控制台。 仪表板首页会将钱包树显示为分组,将 Agent 显示为卡片,
每张卡片都带有授权状态标记(有效 / 已暂停 / 已阻止)。钱包管理的是成员,而不仅是密钥:
团队成员身份及角色(
owner/admin/viewer)、可切换查看所有成员身份的切换器, 以及只能查看、不能更改任何内容的查看者。 - 先观察,再强制执行钱包策略。 观察模式会记录引擎本来会采取的操作,同时放宽该 钱包自身的策略和上限。祖先子树上限仍会强制执行,并计入观察到的支出;冻结和身份验证 检查也仍会生效。检查可能被拒绝的请求及其成本,然后通过一次需要确认的点击,将每个资金池 切换为强制执行模式。
- 让支出与结果挂钩。 报告结果(
POST /outcomes)后,若钱包的单项结果成本超过上限, 就会将支出限制为需人工审批的支出。钱包可直接冻结,也可在树内重新分配预算。 - 大模型网关。 将模型 SDK 的基础 URL 指向
https://getsanction.com/api/gateway/<provider>,并使用x-sanction-key——用量会计量并受预算上限约束,无需对每次调用进行任何埋点。
上述每项安全声明都对应着强制执行代码和回归测试,详见 docs/TRACEABILITY.md——1,100+ 项测试,覆盖率门槛为语句/行 90%、函数 94%、分支 83%,其中包括并发和 Postgres 行级安全测试。
从策略包开始,而不是从空白策略开始
11 个可安装的策略包涵盖了常见场景,其中包括 Startup defaults、
Coding agent seat、MCP tool governance、Compliance baseline、
Client-safe launch 和 No-egress(Sanction Local)。GET /policy/packs 会列出这些策略包;
POST /policy/packs/{id}/preview 会在任何变更生效前,使用你最近 30 天的
真实决策模拟策略包;apply 会将其写入为一个策略修订版本。
在生产环境中更改策略
策略编辑绝非盲目尝试:
- 起草变更(或选择一个策略包)。
POST /policy/simulate会根据候选策略重放已存储的决策历史——准确查看哪些调用会改变结果,以及哪些支出无法通过审批。- 应用变更。编辑内容会成为不可变的修订版本;之后的每项决策都会记录当时生效的修订版本。
- 如果有人质疑某项决策,
GET /authorize/{id}/evidence会基于已存储的上下文重新运行规则,并证明结果可以复现。
何时使用凭证保险库
当凭证需要与支出和工具遵循同一套策略、审批和审计流程时,请使用 Sanction 的保险库——统一的审批模型, 无需单独的机密集群。如果你需要独立于 Agent 治理的大规模机密生命周期管理,请继续使用现有的 Vault 或 Secrets Manager;Sanction 会使用上游身份和机密,而不是取代它们。威胁模型:docs/SECURITY.md。
分发方式
平台供应商只管理其自身环境中的 Agent。Sanction 则可在 Agent 运行的任何地方进行授权。选择与你的技术栈集成所需的最短路径:
| 你想要…… | 使用 | 第一步 |
|---|---|---|
| 管理任何 MCP 宿主(Claude Desktop、Cursor、……) | MCP 钱包 | 粘贴 https://getsanction.com/mcp 或运行 npx sanction-mcp |
| 在 MCP 服务上拦截 tools/call 并过滤 tools/list | MCP broker | 注册上游服务,将宿主指向 /mcp/broker/<name> |
| 无需修改代码即可统计大模型支出 | 大模型网关 | 将 SDK 基础 URL 指向 /api/gateway/<provider> |
| 在 TypeScript 应用中管理 Agent | SDK | npm install sanction-sdk |
| 从其他任何环境调用引擎 | REST API | 使用 x-api-key 调用 POST /v1/authorize |
| 接入 AuthZEN 执行点 | PDP | 将其指向 /api/access/v1/evaluation |
| 在 AWS Bedrock 上编排 | Action Group | docs/BEDROCK.md |
完整选项:
- MCP(Agent 钱包) — 在任何 MCP 宿主中粘贴
https://getsanction.com/mcp(Streamable HTTP,x-api-key)或运行npx sanction-mcp。Agent 会携带钱包。Wallet Card · 指南 - AuthZEN PDP — 任何 OpenID AuthZEN 1.0 执行点都可以将 Sanction 用作其决策点,无需编写自定义代码(指南)
- TypeScript SDK —
npm install sanction-sdk(源代码):SanctionClient(Agent 平面)和SanctionAdminClient(管理平面),以及框架适配器(SanctionMiddleware、sanctionTool) - REST API — 直接集成;OpenAPI 3.0 规范位于
/api/openapi.json(兼容 Bedrock) - AWS Bedrock Action Group — 企业级 Agent 编排(设置指南)
- 大模型网关 — 无需修改代码即可统计跨提供商用量
最快体验首次决策的方式:运行 bash examples/setup.sh——只需一条命令即可创建钱包、Agent 和演示策略,并打印 Agent 所需的环境变量导出命令
(examples/ 中提供了可运行的客户端,可指向该环境)。
Agent 钱包 · 快速入门 · 入门套件 · LangChain · CrewAI · Vercel AI SDK · Bedrock Agents · Agent 集群 · AuthZEN PDP · 多租户运行手册 · 通知
API
基础 URL:https://getsanction.com/api/v1 — 按工作流分组。Agent
端点使用 x-api-key pxy_…;管理端点使用所有者的
x-mgmt-key sk_…。
请求许可 — Agent 调用的数据平面:
POST /authorize — Authorize a spend action (grant_id redeems an approval)
POST /authorize/quote — Authorize an x402 payment challenge before the wallet signs
POST /authorize/tool — Authorize a tool invocation
POST /authorize/provision — Authorize provisioning (resource + line item + $)
POST /authorize/capability — Authorize acquiring capability (skill/plugin/API)
GET /authorize/{id} — Poll an escalated decision (grant receipt included)
POST /tokens — Log LLM token consumption against the daily budget
POST /outcomes — Report an outcome; spend becomes answerable to results
升级交由人工处理 — 事情已上报,由人来决定:
GET/POST /approvals — The approval inbox; approving mints a one-use grant
携带凭证 — 使用范围受限的授权,而非原始密钥:
POST /exec — Mint a scoped mandate JWT (15-min TTL)
POST /mandate/verify — Counterparty checks a presented mandate (no API key)
POST /credentials/inject — Inject a decrypted credential (Bearer JWT)
POST /credentials/vault — Store an encrypted credential (owner)
POST /exec/revoke — Kill a live execution token (owner)
证明发生了什么 — 审计、证据、报告:
GET /authorize/{id}/evidence — Audit proof: re-run the pure rules over the stored
context and confirm the recorded outcome reproduces
GET /audit-events — Unified audit feed (decisions, tokens, secret access; ?format=csv)
GET /reporting/summary — Any range ≤92 days: totals, day buckets, per-agent
GET /reporting/daily-summary — One-day rollup
GET /audit/export — Signed, hash-chained decision export (owner; ?download=1)
POST /audit/verify — Verify a tamper-evident export (recompute chain + signature)
制定策略 — 安全编辑,先证明影响(所有者):
GET/PATCH /wallets/policy — Read / update budgets, thresholds, lists, capability rules
POST /policy/simulate — Replay real history under a candidate policy (what-if)
GET /policy/packs — List installable policy packs (public)
POST /policy/packs/{id}/preview — Simulate a pack against your last 30 days
POST /policy/packs/{id}/apply — Install a pack as the wallet policy (writes a revision)
管理整个集群 — 钱包、席位、密钥(所有者):
POST /wallets — Create a wallet + policy (management key shown once)
GET /wallets/stats — Today + month-to-date stats + burn projections
GET /wallets/tree — Subtree spend rollup
POST /wallets/keys/rotate — Rotate the wallet's data-encryption key
POST /agents — Register a seat (holder, expiry; key shown once)
POST /agents/batch — Stamp one template across up to 50 seats
GET/PATCH /agents — List / per-seat budgets, clearance, holder, expiry
POST /agents/rotate — Rotate a seat's key (optionally pass to a new holder)
POST /webhooks — Register a notification route (per-event subscriptions)
POST/GET/DELETE /broker/upstreams — Register the MCP servers the broker may front (BROKER-1)
POST /wallets/freeze — Pause every agent action in this wallet and its subtree
POST /wallets/unfreeze — Resume exactly where the fleet stopped
POST /wallets/reallocate — Move budget across the wallet tree
POST /wallets/bootstrap-key — Mint a management key for a legacy wallet
GET /outcomes — Reported outcomes + cost-per-outcome state
GET /activity — Recent decision activity for the console
使用标准协议 — AuthZEN PDP + AARP(Agent 密钥;基础
https://getsanction.com/api — 规范规定的路径):
POST /access/v1/evaluation — OpenID AuthZEN 1.0 evaluation (decision-only)
POST /access/v1/evaluations — AuthZEN batch, all three evaluation semantics
POST /access/v1/access-request — AARP: open an escalation from a signed binding token
GET /access/v1/access-request/{id} — AARP task status (maps to the profile's states)
完整架构: /api/openapi.json。
MCP 设置
Agent 携带 Sanction 钱包。发现方式:GET /.well-known/wallet-card.json。
stdio MCP 采用协作模式——主机必须在执行操作前询问。
Cursor 插件(MCP + skills):cursor-plugin/。
{
"mcpServers": {
"sanction": {
"command": "npx",
"args": ["sanction-mcp"],
"env": {
"SANCTION_API_URL": "https://getsanction.com/api/v1",
"SANCTION_API_KEY": "pxy_..."
}
}
}
}
技术栈
Next.js 16(App Router)+ TypeScript · Neon Postgres 上的 Prisma 7(在数据库层强制执行行级安全)· Vercel · jose(HS256,固定 alg)· AES-256-GCM 信封加密,生产环境中以 AWS KMS 为信任根。
贡献与安全
CONTRIBUTING.md 将指导你从克隆代码到提交绿色 PR
(npm install && npm run check — 单元测试无需数据库)。
安全模型与漏洞披露:docs/SECURITY.md。
术语表:docs/DOMAIN.md。
定价
免费,或签订协议。个人用户可免费使用——无需信用卡,可用于个人和生产环境。 除此之外,可根据你的部署需求定制企业协议:SSO、策略管理、审计导出、SLA。 联系我们。
许可证
packages/sanction-mcp(MCP 客户端)— MIT。可将其嵌入任何地方。- 其他所有内容(服务端、仪表板、API)— Functional Source License 1.1(FSL-1.1-MIT)。源代码可用:可用于任何用途,也可自托管,但不得提供竞争性服务。发布两年后转为 MIT 许可证。
- 超出 FSL 范围的商业用途 — Commercial License guide(在线查看)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。