aegisgate-mcp

Framework de servidor MCP seguro com 22 camadas de segurança e detecção de ameaças por ML. Zero dependências.

Documentação

🛡️ AegisGate MCP

Framework de servidor MCP seguro — 22 camadas de defesa, zero dependências.

Um servidor MCP endurecido e sem dependências, escrito em Go puro. Construa seu servidor MCP sobre uma fundação que tem segurança embutida desde a primeira linha — não adicionada depois de uma violação.

Apache 2.0 · 22 camadas de segurança · 30 padrões regex + detecção ML CharCNN-BiLSTM (v13) · Zero CVEs · Zero dependências de módulos externos

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

Início Rápido · Camadas de Segurança · RBAC · Arquitetura · Protocolo · Documentação · Versões

GitHub stars — Se o AegisGate MCP ajuda você a proteger seus agentes de IA, considere ⭐ dar uma estrela neste repositório. Isso ajuda outras pessoas a descobri-lo.

AegisGate Security™ é uma marca registrada da AegisGate Security, LLC, registrada no USPTO. "AegisGate MCP" é um nome de produto não registrado. Consulte Marca Registrada abaixo.


Por que AegisGate MCP?

38% dos servidores MCP não têm autenticação. Mais de 590 avisos de segurança. 3 CVEs críticos nos SDKs MCP oficiais em 6 meses — incluindo execução remota de código com CVSS 9.8 e a falha da "Mãe de Todas as Cadeias de Suprimentos de IA" afetando mais de 150 milhões de downloads.

Os SDKs MCP oficiais fornecem o protocolo. Eles não fornecem segurança. Sem autenticação. Sem registro de auditoria. Sem detecção de ameaças. Sem limitação de taxa. Sem RBAC. Todo servidor construído em um SDK básico começa com uma postura de segurança em branco e cabe a você construí-la — ou ignorá-la, como fazem 38% dos servidores.

AegisGate MCP é a alternativa segura. Construa seu servidor MCP sobre uma fundação que tem segurança embutida desde a primeira linha — não adicionada depois de uma violação.

SDKs MCP oficiaisAegisGate MCP
Autenticação❌ Traga a sua✅ Tokens Bearer + chaves de API + bloqueio
Autorização❌ Nada✅ RBAC de 4 níveis com permissões por ferramenta
Registro de auditoria❌ Nada✅ Cadeia de hash SHA-256 à prova de adulteração
Detecção de ameaças❌ Nada✅ 30 padrões regex + ML neural (<1ms)
Risco na cadeia de suprimentos❌ Dependências npm/PyPI✅ Zero dependências (somente stdlib Go)
CVEs3 críticos em 6 mesesZero. Sempre.
LicençaMITApache 2.0

22 camadas de segurança. Zero dependências. Zero CVEs. Apache 2.0.

Precisa de modo proxy, OAuth, SIEM ou frameworks de conformidade? Consulte Quando atualizar para a Plataforma AegisGate abaixo — ou explore AegisGate Rampart para proteção de proxy de API de IA local.


Visão Geral

AegisGate MCP é um servidor MCP endurecido e sem dependências, escrito em Go puro. Ele fica entre os agentes de IA e as ferramentas que eles chamam, aplicando 22 camadas de defesa a cada requisição — desde autenticação e RBAC até detecção neural de ameaças e análise de cadeia.

Servidores MCP padrão assumem um ambiente local confiável. Em produção — seja uma plataforma SaaS na nuvem, um pipeline de dados empresarial ou uma rede de planta isolada (air-gapped) — os agentes podem executar comandos, consultar bancos de dados ou interagir com sistemas críticos. Uma única chamada de ferramenta não autorizada ou maliciosa pode causar exfiltração de dados, interrupção de processos ou pior. AegisGate MCP envolve cada chamada de ferramenta em defesa em profundidade, tudo com zero dependências de módulos externos para que possa operar em ambientes isolados.

Versão1.4.2
LicençaApache-2.0
Versão do Go1.26+
Dependências de módulosZero (sem diretivas require — todo código de terceiros é fornecido internamente)
Imagem Dockerdebian:bookworm-slim, ~135 MB (com ML) ou ~8 MB (somente heurística)
Arquiteturasamd64, arm64
Modelo MLCharCNN-BiLSTM v13, 1,6M parâmetros, inferência em CPU <1ms
Testes429 testes, 10 benchmarks, 3 alvos de fuzzing, 90,8% de cobertura (sem CGO) / 91,4% (com CGO)

Início Rápido

Build

go build -o mcp-server ./cmd/mcp-server

Executar

# 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, ~135 MB)
docker build -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

# Heuristic-only build (no CGO, ~8 MB)
docker build --build-arg CGO_ENABLED=0 -t aegisgate-mcp:lite .
docker run -p 8081:8081 aegisgate-mcp:lite --demo

A imagem Docker padrão usa debian:bookworm-slim com CGO habilitado, incluindo o ONNX Runtime fornecido internamente e o modelo CharCNN-BiLSTM v13 para detecção neural completa de ameaças. Uma variante --build-arg CGO_ENABLED=0 produz uma imagem menor somente com heurísticas. Builds multi-arquitetura suportam tanto linux/amd64 quanto linux/arm64.

Detecção Neural de Ameaças (L3)

AegisGate MCP inclui o mesmo modelo neural CharCNN-BiLSTM v13 usado pela Plataforma AegisGate e pelo Rampart — fornecido internamente com zero dependências de módulos externos. O modelo fornece:

  • Detecção semântica de ataques — detecta tentativas de injeção de prompt e jailbreak que contornam a correspondência de padrões regex
  • Resistência a evasão — detecta técnicas de ofuscação (leet speak, homóglifos Unicode, transposição de caracteres, remoção de vogais, inversão de palavras)
  • Bloqueio em dois níveis — pontuações ≥0,95 bloqueiam de forma independente; pontuações 0,50–0,94 bloqueiam somente se houver corroboração de L1 (regex) ou L2 (scanner de entrada)
  • Modo sombra — registra previsões sem bloquear (para calibração)
  • Fallback heurístico — quando CGO não está disponível, a pontuação heurística fornece detecção de linha de base sem ONNX
FlagVariável de AmbientePadrãoDescrição
--mlMCP_ML_ENABLEDfalse (CLI) / true (Docker)Habilita detecção neural de ameaças
--ml-shadowMCP_ML_SHADOWfalseRegistra previsões mas nunca bloqueia
--ml-thresholdMCP_ML_THRESHOLD0.50Limiar de pontuação de ameaça (0,0–1,0)
--ml-modelMCP_ML_MODEL./models/threat_cnn_bilstm.onnxCaminho para o arquivo do modelo ONNX

Uso como Biblioteca

AegisGate MCP pode ser incorporado como uma biblioteca 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()
}

Consulte examples/simple-server/ para um exemplo completo e funcional que registra uma ferramenta, recurso e prompt.

Troca a Quente do Modelo ML

Recarregue o modelo neural de detecção de ameaças em tempo de execução sem reiniciar o servidor:

// 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)
}

Detecção de Envenenamento de Ferramentas

Todas as ferramentas registradas via RegisterTool() são automaticamente verificadas quanto a injeção de prompt em suas descrições e inputSchema. Para verificar manualmente:

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

Camadas de Segurança

AegisGate MCP aplica 22 camadas de segurança a cada requisição, em ordem:

#CamadaDescriçãoFonte
1AutenticaçãoToken Bearer + chave de API, comparação em tempo constante, bloqueio automático em falhas repetidasauth.go
2Verificação de AssinaturaECDSA P-256 antifalsificação — verifica assinaturas de mensagens contra chaves públicas confiáveisauth.go
3Gerenciamento de SessãoIDs de sessão aleatórios criptograficamente de 256 bits, expiração, verificações anti-sequestrosession.go
4RBACHierarquia de funções de 4 níveis (restrito → padrão → privilegiado → administrador), permissões por ferramentarbac.go
5Mecanismo de PolíticasRegras de permitir/negar com condições, prioridades, janelas de tempo e padrões de parâmetrospolicy.go
6SalvaguardasLimites de chamadas de ferramentas por sessão e limitação de taxaguardrails.go
7Análise de CadeiaDetecta escalonamento de privilégios, cadeias de exfiltração de dados e chamadas repetidas de ferramentas perigosasguardrails.go
8Limitação de Taxa com Token BucketLimitação de taxa com janela deslizante usando algoritmo token bucket (RPM + capacidade de rajada)guardrails.go
9Verificação de EntradaVerifica parâmetros de ferramentas quanto a injeção de prompt antes da execução (~30 padrões)handler.go, scanner.go
10Verificação de RespostaVerifica respostas de ferramentas quanto a PII, segredos, XSS e injeção de prompt (~30 padrões de detecção)scanner.go
11Redação de SegredosRemove dados sensíveis (PII, segredos) das respostas antes de retornar ao clientescanner.go
12Tempo Limite de Execução de FerramentasTempo limite configurável por chamada evita ferramentas travadas ou descontroladashandler.go
13Validação STDIOPrevenção de injeção de shell via allowlist + blocklist para comandos de transporte stdiostdio_guard.go
14Registro de AuditoriaTodas as ações MCP registradas em arquivo + memória, consultáveis para conformidade, cadeia de hash à prova de adulteraçãoaudit.go
15Transporte TLS / mTLSConexões TCP criptografadas com TLS mútuo opcionalconfig.go, server.go
16Transporte stdioTransporte padrão de cliente MCP para Claude Desktop, Cursor e outras integrações locaistransport.go
17Endpoint de SaúdeEndpoints HTTP /healthz, /readyz, /stats em um listener separadotransport.go
18Validação de ParâmetrosCampos obrigatórios verificados contra o inputSchema de cada ferramenta antes da execuçãohandler.go
19Detecção Neural de Ameaças (L3)O modelo CharCNN-BiLSTM v13 pontua ataques semânticos e variantes de evasão que o regex não detecta. Bloqueio em dois níveis: ≥0,95 bloqueia de forma independente, 0,50–0,94 exige corroboração L1/L2internal/ml/
20Detecção Heurística de EvasãoDetecta transposição, remoção de vogais, inversão de palavras, leet speak, codificação, divisão e ofuscação com caracteres de largura zerointernal/ml/evasion_resistance.go
21Normalização Unicode NFKCMapeia caracteres de compatibilidade Unicode para formas canônicas antes da verificação — derrota ataques de homóglifos e ligaduras (largura total Ignore → ignore)internal/ml/normalizer.go
22Detecção de Envenenamento de FerramentasVerifica descrições de ferramentas e inputSchema recursivamente quanto a injeção de prompt no momento do registro — rejeita ferramentas envenenadas antes que possam ser chamadas. Mapeia para OWASP MCP Top 10 M1handler.go

⚙️ Configuração

Prioridade de Configuração

A configuração é resolvida em ordem de maior para menor prioridade:

  1. Flags de CLI — substituem tudo
  2. Variáveis de ambiente — substituem o arquivo de configuração
  3. Arquivo de configuração JSON (--config) — substitui os padrões embutidos
  4. Padrões embutidos

Flags de CLI

Todas as flags de CLI têm equivalentes em variáveis de ambiente:

SinalizaçãoVariável de AmbientePadrãoDescrição
--addrMCP_SERVER_ADDR:8081Endereço de escuta (modo TCP)
--transportMCP_TRANSPORTtcpModo de transporte: tcp, stdio ou http (HTTP Streamable)
--tokenMCP_AUTH_TOKEN(vazio)Token Bearer para autenticação
--auditMCP_AUDIT_LOG(vazio)Caminho do arquivo de log de auditoria
--max-sessionsMCP_MAX_SESSIONS50Máximo de sessões simultâneas
--max-connectionsMCP_MAX_CONNECTIONS1000Máximo de conexões TCP simultâneas (-1 = ilimitado)
--rate-limitMCP_RATE_LIMIT_RPM60Limite de taxa (requisições/min)
--exec-timeoutMCP_EXEC_TIMEOUT30Tempo limite de execução de ferramentas (segundos)
--scan-responsesMCP_SCAN_RESPONSEStrueHabilitar varredura de respostas
--block-piiMCP_BLOCK_PIItrueBloquear respostas contendo PII
--block-secretsMCP_BLOCK_SECRETStrueBloquear respostas contendo segredos
--block-xssMCP_BLOCK_XSStrueBloquear respostas contendo XSS
--block-prompt-injectMCP_BLOCK_PROMPT_INJECTtrueBloquear respostas contendo injeção de prompt
--redactMCP_REDACT_ENABLEDfalseHabilitar redação de segredos/PII
--redact-piiMCP_REDACT_PIIfalseRedigir PII das respostas
--redact-secretsMCP_REDACT_SECRETStrueRedigir segredos das respostas
--redact-placeholderMCP_REDACT_PLACEHOLDER[REDACTED]Texto do marcador de redação
--tlsMCP_TLS_ENABLEDfalseHabilitar transporte TLS
--tls-certMCP_TLS_CERT(vazio)Arquivo de certificado do servidor (PEM)
--tls-keyMCP_TLS_KEY(vazio)Arquivo de chave privada do servidor (PEM)
--tls-client-caMCP_TLS_CLIENT_CA(vazio)Pacote de CA para certificados de cliente (habilita mTLS)
--tls-min-versionMCP_TLS_MIN_VERSION1.2Versão mínima do TLS: 1.2 ou 1.3
--health-addrMCP_HEALTH_ADDR(vazio)Endereço de escuta do endpoint de saúde (vazio = desabilitado)
--configMCP_CONFIG_FILE(vazio)Caminho do arquivo de configuração JSON
--demoMCP_DEMO_TOOLSfalseRegistrar ferramentas de demonstração (ping, system_info, echo)
--mlMCP_ML_ENABLEDfalseHabilitar detecção neural de ameaças (L3, requer build CGO)
--ml-shadowMCP_ML_SHADOWfalseModo sombra de ML: registrar previsões, mas nunca bloquear
--ml-thresholdMCP_ML_THRESHOLD0.50Limite de pontuação de ameaça de ML (0.0–1.0)
--ml-modelMCP_ML_MODEL./models/threat_cnn_bilstm.onnxCaminho para o arquivo do modelo ONNX

Arquivo de Configuração 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
}

Modos de Transporte

ModoSinalizaçãoDescrição
tcp--transport tcp (padrão)Listener TCP, suporta criptografia TLS/mTLS para implantações em rede
stdio--transport stdioTransporte padrão MCP stdin/stdout para clientes locais (Claude Desktop, Cursor)
http--transport httpHTTP Streamable (MCP 2025-06-18) — POST JSON-RPC para o endpoint /mcp, com gerenciamento de sessão Mcp-Session-Id, streaming SSE via cabeçalho Accept, DELETE para encerramento de sessão, suporta proxies reversos com terminação TLS

Endpoints de Saúde

Quando --health-addr está definido, um listener HTTP separado fornece endpoints de observabilidade:

EndpointMétodoDescrição
/healthzGETSonda de vivacidade — retorna 200 OK se o processo do servidor estiver em execução
/readyzGETSonda de prontidão — retorna 200 OK se o servidor estiver pronto para aceitar requisições
/statsGETEstatísticas do servidor como JSON (sessões, limites de taxa, chamadas de ferramentas, active_connections, max_connections)

🔐 RBAC & Mecanismo de Políticas

Papéis RBAC

AegisGate MCP impõe uma hierarquia de papéis de 4 níveis. Os papéis são ordenados: restricted < standard < privileged < admin.

PapelNívelAcessoExemplos de Ferramentas
restricted0Somente ferramentas somente leituraping, system_info, file_exists, git_status, git_log
standard1Leitura + escrita de baixo riscofile_read, code_search, web_search, file_copy
privileged2Tudo, exceto execução de alto riscoTodas as ferramentas, exceto shell_command, code_execute
admin3Todas as ferramentas, sem restriçõesTodas as ferramentas registradas

A comparação de papéis usa AgentRole.AtLeast() — um agente privileged pode acessar qualquer ferramenta que exija standard ou restricted, mas não ferramentas que exijam admin.

Mecanismo de Políticas

O Mecanismo de Políticas avalia regras de permitir/negar antes de qualquer ferramenta ser executada. As regras suportam:

  • Correspondência de nomes de ferramentas — nomes exatos e padrões curinga
  • Condições de papel do agente — aplicar regras apenas a papéis específicos
  • Limites de pontuação de risco — acionar em valores de RiskAbove
  • Prioridades — regras de prioridade mais alta avaliadas primeiro
  • Janelas de tempo — restringir ferramentas a intervalos de tempo específicos
  • Padrões de parâmetros — corresponder aos parâmetros de chamada de ferramenta
  • Ações — permitir, negar (com motivo), nível de log, modificadores de risco

Regras de Política Integradas

Carregadas via LoadDefaultPolicies():

ID da RegraPrioridadeAçãoCondiçãoDescrição
block-shell-commands100NegarNomes de ferramentas: shell_command, bash, exec, cmd, terminal; Papéis: restrito, padrão, privilegiadoComandos de shell exigem papel de administrador
block-file-delete90NegarNomes de ferramentas: file_delete, rm, unlink, remove; Papéis: restrito, padrãoExclusão de arquivos exige papel privilegiado ou administrador
block-network-write80NegarNomes de ferramentas: http_request, web_search, fetch_url, curl, wget; Papéis: restritoOperações de rede não permitidas para agentes restritos
alert-high-risk50Permitir + AlertaPontuação de risco > 70Sinaliza operações de alto risco para registro de auditoria

Regras personalizadas podem ser adicionadas programaticamente:

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,
})

Análise de Cadeia

O Analisador de Cadeia rastreia sequências de chamadas de ferramentas dentro de uma sessão (janela deslizante de 20 chamadas) e sinaliza padrões suspeitos:

DetecçãoSinalizaçãoAcionador
Escalonamento de Privilégiosprivilege_escalationChamada de ferramenta de baixo risco seguida por uma ferramenta de alto risco (shell_command, file_delete, db_query)
Exfiltração de Dadosdata_exfiltration_chainLeitura de dados sensíveis (file_read, db_query, code_search) seguida por uma escrita externa (http_request, file_write, web_search)
Ferramentas Perigosas Repetidasrepeated_dangerous_tools3+ chamadas de ferramentas de alto risco dentro da janela de análise

Quando qualquer sinalização é levantada, o risco da cadeia é definido como Alto e o evento é registrado no nível WARN com o ID da sessão, sinalizações e contagem de chamadas.


✍️ Verificação de Assinatura

AegisGate MCP suporta assinatura de mensagens ECDSA P-256 para prevenir falsificação e adulteração de requisições. Os clientes assinam o JSON canônico de cada requisição (com os campos Signature e KeyID zerados) e incluem a assinatura no cabeçalho da requisição.

Configuração do Servidor

server, _ := mcp.NewSecuredMCPServer(cfg)

// Register a trusted client public key (SEC1 encoded)
server.AddTrustedKey("agent-001", clientPubKeySEC1)

Assinatura do Cliente (exemplo)

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)
}

O servidor verifica a assinatura usando ecdsa.VerifyASN1 contra a chave pública confiável. Se nenhum KeyID ou Signature estiver presente, a verificação é ignorada — permitindo interoperabilidade com clientes não assinados enquanto impõe assinaturas para clientes que as fornecem.


🧪 Testes & Desempenho

Cobertura de Testes

CategoriaTestesCobertura
Unitário + integração (não-CGO)42590.8%
Unitário + integração (CGO + ML)42991.4%
Carga / ruptura / imersão (tag de build: load)9—
Benchmarks10—
Alvos de fuzzing3—

Executando Testes

# 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 180s ./...

# Load/break/soak tests (behind build tag)
go test -tags=load -count=1 -timeout 120s -v ./...

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

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

Características de Desempenho

Validadas via suíte de testes de carga (//go:build load):

MétricaValorTeste
Taxa de transferência sustentada14.427 req/segTestLoadSustainedThroughput
Latência p50 (100 concorrentes)34 msTestLoadConcurrentConnections
Latência p99 (100 concorrentes)46 msTestLoadConcurrentConnections
Taxa de rotatividade de conexões2.662 conexões/segTestConnectionChurn
Vazamentos de goroutines (imersão de 10s)0TestSoakStability
Desligamento gracioso sob carga1,6 msTestShutdownUnderLoad

📦 Zero Dependências de Módulos

AegisGate MCP tem zero dependências externas de módulos. O arquivo go.mod contém nenhuma diretiva require. Todo o código de terceiros (bindings ONNX Runtime, normalização Unicode, modelo de ML) é fornecido em internal/, lib/ e 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.

Componentes fornecidos (veja NOTICE para atribuição completa):

ComponenteLicençaLocalização
onnxruntime_go (bindings Go)MITinternal/onnxruntime_go/
libonnxruntime.so (Microsoft)MITlib/amd64/, lib/arm64/
golang.org/x/text (norm. Unicode)BSD-3-Clauseinternal/textnorm/
Modelo CharCNN-BiLSTM v13Apache-2.0models/

Por que isso importa:

  • Implantação isolada — nenhum go mod download necessário, sem risco de cadeia de suprimentos
  • Sem dependências transitivas — nada para auditar além do código fornecido
  • Builds reproduzíveis — o binário é idêntico entre builds
  • Superfície de ataque mínima — todo o código de terceiros é visível e auditável
  • Compilação rápida — sem sobrecarga de resolução de dependências

🏗️ Arquitetura & Protocolo

Arquitetura

┌─────────────────────────────────────────────────────────────────────────┐
│                          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)              │
└─────────────────────────────────────────────────────────────────────────┘

Fluxo de requisição:

  1. Cliente TCP conecta (opcionalmente via TLS/mTLS) ou stdio envia JSON-RPC via stdin
  2. Middleware de Autenticação valida token bearer/chave de API (tempo constante), verifica assinatura ECDSA, cria/valida sessão
  3. Guardrails impõem limites de taxa, limites de sessão e executam análise de cadeia
  4. Varredura de Resposta (validação de parâmetros pré-execução acontece no handler)
  5. Handler de Requisição verifica permissões RBAC, avalia regras do Mecanismo de Políticas, valida parâmetros obrigatórios contra inputSchema, executa ferramenta com tempo limite
  6. Varredura de Resposta (pós-execução) varre a saída da ferramenta para PII, segredos, XSS, injeção de prompt; redige se habilitado
  7. Log de Auditoria registra a cadeia completa de ações

Suporte ao Protocolo MCP

AegisGate MCP implementa os seguintes métodos JSON-RPC (Protocolo MCP 2025-06-18):

MétodoTipoDescrição
initializeSolicitaçãoAnalisa clientInfo, retorna serverInfo + capacidades (ferramentas, recursos, prompts, logging)
notifications/initializedNotificaçãoTratada silenciosamente — nenhuma resposta enviada (conforme especificação MCP)
notifications/cancelledNotificaçãoCancelamento iniciado pelo cliente — registrado, nenhuma resposta enviada
notifications/tools/list_changedIniciado pelo servidorEnviado quando ferramentas são adicionadas ou removidas
notifications/resources/list_changedIniciado pelo servidorEnviado quando recursos são adicionados ou removidos
notifications/resources/updatedIniciado pelo servidorEnviado quando o conteúdo de um recurso inscrito muda
notifications/prompts/list_changedIniciado pelo servidorEnviado quando prompts são adicionados ou removidos
tools/listSolicitaçãoRetorna ferramentas registradas com descrições e inputSchema. Suporta paginação baseada em cursor
tools/callSolicitaçãoExecuta uma ferramenta após passar por todas as camadas de segurança
resources/listSolicitaçãoRetorna recursos registrados (URIs, nomes, descrições). Suporta paginação baseada em cursor
resources/readSolicitaçãoLê um recurso por URI — chama o ResourceHandlerFunc registrado
resources/templates/listSolicitaçãoRetorna modelos de URI registrados para recursos parametrizados
resources/subscribeSolicitaçãoInscreve a sessão em notificações de atualização de recursos para uma URI
resources/unsubscribeSolicitaçãoRemove uma inscrição de recurso
prompts/listSolicitaçãoRetorna prompts registrados (nomes, descrições, argumentos). Suporta paginação baseada em cursor
prompts/getSolicitaçãoObtém um prompt pelo nome com argumentos opcionais — chama o PromptHandlerFunc registrado
pingSolicitaçãoVerificação de saúde — retorna resposta de sucesso vazia

Gerenciamento de sessão HTTP Streamable (v1.2.2+):

  • POST /mcp com initialize → a resposta inclui o cabeçalho Mcp-Session-Id
  • POST /mcp com solicitações subsequentes → deve incluir o cabeçalho Mcp-Session-Id
  • DELETE /mcp com o cabeçalho Mcp-Session-Id → encerra a sessão (204 No Content)
  • Sessões expiram após 30 minutos de inatividade

🏭 Casos de Uso e Cenários de Implantação

O AegisGate MCP atende qualquer ambiente onde agentes de IA interagem com ferramentas — desde plataformas SaaS em nuvem até pipelines de dados empresariais e redes de plantas OT/ICS. As mesmas 21 camadas de segurança se aplicam independentemente do contexto de implantação.

Implantações Gerais

  • SaaS em nuvem — protege recursos de IA voltados ao usuário contra injeção de prompt e exfiltração de dados
  • Acesso a dados empresariais — aplica RBAC e auditoria de logs em consultas a bancos de dados conduzidas por agentes
  • Automação CI/CD — restringe o que pipelines assistidos por IA podem executar
  • Redes isoladas (air-gapped) — zero dependências significa que o servidor funciona sem acesso à internet

Ambientes OT/ICS

Em um ambiente OT/ICS, o AegisGate MCP fica entre agentes de IA e ferramentas de infraestrutura crítica:

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

Cenários típicos de implantação:

  • Agente de monitoramento somente leitura — função restricted, pode consultar status SCADA e dados de histórico, mas não pode emitir comandos
  • Agente de manutenção — função standard, pode ler arquivos e pesquisar código durante solução de problemas
  • Agente de operações — função privileged, pode interagir com a maioria das ferramentas, mas não pode executar comandos de shell
  • Agente administrador — função admin, acesso total para janelas de manutenção autorizadas

Recursos de segurança particularmente relevantes para OT/ICS:

  • TLS/mTLS criptografa todo o tráfego na rede da planta
  • Políticas de janela de tempo restringem ferramentas de alto risco a janelas de manutenção
  • Análise de cadeia detecta se um agente lê dados sensíveis de processo e depois tenta uma gravação externa na rede (exfiltração)
  • Auditoria de logs fornece uma cadeia completa de custódia para conformidade (NERC CIP, IEC 62443)
  • Operação isolada (air-gapped) — zero dependências significa que o servidor pode ser implantado em redes isoladas sem acesso à internet

Ferramentas de Demonstração

Ative as ferramentas de demonstração com a flag --demo ou chamando RegisterDemoTools() no modo biblioteca. São ferramentas seguras e somente leitura que não acessam o sistema de arquivos, rede ou quaisquer recursos externos.

FerramentaNível de RiscoParâmetros NecessáriosDescrição
ping10(nenhum)Retorna "pong" — ferramenta de verificação de saúde
system_info30(nenhum)Retorna versão do Go, SO, arquitetura, contagem de CPUs, contagem de goroutines, timestamp
echo20message (string)Ecoa de volta a mensagem fornecida

Exemplo — resposta de system_info:

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

Documentação

Documentação detalhada está disponível no diretório docs/:

DocumentoDescrição
docs/getting-started.mdInstalação, primeira execução e configuração básica
docs/deployment-guide.mdImplantação em produção: Docker, TLS, configurações air-gapped
docs/admin-guide.mdAdministração: sessões, logs de auditoria, gerenciamento de RBAC, políticas
docs/how-to-guides.mdGuias específicos de tarefas: ferramentas personalizadas, verificação de assinatura, configuração de mTLS
docs/building-your-first-server.mdTutorial: construa um servidor MCP seguro completo do zero com ferramentas personalizadas, RBAC e políticas
docs/integrating-with-cursor.mdConecte o Cursor ao AegisGate MCP via transporte HTTP Streamable
docs/model-card.mdDetalhes do modelo de ML: arquitetura, dados de treinamento, métricas de desempenho
docs/comparison.mdComparação de recursos: AegisGate MCP vs SDKs MCP oficiais e wrappers complementares
docs/owasp-mcp-top-10.mdMapeamento de riscos OWASP MCP Top 10 — cobertura para todos os 10 riscos de segurança
docs/v1.3.0-roadmap.mdRoadmap para streaming SSE, notificações iniciadas pelo servidor, inscrições de recursos e modelos de recursos (P1–P4 concluídos)

Changelog

Consulte CHANGELOG.md para histórico de versões e mudanças notáveis.


Quando Atualizar para a Plataforma AegisGate

O AegisGate MCP é um framework de servidor MCP seguro e autônomo — perfeito para construir e executar servidores MCP com segurança integrada. É gratuito, de código aberto e possui zero dependências externas.

Quando suas necessidades crescerem além de um único servidor, a Plataforma AegisGate é o caminho natural de atualização:

NecessidadeAegisGate MCP (gratuito)Plataforma AegisGate
Framework de servidor MCP seguro✅ 22 camadas, zero dependências✅ Servidor MCP embutido
Detecção de ameaças por ML✅ Limitado a 100 inf/min (servidor único)✅ Ilimitado, em toda a organização
Modo proxy/gateway❌ Framework, não proxy✅ Fica entre clientes e todos os serviços de IA
OAuth 2.0 / OIDC / SSO❌ Tokens Bearer + chaves de API✅ SAML, OIDC, JWT
Integração SIEM❌ Auditoria baseada em arquivo + Prometheus✅ Splunk, Elasticsearch, QRadar, Datadog (11 plataformas)
Frameworks de conformidade❌ Nenhum✅ 31 frameworks (HIPAA, PCI, SOC 2, EU AI Act, NIST, etc.)
Multiprotocolo (HTTP, A2A, ACP)❌ Somente MCP✅ 6 pilares
Escala empresarial⚠️ 250 conexões, 25 sessões✅ Ilimitado

Pense desta forma: O AegisGate MCP é a base segura sobre a qual você constrói servidores MCP. A Plataforma AegisGate é o gateway empresarial que protege todo o tráfego de IA na sua organização — incluindo MCP, HTTP, A2A e ACP.

Outros produtos AegisGate:

  • AegisGate Rampart — Proxy local gratuito para desenvolvedores que usam Claude, Cursor ou Copilot
  • AegisGate Lens — Extensão de navegador gratuita para conversas cotidianas com IA

Licença

Apache-2.0. Consulte LICENSE para o texto completo e NOTICE para atribuição.

Segurança

Consulte SECURITY.md para relatar vulnerabilidades.

Contribuição

Consulte CONTRIBUTING.md. Todos os commits devem ser assinados (git commit -s) conforme o DCO.


Aviso de Propriedade Intelectual

As tecnologias centrais do AegisGate têm pedidos de patente pendentes no USPTO (Nºs de Pedido Provisório 64/153.573–64/153.577, depositados em 12 de setembro de 2026). O código-fonte é © 2025-2026 AegisGate Security, LLC. Licenciado sob Apache 2.0.


Marca Registrada

AegisGate Security™ é uma marca registrada da AegisGate Security, LLC, depositada no Escritório de Patentes e Marcas dos Estados Unidos (USPTO). A marca foi publicada para oposição em 13 de outubro de 2026.

AegisGate MCP é um nome de produto não registrado da AegisGate Security, LLC. O símbolo ™ não é usado para este nome de produto, pois ele não foi depositado separadamente como pedido de marca registrada. O uso da marca "AegisGate Security" é regido pelo Lanham Act (15 U.S.C. § 1126) e pela legislação estadual aplicável de marcas registradas.

É concedida permissão para usar o nome e as marcas AegisGate em conexão com a distribuição de software de código aberto não modificado, conforme publicado no GitHub. O uso do nome, logotipo ou outros ativos de marca AegisGate em obras derivadas, produtos comerciais, ofertas de serviços ou materiais de marketing requer permissão prévia por escrito da AegisGate Security, LLC.

Contato: legal@aegisgatesecurity.io


🌐 AegisGate Security · 💬 Discord · ✉️ support@aegisgatesecurity.io · 𝕏 @aegisgate · 📱 Telegram · 🐘 @aegisgate@mastodon.social

Feito com 🖤 pelos desenvolvedores da AegisGate Security para proteger a superfície de ataque da IA.