World Monitor
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 104 tools.
Authorizes MCP tool calls against a session policy, not one call at a time.
选择你使用的 AI 应用,然后复制设置。
通过 3/3 项检查 · 在你的电脑上运行
第一步:你用哪个 AI?
选择你用的应用,步骤会显示在下方。
可连接 Claude,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次) · 仅限电脑上的 Claude 应用(Windows 或 Mac),网页和手机不可用
SettingsDeveloperEdit Config
{
"mcpServers": {
"clayseal": {
"command": "uvx",
"args": [
"clayseal"
]
}
}
}用 Clay Seal 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude 说正在使用 Clay Seal,或回答中出现 Clay Seal 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
ChatGPT 暂时无法连接 Clay Seal
Clay Seal 需要安装在你的电脑上,而 ChatGPT 只能连接在网上运行的服务器
A · 使用能连接 Clay Seal 的应用
B · 其他 类中能连接 ChatGPT 的其他服务器
从同类中使用较多的里挑选,仅限用地址即可连接、无需密钥的
可连接 Claude Code,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次)
Mac:按 Command+空格,输入 Terminal · Windows:打开 PowerShell
claude mcp add --scope user clayseal -- uvx clayseal应能看到 Clay Seal 在列表中并显示已连接
用 Clay Seal 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Claude Code 说正在使用 Clay Seal,或回答中出现 Clay Seal 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同
可连接 Cursor,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次)
用 Clay Seal 告诉我你能帮我做什么,然后做一件给我看✓ 如果 Cursor 说正在使用 Clay Seal,或回答中出现 Clay Seal 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 Cursor 帮助页面核实 · 你的界面可能因版本略有不同
可连接 VS Code,但需要先准备
需要先在电脑上安装 Python (uv)(只需一次)
用 Clay Seal 告诉我你能帮我做什么,然后做一件给我看✓ 如果 VS Code 说正在使用 Clay Seal,或回答中出现 Clay Seal 的工具名称,就表示连接成功
菜单名称已于 2026年11月11日 对照 VS Code 帮助页面核实 · 你的界面可能因版本略有不同
Claude Code
claude mcp add --scope user clayseal -- uvx claysealClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"clayseal": {
"command": "uvx",
"args": [
"clayseal"
]
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"clayseal": {
"command": "uvx",
"args": [
"clayseal"
]
}
}
}VS Code (mcp.json)
{
"servers": {
"clayseal": {
"type": "stdio",
"command": "uvx",
"args": [
"clayseal"
]
}
}
}这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。
在你的电脑上运行,适用于
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月12日
注册名称已通过 GitHub 账户 clayseal 验证,该账户拥有此仓库
代码最后更新于2个月前
使用 MIT
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
提问、分享技巧或报告无法使用。按“有帮助”数量排序。
还没有评价
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于2个月前,最新版本(0.6.2)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:World Monitor, Claude Flow, Windmill
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 104 tools.
AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Incorporating business-process-logic constraints into AI systems.
Your agent has a $1,000 refund ceiling. It issues eleven refunds of $900. Every call is inside the per-refund limit, so every per-call check passes, and $9,900 goes out the door. Nothing that looks at one call at a time can see this.
Clay Seal sits in front of your tools and judges each call against the whole session: the grant, the running totals, where the arguments came from, and what the agent has already done.
| Start here | install and watch it stop two attacks |
| Use it in two lines | wrap tools you already have |
| In front of an MCP server | no code change |
| Write the policy | the grant an operator seals |
| How it works | the six layers, in the order they run |
| What it measures | the numbers, and what they are not |
| Where the boundary is | what this does not do |
| Documentation | docs/START.md first, then docs/ |
| Build from source | and run the tests |
Working on the code? docs/INTEGRATION.md names which modules the shipped gateway actually executes, which is the fastest way to tell the live path from the parts that are not wired in. The decision itself is SessionBroker._authorize_locked in clayseal/capabilities/broker.py; most refusals come from _floor in the same file.
If you are a coding agent, skip to the deploy runbook.
pip install clayseal
clayseal try
clayseal try takes about a minute. It runs two attacks in front of you and shows the gateway stopping them. There is nothing to configure, no key to get and nothing leaves your machine.
Every verdict there is decided live by the same gateway you would deploy. The picture is generated from a real run by python scripts/render_try_svg.py, and a test fails if it drifts from what the command prints, so it cannot become a screenshot of something that used to work.
Python 3.10 to 3.14. Two dependencies, cryptography and pyyaml.
On names. The directory is
agentauth-capabilities, the package is
clayseal, and the import isclayseal.capabilities. The project was renamed
at 0.6;
agentauthstill imports as a deprecation shim. See
Naming at the end for the detail.
Do this in the project you are editing, in order:
clayseal try --fast
clayseal howto clayseal policy new > policy.yaml
clayseal policy lint policy.yaml clayseal skill --write
Python functions: Guardrail.from_policy_file("policy.yaml").wrap_all({...}) and bind the wrappers. Keys must match tools.allow. Construct one Guardrail per session (a new one resets ceilings). Catch Refused (budget / not granted) and StepUpRequired (held — typical for off-list email). Non-file tools go in paths.pathless.
Already an MCP server (Claude Desktop / Cursor): clayseal proxy, not clayseal serve. Do not point proxy at a plain .py file. clayseal howto is the runbook.
Wrap the tools you already have. Nothing else about your agent changes.
from clayseal.capabilities import Guardrail, Refused, StepUpRequired
def list_open_refunds(): return [{"invoice": "INV-001", "amount": 900.0}, {"invoice": "INV-002", "amount": 900.0}]
def issue_refund(invoice, amount): return f"refunded {invoice} ${amount:.2f}"
guard = Guardrail.from_dict({ "version": 1, "goal": {"id": "refund-run", "summary": "Refund the invoices the customer disputed."}, "expires_at": "2030-01-01T00:00:00Z", "tools": {"allow": ["list_open_refunds", "issue_refund"], "harmless": ["list_open_refunds"], "effects": {"list_open_refunds": "read", "issue_refund": "transfer"}}, "paths": {"pathless": ["list_open_refunds", "issue_refund"]}, "budgets": {"value": {"ceilings": {"refunds": "1000.00"}, "tracked": {"issue_refund": {"arg": "amount", "budget": "refunds"}}}}, }) tools = guard.wrap_all({"list_open_refunds": list_open_refunds, "issue_refund": issue_refund})
for row in tools"list_open_refunds": try: print(tools["issue_refund"](invoice=row["invoice"], amount=row["amount"])) except Refused as exc: print("refused:", exc.reasons) # hand the reason back to the agent except StepUpRequired as exc: print("needs a human:", exc.reasons)
The first refund goes through. The second is refused, because the $1,000 session ceiling is already spent. Neither call reached your function.
The policy is inline here so you can paste the whole thing into a file and run it. In a real deployment it lives in its own YAML, where a security team can review it and a pull request can gate it. clayseal policy new > policy.yaml writes a commented one to start from, and Guardrail.from_policy_file loads it.
The wrappers keep the name, docstring and signature of your originals, so any framework that introspects them sees the tool it saw before. That covers LangGraph, the OpenAI Agents SDK, CrewAI and hand-written loops. Call the wrappers the same way you called the originals, positionally or by name.
No code change at all. The gateway speaks MCP, so it sits between your agent and the server:
clayseal proxy --policy policy.yaml -- npx @your-org/mcp-server
Or paste this into Claude Desktop's MCP config, Cursor's MCP settings, or .cursor/mcp.json. The agent talks to Clay Seal; Clay Seal talks to the server:
{
"mcpServers": { "billing": { "command": "clayseal", "args": ["proxy", "--policy", "policy.yaml", "--", "npx", "@your-org/mcp-server"] } } }
Tools the policy does not grant are removed from the catalogue, so the agent is never told they exist.
This is a whole policy. It lints clean.
version: 1
goal: id: refund-run summary: Refund the invoices the customer disputed.
expires_at: 2027-12-31T00:00:00Z
tools: allow: [list_open_refunds, issue_refund] harmless: [list_open_refunds] # a read spends nothing effects: {list_open_refunds: read, issue_refund: transfer}
paths: pathless: [list_open_refunds, issue_refund] # these act on invoices, not files
egress: domains: [acme.example] recipients: [ops@acme.example] # a domain alone is every mailbox bind_recipients: true
budgets: value: ceilings: {refunds: "1000.00"} # dollars, for the whole session tracked: issue_refund: {arg: amount, budget: refunds}
Run clayseal policy lint policy.yaml before you ship. It catches the mistake that matters most: a tool that can spend money but debits no budget. On the file above it reports no errors and one warning (the ceiling is per session unless you bind a principal), which names a real decision you have not made yet.
Full reference: docs/POLICY.md.
From a checkout. examples/ has seven, each runnable with no key and no network:
python examples/02_the_proxy.py
tools advertised to the agent: list_open_refunds, issue_refund
(the server offers wire_funds; the policy does not grant it, so the agent is never told it exists)
ok issue_refund INV-001 paid INV-001 $900.00 DENY issue_refund INV-002 refused by policy: value_budget_exceeded ... DENY issue_refund INV-011 refused by policy: value_budget_exceeded DENY wire_funds ops-float refused by policy: tool 'wire_funds' is not in this session's policy
the server executed 2 call(s): list_open_refunds {} issue_refund {"amount": 900.0, "invoice": "INV-001"}
clayseal proxy: 2 allowed, 11 denied, 0 held for approval; withheld from the catalog: wire_funds
Read the last block. A JSON-RPC error proves the agent was told no; the server's own ledger proves the refund did not happen, and those are different claims. The same run on the command line, which is the deployment shape a deployment actually uses:
clayseal proxy --policy examples/refund.yaml -- python examples/refund_server.py
You give the gateway a policy file and a goal for the session. It seals the goal at the start, so nothing the agent reads later can widen what was approved. Every tool call then goes through one decision point before it runs.
flowchart LR
P["policy.yaml reviewed and diffed like any other file"] A["your agent"] G{{"Clay Seal"}} T["your tools or MCP server"] H["a person"] X["never runs"] S[("session state: running totals, where arguments came from")]
A -- "tool call" --> G P -. "sealed at session start" .-> G G -- "allow" --> T G -- "step up" --> H G -- "deny" --> X H -- "yes, once, for these arguments" --> T T -- "result" --> S S -. "the next call is judged against all of this" .-> G
That loop at the bottom is the whole idea. The gateway does not just check a call, it checks a call against everything the session has already done.
A call gets one of three answers:
Step-up exists because a wrong refusal is expensive. An autonomous attacker is stopped just as hard by a call that waits for approval as by one that is refused, and a legitimate agent is not stopped permanently. Denial is reserved for cases with positive evidence of a problem.
The checks that produce those answers run in a fixed order, cheapest and strictest first, so a call refused early never reaches the expensive layers.