mcpField
A
AegisGate MCP

AegisGate MCP

本地服务
github.com/aegisgatesecurity安全0今天更新

关于 AegisGate MCP

AegisGate MCP 是用于构建 MCP 服务的 Go 框架,将安全控制纳入请求处理流程。它面向需要身份验证、访问策略、审计和威胁检测的服务部署场景。

主要功能

  1. 01身份验证与四级 RBAC
  2. 02策略规则与速率限制
  3. 03防篡改审计日志
  4. 04输入与响应扫描
  5. 05正则与神经网络威胁检测
  6. 06注册时检查工具投毒

适用场景

  1. 01按角色限制工具访问
  2. 02扫描工具输入与响应
  3. 03审计 MCP 操作
  4. 04检测提示注入与混淆

MCP 相关

它提供构建 MCP 服务的框架,并对 MCP 请求和工具调用执行安全检查。支持 stdio 与 TCP 传输,并可选 TLS 或双向 TLS。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"aegisgatesecurity-aegisgate": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/aegisgatesecurity/aegisgate-mcp:1.5.1"
]
}
}
}
启动命令docker run -i --rm ghcr.io/aegisgatesecurity/aegisgate-mcp:1.5.1

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

安装包
ocighcr.io/aegisgatesecurity/aegisgate-mcp:1.5.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

🛡️ AegisGate MCP

安全的 MCP 服务框架——23 层防御,零依赖。

采用纯 Go 编写的加固型零依赖 MCP 服务。从第一行代码起就内置安全防护,而不是等到遭到入侵后再补救。

Apache 2.0 · 23 层安全防护 · 79 个正则表达式模式 + CharCNN-BiLSTM (v15) ML 检测 · 零 CVE · 零外部模块依赖

GitHub stars 觉得 AegisGate MCP 有用?为仓库点星 ⭐,并告诉一位同事——这能帮助其他开发者发现安全的 MCP 工具。

License: Apache 2.0 Go Version Coverage Dependencies Docker ML Arch CI Security Patent Pending Published Research

Listed on mcpservers.org MCP Registry Glama

快速开始 · 安全层 · RBAC · 架构 · 协议 · 文档 · 版本发布

AegisGate Security™ 是 AegisGate Security, LLC 的商标,已向 USPTO 申请注册。 “AegisGate MCP”是未注册的产品名称。请参阅下文的商标部分。


为什么选择 AegisGate MCP?

38% 的 MCP 服务没有身份验证。590 多条安全公告。官方 MCP SDK 在 6 个月内出现 3 个严重 CVE——包括 CVSS 9.8 的远程代码执行漏洞,以及影响 1.5 亿多次下载的“AI 供应链之母”漏洞。

官方 MCP SDK 为你提供协议,但不提供安全保障。 没有身份验证。没有审计日志。没有威胁检测。没有速率限制。 没有 RBAC。每个基于基础 SDK 构建的服务,安全状况都一片空白, 而构建安全保障就成了你的责任——或者像 38% 的服务那样,直接跳过。

AegisGate MCP 是安全替代方案。 在从第一行代码起就内置安全防护的 基础上构建 MCP 服务,而不是等到发生泄露后再补上安全措施。

官方 MCP SDKAegisGate MCP
身份验证❌ 自行实现✅ Bearer 令牌 + API 密钥 + 锁定机制
授权❌ 无✅ 4 级 RBAC,支持按工具设置权限
审计日志❌ 无✅ 防篡改 SHA-256 哈希链
威胁检测❌ 无✅ 79 个正则表达式模式 + 神经网络 ML(<1ms)
供应链风险❌ npm/PyPI 依赖✅ 零依赖(仅使用 Go 标准库)
CVE6 个月内 3 个严重漏洞从未有过
许可证MITApache 2.0

23 层安全防护。79 个正则表达式模式。零依赖。零 CVE。Apache 2.0。

需要代理模式、OAuth、SIEM 或合规框架?请参阅下文的 何时升级到 AegisGate Platform—— 或了解 AegisGate Rampart 如何保护本地 AI API 代理。


概述

AegisGate MCP 是一个使用纯 Go 编写、经过强化且零依赖的 MCP 服务。 它位于 AI Agent 与其调用的工具之间,对每个请求应用 23 层 防御——从身份验证和 RBAC 到神经网络威胁检测和链分析。

标准 MCP 服务默认运行在可信的本地环境中。在生产环境中——无论是云端 SaaS 平台、企业数据管道,还是隔离网络中的工厂网络——Agent 都可能执行 命令、查询数据库或与关键系统交互。一次未经授权或恶意的工具调用, 就可能导致数据外泄、流程中断,甚至造成更严重的后果。AegisGate MCP 通过纵深防御保护每次工具调用,并且没有外部模块依赖,因此可以在隔离网络中运行。

版本1.6.1
许可证Apache-2.0
Go 版本1.27+
模块依赖零(没有 require 指令——所有第三方代码均已随项目提供)
Docker 镜像ML:debian:bookworm-slim(已清除 gnutls),约 127 MB,0 个 CVE · Lite:distroless/static-debian12,约 10 MB,0 个 CVE
架构amd64、arm64
ML 模型CharCNN-BiLSTM v15,160 万参数,CPU 推理 <1ms
测试611 个单元/集成测试 + 32 个负载/压力测试 = 共 643 个测试,14 个基准测试,3 个模糊测试目标,92.0% 覆盖率(非 CGO)/ 91.9%(CGO)

快速开始

构建
go build -o mcp-server ./cmd/mcp-server
运行
# Basic TCP server on :8081
./mcp-server

# With authentication and audit logging
./mcp-server --token my-secret --audit /var/log/mcp-audit.json

# With demo tools (ping, system_info, echo)
./mcp-server --demo

# stdio mode for local MCP clients (Claude Desktop, Cursor)
./mcp-server --transport stdio --demo

# Streamable HTTP mode (MCP 2025-06-18)
./mcp-server --transport http --addr :8081 --demo

# TLS + mutual TLS
./mcp-server --tls --tls-cert server.pem --tls-key server.key --tls-client-ca ca.pem

# Config file + health endpoint
./mcp-server --config /etc/mcp/config.json --health-addr :8082
Docker
# Build and run (ML-enabled, ~127 MB, 0 CVEs)
docker build --target ml -t aegisgate-mcp .
docker run -p 8081:8081 aegisgate-mcp --demo

# With authentication and audit logging
docker run -p 8081:8081 \
  -e MCP_AUTH_TOKEN=your-secret-token \
  -e MCP_DEMO_TOOLS=true \
  aegisgate-mcp

# Distroless heuristic-only build (~10 MB, 0 CVEs, zero OS packages)
docker build --build-arg CGO_ENABLED=0 --target lite -t aegisgate-mcp:lite .
docker run -p 8081:8081 aegisgate-mcp:lite --demo

ML 镜像使用 debian:bookworm-slim,并清除了 libgnutls30(移除共享 库和 dpkg 元数据),从而消除全部 6 个 Trivy CVE,同时保留神经网络 推理所需的 glibc 和 ONNX Runtime 依赖。Lite 镜像是真正的 distroless 镜像(gcr.io/distroless/static-debian12:nonroot)——没有 OS 软件包, 没有 CVE,约 10 MB。两个目标都内置了 --health-check 标志,可供 Docker HEALTHCHECK 使用(无需 wget/curl)。多架构构建支持 linux/amd64 和 linux/arm64。

ML 威胁检测(L3)

AegisGate MCP 使用与 AegisGate Platform 和 Rampart 相同的 CharCNN-BiLSTM v15 神经模型,并以 vendored 方式集成,不依赖任何外部模块。该模型提供:

  • 语义攻击检测 — 捕获可绕过正则表达式模式匹配的提示词注入和越狱尝试
  • 规避抵抗能力 — 检测混淆技术(leet 文字、Unicode 同形字、字符换位、删除元音、单词反转)
  • 双层阻止机制 — 分数 ≥0.95 时独立阻止;分数为 0.50–0.94 时,仅在有 L1(正则表达式)或 L2(输入扫描器)佐证时阻止
  • 影子模式 — 记录预测结果但不阻止(用于校准)
  • 启发式回退 — 当 CGO 不可用时,启发式评分可在不使用 ONNX 的情况下提供基础检测能力
标志环境变量默认值说明
--mlMCP_ML_ENABLEDfalse(CLI)/ true(Docker)启用神经威胁检测
--ml-shadowMCP_ML_SHADOWfalse记录预测结果,但从不阻止
--ml-thresholdMCP_ML_THRESHOLD0.50威胁分数阈值(0.0–1.0)
--ml-modelMCP_ML_MODEL./models/threat_cnn_bilstm.onnxONNX 模型文件路径
库的用法

AegisGate MCP 可作为 Go 库嵌入:

package main

import (
    "context"
    "log"
    mcp "github.com/aegisgatesecurity/aegisgate-mcp"
)

func main() {
    cfg := mcp.DefaultServerConfig()
    cfg.AuthToken = "my-secret-token"
    cfg.AuditLogPath = "/var/log/mcp-audit.json"
    cfg.RateLimitRPM = 120
    cfg.ScanResponses = true

    server, err := mcp.NewSecuredMCPServer(cfg)
    if err != nil {
        log.Fatal(err)
    }

    // Register a custom tool
    // Note: tools are automatically scanned for prompt-injection poisoning
    // at registration time. If the description or inputSchema contains
    // malicious patterns, RegisterTool returns *ToolPoisoningError.
    server.RegisterTool("my_tool", "Does something useful", 40, map[string]interface{}{
        "type": "object",
        "properties": map[string]interface{}{
            "param1": map[string]interface{}{"type": "string"},
        },
        "required": []interface{}{"param1"},
    })
    server.RegisterToolHandler("my_tool", func(ctx context.Context, params map[string]interface{}) (interface{}, error) {
        return "result", nil
    })

    // Register a resource (MCP resources/list, resources/read)
    server.RegisterResource("config://app/info", "App Info", "App config as JSON", "application/json",
        func(ctx context.Context, uri string) (*mcp.ResourceContent, error) {
            return &mcp.ResourceContent{URI: uri, Text: `{"version":"1.0"}`, MimeType: "application/json"}, nil
        })

    // Register a prompt (MCP prompts/list, prompts/get)
    server.RegisterPrompt("code_review", "Generate a code review prompt",
        []mcp.PromptArgument{{Name: "filename", Required: true}},
        func(ctx context.Context, args map[string]string) (*mcp.GetPromptResult, error) {
            return &mcp.GetPromptResult{
                Messages: []mcp.PromptMessage{{Role: "user", Content: "Review " + args["filename"]}},
            }, nil
        })

    // Load built-in policy rules
    server.LoadDefaultPolicies()

    // Start the server
    if err := server.Start(context.Background()); err != nil {
        log.Fatal(err)
    }
    defer server.Stop()
}

请参阅 examples/simple-server/,查看注册工具、资源和提示词的完整可运行示例。

ML 模型热切换

无需重启服务,即可在运行时重新加载神经威胁检测模型:

// Swap to a new ONNX model file (verifies SHA-256 hash)
err := server.ReloadMLModel("/path/to/new_model.onnx")
if err != nil {
    log.Printf("model reload failed: %v", err)
}
工具投毒检测

通过 RegisterTool() 注册的所有工具,都会自动扫描其描述和 inputSchema 中是否存在提示词注入。若要手动扫描:

err := server.ScanToolForPoisoning("my_tool", description, inputSchema)
if err != nil {
    // err is *ToolPoisoningError — do not register this tool
}

安全层

AegisGate MCP 按顺序对每个请求应用 23 个安全层:

#层描述来源
1身份验证Bearer 令牌 + API 密钥,恒定时间比较,重复失败时自动锁定auth.go
2签名验证ECDSA P-256 防伪造——根据受信任的公钥验证消息签名auth.go
3会话管理256 位密码学安全随机会话 ID、过期机制、防劫持检查session.go
4RBAC4 级角色层级(受限 → 标准 → 特权 → 管理员),按工具设置权限rbac.go
5策略引擎带有条件、优先级、时间窗口和参数模式的允许/拒绝规则policy.go
6护栏按会话设置工具调用限制和速率限制guardrails.go
7链分析检测权限提升、数据外泄链和重复的危险工具调用guardrails.go
8令牌桶速率限制使用令牌桶算法的滑动窗口速率限制(每分钟请求数 + 突发容量)guardrails.go
9输入扫描执行前扫描工具参数中的提示词注入(约 79 种模式)handler.go、scanner.go
10响应扫描扫描工具响应中的个人身份信息、机密、XSS 和提示词注入(约 79 种检测模式)scanner.go
11机密信息脱敏在将响应返回给客户端之前,清除其中的敏感数据(个人身份信息、机密)scanner.go
12工具执行超时可配置的单次调用超时,防止工具挂起或失控handler.go
13STDIO 验证通过针对 stdio 传输命令的允许列表和阻止列表防止 Shell 注入stdio_guard.go
14审计日志记录所有 MCP 操作均记录到文件和内存中,可供合规查询,并使用防篡改哈希链audit.go
15TLS / mTLS 传输加密 TCP 连接,可选择启用双向 TLSconfig.go、server.go
16stdio 传输适用于 Claude Desktop、Cursor 和其他本地集成的标准 MCP 客户端传输方式transport.go
17健康检查端点在单独的侦听器上提供 HTTP /healthz、/readyz、/stats 端点transport.go
18参数验证执行前根据每个工具的 inputSchema 检查必填字段handler.go
19神经网络威胁检测(L3)CharCNN-BiLSTM v15 模型可对正则表达式无法检测到的语义攻击和规避变体进行评分。双层拦截:≥0.95 时独立拦截,0.50–0.94 时需 L1/L2 提供佐证internal/ml/
20启发式规避检测检测字母换位、删除元音、单词反转、leet 语、编码、拆分和零宽字符混淆internal/ml/evasion_resistance.go
21NFKC Unicode 规范化扫描前将 Unicode 兼容字符映射为规范形式,从而抵御同形异义字和连字攻击(全角 Ignore → ignore)internal/ml/normalizer.go
22工具投毒检测注册时递归扫描工具描述和 inputSchema 中的提示词注入(来自 AegisGate Scanner 的 34 种危险函数模式),在被污染的工具可被调用前将其拒绝。对应 OWASP MCP Top 10 M1handler.go
23规避检测(L2.5)15 种正则表达式模式可检测编码(base64、URL、Unicode、HTML 实体)、拆分(零宽字符、交错)、混淆(leet 语、填充、标记)和语义规避(角色扮演框架、指令覆盖)。评分 ≥ 0.8 时独立拦截;≥ 0.3 时记录警告。在 L1 正则检测和 L3 神经网络检测之间运行internal/ml/evasion_resistance.go
检测模式类别(79 种模式)

AegisGate MCP 使用 8 个类别的 79 种正则表达式模式扫描所有工具参数和响应:

类别模式数量示例
提示词25忽略先前指令、角色扮演升级、RAG 偷渡、系统提示词泄露、分隔符注入、Base64 载荷
危险函数34eval()、exec()、os.system()、subprocess(shell=True)、pickle.loads()、child_process.exec()
凭据6AWS 密钥、GitHub PAT、JWT 令牌、RSA 私钥、通用 API 密钥
金融3信用卡(Visa、Mastercard、Amex)
网络3网络地址、OPC UA、Modbus、DNP3
PII2SSN、电子邮件
XSS3Script 标签、SVG onload、image onerror
合规性3OWASP LLM01/02/06

⚙️ 配置
配置优先级

配置按从高到低的优先级顺序解析:

  1. CLI 标志 — 覆盖所有其他配置
  2. 环境变量 — 覆盖配置文件
  3. JSON 配置文件(--config)— 覆盖内置默认值
  4. 内置默认值
CLI 标志

所有 CLI 标志都有对应的环境变量:

标志环境变量默认值描述
--addrMCP_SERVER_ADDR:8081监听地址(TCP 模式)
--transportMCP_TRANSPORTtcp传输模式:tcp、stdio 或 http(Streamable HTTP)
--tokenMCP_AUTH_TOKEN(empty)用于身份验证的 Bearer 令牌
--auditMCP_AUDIT_LOG(empty)审计日志文件路径
--max-sessionsMCP_MAX_SESSIONS50最大并发会话数
--max-connectionsMCP_MAX_CONNECTIONS1000最大并发 TCP 连接数(-1 = 不限)
--rate-limitMCP_RATE_LIMIT_RPM60速率限制(请求/分钟)
--exec-timeoutMCP_EXEC_TIMEOUT30工具执行超时时间(秒)
--scan-responsesMCP_SCAN_RESPONSEStrue启用响应扫描
--block-piiMCP_BLOCK_PIItrue阻止包含 PII 的响应
--block-secretsMCP_BLOCK_SECRETStrue阻止包含密钥的响应
--block-xssMCP_BLOCK_XSStrue阻止包含 XSS 的响应
--block-prompt-injectMCP_BLOCK_PROMPT_INJECTtrue阻止包含提示词注入的响应
--redactMCP_REDACT_ENABLEDfalse启用密钥/PII 脱敏
--redact-piiMCP_REDACT_PIIfalse对响应中的 PII 脱敏
--redact-secretsMCP_REDACT_SECRETStrue对响应中的密钥脱敏
--redact-placeholderMCP_REDACT_PLACEHOLDER[REDACTED]脱敏占位文本
--tlsMCP_TLS_ENABLEDfalse启用 TLS 传输
--tls-certMCP_TLS_CERT(empty)服务端证书文件(PEM)
--tls-keyMCP_TLS_KEY(empty)服务端私钥文件(PEM)
--tls-client-caMCP_TLS_CLIENT_CA(empty)客户端证书的 CA 证书包(启用 mTLS)
--tls-min-versionMCP_TLS_MIN_VERSION1.2最低 TLS 版本:1.2 或 1.3
--health-addrMCP_HEALTH_ADDR(empty)健康检查端点监听地址(为空 = 禁用)
--configMCP_CONFIG_FILE(empty)JSON 配置文件路径
--demoMCP_DEMO_TOOLSfalse注册演示工具(ping、system_info、echo)
--mlMCP_ML_ENABLEDfalse启用神经网络威胁检测(L3,需要 CGO 构建)
--ml-shadowMCP_ML_SHADOWfalseML 影子模式:记录预测结果,但从不拦截
--ml-thresholdMCP_ML_THRESHOLD0.50ML 威胁评分阈值(0.0–1.0)
--ml-modelMCP_ML_MODEL./models/threat_cnn_bilstm.onnxONNX 模型文件路径
JSON 配置文件
{
  "address": ":8081",
  "auth_token": "my-secret-token",
  "audit_log_path": "/var/log/mcp-audit.json",
  "max_sessions": 100,
  "max_connections": 1000,
  "rate_limit_rpm": 120,
  "exec_timeout_seconds": 30,
  "scan_responses": true,
  "block_on_pii": true,
  "block_on_secrets": true,
  "block_on_xss": true,
  "block_on_prompt_inject": true,
  "redact_enabled": true,
  "redact_pii": true,
  "redact_secrets": true,
  "redact_placeholder": "[REDACTED]",
  "tls_enabled": true,
  "tls_cert_file": "/etc/ssl/mcp/server.pem",
  "tls_key_file": "/etc/ssl/mcp/server.key",
  "tls_client_ca_file": "/etc/ssl/mcp/ca.pem",
  "tls_min_version": "1.3",
  "demo_tools": true
}
传输模式
模式标志描述
tcp--transport tcp (default)TCP 监听器,支持 TLS/mTLS 加密,适用于网络部署
stdio--transport stdio面向本地客户端(Claude Desktop、Cursor)的标准 MCP stdin/stdout 传输
http--transport httpStreamable HTTP(MCP 2025-06-18)——向 /mcp 端点发送 POST JSON-RPC 请求,通过 Mcp-Session-Id 管理会话,通过 Accept 标头进行 SSE 流式传输,使用 DELETE 终止会话,支持 TLS 终止反向代理
健康检查端点

设置 --health-addr 后,单独的 HTTP 监听器会提供可观测性端点:

端点方法描述
/healthzGET存活探针——如果服务进程正在运行,则返回 200 OK
/readyzGET就绪探针——如果服务已准备好接受请求,则返回 200 OK
/statsGET以 JSON 格式返回服务统计信息(会话、速率限制、工具调用、active_connections、max_connections)

🔐 RBAC 与策略引擎

RBAC 角色

AegisGate MCP 强制实施 4 级角色层次结构。角色顺序为:restricted < standard < privileged < admin。

角色级别访问权限工具示例
restricted0仅限只读工具ping、system_info、file_exists、git_status、git_log
standard1读取 + 低风险写入file_read、code_search、web_search、file_copy
privileged2除高风险执行以外的所有功能除 shell_command、code_execute 以外的所有工具
admin3所有工具,不受限制所有已注册工具

角色比较使用 AgentRole.AtLeast()——privileged Agent 可以访问任何要求 standard 或 restricted 的工具,但不能访问要求 admin 的工具。

策略引擎

策略引擎会在任何工具执行前评估允许/拒绝规则。规则支持:

  • 工具名称匹配——精确名称和通配符模式
  • Agent 角色条件——仅对特定角色应用规则
  • 风险分数阈值——在达到 RiskAbove 值时触发
  • 优先级——优先评估高优先级规则
  • 时间范围——将工具限制在特定时间范围内
  • 参数模式——匹配工具调用参数
  • 操作——允许、拒绝(附带原因)、日志级别、风险修饰符
内置策略规则

通过 LoadDefaultPolicies() 加载:

规则 ID优先级操作条件描述
block-shell-commands100拒绝工具名称:shell_command、bash、exec、cmd、terminal;角色:restricted、standard、privilegedShell 命令需要 admin 角色
block-file-delete90拒绝工具名称:file_delete、rm、unlink、remove;角色:restricted、standard删除文件需要 privileged 或 admin 角色
block-network-write80拒绝工具名称:http_request、web_search、fetch_url、curl、wget;角色:restrictedrestricted Agent 不允许执行网络操作
alert-high-risk50允许 + 警报风险分数 > 70标记高风险操作,以便进行审计日志记录

可以通过编程方式添加自定义规则:

server.AddPolicyRule(mcp.PolicyRule{
    ID:          "block-after-hours",
    Name:        "Block Dangerous Tools After Hours",
    Description: "No high-risk tools outside business hours",
    Condition: mcp.RuleCondition{
        ToolNames: []string{"shell_command", "file_delete"},
        TimeWindow: &mcp.TimeWindow{
            Start: "08:00",
            End:   "18:00",
        },
    },
    Action: mcp.RuleAction{
        Allow:      false,
        DenyReason: "High-risk tools only available during business hours",
        LogLevel:   "warn",
    },
    Priority: 75,
    Enabled:   true,
})
## 链路分析

链路分析器会跟踪会话中的工具调用序列(滚动窗口为 20 次调用),并标记可疑模式:

检测项标记触发条件
权限提升privilege_escalation低风险工具调用后接高风险工具(shell_command、file_delete、db_query)
数据外泄data_exfiltration_chain读取敏感数据(file_read、db_query、code_search)后进行外部写入(http_request、file_write、web_search)
重复调用危险工具repeated_dangerous_tools在分析窗口内调用高风险工具 3 次或以上

出现任一标记时,链路风险将设为高,并以 WARN 级别记录事件,其中包含会话 ID、标记和调用次数。


✍️ 签名验证

AegisGate MCP 支持 ECDSA P-256 消息签名,以防止请求伪造和篡改。 客户端对每个请求的规范 JSON 进行签名(将 Signature 和 KeyID 字段置零), 并在请求标头中包含签名。

服务端设置
server, _ := mcp.NewSecuredMCPServer(cfg)

// Register a trusted client public key (SEC1 encoded)
server.AddTrustedKey("agent-001", clientPubKeySEC1)
客户端签名(示例)
import (
    "crypto/ecdsa"
    "crypto/sha256"
    "crypto/rand"
    "encoding/hex"
)

func signRequest(privKey *ecdsa.PrivateKey, canonicalJSON []byte) string {
    hash := sha256.Sum256(canonicalJSON)
    sig, _ := ecdsa.SignASN1(rand.Reader, privKey, hash[:])
    return hex.EncodeToString(sig)
}

服务端使用 ecdsa.VerifyASN1 根据受信任的公钥验证签名。 如果不存在 KeyID 或 Signature,则跳过验证——允许与未签名的客户端互操作, 同时强制提供这些信息的客户端使用签名。


🧪 测试与性能

测试覆盖率

类别测试数覆盖率
单元测试 + 集成测试(非 CGO)61192.0%
单元测试 + 集成测试(CGO + ML)61191.9%
负载 / 压力 / 突发 / 极限 / 混沌测试(构建标签:load)32—
基准测试14—
模糊测试目标3—
竞态检测器✅ 无问题—
运行测试
# Non-CGO test suite (heuristic-only, no ONNX)
CGO_ENABLED=0 go test ./... -count=1 -timeout 120s

# CGO test suite (full ML, requires libonnxruntime.so)
CGO_ENABLED=1 CGO_LDFLAGS="-L$(pwd)/lib/amd64 -lonnxruntime" go test ./... -count=1 -timeout 120s

# With race detector (CGO only — -race requires CGO)
CGO_ENABLED=1 CGO_LDFLAGS="-L$(pwd)/lib/amd64 -lonnxruntime" go test -race -count=1 -timeout 300s ./...

# Load/stress/burst/crush/chaos tests (behind build tag)
go test -tags=load -count=1 -timeout 600s -v ./...

# Benchmarks (regression tracking)
go test -bench=. -benchmem -benchtime=5s ./...

# Fuzz testing (run for 60 seconds per target)
go test -fuzz=FuzzHandleRequest -fuzztime=60s ./...
性能特征

通过 k6 风格的负载测试套件(//go:build load)验证:

核心性能
指标数值测试
持续吞吐量14,427 req/secTestLoadSustainedThroughput
p50 延迟(100 个并发连接)34 msTestLoadConcurrentConnections
p99 延迟(100 个并发连接)46 msTestLoadConcurrentConnections
连接周转率2,662 conn/secTestConnectionChurn
Goroutine 泄漏(浸泡 10 秒)0TestSoakStability
负载下的优雅关闭1.6 msTestShutdownUnderLoad
#### k6 风格压力测试/突发测试/极限测试结果
指标值测试
压力递增(500 个连接)成功率 100%,p99=65ms,738 rpsTestStressRampUp
突发请求峰值(1000 个请求)12,710 req/secTestBurstRequestSpike
突发恢复0.99× 基线(即时)TestBurstRecovery
超过 MaxConnections 的极限测试已限制,且服务端响应正常TestCrushBeyondMaxConnections
Goroutine 泄漏(500 次更替)Δ=0TestCrushGoroutineExplosion
FD 泄漏(500 次更替,5 轮)Δ=1TestFDLeak
负载下的平滑关闭1.6ms(50 个活动生成器)TestChaosShutdownUnderLoadTCP
HTTP 并发(50 个客户端)2,290 rps,p99=16msTestHTTPLoadConcurrent
HTTP 持续负载(20×30 次 ping)无 Goroutine 泄漏TestHTTPLoadSustained
跨传输方式延迟HTTP 为 TCP 的 0.62×TestCrossTransportLatency
随机丢包混沌测试(30%)服务端全程正常运行TestChaosRandomDrops
畸形请求洪泛(500 个混合请求)服务端全程正常运行TestCrushMalformedFlood

📦 零模块依赖

AegisGate MCP 没有任何外部模块依赖。go.mod 文件中不包含 require 指令。所有第三方代码(ONNX Runtime 绑定、Unicode 规范化、ML 模型)均已存放在 internal/、lib/ 和 models/ 中。

module github.com/aegisgatesecurity/aegisgate-mcp

go 1.26.9

// Zero external module dependencies (no `require` directives).
// All third-party code is vendored into internal/ — see NOTICE for details.

已存放的组件(完整归属信息请参阅 NOTICE):

组件许可证位置
onnxruntime_go(Go 绑定)MITinternal/onnxruntime_go/
libonnxruntime.so(Microsoft)MITlib/amd64/、lib/arm64/
golang.org/x/text(Unicode 规范化)BSD-3-Clauseinternal/textnorm/
CharCNN-BiLSTM v15 模型Apache-2.0models/

这为什么重要:

  • 隔离网络环境部署 — 无需执行 go mod download,不存在供应链风险
  • 无传递依赖 — 除已存放的代码外,无其他内容需要审计
  • 可复现构建 — 多次构建生成的二进制文件完全相同
  • 最小攻击面 — 所有第三方代码均可查看和审计
  • 快速编译 — 无需承担依赖解析开销

🏗️ 架构与协议

架构

┌─────────────────────────────────────────────────────────────────────────┐
│                          AegisGate MCP Server                           │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  TCP Mode:                                                              │
│  ┌──────────┐    ┌──────────────┐    ┌───────────┐    ┌──────────────┐  │
│  │ TCP      │───▶│ Auth         │───▶│ Guardrails│───▶│ Response     │  │
│  │ Client   │    │ Middleware   │    │ (Rate +   │    │ Scan         │  │
│  │          │    │ (Token +     │    │  Chain)   │    │ (PII/Secrets │  │
│  │ (TLS/    │    │  Signature + │    │           │    │  /XSS/Inject)│  │
│  │  mTLS)   │    │  Session)    │    │           │    │              │  │
│  └──────────┘    └──────────────┘    └───────────┘    └──────┬───────┘  │
│                                                             │          │
│                                                             ▼          │
│  stdio Mode:                                    ┌──────────────────────┐ │
│  ┌──────────┐    (same security chain,          │   Request Handler    │ │
│  │ stdin /  │     stdin/stdout instead          │  ┌────────────────┐  │ │
│  │ stdout   │     of TCP)                      │  │  RBAC Check    │  │ │
│  └──────────┘                                  │  ├────────────────┤  │ │
│                                                 │  │  Policy Engine │  │ │
│                                                 │  ├────────────────┤  │ │
│                                                 │  │  Param Validate│  │ │
│                                                 │  ├────────────────┤  │ │
│                                                 │  │  Tool Registry │  │ │
│                                                 │  │  + Exec Timeout│  │ │
│                                                 │  └────────────────┘  │ │
│                                                 └──────────────────────┘ │
│                                                                         │
│  Health Endpoint (separate HTTP listener):                              │
│  ┌────────────────────────────────────────┐                             │
│  │  GET /healthz  → liveness              │                             │
│  │  GET /readyz   → readiness             │                             │
│  │  GET /stats    → server statistics     │                             │
│  └────────────────────────────────────────┘                             │
│                                                                         │
│  Audit Log: all MCP actions → file + in-memory (queryable)              │
└─────────────────────────────────────────────────────────────────────────┘

请求流程:

  1. TCP 客户端连接(可选使用 TLS/mTLS),或由 stdio 通过 stdin 发送 JSON-RPC
  2. 身份验证中间件验证 bearer token/API key(采用恒定时间比较),验证 ECDSA 签名,并创建/验证会话
  3. 防护措施实施速率限制和会话限制,并运行链分析
  4. 响应扫描(执行前的参数验证在处理程序中进行)
  5. 请求处理程序检查 RBAC 权限,评估 Policy Engine 规则,根据 inputSchema 验证必需参数,并在超时时限内执行工具
  6. 响应扫描(执行后)扫描工具输出中的 PII、机密信息、XSS 和提示词注入;启用时进行脱敏
  7. 审计日志记录完整的操作链
## MCP 协议支持

AegisGate MCP 实现以下 JSON-RPC 方法(MCP 协议 2025-06-18):

方法类型描述
initialize请求解析 clientInfo,返回 serverInfo 和功能(工具、资源、提示词、日志记录)
notifications/initialized通知静默处理——不发送响应(符合 MCP 规范)
notifications/cancelled通知由客户端发起的取消——记录日志,不发送响应
notifications/tools/list_changed由服务端发起添加或移除工具时发送
notifications/resources/list_changed由服务端发起添加或移除资源时发送
notifications/resources/updated由服务端发起已订阅资源的内容发生变化时发送
notifications/prompts/list_changed由服务端发起添加或移除提示词时发送
tools/list请求返回已注册工具及其描述和 inputSchema。支持基于游标的分页
tools/call请求通过所有安全层检查后执行工具
resources/list请求返回已注册资源(URI、名称、描述)。支持基于游标的分页
resources/read请求根据 URI 读取资源——调用已注册的 ResourceHandlerFunc
resources/templates/list请求返回已注册的参数化资源 URI 模板
resources/subscribe请求订阅会话对某个 URI 的资源更新通知
resources/unsubscribe请求移除资源订阅
prompts/list请求返回已注册的提示词(名称、描述、参数)。支持基于游标的分页
prompts/get请求根据名称和可选参数获取提示词——调用已注册的 PromptHandlerFunc
ping请求健康检查——返回空成功响应

Streamable HTTP 会话管理(v1.2.2+):

  • 使用 initialize 向 /mcp 发送 POST → 响应包含 Mcp-Session-Id 标头
  • 使用后续请求向 /mcp 发送 POST → 必须包含 Mcp-Session-Id 标头
  • 携带 Mcp-Session-Id 标头向 /mcp 发送 DELETE → 终止会话(204 No Content)
  • 会话在闲置 30 分钟后过期

🏭 使用场景与部署方案

AegisGate MCP 适用于 AI Agent 与工具交互的各种环境——从云端 SaaS 平台、企业数据管道到 OT/ICS 工厂网络。无论部署环境如何,均适用相同的 21 层安全防护。

常规部署
  • 云端 SaaS — 保护面向用户的 AI 功能,防范提示词注入和数据外泄
  • 企业数据访问 — 对由 Agent 驱动的数据库查询实施 RBAC 和审计日志记录
  • CI/CD 自动化 — 限制 AI 辅助的流水线可执行的操作
  • 隔离网络 — 零依赖意味着服务无需访问互联网即可运行
### OT/ICS 环境

在 OT/ICS 环境中,AegisGate MCP 位于 AI Agent 与关键基础设施工具之间:

AI Agent (Claude, Cursor, custom)
    │
    ▼
┌──────────────────┐
│  AegisGate MCP   │  ← 23 security layers
│  (TLS/mTLS)      │
└────────┬─────────┘
         │
    ┌────┼────┬────┬────┐
    ▼    ▼    ▼    ▼    ▼
  SCADA  PLC  Hist  Tag  Log
  Read  Status Query DB  Analyzer

典型部署场景:

  • 只读监控 Agent — restricted 角色,可查询 SCADA 状态和历史记录数据,但无法下达命令
  • 维护 Agent — standard 角色,可在故障排查期间读取文件和搜索代码
  • 运维 Agent — privileged 角色,可与大多数工具交互,但无法执行 shell 命令
  • 管理员 Agent — admin 角色,可在获授权的维护窗口期间完全访问

与 OT/ICS 尤其相关的安全功能:

  • TLS/mTLS 会加密工厂网络上的所有流量
  • 时间窗口策略 将高风险工具限制在维护窗口期间使用
  • 链路分析 可检测 Agent 是否先读取敏感流程数据,随后尝试向外部网络写入数据(数据外泄)
  • 审计日志 为合规性(NERC CIP、IEC 62443)提供完整的监管链
  • 气隙运行 — 零依赖意味着服务可部署在无法访问互联网的隔离网络中

演示工具

使用 --demo 标志或在库模式下调用 RegisterDemoTools(),即可启用演示工具。 这些工具安全且只读,不会访问文件系统、网络或任何外部资源。

工具风险级别必需参数描述
ping10(无)返回 "pong" — 健康检查工具
system_info30(无)返回 Go 版本、操作系统、架构、CPU 数量、goroutine 数量和时间戳
echo20message(字符串)原样返回提供的消息

示例 — system_info 响应:

{
  "go_version": "go1.26.9",
  "os": "linux",
  "arch": "amd64",
  "cpus": 8,
  "goroutines": 12,
  "timestamp": "2026-10-08T08:58:00Z"
}

文档

详细文档位于 docs/ 目录中:

文档描述
docs/getting-started.md安装、首次运行和基本配置
docs/deployment-guide.md生产环境部署:Docker、TLS、气隙部署
docs/admin-guide.md管理:会话、审计日志、RBAC 管理、策略
docs/how-to-guides.md任务指南:自定义工具、签名验证、mTLS 设置
docs/building-your-first-server.md教程:从零开始构建完整的安全 MCP 服务,包含自定义工具、RBAC 和策略
docs/integrating-with-cursor.md通过 Streamable HTTP 传输将 Cursor 连接到 AegisGate MCP
docs/model-card.mdML 模型详情:架构、训练数据、性能指标
docs/comparison.md功能比较:AegisGate MCP 与官方 MCP SDK 及附加封装
docs/owasp-mcp-top-10.mdOWASP MCP Top 10 风险映射 — 覆盖全部 10 项安全风险
docs/v1.3.0-roadmap.mdSSE 流式传输、服务端发起的通知、资源订阅和资源模板路线图(P1–P4 已完成)

更新日志

版本历史和重要变更请参阅 CHANGELOG.md。


平台互操作(可选)

AegisGate MCP 可选择与 AegisGate Platform 集成,以拉取模式并转发事件:

  • 模式拉取:通过 Platform 的遥测端点获取规范检测模式,并使用 ETag 缓存
  • 事件转发:以规范合约格式向 Platform 的遥测接收端发送安全事件
  • 工具描述筛查:增加 AegisGate Scanner 提供的 34 种危险函数模式

所有互操作功能均兼容气隙环境 — 未配置 platform_url 时会完全禁用。不会进行网络调用、遥测或依赖任何外部项。


何时升级到 AegisGate Platform

AegisGate MCP 是一个独立的安全 MCP 服务框架,非常适合构建和运行内置安全能力的 MCP 服务。它免费、开源,且没有任何外部依赖。

当需求超出单个服务的范围时,AegisGate Platform 是自然的升级选择:

需求AegisGate MCP(免费)AegisGate Platform
安全 MCP 服务框架✅ 23 层,零依赖✅ 内嵌 MCP 服务
ML 威胁检测✅ 限制为每分钟 100 次(单服务)✅ 无限制,覆盖整个组织
代理/网关模式❌ 框架,不是代理✅ 位于客户端与所有 AI 服务之间
OAuth 2.0 / OIDC / SSO❌ Bearer 令牌 + API 密钥✅ SAML、OIDC、JWT
SIEM 集成❌ 基于文件的审计 + Prometheus✅ Splunk、Elasticsearch、QRadar、Datadog(11 个平台)
合规框架❌ 无✅ 31 个框架(HIPAA、PCI、SOC 2、EU AI Act、NIST 等)
多协议(HTTP、A2A、ACP)❌ 仅 MCP✅ 6 大支柱
企业级规模⚠️ 250 个连接、25 个会话✅ 无限制

可以这样理解: AegisGate MCP 是构建 MCP 服务时使用的安全基础。AegisGate Platform 是企业级网关,可保护组织内所有 AI 流量,包括 MCP、HTTP、A2A 和 ACP。

其他 AegisGate 产品:

  • AegisGate Rampart — 面向使用 Claude、Cursor 或 Copilot 的开发者的免费本地代理
  • AegisGate Lens — 面向日常 AI 对话的免费浏览器扩展

许可证

Apache-2.0。完整文本请参阅 LICENSE,署名信息请参阅 NOTICE。

安全

漏洞报告请参阅 SECURITY.md。

贡献

请参阅 CONTRIBUTING.md。根据 DCO,所有提交都必须签署(git commit -s)。


知识产权声明

AegisGate 的核心技术已向 USPTO 申请专利(临时申请编号 64/153,573–64/153,577,于 2026 年 9 月 12 日提交;64/174,824,于 2026 年 10 月 12 日提交;64/180,722,于 2026 年 10 月 20 日提交;以及 64/184,057,于 2026 年 10 月 26 日提交)。源代码 © 2025-2026 AegisGate Security, LLC。根据 Apache 2.0 许可证授权。


商标

AegisGate Security™ 是 AegisGate Security, LLC 的商标,已向美国专利商标局(USPTO)提交申请。该商标于 2026 年 10 月 13 日公布,进入异议期。

AegisGate MCP 是 AegisGate Security, LLC 未注册的产品名称。由于该产品名称尚未单独提交商标申请,因此不使用 ™ 符号。对“AegisGate Security”商标的使用受 Lanham Act(15 U.S.C. § 1126)及适用的州商标法管辖。

允许将 AegisGate 名称和商标用于 GitHub 上发布的、未经修改的开源软件发行版。若在衍生作品、商业产品、服务项目或营销材料中使用 AegisGate 名称、徽标或其他品牌资产,必须事先获得 AegisGate Security, LLC 的书面许可。

联系邮箱:[email protected]


🌐 AegisGate Security · 💬 Discord · ✉️ [email protected] · 𝕏 @aegisgate · 📱 Telegram · 🐘 @[email protected]

AegisGate Security 的开发者倾注 🖤 打造,旨在保护 AI 攻击面。

评论

支持 Markdown

第一次接触 MCP?

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

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