代理监控与安全控制服务器

Maple是一个统一的MCP服务器,用于代理的监控、安全控制和行为演化,提供时间线渲染、风险审计、行为分叉等功能。

  • by oramada
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 omar2001ramadan/mcp

使用说明

枫树

用于代理可观察性、安全控制和行为演化的统一MCP服务器。

Maple是高级代理的“哨兵+Git”层:

  • 观察每一步
  • 重播/分叉有风险的分支
  • 对护栏进行审计和干预
  • 从匿名痕迹中学习,以发展更安全的技能

内置于 mcp-use +Apps SDK小部件。

实施了什么

1) 可观察性+控制

  • observe_session:捕获和渲染时间线小部件
  • replay_fork:从任何步骤分支并向前模拟
  • audit_risk:规则+异常风险仪表板
  • guard_action:允许/阻止/等待隔离支持
  • ingest_session_event:将外部网桥事件流式传输到活动跟踪中

2) ML异常检测(简单嵌入)

  • ml_anomaly_report:基于嵌入的行为异常检测
  • 轻量级哈希嵌入+余弦相似性基线
  • 支持匿名共享痕迹的社区基线

3) 网络效应

  • share_trace_anon:匿名化跟踪模式并将其发布到共享池
  • suggest_evolved_skills:从共享痕迹中生成进化技能建议
  • 行为签名+共享数据集创造复合数据优势

4) YC应用层(护城河/牵引力/收入)

  • yc_app_brief:根据产品指标生成的实时YC就绪叙事
  • 强调:
    • 护城河:追踪+分叉+风险标签数据飞轮
    • 牵引力:OpenClaw集成和安全干预活动
    • 收入:免费增值阶梯(免费,专业版9美元,团队版29美元,企业版99美元)

MCP工具

  • observe_session
  • replay_fork
  • audit_risk
  • ml_anomaly_report
  • guard_action
  • ingest_session_event
  • share_trace_anon
  • suggest_evolved_skills
  • yc_app_brief
  • list_traces
  • export_trace

API终点

  • GET /health
  • GET /judge (判断独立页面)
  • GET /api/traces
  • GET /api/traces/:traceId
  • GET /api/community/stats
  • GET /api/community/traces
  • GET /api/yc/brief?focus=full|moat|traction|revenue
  • GET /api/firewall/state
  • POST /api/firewall/chat
  • POST /api/firewall/decision (严格的预执行允许/阻止门)

关键项目文件

  • index.ts:工具+路线编排
  • src/core/risk-engine.ts:规则引擎+嵌入异常集成
  • src/ml/embeddings.ts:简单的嵌入实现
  • src/ml/anomaly-detector.ts:余弦sim异常检测
  • src/network/anonymizer.ts:匿名跟踪转换
  • src/network/shared-trace-store.ts:社区池+技能建议
  • src/strategy/yc-narrative.ts:护城河/牵引力/收入叙事构建者
  • resources/trace-timeline/widget.tsx
  • resources/replay-simulator/widget.tsx
  • resources/risk-dashboard/widget.tsx

快速开始

npm install
npm run dev

检查员: http://localhost:3000/inspector

硬编码演示堆栈(OpenClaw+Maple)

此仓库现在包含一个硬编码的演示设置:

  • 打开OpenClaw网关 ws://127.0.0.1:19001
  • 打开OpenClaw桥接适配器 http://127.0.0.1:8787
  • 此版本中已禁用Maple网关身份验证
  • 启动时生成的网桥令牌(或通过env提供)
OPENCLAW_VERSION=<pin-a-version> npm run demo:install-openclaw
npm run demo:up

然后打开:

  • 法官GUI: http://localhost:3000/judge
  • 检查员: http://localhost:3000/inspector

引导演示模式(无手动JSON)

法官GUI现在有 引导演示控件 因此,您可以在不使用检查器复制/粘贴的情况下运行整个流程:

  1. 打开 /judge 等待自动连接
  2. 点击 Run Full Flow

或者逐步执行:

  1. 1) Start
  2. 2) Audit
  3. 3) Block
  4. 4) Fork

法官页面现在包括 防火墙聊天 在“控制”视图中:

  • 问自然语言问题(“状态更新”、“为什么被阻止?”、“下一步我们该怎么办?”)
  • 聊天回复由实时防火墙上下文生成(/api/firewall/state)

这使用内部演示API:

  • POST /api/demo/start
  • POST /api/demo/audit
  • POST /api/demo/block
  • POST /api/demo/fork
  • POST /api/demo/full

demo:up 也会在macOS上自动打开这两个页面(设置 DEMO_OPEN_BROWSER=0 禁用)。

单跟踪代理操作日志记录(黑客马拉松)

为了获得可靠的判断演示,请运行一个稳定的跟踪并将每个操作附加到它上面。

npm run trace:demo

这有什么作用:

  • 启动(或重用)一个稳定的跟踪 sessionId
  • 通过日志记录所有代理操作 POST /api/openclaw/events 使用相同 traceId
  • 包含 type, actor, prompt/message, command, url, toolName,独一无二 eventId
  • 运行飞行前防火墙预览,并将Maple的阻止/允许消息记录到同一跟踪中

打开 http://localhost:3000/judge,然后选择打印的跟踪ID进行查看 #0, #1, #2....

如果你想将其集成到你自己的运行时中,请使用:

  • scripts/maple-trace-logger.mjs
  • logAction(...) 对于一般事件
  • logWebGet(...), logMarketplaceSearch(...), logMarketplaceToolCall(...) 包装器

例子:

import { createMapleTraceLogger } from "./scripts/maple-trace-logger.mjs";

const logger = createMapleTraceLogger({
  baseUrl: "http://localhost:3000",
  sessionId: "maple-live",
});

await logger.startRun({ reuseLatest: true });
await logger.logAction({
  type: "tool_call",
  actor: "agent",
  toolName: "web_get",
  prompt: "Fetch provider docs",
  url: "https://docs.mcp.so/providers",
});

黑客马拉松网关模式(9个精心策划的MCP工具)

单一来源黑客马拉松路由的典型初创公司(本地+铁路):

npm start

等效本地别名:

npm run hackathon:up

这将启动本地下游MCP应用程序(toolhub)路由锁定Maple,因此所有下游呼叫都通过它。 在此版本中,市场模式被正式禁用;仅通过已清除的下游应用程序执行。

包含的工具(涵盖范围广泛):

  1. web_search (一般网络搜索)
  2. web_fetch (浏览器样式的页面获取/提取)
  3. wikipedia_summary (百科全书知识)
  4. github_repo_info (代码/仓库智能)
  5. weather_forecast (实时实际数据)
  6. slack_post_message (通过Slack进行消息集成)
  7. hn_search (Hacker news上的实时技术/新闻发现)
  8. arxiv_search (学术/研究论文搜索)
  9. openlibrary_search (书籍和出版物查询)

Slack配置 slack_post_message:

  • 传入webhook模式:设置 SLACK_WEBHOOK_URL
  • 机器人模式:设置 SLACK_BOT_TOKEN 并且可选 SLACK_DEFAULT_CHANNEL

验证端到端接线:

npm run hackathon:verify

停止服务:

npm run hackathon:down

实施文件:

  • scripts/hackathon-toolhub.mjs (配备9个工具的下游MCP服务器)
  • scripts/hackathon-up.sh (在确定性路由锁定模式下启动toolhub+Maple)
  • scripts/hackathon-verify.sh (通过Maple对路由工具调用进行冒烟测试)
  • scripts/hackathon-down.sh (停止Maple+工具中心)

停止本地演示进程:

npm run demo:down

环境

MCP_URL=http://localhost:3000
OPENCLAW_BRIDGE_URL=http://localhost:8787
OPENCLAW_BRIDGE_TOKEN=your_token
MAPLE_ALLOW_NO_AUTH=true
MAPLE_LOCK_BRIDGE_TARGET=true

observe_session 只有当 source=auto. 为了 source=openclaw,网桥故障作为错误返回(无静默模拟降级)。

认证

  • Maple身份验证在此黑客马拉松版本中被故意禁用。
  • MCP端点(/mcp, /sse)以及内部API(/api/*)不需要API密钥或登录。
  • GET /health 仍公开进行部署健康检查。

桥梁封锁(枫树优先路线)

  • 集 MAPLE_LOCK_BRIDGE_TARGET=true 拒绝每个请求 bridgeUrl / token 覆盖。
  • 默认情况下,桥接覆盖被拒绝。
  • 可选的仅本地覆盖: MAPLE_ALLOW_BRIDGE_OVERRIDE=true.
  • 在生产中,桥接超控锁会自动启用。
  • 在生产中, OPENCLAW_BRIDGE_URL 和 OPENCLAW_BRIDGE_TOKEN 必须明确设置。
  • 这将强制所有OpenClaw网桥流量通过配置 OPENCLAW_BRIDGE_URL + OPENCLAW_BRIDGE_TOKEN.
  • 覆盖尝试返回 403 Bridge override denied.

执行前防火墙决策API

  • POST /api/firewall/decision 在执行之前评估候选动作。
  • enforce=true (默认):在拒绝时将决定保留到跟踪和隔离中。
  • enforce=false:预览模式(无跟踪突变),适用于模拟运行检查。

防火墙状态聊天API

  • GET /api/firewall/state 返回跟踪/会话的规范化实时防火墙上下文。
  • POST /api/firewall/chat 使用该上下文回答状态问题。
  • 身体接受 message,可选 traceId / sessionId,以及 includeContext.
  • POST /api/chat/stream 为Judge UI聊天机器人提供动力,并可以在提供程序回退的情况下使用AI。
  • 如果 OPENAI_API_KEY 和 ANTHROPIC_API_KEY Maple启用AI模式并自动回退。
  • 如果两个模型提供程序都失败,Maple将退回到基于确定性规则的防火墙答案。

可选聊天模型环境变量:

OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
MAPLE_FIREWALL_CHAT_PRIMARY=openai   # openai | anthropic
MAPLE_FIREWALL_CHAT_OPENAI_MODEL=gpt-4o-mini
MAPLE_FIREWALL_CHAT_ANTHROPIC_MODEL=claude-sonnet-4-6
MAPLE_FIREWALL_CHAT_TIMEOUT_MS=15000

防火墙强化(受mcpwall启发)

Maple现在在风险评分之前对每个跟踪步骤强制执行确定性防火墙策略检查:

  • 高风险行为的首发规则(pipe-to-shell破坏性命令、凭证/秘密访问)
  • 秘密扫描+标记就地编辑: [REDACTED BY MAPLE]
  • 自动隔离(guardStatus=block)当拒绝规则生效时
  • JSONL防火墙审核日志位于 ~/.maple/firewall-logs/YYYY-MM-DD.jsonl

可选环境变量:

MAPLE_FIREWALL_ENABLED=true
MAPLE_FIREWALL_DEFAULT_ACTION=allow   # allow | deny | log_only
MAPLE_FIREWALL_LOG_DIR=~/.maple/firewall-logs

演示脚本(2-3分钟)

  1. observe_session 在OpenClaw会议上
  2. audit_risk 暴露危险步骤
  3. ml_anomaly_report 显示嵌入异常
  4. guard_action 阻止危险的步骤
  5. replay_fork 通过安全编辑阻止步骤
  6. share_trace_anon 发布匿名模式
  7. suggest_evolved_skills 来自社区数据
  8. yc_app_brief 展示护城河/牵引力/收入叙事

示例通话

{
  "tool": "ml_anomaly_report",
  "input": {
    "traceId": "<trace-id>",
    "useCommunityBaseline": true,
    "threshold": 0.58,
    "topAnomalies": 5
  }
}
{
  "tool": "share_trace_anon",
  "input": {
    "traceId": "<trace-id>",
    "taskLabel": "Inbox triage",
    "objective": "Safely automate inbound support triage",
    "tags": ["support", "email", "guarded"]
  }
}
{
  "tool": "suggest_evolved_skills",
  "input": {
    "query": "safe inbox triage automation",
    "limit": 3,
    "minConfidence": 0.4
  }
}

电流限制

  • 黑客马拉松速度的持久性在记忆中
  • 嵌入模型故意简单(快速+局部)
  • 防火墙聊天可选外部模型提供者;规则模式在没有它们的情况下工作

部署

npm run deploy

铁路部署(推荐)

是的,Maple可以在有生产保障的铁路上运行。

此回购现在包括 railway.json,因此Railway可以自动使用规范设置:

  • 构建命令: npm run build
  • 启动命令: npm run start
  • 健康检查路径: /health

所需的环境变量:

NODE_ENV=production
HOST=0.0.0.0
MCP_URL=https://<your-railway-domain>
MAPLE_ALLOW_NO_AUTH=true
MAPLE_LOCK_BRIDGE_TARGET=true
OPENCLAW_BRIDGE_URL=<bridge-url-reachable-from-railway>
OPENCLAW_BRIDGE_TOKEN=<bridge-token>
MAPLE_FIREWALL_ENABLED=true

重要提示:

  • 铁路提供 PORT 自动;不要硬编码它。
  • scripts/hackathon-start.sh 铁路安全吗,不再需要当地 .env 文件启动。
  • 在此分支中,Maple默认情况下在禁用身份验证的情况下运行。
  • 不要使用 localhost 为了 OPENCLAW_BRIDGE_URL 除非桥在同一个集装箱内运行。
  • 如果演示期间网桥连接不可用,请使用 source=mock 确保UI+护栏的流畅运行。