mcpField
P
PromptSpeak Governance

PromptSpeak Governance

本地服务
github.com/chrbailey安全13 天前更新

关于 PromptSpeak Governance

PromptSpeak Governance 是一个 MCP 服务,可在执行前按确定性治理规则验证 Agent 的工具调用。它能拦截高风险调用、转交人工审批、扫描写入内容中的安全模式,并记录尝试过的操作。

主要功能

  1. 01执行前验证工具调用
  2. 02供人工审批的暂缓队列
  3. 03扫描写入操作的安全风险
  4. 04Agent 漂移检测与停止控制
  5. 05工具调用审计记录

适用场景

  1. 01要求人工审核生产环境变更
  2. 02拦截违反治理框架的调用
  3. 03保存前扫描 Agent 编写的代码
  4. 04调查尝试或已拦截的操作

MCP 相关

向 MCP 客户端提供治理工具,包括验证、受控执行、审批队列管理、安全扫描和 Agent 生命周期控制。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"chrbailey-promptspeak": {
"command": "npx",
"args": [
"-y",
"@chrbailey/promptspeak-mcp-server"
]
}
}
}
启动命令npx -y @chrbailey/promptspeak-mcp-server

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@chrbailey/promptspeak-mcp-server0.4.1

工具

56

收录的工具列表 · 更新于 2 周前

参数类型必填说明
framestring是要验证的 PromptSpeak 帧(例如,"⊕◊▶β")
strictboolean否如果为 true,警告也会导致验证失败
parentFramestring否用于链式验证的可选父帧
validationLevelenum否要执行的验证级别structural | semantic | chain | full

详细介绍

promptspeak-mcp-server

CI npm version License: MIT Tests

AI Agent 执行前治理。在危险工具调用执行前将其拦截。

AI Agent 调用工具(文件写入、API 请求、Shell 命令)时,意图与执行之间没有验证层。提示词注入、幻觉参数或目标偏移都可能触发不可逆操作。PromptSpeak 会拦截每一次 MCP 工具调用,根据确定性规则对其进行验证,并在 0.1ms 内、任何操作执行之前,阻止或暂缓高风险操作以等待人工批准。

PromptSpeak 治理演示

适用场景

  • 你运行会调用工具(MCP 服务、函数调用、工具使用)的 AI Agent,需要在 Agent 与工具之间设置治理层。
  • 你需要对高风险操作(生产环境部署、金融交易、法律文件提交)进行人工介入审批。
  • 你希望检测行为偏移——Agent 逐渐偏离分配给它的任务。
  • 你需要记录 Agent 尝试的每一次工具调用,无论调用获准还是被拦截。
  • 你在受监管的领域(法律、金融、医疗)运营,Agent 的操作必须受到确定性约束。

安装

Claude Code

添加到 ~/.claude/settings.json(或项目级 .claude/settings.json):

{
  "mcpServers": {
    "promptspeak": {
      "command": "npx",
      "args": ["promptspeak-mcp-server"]
    }
  }
}

重启 Claude Code。全部 56 个治理工具即可立即使用。

Claude Desktop

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "promptspeak": {
      "command": "npx",
      "args": ["promptspeak-mcp-server"]
    }
  }
}
作为库使用
npm install promptspeak-mcp-server
从源代码安装
git clone https://github.com/chrbailey/promptspeak-mcp-server.git
cd promptspeak-mcp-server
npm install && npm run build
npm start

使用示例

1. 验证治理框架

在使用 PromptSpeak 框架前,验证其结构和语义是否正确。框架通过符号序列编码治理约束——先是模式,然后是领域、操作和实体。

// Tool call: ps_validate
{
  "name": "ps_validate",
  "arguments": {
    "frame": "⊕◊▶α",
    "validationLevel": "full"
  }
}
// Response
{
  "valid": true,
  "frame": "⊕◊▶α",
  "parsedFrame": {
    "mode": { "symbol": "⊕", "meaning": "strict" },
    "domain": { "symbol": "◊", "meaning": "financial" },
    "action": { "symbol": "▶", "meaning": "execute" },
    "entity": { "symbol": "α", "meaning": "primary" }
  },
  "parseConfidence": 1.0,
  "report": {
    "valid": true,
    "errors": [],
    "warnings": [
      { "code": "ACTION_MISSING_DOMAIN", "message": "Consider adding domain context", "severity": "warning" }
    ]
  },
  "summary": { "errors": 0, "warnings": 1, "passed": 16 }
}

无效框架会返回可操作的建议:

// Tool call: validate a frame with conflicting modes
{
  "name": "ps_validate",
  "arguments": { "frame": "⊕⊖▶", "validationLevel": "semantic" }
}

// Response: blocked — strict + flexible modes conflict
{
  "valid": false,
  "summary": { "errors": 1, "warnings": 0, "passed": 10 },
  "suggestions": ["Remove either ⊕ (strict) or ⊖ (flexible) - cannot have both"]
}
2. 暂缓队列工作流——人工介入审批

当 Agent 尝试执行高风险操作(漂移评分高、置信度低、发现安全问题)时,该操作会暂缓以供人工审核,而不会执行。以下是完整的暂缓生命周期:列出、检查、批准或拒绝。

步骤 1:列出待处理的暂缓项

// Tool call: ps_hold_list
{
  "name": "ps_hold_list",
  "arguments": {}
}
// Response: one hold awaiting human review
{
  "holds": [
    {
      "holdId": "hold_7k2m9x",
      "agentId": "devops-agent",
      "frame": "⊕◈▶α",
      "tool": "deploy_to_production",
      "severity": "high",
      "reason": "drift_prediction",
      "state": "pending",
      "evidence": { "driftScore": 0.72, "predictedDrift": 0.85 }
    }
  ],
  "count": 1,
  "expiredCount": 0
}

步骤 2:批准并修改(或拒绝)

// Tool call: ps_hold_approve — approve but downgrade to staging
{
  "name": "ps_hold_approve",
  "arguments": {
    "holdId": "hold_7k2m9x",
    "reason": "Reviewed — safe for staging, not production",
    "modifiedArgs": { "environment": "staging" }
  }
}
// Response
{
  "success": true,
  "decision": {
    "holdId": "hold_7k2m9x",
    "state": "approved",
    "decidedBy": "human",
    "reason": "Reviewed — safe for staging, not production"
  },
  "executionResult": { "success": true }
}

如需拒绝:

{
  "name": "ps_hold_reject",
  "arguments": {
    "holdId": "hold_7k2m9x",
    "reason": "Drift too high — recalibrate agent first",
    "haltAgent": true
  }
}
// Agent is halted (circuit breaker tripped) and the operation is denied.
3. 安全扫描——在执行前发现漏洞

在 Agent 将代码内容写入磁盘之前,扫描其中的安全问题。严重问题会阻止执行;高危问题会暂缓以供人工审核。

// Tool call: ps_security_scan
{
  "name": "ps_security_scan",
  "arguments": {
    "content": "const query = `SELECT * FROM users WHERE id = ${userId}`;\nconst API_KEY = 'sk-1234567890abcdef1234567890abcdef';"
  }
}
// Response: two findings — one critical (blocked), one critical (blocked)
{
  "findings": [
    {
      "patternId": "sql-injection",
      "severity": "critical",
      "match": "SELECT * FROM users WHERE id = ${userId}",
      "line": 1,
      "context": "const query = `SELECT * FROM users WHERE id = ${userId}`;",
      "suggestion": "Use parameterized queries or prepared statements instead of template literals"
    },
    {
      "patternId": "hardcoded-secret",
      "severity": "critical",
      "match": "API_KEY = 'sk-1234567890abcdef1234567890abcdef'",
      "line": 2,
      "context": "const API_KEY = 'sk-1234567890abcdef1234567890abcdef';",
      "suggestion": "Move secrets to environment variables or a secrets manager"
    }
  ],
  "scannedAt": "2026-03-19T12:00:00.000Z",
  "contentLength": 98,
  "patternsChecked": 10,
  "enforcement": {
    "blocked": [
      { "patternId": "sql-injection", "severity": "critical" },
      { "patternId": "hardcoded-secret", "severity": "critical" }
    ],
    "held": [],
    "warned": [],
    "logged": []
  }
}

使用 ps_security_gate 替代 ps_security_scan 来强制执行策略——遇到严重问题时阻止执行,高危问题暂缓以供人工审核,中危问题则发出警告:

// Tool call: ps_security_gate — scan AND enforce
{
  "name": "ps_security_gate",
  "arguments": {
    "content": "app.use(cors());\napp.listen(0.0.0.0, 3000);",
    "action": "write_file"
  }
}

// Response: held for review (insecure defaults = high severity)
{
  "decision": "held",
  "reason": "Security: 1 high-severity finding(s) held for review — insecure-defaults",
  "scan": { "findings": [{ "patternId": "insecure-defaults", "severity": "high", "line": 1 }] }
}

工作原理:9 阶段验证流水线

每一次工具调用都会经过此流水线。任何阶段未通过,都会阻止执行。

Agent calls tool
  │
  ├─ 1. Circuit Breaker ──── Halted agents blocked instantly (no further checks)
  ├─ 2. Frame Validation ─── Structural, semantic, and chain rule checks
  ├─ 3. Drift Prediction ─── Pre-flight behavioral anomaly detection
  ├─ 4. Hold Check ────────── Risky operations held for human approval
  ├─ 5. Interceptor ───────── Final permission gate (confidence thresholds)
  ├─ 6. Security Scan ─────── Scans write actions for vulnerabilities (see below)
  ├─ 7. Tool Execution ────── Only reached if all 6 pre-checks pass
  ├─ 8. Post-Audit ────────── Confirms behavior matched prediction
  └─ 9. Immediate Action ──── Halts agent if critical drift detected post-execution

第 1–6 阶段是执行前阶段——任何检查未通过,工具都不会运行。第 8–9 阶段是执行后阶段——用于检测偏移,并可在后续调用中停止 Agent。

安全扫描

当 Agent 写入代码(write_file、edit_file、create_file、patch_file)时,执行前会根据 10 种检测模式扫描内容。执行策略取决于严重级别:

严重级别执行策略检测内容
CRITICAL阻止 — 拒绝执行通过模板字面量进行 SQL 注入、硬编码的 API 密钥/密码/令牌
HIGH暂缓 — 排队等待人工审核与安全相关的 TODO、记录敏感数据、不安全的默认设置(cors()、0.0.0.0、debug: true)
MEDIUM警告 — 记录日志,继续执行空的 catch 块、模棱两可的注释(“可能能用”)、已禁用的测试
LOW记录 — 不执行任何限制DROP TABLE、rm -rf(标记以供留意)
有效功能(已测试)

以下所有结论均有通过的测试作为依据(5 个测试文件共 104 项测试):

  • 模式检测有效。 10 种模式均经过真阳性和假阳性测试。例如:api_key = "sk-1234567890abcdef" 会被检测到;API_KEY = process.env.API_KEY 不会。SQL 注入检测会拦截 \SELECT * FROM users WHERE id = ${id}`,但不会拦截参数化查询(db.query("SELECT * FROM users WHERE id = ?", [id])`)。
  • 严重级别执行策略有效。 严重级别的问题会阻止执行。高严重级别的问题会暂缓处理,等待审核。中等严重级别的问题会发出警告,但允许执行。已通过拦截器管道进行端到端测试。
  • 仅扫描写入操作。 read_file 和其他非写入操作会直接通过,不进行扫描,即使其参数包含有漏洞的代码也是如此。已测试。
  • 运行时配置有效。 可通过 ps_security_config 在运行时启用/禁用模式并更改严重级别。禁用某个模式后,该模式会立即停止触发。将某个模式的严重级别从 medium 改为 critical 后,它会改为阻止执行,而不是发出警告。已进行端到端测试。
  • 性能良好。 扫描 100 行文件可在 10 ms 内完成。已测试。
  • 可处理文件中的多个发现项。 对包含 6 种不同漏洞类型的文件,能够正确地将每种漏洞归入相应的严重级别类别。已测试。
目前尚未实现的功能
  • HIGH 级别发现尚未集成保持队列。 已修复。 高严重性安全发现现在会通过 security_finding HoldReason 在 HoldManager 中创建实际保持项。它们会显示在 ps_hold_list 中,并可通过常规保持流程批准或拒绝。
  • ps_execute 尚未自动扫描。 安全扫描仅在拦截器的 intercept() 方法中对直接工具调用触发。如果 Agent 使用 ps_execute(受治理的执行路径),只有当内部工具是写入操作且内容作为顶层参数传入时,才会运行扫描。嵌套参数结构可能绕过扫描。原因: ps_execute 使用自身的参数架构封装工具调用;扫描器检查的是 proposedArgs.content,不会深入检查嵌套字段。
  • 尚不支持基于文件路径的扫描。 扫描器只检查作为参数传入的内容,无法扫描已存储在磁盘上的文件——它不会读取文件系统。原因: 扫描器是一个接收字符串的纯函数。添加文件系统访问会改变安全模型。
  • 模式基于正则表达式,而非 AST。 模式使用正则表达式,因此无法理解代码结构。测试固件中的硬编码密钥或注释中的 SQL 注入仍会触发检测。误报率因模式而异,范围为 25%–70%(每种模式均有记录)。原因: AST 解析会增加依赖和复杂性。正则表达式速度快,对于会交由人工审核而非静默拦截的治理层来说已经足够。
  • 部分持久化。 保持项和断路器状态现在会持久化到 SQLite(data/governance.db),并在服务重启后保留。不过,模式配置更改(通过 ps_security_config 启用/禁用模式或更改严重级别)仍仅保存在内存中,重启后会重置。原因: 模式配置轻量且很少更改;要实现完整的配置持久化,需要单独的配置存储。

MCP 工具(56 个)

核心治理
工具何时调用功能
ps_validate执行任何 Agent 操作之前根据所有规则验证一个帧,但不执行
ps_validate_batch一次检查多个操作时批量验证,提高效率
ps_executeAgent 要发起工具调用时完整流程:验证 → 检查保持项 → 执行 → 审计
ps_execute_dry_run预览将会发生什么时运行完整流程,但不执行工具
人机协同保持项
工具何时调用功能
ps_hold_list审核待处理的 Agent 操作时列出所有等待人工批准的操作
ps_hold_approve允许继续执行某个保持操作时批准操作,可选择修改参数
ps_hold_reject拒绝某个保持操作时拒绝操作并说明原因
ps_hold_config调整哪些操作需要批准时配置保持触发条件和阈值
ps_hold_stats监控保持队列的运行状况时保持队列统计信息
Agent 生命周期
工具何时调用功能
ps_state_get检查 Agent 正在做什么时获取 Agent 的活动帧和上次操作
ps_state_system监控整体系统运行状况时系统范围的统计信息
ps_state_halt必须立即停止 Agent 时触发断路器——阻止所有后续调用
ps_state_resume允许已停止的 Agent 继续运行时重置断路器
ps_state_reset清除 Agent 状态时完全重置状态
ps_state_drift_history调查行为变化时偏移检测警报历史记录
委派
工具调用时机功能
ps_delegateAgent 创建子 Agent 时创建权限受限的父级→子级委派
ps_delegate_revoke撤销子 Agent 的权限时移除委派
ps_delegate_list审计委派链时列出当前有效的委派
配置
工具调用时机功能
ps_config_set运行时更改治理规则时设置配置键值对
ps_config_get读取当前配置时获取当前配置
ps_config_activate切换策略配置文件时激活指定名称的配置
ps_config_export备份配置时将完整配置导出为 JSON
ps_config_import恢复配置时从 JSON 导入配置
ps_confidence_set调整验证严格程度时设置置信度阈值
ps_confidence_get检查当前阈值时获取当前阈值
ps_confidence_bulk_set重新配置多个阈值时批量更新阈值
ps_feature_set切换管道阶段时启用/禁用特定检查
ps_feature_get检查哪些阶段处于启用状态时获取功能标志
符号注册表(实体追踪)
工具调用时机功能
ps_symbol_create注册新实体(公司、个人、系统)时创建包含类型、元数据和标签的符号
ps_symbol_get查找实体时按 ID 检索
ps_symbol_update实体数据发生变化时更新元数据或标签
ps_symbol_list按类型浏览实体时列出实体,可选按类型筛选
ps_symbol_delete移除实体时按 ID 删除
ps_symbol_import批量加载实体时批量导入
ps_symbol_stats监控注册表运行状况时注册表统计信息
ps_symbol_format显示实体时格式化符号以供显示
ps_symbol_verify确认实体数据为最新时将符号标记为已验证
ps_symbol_list_unverified审计过期数据时列出需要验证的符号
ps_symbol_add_alternative实体存在别名时添加备用标识符
安全执行
工具调用时机功能
ps_security_scan检查代码中的漏洞时扫描内容,并按严重程度返回发现项
ps_security_gate对写入操作执行安全策略时扫描并执行策略:拦截/暂缓/警告/允许
ps_security_config调整检测模式时列出、启用、禁用模式或更改其严重程度
审计
工具调用时机功能
ps_audit_get查看发生过的操作时提供可筛选的完整审计记录

架构

src/
├── gatekeeper/       # 8-stage validation pipeline (core enforcement)
│   ├── index.ts      #   Pipeline orchestrator + agent eviction policy
│   ├── validator.ts  #   Frame structural/semantic/chain validation
│   ├── interceptor.ts#   Permission gate with confidence thresholds
│   ├── hold-manager.ts#  Human-in-the-loop hold queue
│   ├── resolver.ts   #   Frame resolution with operator overrides
│   └── coverage.ts   #   Coverage confidence calculator
├── drift/            # Behavioral drift detection
│   ├── circuit-breaker.ts  # Per-agent halt/resume
│   ├── baseline.ts         # Behavioral baseline comparison
│   ├── tripwire.ts         # Anomaly tripwires
│   └── monitor.ts          # Continuous monitoring
├── security/         # Security vulnerability scanning
│   ├── patterns.ts   #   10 detection patterns (regex-based)
│   └── scanner.ts    #   Scanner engine + severity classification
├── persistence/      # SQLite governance persistence
│   └── database.ts   #   Holds, decisions, circuit breakers (WAL mode)
├── symbols/          # SQLite-backed entity registry (11 CRUD tools)
├── policies/         # Policy file loader + overlay system
├── operator/         # Operator configuration
├── tools/            # MCP tool implementations
│   ├── registry.ts   #   29 core tools
│   ├── ps_hold.ts    #   5 hold tools
│   └── ps_security.ts#   3 security tools
├── handlers/         # Tool dispatch + metadata registry
├── core/             # Logging, errors, result patterns
└── server.ts         # MCP server entry point (stdio transport)

性能

PromptSpeak 为每次工具调用添加治理功能,开销不到 1 毫秒。基准测试环境:Apple M2 Pro、Node.js 22、Vitest 4.0:

延迟(执行前检查,1000 次迭代)
百分位数延迟
平均值0.164ms
P950.368ms
P991.183ms
完整执行路径 P950.074ms
吞吐量(并发操作)
操作速率
熔断器检查(1000 次并发)6,173 ops/sec
创建暂缓项55,556 holds/sec
批准/驳回暂缓项200,000+/sec
混合操作(停止 + 暂缓 + 允许)6,818 ops/sec
压力测试
测试结果
1000 个并发阻塞执行总耗时 162ms,全部正确阻塞
100 次快速暂停/恢复循环状态转换正确率 100%
500 个状态各异的 Agent250 个被阻塞,250 个被允许 — 零误分类
持续负载下的内存使用(1000 次操作)负增量(-11.76 MB,GC 已回收)
测试套件
指标值
测试数量829 个测试,分布在 33 个文件中
测试时长总计 1.11s
类别单元测试、集成测试、压力测试、安全测试、语法测试

要求

  • Node.js >= 20.0.0
  • TypeScript 5.3+(从源代码构建)
  • 无需外部服务 — 使用 SQLite 持久化符号和治理数据

相关项目

  • deeptrend — 为自主 Agent 提供结构化 AI 趋势信息流。内容精选自 14 个以上来源,通过 LLM Counsel 综合整理,每 6 小时以 JSON Feed、RSS 和 llms.txt 的形式发布。旨在作为 Agent 监控管道的数据源。

隐私政策

https://promptspeak.admin-as-a-service.com/privacy

PromptSpeak 不收集个人数据、不进行遥测,并将所有治理数据存储在本地 SQLite 中。请通过上方链接查看完整政策。

数据处理条款

https://promptspeak.admin-as-a-service.com/dpa

适用于平台集成(例如 Anthropic Connectors)的标准数据处理条款。PromptSpeak 作为数据处理者,不使用子处理者,也不向外部传输数据。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。