mcpField
M
MCP-Bastion

MCP-Bastion

本地服务
github.com/vaquarkhan安全7今天更新

关于 MCP-Bastion

MCP-Bastion 是面向 MCP 服务的本地安全中间件,适用于管理 Agent 权限与运行时行为的团队。它整合工具目录扫描、配置审计和运行时拦截,无需第三方安全 API。

主要功能

  1. 01Agent 身份与工具级访问控制
  2. 02拦截注入并脱敏个人信息
  3. 03扫描工具目录并审计客户端配置
  4. 04限制调用次数、时长与支出
  5. 05审计日志与安全态势仪表板

适用场景

  1. 01限制不同 Agent 可使用的工具
  2. 02部署前检查工具目录
  3. 03审查本地 MCP 客户端权限
  4. 04限制失控调用与数据暴露

MCP 相关

它通过中间件保护 MCP 服务,并在工具调用、资源读取和提示词获取等方法上执行检查。它还可扫描工具目录并审计本地 MCP 客户端配置。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"vaquarkhan-mcp-bastion": {
"command": "uvx",
"args": [
"mcp-bastion-python"
]
}
}
}
启动命令uvx mcp-bastion-python

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

安装包
pypimcp-bastion-python5.1.0

工具

还没有获取到工具列表

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

详细介绍

MCP-Bastion

README · Documentation · Demos · Dashboard / Observability · Multi-language · Benchmark · License · Security

MCP-Bastion  -  Fortifying the Model Context Protocol

PyPI version PyPI downloads (mcp-bastion-python) Ecosystem PyPI downloads Python CI Docker proxy (GHCR) Docker dashboard (GHCR) Docs Demos Benchmark deck Multi-language License: Source Available Website

Current release: 5.1.0 · Docker v5.1.0 · 26 PyPI packages · CHANGELOG

前往链接
文档 / 演示https://vaquarkhan.github.io/MCP-Bastion/ · 产品介绍视频 · 集成
基准测试 / 安全演示文稿(PDF)MCP-Security-Deck-v3.pdf · 原始文件下载
文档手册https://vaquarkhan.github.io/MCP-Bastion/guide/handbook.html
演示(攻击、仪表板、有效载荷,所有语言)https://vaquarkhan.github.io/MCP-Bastion/guide/demos.html
仪表板与可观测性(OTEL 可选)https://vaquarkhan.github.io/MCP-Bastion/guide/observability.html
多语言套件https://vaquarkhan.github.io/MCP-Bastion/guide/multi-language.html · 套件仓库
MCP Test Harness(姊妹产品——MCP 服务的 CI 门禁)https://github.com/vaquarkhan/mcp-test-harness · 与 Bastion E2E 搭配使用
文档中心https://vaquarkhan.github.io/MCP-Bastion/guide/
实测基准测试(可复现)docs/BENCHMARKS.md

面向 MCP Agent 的零信任控制平面。 你的 Agent 可以调用数据库、API 和 shell 工具。一个恶意提示词就可能泄露 PII;一个失控循环可能在几分钟内耗尽你的 API 预算;同一服务上的三个 Agent 若没有身份边界,就可能引发混淆代理事件。MCP-Bastion 为你的 MCP 服务加上本地防护措施:Agent IAM、供应链校验和、注入拦截、PII 脱敏和防止钱包耗尽的限额,开销低于 5ms,无需第三方安全 API。

指导原则: 坚持做一个零基础设施、即插即用的库——充当可与任何网关组合使用的防护大脑,而不是网关本身。策略:docs/ZERO_INFRA_STRATEGY.md。

实测证明(离线、可复现)

演示文稿(可分享给评估人员): MCP-Security-Deck-v3.pdf — 安全 + FinOps 证明材料包(直接下载)。

门禁结果复现方法
注入启发式检测在已发布语料库中,攻击拦截率 100% · 良性误报率 0%pytest tests/test_injection_efficacy.py · docs/BENCHMARKS.md
工具目录扫描注入 / 密钥 / 同形异义字符 / 影子工具 / 嵌套弱模式mcp-bastion scan examples/fixtures/tools-poisoned.json
FinOps输出预算最多节省 ~99.7% · 发现令牌减少 ~85%docs/BENCHMARKS.md
有毒流污点检测会话中的 PII/密钥 → 带 URL/email 参数的出站工具会在进程内被拦截bastion.yaml 中的 toxic_flow · docs/THREAT_MODEL.md

MCP-Bastion:扫描 → 测试 → 强制执行——没有其他工具具备这三项能力

扫描 → 测试 → 强制执行(没有其他工具具备这三项能力)
阶段内容命令
扫描部署前的静态工具定义检查(注入、密钥、同形异义字符、指纹漂移、模式前置条件)mcp-bastion scan tools.json
审计本地 MCP 客户端配置风险报告(权限过宽的工具、长期有效的凭据、文件系统服务)mcp-bastion audit
测试针对 bastion.yaml 的集成式红队测试 + 在 CI 中搭配 MCP Test Harness 使用mcp-bastion redteam · docs/BASTION_AND_TEST_HARNESS.md
强制执行在每个 MCP 方法上运行时中间件secure_fastmcp(mcp) 或 bastion.yaml
scan 与 audit——输入不同,关注的问题也不同
mcp-bastion scanmcp-bastion audit
检查对象工具目录(tools.json / tools/list 导出)磁盘上的 MCP 客户端配置(mcp.json、Claude Desktop 配置等)
关注问题“这些工具元数据是否遭到投毒或发生偏移?”“Agent 已经能访问这台机器上的哪些内容?”
发现问题描述中的注入、架构中的机密、同形异义字符、指纹偏移、脆弱或不受限的 inputSchema 结构过度宽泛的工具授权(*)、env 中的长期凭据、文件系统服务提示
适用时机部署或接入某个服务的工具之前(CI / 部署前)收紧笔记本或工作区策略之前(本地卫生检查)

两者相辅相成:先对主机表面进行 audit,再对接入的工具进行 scan。二者都不能取代运行时 enforce。

mcp-bastion scan 还支持通过 --skills DIR 离线检查 Agent 技能文件。依赖项 CVE:运行 mcp-bastion osv-refresh,然后运行 mcp-bastion osv-scan(默认使用本地数据库;可选择启用 --online,失败时放行)。

# 1. Scan a tools/list export (or hand-authored catalog) - client-side, no cloud
mcp-bastion scan examples/fixtures/tools-poisoned.json
mcp-bastion fingerprint tools.json -o baseline.json
mcp-bastion scan tools.json --baseline baseline.json --format json -o report.json
mcp-bastion scan --skills ./skills/

# 1b. Audit local MCP client configs (what agents can already reach)
mcp-bastion audit --root .
mcp-bastion audit --format json -o risk-audit.json --fail-on none

# 2. Test policy effectiveness
mcp-bastion redteam --config bastion.yaml

# 3. Enforce at runtime (filesystem path guards when agents can read local files)
#    merge examples/bastion-filesystem-guards.yaml into bastion.yaml
mcp-bastion validate --config bastion.yaml

mcp-bastion scan CLI——检测注入、机密、同形异义字符和指纹偏移,并给出 A–F 等级

mcp-bastion scan——客户端静态扫描器;无需云服务,也无需下载 ML

mcp-bastion audit CLI——对客户端配置、过度宽泛的工具和长期凭据进行本地 MCP 风险审计

mcp-bastion audit——在执行策略前梳理本地 MCP 表面;无需网络,无需保险库

MCP-Bastion 客户端扫描套件——架构前置条件、技能文件、OSV 依赖项 CVE 查询

架构 · 技能 · OSV——默认离线;无需登录服务;不会主动向外发送数据

MCP-Bastion 仪表板介绍:安全态势、预验证、OWASP、攻击矩阵、取证、FinOps 实际情况与假设情况对比

功能介绍

MCP-Bastion 仪表板演示 GIF

仪表板演示

MCP-Bastion 仪表板拼图——安全态势、OWASP 覆盖情况、攻击矩阵和运行时 KPI

实时安全态势 + 运行时仪表板——仅限本地运行,零基础设施。mcp-bastion dashboard --demo · 仪表板文档 · 较早的 Vimeo 演示

MCP-Bastion:全面覆盖 MCP 方法,并通过 Redis 共享状态支持多副本部署

MCP-Bastion 混合有状态和无状态 MCP 传输,支持发现、由 Redis 支持的 FinOps 密钥和 Agent 稳定性

MCP-Bastion 3.2 双路径:在一个代理上同时支持旧版有状态会话和符合 SEP-2575 要求的无状态状态句柄

混合有状态 / 无状态 MCP(3.2.0) - 可选择启用 mcp_transport,为 SEP-2575 做好准备,同时不影响旧版会话。架构 · 教程

为什么选择 MCP-Bastion?(解决 2026 年 MCP 安全危机)

正如 NSA 最近发布的 MCP 安全网络安全信息表和 OWASP MCP Top 10 所指出的,传统 AppSec 工具无法保护 Agent 工作流。问题在于运行时治理和混淆代理问题:多个 AI Agent 共用一个 MCP 服务,却没有原生的身份边界。公共注册表中的拼写抢注和未经验证的服务,已使供应链验证成为董事会层面的关注事项。

MCP-Bastion 充当 Agent 的零信任控制平面,解决最棘手的生产环境问题:

  1. 混淆代理问题(Agent IAM): 身份感知路由将 API 令牌绑定到Agent 身份,并严格执行逐工具 RBAC。客户支持机器人可以调用 search_docs,但不能调用 delete_user。
  2. 供应链与拼写抢注防御: 加密 SHA-256 清单验证会在 MCP 服务制品与已签署批准的校验和不一致时阻止流量。
  3. 数据外泄与注入防护: PromptGuard 启发式规则与 ML 会在本地拦截越狱攻击;Presidio 会在出站 PII 进入模型上下文窗口之前将其清除。
定义 Agent 策略(bastion.yaml)
# Stop the Confused Deputy Problem  -  Identity-Aware Routing
agent_iam:
  enabled: true
  token_metadata_key: bastion_agent_token
  agents:
    - id: customer_support_bot
      token_env: BASTION_TOKEN_SUPPORT
      allowed_tools: ["search_docs", "get_ticket_status"]
      blocked_tools: ["execute_sql", "delete_user"]
      rate_limit:
        max_iterations: 5

# Supply-chain checksums before any tool executes
server_verification:
  enabled: true
  on_mismatch: block
  base_path: .
  manifest_path: mcp-server.manifest.json

在可信构建后生成清单:mcp-bastion manifest server.py pyproject.toml -o mcp-server.manifest.json

深入了解:docs/RUNTIME_GOVERNANCE.md · docs/ENTERPRISE_RUNTIME_CONTROLS.md(3.0 支柱)

Runtime 治理支柱(3.0.0+,当前版本 5.1.0)

面向生产 MCP 运行时的企业级可选控制。默认全部关闭,因此在启用前,行为与 2.x 保持不变。

支柱配置功能
外泄金丝雀canary_goallock在上下文中加入会话令牌;阻止回显该令牌的工具参数(-32025)
ATR YAML 规则atr_rules将社区威胁规则合并到 content_filter 中(-32027)
本地大模型扫描器llm_scanner在启发式检查后添加可选的 Ollama 层;故障时放行(-32026)
威胁情报源threat_feeds在后台刷新远程正则表达式模式
自动重置auto_repave基于阈值进行遏制(轮换金丝雀、重置范围)
机密信息脱敏secrets.redact_patterns对工具输出执行 replace / hash / mask / remove
观察模式mode: observe记录 would_block,但不拒绝请求
mode: enforce

canary_goallock:
  enabled: true

atr_rules:
  enabled: true
  rules_dir: ./atr-rules

secrets:
  redact_patterns:
    - rule: "sk-[A-Za-z0-9]{20,}"
      strategy: mask

CLI 合规证据:mcp-bastion report --framework soc2 --audit ./audit.jsonl

MCP-Bastion 3.0 运行时治理支柱

外泄金丝雀会阻止工具参数中的上下文泄露

完整 MCP 接口面与水平扩展(2.0.0)

此前,大多数支柱仅在 tools/call 上运行。2.0.0 将处理管线扩展到了 resources/read、prompts/get、sampling/createMessage 和 elicitation/create,从而弥补了 MCP 其他接口面上的外泄和注入漏洞。

对于多副本部署,请启用 state_backend.type: redis,使速率限制、重放随机数、成本预算和会话工具范围可在各个 Pod 之间共享(默认值 memory 仅适用于单进程)。

state_backend:
  type: redis
  redis_url: redis://127.0.0.1:6379/0

pip install mcp-bastion-python[redis] · 深入了解:docs/MCP_SURFACE_AND_SCALE.md

2.0.0 中采用的生产环境加固措施

将 MCP 网关生态中经过实战检验的模式接入中间件栈:

功能效果
JSONPath 参数防护在执行前,按工具 glob + JSONPath + 正则表达式阻止或脱敏工具参数(可识别 argv 数组规避行为)。pip install mcp-bastion-python[policy]
RBAC fnmatch glob支持 read_* / files_* 等角色权限,并进行基于特异性的匹配
审计 JSONL + mcp-bastion tail仅追加的合规日志;在配置中设置 audit.jsonl_path,或运行 mcp-bastion tail -p audit.jsonl
成本检查点可选择在磁盘上持久化会话总成本,以便在重启后保留(cost_tracker.checkpoint_path,仅限 memory 后端)
成本感知策略(cost_policy)实时支出规则:降级模型、强制启用发现过滤器、要求审批;阻止高成本调用链
治理证明mcp-bastion attest export --session … - 带签名的会话包,包含策略哈希和触发的控制措施
边界模式每个请求都必须进行代理身份验证(boundary_mode + edge_auth / agent_iam) - GATEWAY_BOUNDARY.md
无门控 PromptGuardprompt_guard.use_ungated_default: true → ProtectAI DeBERTa 分类器(无需 HF 门控)
cost_policy:
  enabled: true
  rules:
    - when: { session_spend_pct_gte: 80 }
      action: degrade_model
      target_model: gpt-4o-mini
    - when: { session_spend_pct_gte: 95 }
      action: require_approval
  expensive_chain:
    enabled: true
    max_projected_cost_usd: 1.0

governance:
  attestation_enabled: true

boundary_mode:
  enabled: true   # requires edge_auth or agent_iam

argument_guards:
  enabled: true
  rules:
    - name: block_shell
      match: "run_*"
      arg: "$.command"
      pattern: "(rm\\s+-rf|curl\\s+.*\\|.*sh)"
      action: block

audit:
  jsonl_path: .bastion/audit.jsonl

cost_tracker:
  checkpoint_path: .bastion/cost-checkpoint.json

MCP-Bastion 零信任运行时治理:完整 MCP 接口面、Redis 扩展、Agent IAM 及超越 OWASP 的覆盖范围

### 开发者为何采用它
你需要……MCP-Bastion 为你提供……
无需重写即可添加防护措施即插即用的中间件:secure_fastmcp(mcp) 或一个 bastion.yaml
法律团队认可的隐私保护PromptGuard + Presidio 在你的进程内运行;数据留在你的网络中
阻止失控的 Agent 和预算超支**默认启用:**每个会话 15 次工具调用、60s 超时、50k 令牌预算。**可选:**单工具上限、按美元计算的会话/每日限额、响应卸载
缩小上下文并降低令牌开销**选择启用:**发现过滤器(减少 tools/list 中的工具数量)、输出预算 + 会话卸载(对超大工具输出最多可减少约 99%)、词汇相似度缓存 - 实测基准
今天就能交付的方案PyPI、npm、GHCR 上的 Docker、FastMCP、TypeScript 封装、CI 验证、实时仪表盘
团队可审查的策略Git 中的 bastion.yaml、热重载、符合 OWASP 的控制措施(文档)
FinOps 与滥用防护(拒绝钱包服务攻击)

Agent 可能会不断调用高成本工具(搜索、大模型调用、付费 API),直到账单飙升。Bastion 会在每次 tools/call 之前,于 MCP 边界强制执行会话级 FinOps:

攻击模式Bastion 的处理方式默认状态
无限工具循环达到每个会话的最大迭代次数后阻止启用(15 次调用)
滥用长时间运行的会话会话超时启用(60s)
令牌 / 上下文预算消耗每个会话的令牌预算;可选输出卸载启用(50k 令牌);卸载需选择启用
反复调用同一工具单工具调用上限(max_per_tool)选择启用
付费 API 开销失控通过成本跟踪器设置美元限额选择启用
不稳定或恶意工具级联失败后熔断器打开示例配置中选择启用
单个会话中的工具泛滥限制每个会话中不同工具的数量选择启用

被阻止的调用会返回标准错误(RateLimitExceededError -32002、TokenBudgetExceededError -32003、CostBudgetExceededError -32009),并显示在仪表盘和审计日志中。请参阅 docs/ATTACK_PREVENTION.md。

Token 减少与成本节省

Bastion 不仅会拦截失控的开支,还会减少每轮传递给模型的工具输出和工具目录 Token 数量(不会减少用户 LLM 提示文本本身):

节省方式作用默认状态
发现过滤器从 tools/list 中隐藏未使用的工具,让 Agent 在上下文中携带更小的工具目录(在 基准测试 中,工具从 20 个减少到 3 个时,目录 Token 数量减少约 85%)可选启用
输出预算 + 转存截断过大的工具响应;将其余内容存储在会话中,供 bastion_get_offloaded 使用(对于 50k Token 的转储,最多可减少约 99.7%;已低于预算时为 0%)可选启用
词法相似度缓存查询几乎相同时跳过重复的工具调用(基于 Jaccard 词语重叠度——不是基于嵌入的“语义”搜索)可选启用
Token 预算上限在会话 Token 消耗超过限额前强制停止已启用(50k Token)
美元会话/每日限额通过成本跟踪器设置金额上限可选启用

没有可信的单一“提示词减少 X%”数据——节省幅度取决于输入。可查看 docs/BENCHMARKS.md,了解可复现的 pytest 基准测试和实时数据。

MCP-Bastion 基准测试:RBAC 工具级矩阵、大型工具响应的输出预算最多可减少 99%、发现过滤器的目录节省量、词法缓存命中/未命中

复现:PYTHONPATH=src python -m pytest tests/test_benchmarks_finops_rbac.py -v · 重新生成报告:python scripts/generate_benchmark_report.py

每轮减少工具输出和目录噪声,意味着更低的 LLM 输入成本——而且无需将提示词发送给第三方优化 API。

简而言之: MCP 一夜之间让每个服务都变成了 Agent 网关。Bastion 是防火墙,让这个网关能够安全地投入生产——只需三行代码或一个配置文件。

OWASP MCP Top 10 + 生产环境攻击

所有 10 项 OWASP MCP Top 10 风险都在 MCP 边界得到缓解(请参阅下方的控制措施)。Bastion 还会拦截 OWASP 未单独列出的 FinOps 和滥用模式。

MCP-Bastion:OWASP MCP Top 10、FinOps 滥用攻击、令牌缩减与成本节省、16 项安全支柱

OWASP MCP Top 10(均已处理)

ID风险Bastion 控制措施
MCP01令牌 / 密钥泄露PII 脱敏、审计跟踪、出站响应扫描
MCP02权限提升RBAC、Agent IAM、速率限制、成本上限、会话工具范围
MCP03工具投毒提示词防护、内容过滤器、响应扫描、元数据防护、依据验证防护
MCP04供应链熔断器、server_verification 校验和、doctor CLI、mcp-bastion manifest、审计
MCP05命令注入提示词防护、内容过滤器、架构验证
MCP06意图颠覆速率限制、重放防护、单工具上限、语义防火墙
MCP07身份验证薄弱RBAC、边缘身份验证、Agent IAM(每个 Agent 使用独立令牌)
MCP08审计与遥测审计日志、仪表板、Prometheus、OTEL、告警
MCP09影子 MCP 服务集中式 bastion.yaml 策略、指标、发现过滤器
MCP10上下文注入PII 脱敏、响应扫描、输出预算、发现过滤器

FinOps 与滥用攻击(OWASP 未涵盖)

攻击控制措施
钱包耗尽攻击迭代上限、令牌预算、成本跟踪器、输出预算
工具失控循环会话超时、速率限制器、熔断器
针对单个工具的高频调用max_per_tool 会话上限
API 支出失控USD 会话 / 日上限
会话工具泛滥每个会话的不同工具数量上限
重放滥用重放防护 + nonce

令牌缩减与成本节省

手段控制措施基准测试
减少上下文中的工具目录对 tools/list 使用发现过滤器目录令牌约减少 ~85%(20→3 个工具) - BENCHMARKS.md
减少每轮对话中的工具输出输出预算、会话卸载、bastion_get_offloaded超大输出最多减少约 99.7%;低于预算时减少 0%
减少冗余调用词法相似度缓存(Jaccard 重叠度)完全重复时命中;相似度为 0.9 时,改写内容未命中
让支出可预测令牌预算上限、USD 会话 / 日上限默认启用会话上限

深入了解映射与集成钩子:docs/SECURITY_OBSERVABILITY.md · docs/ATTACK_PREVENTION.md

用 3 行代码保护你的 MCP 服务(FastMCP)
pip install mcp mcp-bastion-fastmcp
from mcp.server.fastmcp import FastMCP
from mcp_bastion_fastmcp import secure_fastmcp

mcp = FastMCP("My Server")
secure_fastmcp(mcp)  # wires prompt guard, PII redaction, rate limits into tools/call

更倾向于策略即代码? 将 bastion.yaml.example 复制为 bastion.yaml,然后运行 pip install mcp-bastion-python[policy]:

from mcp_bastion import build_middleware_from_config

middleware = build_middleware_from_config()  # loads bastion.yaml

更多方式(TypeScript、CI 验证、Docker):docs/QUICK_START.md · docs/README.md · 网站

  • 提示词注入防御: 开箱即用的启发式越狱拦截;配置 Hugging Face 访问后可使用 Meta PromptGuard ML。
  • PII 脱敏: Presidio 会对出站内容中的 SSN、电子邮件地址和电话号码进行掩码处理。
  • 防止钱包耗尽: 令牌桶、迭代上限、令牌预算、成本跟踪。
  • 响应扫描: 拦截出站工具 / 资源文本中的越狱模式。
  • 输出预算与依据验证防护: 可选的响应截断与路径验证(选择启用)。
工作原理

MCP-Bastion 在进程内运行于你的 MCP 服务中,并在每次 tools/call 到达数据库、API 或 Shell 工具之前进行检查 - 随后在返回时对敏感数据进行脱敏。

flowchart LR
  Agent["AI agent / LLM client"]
  Server["Your MCP server"]
  Bastion["MCP-Bastion<br/>middleware"]
  Tools["Tools & upstream APIs"]

  Agent -->|"JSON-RPC"| Server
  Server --> Bastion
  Bastion -->|"✓ allow / ✗ block"| Tools
  Tools -->|"raw result"| Bastion
  Bastion -->|"PII masked · audited"| Server
  Server --> Agent
三种采用方式
flowchart TB
  Start(["Protect my MCP server"])
  Start --> FastMCP["FastMCP · Python<br/><code>secure_fastmcp(mcp)</code>"]
  Start --> Policy["Policy-as-code<br/><code>build_middleware_from_config()</code>"]
  Start --> TS["TypeScript<br/><code>wrapWithMcpBastion(server)</code>"]
  FastMCP --> Docs["docs/QUICK_START.md · path A"]
  Policy --> Yaml["bastion.yaml + CI validate"]
  TS --> Sidecar["Rate limit in-process · ML via sidecar"]

发布版本: npm、PyPI,以及 GHCR 上预构建的 Docker 镜像——请参阅 DOCKER.md。社区: SUPPORT.md · CONTRIBUTING.md · FUNDING.md · 安全: SECURITY.md。


核心功能

零点击提示注入防护

在本地集成 Meta 的 PromptGuard 模型,在恶意载荷、越狱攻击和对抗性分词到达外部工具之前,检测并拦截它们。

PII 脱敏

Microsoft Presidio 会扫描发出的工具结果,并对 PII 进行掩码处理(脱敏、替换、泛化)。

无限循环与费用失控防护

实现有状态的循环检测和可配置的 FinOps 令牌桶算法,自动终止失控的 Agent,防止 API 账单大幅超支。

100% 本地执行(数据隐私)

所有安全分类和数据脱敏均完全在服务的本地内存空间中完成。敏感数据绝不会离开企业网络,交由第三方进行安全评估。

低延迟

即插即用的中间件,额外开销低于 5ms。

框架集成

通过标准中间件接入 MCP SDK(TypeScript、Python)和 FastMCP。无需更改业务逻辑。

完整功能目录

支柱定义: 安全控制、bastion.yaml 部分,以及它们与仪表板健康状态行的对应关系,详见 docs/PILLARS.md(权威参考;避免“支柱总数”含义模糊)。同一页面还列出了在 1.0.16+ 中恢复的扩展功能(语义防火墙、敏感信息分类器、外部策略、边缘认证、工具允许列表、会话范围、工具元数据防护、多租户、审计哈希链、定价钩子、遥测接收器、红队和诊断 CLI 等)、在 1.0.17+ 中新增的 FinOps/上下文支柱(输出预算、发现过滤器、响应扫描、事实依据防护),以及运行时治理(Agent IAM、服务验证——在 1.0.18+ 中引入,并于 2.0.0 发布)。

深入了解: docs/SECURITY_OBSERVABILITY.md——OWASP MCP Top 10 对齐情况、攻击场景,以及 SIEM/日志集成。框架附加组件(LangChain、OpenAI、Bedrock 等)列于下文的框架集成部分。

威胁防护与内容安全
功能功能说明
提示注入防御Meta PromptGuard 会为工具参数评分;恶意/越狱类载荷可在执行前被拦截(本地推理,无需第三方 API)。
内容过滤器拦截 shell/代码执行模式、敏感文件路径和 URL;可选的允许列表/拒绝列表正则表达式或子字符串规则。
PII 脱敏Microsoft Presidio 可在发出的工具/资源文本中检测多种实体类型(SSN、电子邮件、电话、银行卡、护照、IBAN、驾照等——请参阅 Presidio 文档)。
访问控制、完整性与滥用防护
功能提供内容
Agent IAM(混淆代理)将 API 令牌绑定到 Agent 身份;为每个 Agent 设置 allowed_tools / blocked_tools、资源 URI允许/阻止列表,以及可选的速率限制 - 防止支持机器人调用管理员工具或读取机密资源。参见 docs/RUNTIME_GOVERNANCE.md。
完整 MCP 接口防护(2.0.0)resources/read、prompts/get、sampling/createMessage、elicitation/create - 与工具调用采用相同的入站/出站防护原则(不只是 tools/call)。docs/MCP_SURFACE_AND_SCALE.md
分布式状态(2.0.0)state_backend: redis - 在多个副本间共享速率限制、重放随机数、成本上限和会话范围。pip install mcp-bastion-python[redis]
行为指纹(3.3.0,可选启用)behavior_fingerprint.enabled - 检测每个 Agent 的工具基线偏移和速率激增;默认关闭。docs/BEHAVIOR_FINGERPRINT.md
混合 MCP 传输(可选启用)mcp_transport - 有状态会话和无状态显式状态句柄;每个请求均可指定协议版本;代理发现卡片;Agent 稳定性监控。docs/HYBRID_MCP_TRANSPORT.md
服务验证(供应链)在启动时及每次 tools/call 时验证 SHA-256 清单校验和;mcp-bastion manifest 可在构建审核通过后生成可信清单。
RBAC按角色(来自请求元数据)进行工具级允许/拒绝;bastion.yaml 中使用 fnmatch 通配模式(read_*),并按特异性进行匹配。与 Agent IAM 或边缘认证搭配使用 - 单独使用时,角色的可信度取决于设置 metadata["role"] 的机制。实时矩阵 →
参数防护(2.0.0)在 schema 验证前,针对 tools/call 参数使用 JSONPath + 正则表达式进行阻止/脱敏 - 防止类 argv 载荷中的 Shell 注入和机密数据外泄。
Schema 验证在工具运行前,根据 JSON Schema 验证 tools/call 参数(阻止格式错误或试图绕过防护的请求)。
重放防护跟踪 随机数以拒绝重放请求(可配置 require_nonce)。
速率限制令牌桶式限制:每个会话的最大迭代次数、超时、令牌预算 - 防止循环失控和暴力破解行为。
熔断器停止调用反复失败的工具(限制故障上游或被投毒工具的影响范围)。
FinOps 与性能
功能提供内容
成本跟踪器设置每个会话及可选的每日美元上限;超出预算时阻止请求。可选的磁盘检查点可在重启后保留累计值(内存后端)。
语义缓存(词法)可选的 Jaccard 词语重叠度缓存,用于缓存近似相同的工具查询 - 并非基于嵌入;参见 基准测试。
低开销在热路径上运行的中间件,目标是典型开销 <5 ms(参见 docs/METRICS.md)。
审计、指标与告警
功能你将获得什么
审计日志结构化记录 允许/拒绝 决策,包含 reason、tool、tenant_id、trace_id、request_id,可供 SOC / 合规使用。可选 JSONL 文件接收器 + mcp-bastion tail。
告警接收器Slack 传入 Webhook;通用 HTTP Webhook(PagerDuty、Teams、自定义 API);多个 URL;在 bastion.yaml 中配置 重试、退避、超时。
内存指标全局 MetricsStore:请求、拦截、PII 计数、成本、按工具统计、延迟样本、滚动 时间序列存储桶。
实时仪表板本地 Web UI(新增面板):部署前安全态势评级 + 来自 .bastion/scan/ 的 Sonar 风格预验证、PMD 风格问题指南(原因 / 修复方法 / OWASP)、OWASP ASI + MCP + LLM 热力图、实时攻击矩阵、合规证据 + 带日期的报告、日期筛选器、观察模式横幅、Agent / 趋势 / 入门引导、包含原因/支柱/追踪信息的取证分析、FinOps 成本消耗(实际值与未拦截时的预估值、节省的 Token + 拦截避免的成本、图表),以及经典 KPI。API: /api/metrics、/api/posture、/api/prevalidate、/api/issue-guide、/api/taxonomy、/api/attack-matrix、/api/compliance。支持深色/浅色主题。参见 dashboard/README.md。
OpenTelemetry可选 OTLP Span 导出 - pip install mcp-bastion-python[otel] - docs/OTEL.md。
策略、打包与开发者体验
功能你将获得什么
策略即代码单一的 bastion.yaml:为所有请求路径控制项以及审计、告警和热重载提供开关(docs/PILLARS.md);通过 load_config / build_middleware_from_config 加载。
热重载可选 在 bastion.yaml 变更时重新加载,无需重启 MCP 服务(docs/POLICY_AS_CODE.md)。
可组合中间件compose_middleware 排序;MCPBastionMiddleware 为每个支柱提供开关。
CLImcp-bastion scan、audit、validate、redteam、manifest、attest export、serve、dashboard、doctor、tail - docs/CLI.md。
Python + 多语言支持PyPI 上的 mcp-bastion-python(引擎)。对于 TypeScript / Java / Go / .NET / Kotlin / Rust 适配器及共享的 bastion.yaml,请使用 mcp-bastion-suite — 参见 docs/MULTI_LANGUAGE_SUITE.md。可选的仓库内 TypeScript 包:@mcp-bastion/core。
容器Dockerfile、docker-compose 配置文件(代理 + 可选仪表板)- DOCKER.md。预构建镜像(GHCR): mcp-bastion-proxy、mcp-bastion-dashboard - 每个 v* 标签发布一次(publish-docker.yml)。
实时仪表板和警报

仪表板是可选且本地运行的——只读查看运行时指标 + 本地扫描/审计产物。无需登录服务器,也无需云数据库(请参阅 docs/ZERO_INFRA_STRATEGY.md)。

**功能演示(GIF):**安全态势 + 修复方法 → OWASP → 攻击矩阵 → 合规性 → RBAC/治理 → 取证 → Agent → 安全态势漂移 → 令牌和成本节省 → 流量。

MCP-Bastion 仪表板功能演示 GIF

功能演示

MCP-Bastion 仪表板操作演示 GIF

仪表板操作演示

MCP-Bastion 仪表板拼图——安全态势、OWASP、攻击矩阵、KPI

重新生成截图:mcp-bastion dashboard --demo,然后运行 python scripts/capture_dashboard_demo.py · 种子数据:--demo

#### 仪表板上的内容
区域面板 / 操作
部署前态势目录扫描、技能扫描、OSV、风险审计的 A–F 等级 + 综合等级(读取 .bastion/scan/*.json)
静态预验证基于同一份本地 JSON 的 Sonar 风格问题列表——并非 SonarQube 服务(/api/prevalidate)
问题指南每项发现均提供 PMD 风格的原因 / 修复方法 / Bastion 配置项 / OWASP 参考(/api/issue-guide)
OWASP 覆盖情况ASI Top 10、MCP Top 10、LLM Top 10 标签页——绿色 / 琥珀色 / 灰色热力图,显示发现项 + 拦截压力
实时攻击矩阵受攻击压力影响的类别,包含强度、占比、热门工具、OWASP 标签、样例 / 追踪详情
合规 / 报告证明文件 + 策略哈希;生成 SOC2 / GDPR / ISO27001 / NIST AI RMF / ASI 证据或压缩包(按日期筛选)
运行时KPI、治理、警报 + SSE、洞察、取证(原因 + 详情)、Agent / 趋势 / 入门引导、流量 / 延迟 / PII 图表
FinOps实际支出 / 令牌用量与原本可能产生的支出 / 令牌用量对比;FinOps 节省的令牌;拦截所避免的令牌 / 美元支出;图表 + 已拦截问题表格
筛选器日期范围 + 预设(取证、趋势、攻击矩阵、报告)
mcp-bastion dashboard --port 7000 --demo
# or: PYTHONPATH=src python dashboard/app.py
URL返回内容
http://localhost:7000/完整 UI(态势、预验证、OWASP、攻击矩阵、FinOps、取证,……)
http://localhost:7000/api/metrics运行时 JSON(cost_reduction:已使用 / 已节省 / 已避免的支出 + 原本可能产生的支出)
http://localhost:7000/api/posture本地 JSON 中的扫描 / 技能 / OSV / 风险审计等级
http://localhost:7000/api/prevalidateSonar 风格的问题列表 + 等级(本地扫描套件)
http://localhost:7000/api/issue-guide?check=weak_schemaPMD 风格规则卡片(或 ?id=ASI02)
http://localhost:7000/api/taxonomy?framework=asi|mcp|llm 热力图
http://localhost:7000/api/attack-matrix实时攻击类别(+ 日期筛选)
http://localhost:7000/api/compliance/report证据 Markdown(framework、date_from、date_to)
http://localhost:7000/api/health构建信息 / ui_revision
http://localhost:7000/metricsPrometheus 文本

/api/metrics JSON 示例  -  requests_total、blocked_total、pii_redacted_total、cost_total、top_tools

供 Grafana、Datadog 或自定义轮询器使用的 /api/metrics JSON

将扫描 / 审计产物提供给态势面板:

mkdir -p .bastion/scan
mcp-bastion scan tools.json --format json -o .bastion/scan/catalog.json
mcp-bastion scan --skills ./skills --format json -o .bastion/scan/skills.json
mcp-bastion osv-scan --format json -o .bastion/scan/osv.json
mcp-bastion audit --format json -o .bastion/scan/risk-audit.json
文档:用例、攻击、指标、教程

采用路径(从头到尾):

目标按顺序阅读
端到端手册docs/USER_GUIDE.md → 已发布的文档
文档手册(GIF + 仪表板)docs/DOCUMENTATION_HANDBOOK.md → 在线手册
功能深入介绍 + 攻击演示docs/FEATURE_DEEP_DIVE.md → docs/ATTACK_DEMOS.md
Java / TypeScript / Go / .NET / Kotlin / Rustdocs/MULTI_LANGUAGE_SUITE.md → mcp-bastion-suite
策略即代码(bastion.yaml)docs/PILLARS.md → docs/POLICY_AS_CODE.md → bastion.yaml.example → docs/CLI.md(validate)
大模型客户端(OpenAI、Claude、Gemini,……)docs/LLM_INTEGRATION.md → docs/INTEGRATION_MODELS.md → examples/(llm_*.py)
FastMCP / TypeScript / 第三方 MCPdocs/TUTORIALS.md → docs/DETAILED_TUTORIAL.md
批量部署 bastion.yaml + SIEM / SOC 审计docs/SECURITY_OBSERVABILITY.md → docs/POLICY_AS_CODE.md
最简“hello world” + CI / 注册表docs/QUICK_START.md → examples/ci/README.md → docs/DISCOVERY.md

完整索引:docs/README.md · 手册网站:文档指南 · 快速入门:docs/QUICK_START.md · 发现:docs/DISCOVERY.md · 贡献:CONTRIBUTING.md。

文档描述
docs/USER_GUIDE.md端到端用户指南(概念 → 安装 → 代理 → 保险库 → 运维);发布于 /guide/
docs/DOCUMENTATION_HANDBOOK.md系统手册:攻击 GIF、仪表板导览、功能地图、多语言
docs/FEATURE_DEEP_DIVE.md逐项深入介绍功能:问题、Bastion 如何解决、优势(包括仪表板)
docs/ATTACK_DEMOS.md可运行的攻击 → 防御演示(避免在此 README 中加入冗长的演练内容)
docs/MULTI_LANGUAGE_SUITE.md通过 mcp-bastion-suite 提供的多语言连接器
docs/index.mdMarkdown 文档主页(源文档中心)
docs/POLICY_AS_CODE.mdbastion.yaml 参考:键、示例、热重载、警报
docs/LLM_INTEGRATION.md大模型集成:OpenAI、Claude、Gemini、Mistral、Grok(stdio + HTTP 配置)
docs/DETAILED_TUTORIAL.md面向新团队的分步实施教程
docs/USE_CASES.md实际用例:企业网关、大模型产品、内部工具、SaaS、合规
docs/ATTACK_PREVENTION.md展示 MCP-Bastion 如何防止真实攻击的示例(注入、PII 泄露、速率耗尽、路径遍历、RBAC、重放)
docs/PILLARS.md权威支柱数量:18 项请求路径功能(10 项核心 + 8 项扩展)、14 行仪表板 pillar_health、20+ 个 bastion.yaml 顶级区域——范围详见文档
docs/SUPPLY_CHAIN.mdCI 合并门禁、发布、npm 来源证明、PyPI Trusted Publishing、CycloneDX SBOM
docs/CRA_COMPLIANCE.mdCRA / OpenSSF 维护者立场(第 14 条 + SBOM;不更改运行时)
docs/CRA_SBOM_TUTORIAL.md生成并下载 CycloneDX bom.json
docs/PII_VAULT.md可选启用、可逆的 PII 令牌化(抽象化 + 还原)
docs/INTEGRATION_MODELS.md中间件 + bastion.yaml 与“更改基础 URL”;适用于 Python、TS、Desktop、HTTP 和集成的桥接方案
examples/ci/README.md可复制粘贴的 GitHub Actions 代码段,用于对策略文件运行 mcp-bastion validate
docs/BENCHMARKS.md实测数据 RBAC 矩阵、输出预算缩减(大型工具输出最多约 99%)、发现过滤器、词法缓存——pytest + 报告生成器
docs/REDTEAM.md解读测试框架 / 红队评分;应启用哪些 bastion.yaml 支柱;Node 与 Python 的范围(packages/core/README.md)
docs/SECURITY_OBSERVABILITY.mdOWASP MCP Top 10、集成钩子、大规模部署 bastion.yaml、SIEM / SOC 审计模式
docs/METRICS.md性能开销(<5ms)和有效性指标(仪表板、Prometheus、OTEL)
docs/TUTORIALS.md教程:与 FastMCP、TypeScript、GitHub MCP 和开源 MCP 服务集成
docs/CYBER_EXTENSIONS_CORE.mdTypeScript 扩展 A/E/F(语义出口、结果来源证明、审计)
docs/GITHUB_PAGES.md从同一仓库将文档发布为 GitHub Pages 网站
docs/QUICK_START.md精简的 FastMCP / bastion.yaml / CI 代码段(快速实现价值)
docs/DISCOVERY.md注册表和生态系统发现清单
docs/ENTERPRISE_RUNTIME_CONTROLS.md**3.0 运行时治理:**金丝雀、ATR 规则、大模型扫描器、威胁情报源、自动重建、密钥脱敏、观察模式
docs/ROADMAP.md产品路线图:成本感知治理、安全深度、可发现性
docs/COMPARISON.md与无防护的 MCP、轻量代理、完整 AI/MCP 网关的对比
docs/ENGINEERING_10_10.md在注入防护深度、工具投毒、网关成熟度、FinOps 指标和项目成熟度方面达到 10/10 的战略路径
CONTRIBUTING.md贡献者指南和 good first issue 想法
一行 Docker

预构建镜像(首次运行 publish-docker 后,通常在 v* 发布标签上):

docker pull ghcr.io/vaquarkhan/mcp-bastion-proxy:latest
docker run -p 8080:8080 ghcr.io/vaquarkhan/mcp-bastion-proxy:latest
# Dashboard (optional, port 7000):
# docker pull ghcr.io/vaquarkhan/mcp-bastion-dashboard:latest
# docker run -p 7000:7000 ghcr.io/vaquarkhan/mcp-bastion-dashboard:latest
# Pin a release: ghcr.io/vaquarkhan/mcp-bastion-proxy:vX.Y.Z (published on each v* tag)

本地构建(任意修订版本):

docker build -t mcp-bastion/proxy .
docker run -p 8080:8080 mcp-bastion/proxy

MCP 端点:http://localhost:8080/mcp。使用 docker-compose up -d 启动代理;添加 --profile with-dashboard 可启用仪表板。参阅 DOCKER.md(其中包含 GHCR 拉取命令,以及分叉仓库的 package 链接:在镜像路径中将 vaquarkhan 替换为你的组织或用户名)。

策略即代码(bastion.yaml)

单个配置文件控制策略(支柱定义请参阅 docs/PILLARS.md)。将 bastion.yaml.example 复制为 bastion.yaml,然后:

from mcp_bastion import build_middleware_from_config
middleware = build_middleware_from_config()

参阅 docs/POLICY_AS_CODE.md。

提示:使用 build_middleware_from_config() 时,在 bastion.yaml 中设置 hot_reload.enabled: true,即可应用策略变更,而无需重启 MCP 服务。

面向开发者的 CLI
mcp-bastion audit                 # local MCP client-config risk report
mcp-bastion scan tools.json       # static tool-definition scan
mcp-bastion validate              # validate bastion.yaml
mcp-bastion serve --http 8080     # run MCP server with config
mcp-bastion dashboard --port 7000 # run metrics dashboard

参阅 docs/CLI.md。

持续集成(本仓库)

每次拉取请求和推送到 main 时,.github/workflows/ci.yml 都会运行:

  1. pip install -e ".[dev,policy,dashboard]" - 安装 Python 包,以及测试、YAML 策略加载和用于仪表板测试的 FastAPI。
  2. mcp-bastion validate --config bastion.yaml.example - 确保示例策略文件可以加载。
  3. python -m pytest --cov=mcp_bastion --cov-fail-under=92 - 运行完整的 Python 测试套件,并确保 src/mcp_bastion 的行覆盖率**≥92%**(测量路径和阈值请参阅 pyproject.toml 中的 [tool.coverage.*])。
  4. npm ci 和 npm test - 运行 TypeScript 工作区测试。

如需在 CI 中验证你自己的仓库的 bastion.yaml,而不克隆 MCP-Bastion,请参阅 examples/ci/README.md。

OpenTelemetry

设置 OTEL_EXPORTER_OTLP_ENDPOINT,即可将工具调用跨度导出到 OTLP。安装可选依赖项:pip install mcp-bastion-python[otel]。参阅 docs/OTEL.md。

Webhook 告警与外部日志记录

可使用 Slack(slack_webhook / SLACK_WEBHOOK_URL)、通用 HTTP webhook(webhook_url / BASTION_WEBHOOK_URL)或多个 URL(bastion.yaml 中的 alerts.webhooks)。POST 请求可用于驱动 PagerDuty、Microsoft Teams、Datadog Events,或 SIEM 提供的任意 HTTP 收集器。在 bastion.yaml 中配置重试/退避(retry_attempts、retry_backoff_seconds、retry_backoff_max_seconds、timeout_seconds)。

**指标与追踪:**抓取仪表板的 /metrics(Prometheus)或轮询 /api/metrics(JSON),以供 Grafana、Datadog 或自定义轮询器使用。设置 OTEL_EXPORTER_OTLP_ENDPOINT,即可将追踪数据发送到 Jaeger、Honeycomb、AWS ADOT 等(pip install mcp-bastion-python[otel])。通过 Fluent Bit、Vector 或 CloudWatch agent 路由 Python 日志(包括 LoggingAlertSink),并将其发送到 Splunk / Elastic / CloudWatch Logs。

完整的集成表格和与 OWASP MCP Top 10 的对应关系,请参阅 docs/SECURITY_OBSERVABILITY.md。


MCP-Bastion 功能一览

## 为什么选择 MCP-Bastion
  • 主动强制执行 - 拦截 MCP 工具流量,确保策略(提示词注入检查、PII 处理、内容规则、RBAC 等)在工具执行前运行,并在敏感结果传播前生效。
  • 优先本地分类 - PromptGuard 和 Presidio 在你的环境中运行;你无需将提示词发送到第三方 API 进行护栏评分。
  • 有状态护栏 - 通过会话级速率限制、迭代上限、令牌预算和成本跟踪,减少循环失控和意外开支。
  • 可组合集成 - 使用 bastion.yaml 配合 build_middleware_from_config(),或在 Python 或 TypeScript 中接入 MCPBastionMiddleware / wrapWithMcpBastion。若要在独立进程中置于上游 MCP 服务前,请使用你控制的包装器或代理;参见 docs/INTEGRATION_MODELS.md。

结构

路径说明
src/mcp_bastion/Python 包:PromptGuard、Presidio、速率限制、RBAC 等。
packages/core/TypeScript 包:进程内实现速率限制 + 来源追溯 + 审计;提示词/PII/语义/结果通过边车(MCP_BASTION_URL)实现
examples/Python 示例(examples/README.md)
dashboard/实时仪表板 UI 和指标 API(dashboard/README.md)
bastion.yaml.example策略即代码示例;复制为 bastion.yaml(docs/POLICY_AS_CODE.md)
scripts/validate_checklist.py企业级验证运行器
VALIDATION_CHECKLIST.md验证指南和 MCP Inspector 步骤
SETUP_GUIDE.md设置、配置和验证
DOCKER.mdDocker 单行运行和 compose
示例文件
文件用途
examples/python_server_example.py最简中间件链
examples/full_demo.py多支柱堆栈(核心开关:速率限制、PII、RBAC、… - 参见 docs/PILLARS.md)
examples/llm_server.py面向大模型客户端的共享 MCP 服务
examples/llm_openai_example.pyOpenAI
examples/llm_claude_example.pyClaude
examples/llm_gemini_example.pyGemini
examples/llm_mistral_example.pyMistral
examples/llm_grok_example.pyGrok (xAI)
examples/server_with_config.py策略即代码(bastion.yaml)

安装

Python

uv add mcp-bastion-python
# or
pip install mcp-bastion-python
# pin a specific release (optional)
pip install mcp-bastion-python==5.1.0

先决条件(推荐)

  • PII 脱敏: Presidio 需要 spaCy 英语模型。安装后运行:
    python -m spacy download en_core_web_sm
    若缺少该模型,PII 分析可能在运行时失败。
  • 策略即代码(bastion.yaml): 安装 YAML 支持:
    pip install mcp-bastion-python[policy]
    (会添加 pyyaml;否则加载策略文件时可能会出现 ImportError。)
  • 提示词注入(PromptGuard): 分为两层:
    1. 正则启发式规则(始终启用)会拦截明显的越狱字符串,例如 “ignore previous instructions” - 无需下载模型。
    2. ML 分类器(默认无需授权): 通过 use_ungated_default: true 使用 ProtectAI/deberta-v3-base-prompt-injection-v2(无需登录 Hugging Face)。可选的受限访问升级:设置 use_ungated_default: false,并在运行 huggingface-cli login 后使用 meta-llama/Llama-Prompt-Guard-2-86M。当 fail_open: false(默认值)时,未经验证的载荷会被拦截。运行 mcp-bastion doctor 以验证 ML 是否可用。

PyPI wheel 包含完整的 mcp_bastion 目录树(包括 config、cli、otel、仪表板指标和告警接收器)。如果你使用的旧版 wheel 缺少模块,请升级到当前版本。

TypeScript

npm install @mcp-bastion/core

npm

框架集成

为你喜欢的大模型框架提供即插即用的安全防护。每个包都会自动安装 mcp-bastion-python。版本和下载量列使用 ecosystem-downloads.json 中的实时徽章(通过 PePy 统计累计总量)。趋势: pypistats.org。 One-place totals: Integrations download dashboard · ecosystem-downloads.json (sum of all 26 packages, refreshed daily).

PackageProtectsVersionDownloads
mcp-bastion-pythonCore middlewarePyPIdownloads · pypistats
mcp-bastion-langchainLangChainPyPIdownloads · pypistats
mcp-bastion-openaiOpenAI GPTPyPIdownloads · pypistats
mcp-bastion-anthropicAnthropic ClaudePyPIdownloads · pypistats
mcp-bastion-bedrockAWS BedrockPyPIdownloads · pypistats
mcp-bastion-geminiGoogle GeminiPyPIdownloads · pypistats
mcp-bastion-crewaiCrewAIPyPIdownloads · pypistats
mcp-bastion-llamaindexLlamaIndexPyPIdownloads · pypistats
mcp-bastion-groqGroqPyPIdownloads · pypistats
mcp-bastion-mistralMistral AIPyPIdownloads · pypistats
mcp-bastion-cohereCoherePyPIdownloads · pypistats
mcp-bastion-azureAzure OpenAIPyPIdownloads · pypistats
mcp-bastion-vertexaiVertex AIPyPIdownloads · pypistats
mcp-bastion-huggingfaceHugging FacePyPIdownloads · pypistats
mcp-bastion-deepseekDeepSeek AIPyPIdownloads · pypistats
mcp-bastion-togetherTogether AIPyPIdownloads · pypistats
mcp-bastion-fireworksFireworks AIPyPIdownloads · pypistats
mcp-bastion-litellmLiteLLM (100+ providers)PyPIdownloads · pypistats
mcp-bastion-ollamaOllama local modelsPyPIdownloads · pypistats
mcp-bastion-openrouterOpenRouter gatewayPyPIdownloads · pypistats
mcp-bastion-xaixAI GrokPyPIdownloads · pypistats
mcp-bastion-autogenMicrosoft AutoGenPyPIdownloads · pypistats
mcp-bastion-langgraphLangGraphPyPIdownloads · pypistats
mcp-bastion-pydantic-aiPydantic AIPyPIdownloads · pypistats
mcp-bastion-openai-agentsOpenAI Agents SDKPyPIdownloads · pypistats
mcp-bastion-fastmcpFastMCP serversPyPIdownloads · pypistats
pip install mcp-bastion-langchain      # LangChain agents and tools
pip install mcp-bastion-openai         # OpenAI GPT API calls
pip install mcp-bastion-anthropic      # Anthropic Claude API calls
pip install mcp-bastion-bedrock        # AWS Bedrock runtime
pip install mcp-bastion-gemini         # Google Gemini
pip install mcp-bastion-crewai         # CrewAI agent crews
pip install mcp-bastion-llamaindex     # LlamaIndex RAG pipelines
pip install mcp-bastion-groq           # Groq inference
pip install mcp-bastion-mistral        # Mistral AI
pip install mcp-bastion-cohere         # Cohere
pip install mcp-bastion-azure          # Azure OpenAI Service
pip install mcp-bastion-vertexai       # Google Cloud Vertex AI
pip install mcp-bastion-huggingface    # Hugging Face Inference
pip install mcp-bastion-deepseek       # DeepSeek AI
pip install mcp-bastion-together       # Together AI
pip install mcp-bastion-fireworks      # Fireworks AI
pip install mcp-bastion-litellm        # LiteLLM (100+ providers)
pip install mcp-bastion-ollama         # Ollama local models
pip install mcp-bastion-openrouter     # OpenRouter gateway
pip install mcp-bastion-xai            # xAI Grok
pip install mcp-bastion-autogen        # Microsoft AutoGen
pip install mcp-bastion-langgraph      # LangGraph
pip install mcp-bastion-pydantic-ai    # Pydantic AI
pip install mcp-bastion-openai-agents  # OpenAI Agents SDK
pip install mcp-bastion-fastmcp        # FastMCP servers

逐个发布:请参阅 integrations/PUBLISH.md。

发布(PyPI / npm)

  • PyPI: python -m build && twine upload dist/*(或在 tag 上使用 GitHub Actions)。
  • npm: 在仓库根目录运行 cd packages/core && npm publish --access public(或使用 Trusted Publishers)。
  • 版本号分别设置在 pyproject.toml(Python)、packages/core/package.json(npm)和 server.json(MCP 注册表)中。发布前请升级版本号。

开发者指南

Python 和 TypeScript 集成示例。完整的贡献者文档和功能文档:

文档说明
docs/DEVELOPER_GUIDE.md仓库结构、本地开发、测试、发布
docs/FEATURES.md所有安全支柱的使用方法,包括 3.0 运行时治理
docs/RBAC.mdRBAC 角色、fnmatch 通配模式、Agent IAM 配对
CONTRIBUTING.mdPR 检查清单和适合新手的问题
SUPPORT.md · FUNDING.md帮助与赞助

快速开始(Python)

分三步将 MCP-Bastion 添加到现有 MCP 服务:

from mcp_bastion import MCPBastionMiddleware, compose_middleware

# 1. Create the security middleware
bastion = MCPBastionMiddleware(
    enable_prompt_guard=True,
    enable_pii_redaction=True,
    enable_rate_limit=True,
)

# 2. Compose with your middleware chain (Bastion runs first)
middleware = compose_middleware(bastion)

# 3. Pass the composed middleware to your MCP server
# (integration depends on your server framework)

示例:

示例说明
examples/python_server_example.py基础中间件链
examples/full_demo.py完整中间件栈:添加、PII、速率限制、提示词注入等。
examples/llm_openai_example.py用于 OpenAI 的 MCP 服务
examples/llm_claude_example.py用于 Claude 的 MCP 服务
examples/llm_gemini_example.py用于 Gemini 的 MCP 服务
examples/llm_mistral_example.py用于 Mistral 的 MCP 服务
examples/llm_grok_example.py用于 Grok 的 MCP 服务(xAI,仅限 HTTP)
# Windows: $env:PYTHONPATH="src"; python examples/full_demo.py
# Linux/Mac: PYTHONPATH=src python examples/full_demo.py

大模型集成: 请参阅 docs/LLM_INTEGRATION.md,获取适用于 OpenAI、Claude、Gemini、Mistral 和 Grok 的可直接复制粘贴的配置。

企业验证:

PYTHONPATH=src python scripts/validate_checklist.py

请参阅 VALIDATION_CHECKLIST.md 和 SETUP_GUIDE.md。


Python 教程:FastMCP 服务

通过 secure_fastmcp 将 MCP-Bastion 集成到 FastMCP 服务中(会修补工具分发机制——请参阅 integrations/mcp-bastion-fastmcp/README.md)。

步骤 1:安装依赖项

pip install mcp mcp-bastion-fastmcp

步骤 2:创建服务文件(server.py)

from mcp.server.fastmcp import FastMCP
from mcp_bastion_fastmcp import secure_fastmcp

mcp = FastMCP("My Secure Server")
secure_fastmcp(mcp)  # call right after FastMCP(), before mcp.run()

@mcp.tool()
def get_weather(city: str) -> str:
    """Get weather for a city."""
    return f"Weather in {city}: 22C, sunny"

if __name__ == "__main__":
    mcp.run(transport="streamable-http")

步骤 3:运行服务

python server.py

MCP-Bastion(通过 secure_fastmcp):

  • 在执行前扫描工具参数中的提示词注入
  • 在返回工具结果时对其中的 PII 进行脱敏
  • 强制执行默认速率限制(每个会话 15 次调用,超时 60s——请参阅 TokenBucketRateLimiter)

如需使用完整的 bastion.yaml 策略,或对资源(resources/read)进行 PII 脱敏,请使用底层 MCP Server 和 build_middleware_from_config()——请参阅 docs/QUICK_START.md 中的路径 B。

替代方案:策略即代码

使用 bastion.yaml,而非代码。将 bastion.yaml.example 复制为 bastion.yaml,然后:

from mcp_bastion import build_middleware_from_config
middleware = build_middleware_from_config()

请参阅 docs/POLICY_AS_CODE.md 和 examples/server_with_config.py。


Python:自定义速率限制

自定义配置示例:

from mcp_bastion import MCPBastionMiddleware
from mcp_bastion.pillars.rate_limit import TokenBucketRateLimiter
from mcp_bastion.pillars.prompt_guard import PromptGuardEngine

# Stricter limits
rate_limiter = TokenBucketRateLimiter(
    max_iterations=10,
    timeout_seconds=30,
    token_budget=25_000,
)

# Higher threshold = fewer blocks, more risk
prompt_guard = PromptGuardEngine(threshold=0.92)

bastion = MCPBastionMiddleware(
    prompt_guard=prompt_guard,
    rate_limiter=rate_limiter,
    enable_prompt_guard=True,
    enable_pii_redaction=True,
    enable_rate_limit=True,
)

# Disable PII redaction if your data has no PII
bastion_no_pii = MCPBastionMiddleware(enable_pii_redaction=False)

Python:自定义中间件

扩展 Middleware 以添加日志记录、指标或自定义逻辑:

from mcp_bastion import MCPBastionMiddleware
from mcp_bastion.base import Middleware, MiddlewareContext, compose_middleware

class LoggingMiddleware(Middleware):
    async def on_message(self, context, call_next):
        result = await call_next(context)
        # log method, elapsed, etc.
        return result

bastion = MCPBastionMiddleware()  # or use the configured instance from above
middleware = compose_middleware(bastion, LoggingMiddleware())

完整示例请参阅 examples/full_demo.py。


TypeScript:包装 MCP 服务

步骤 1:安装依赖项

npm install @modelcontextprotocol/sdk @mcp-bastion/core

步骤 2:创建服务(server.ts)

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  wrapWithMcpBastion,
} from "@mcp-bastion/core";

const server = new Server({ name: "my-mcp-server", version: "1.0.0" });

// Wrap the server with MCP-Bastion (rate limiting only by default)
// For prompt injection, PII, semantic egress, and result guard, run the Python sidecar
wrapWithMcpBastion(server, {
  enableRateLimit: true,
  maxIterations: 15,
  timeoutMs: 60_000,
  // Optional: enable ML / semantic features via Python sidecar
  sidecarUrl: process.env.MCP_BASTION_SIDECAR || "",
  enablePromptGuard: !!process.env.MCP_BASTION_SIDECAR,
  enablePiiRedaction: !!process.env.MCP_BASTION_SIDECAR,
  // Opt-in cyber extensions — see docs/CYBER_EXTENSIONS_CORE.md
  enableSemanticEgress: true,
  semanticEgressMode: "detect",
  semanticEgressTools: ["create_pull_request", "send_email"],
  tagResultProvenance: true,
  enableAudit: true,
});

// Register tools (handlers are automatically wrapped)
server.setRequestHandler("tools/call" as any, async (request) => {
  if (request.params?.name === "get_weather") {
    return {
      content: [{ type: "text", text: "Sunny, 22C" }],
      isError: false,
    };
  }
  throw new Error("Unknown tool");
});

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
}

main();

步骤 3:仅启用速率限制运行

npx tsx server.ts

步骤 4:启用完整机器学习功能运行(Python sidecar)

如需提示词注入防护、PII 脱敏、语义出站检查和结果防护,请运行一个提供 /prompt-guard、/pii-redact、/semantic-egress 和 /result-guard 的 Python HTTP 服务(请参阅 docs/CYBER_EXTENSIONS_CORE.md)。然后:

# Start the Python sidecar, then the TypeScript server (sidecarUrl or MCP_BASTION_URL)
MCP_BASTION_SIDECAR=http://localhost:8000 npx tsx server.ts

**中介前提条件:**包装器只能处理经 MCP 中介的工具调用。带外 shell/git 操作不在范围内。


TypeScript:包装单个处理程序

仅包装指定的处理程序:

import {
  wrapCallToolHandler,
  wrapReadResourceHandler,
} from "@mcp-bastion/core";
import {
  CallToolRequestSchema,
  ReadResourceRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

// Wrap only the tool handler
const safeToolHandler = wrapCallToolHandler(
  async (request) => {
    // Your tool logic
    return { content: [{ type: "text", text: "OK" }], isError: false };
  },
  { enableRateLimit: true, maxIterations: 10 }
);

// Wrap only the resource handler (for PII redaction)
const safeResourceHandler = wrapReadResourceHandler(
  async (request) => {
    const contents = await fetchResource(request.params.uri);
    return { contents };
  },
  { sidecarUrl: "http://localhost:8000", enablePiiRedaction: true }
);

server.setRequestHandler(CallToolRequestSchema, safeToolHandler);
server.setRequestHandler(ReadResourceRequestSchema, safeResourceHandler);

配置参考
选项PythonTypeScript默认值描述
enable_prompt_guard是是True(Python)/ False(TS)通过 PromptGuard 拦截恶意提示词
enable_pii_redaction是是True(Python)/ False(TS)遮蔽外发内容中的 PII
enable_rate_limit是是True限制迭代次数和超时时间
max_iterations通过 TokenBucketRateLimiter是15每个会话的最大工具调用次数
timeout_seconds / timeoutMs通过 TokenBucketRateLimiter是60会话超时时间
token_budget通过 TokenBucketRateLimiter-50,000每个请求的 FinOps 令牌上限
sidecarUrl-是""用于 ML / 语义功能的 Python sidecar URL
enableSemanticEgress-是false通过 /semantic-egress 检查允许列表中的出站工具
semanticEgressMode-是detectdetect | quarantine(失败时默认拒绝)
semanticEgressTools-是[]要检查的工具名称
tagResultProvenance-是false将结果文本包装在不可信标记中
enableResultGuard-是false通过 /result-guard 扫描结果
resultGuardMode-是detectdetect | strict(失败时默认拒绝)
enableAudit / onAudit-是false哈希链式审计 + 可选接收端
threshold通过 PromptGuardEngine-0.85恶意概率阈值
setLogLevel-是"info"TypeScript:"debug" | "info" | "warn" | "error"

错误处理

当 MCP-Bastion 拦截请求时,会返回标准 MCP/JSON-RPC 错误:

代码异常触发条件
-32001PromptInjectionError工具参数包含越狱/注入内容
-32002RateLimitExceededError会话超出迭代次数或超时时间限制
-32003TokenBudgetExceededError会话超出令牌预算
-32004CircuitBreakerOpenError工具的熔断器在发生故障后处于开启状态
-32005ContentFilterError内容过滤器匹配到被拦截的模式
-32006RBACError调用方无权使用此工具
-32007SchemaValidationError工具参数未通过架构验证
-32008ReplayAttackError检测到重复 nonce / 重放攻击
-32009CostBudgetExceededError会话超出成本预算
-32010SemanticFirewallError工具序列 / 参数模式未通过语义防火墙检查
-32011ExternalPolicyDeniedErrorOPA/Cedar(或其他外部)策略拒绝了请求
-32012SensitiveContentError敏感业务分类器的分数高于阈值
-32013AuthenticationError边缘 / 网关身份验证(元数据令牌)失败
-32014ToolNotAllowedError工具不在允许列表中
-32015SessionScopeExceededError每个会话中的不同工具过多(范围扩张)
-32016ToolMetadataPoisoningError工具列表 / 元数据未通过安全检查
-32017GroundingViolationError工具输出中包含缺乏依据的文件引用
-32018PromptGuardUnavailableErrorPromptGuard ML 不可用且采用失败时默认拒绝策略(或启发式检查已禁用)
-32019AgentAccessDeniedError已通过身份验证的 Agent 尝试使用其 IAM 策略之外的工具
-32020ServerVerificationErrorMCP 服务文件校验和与受信任清单不匹配
# Python: exceptions
from mcp_bastion.errors import (
    PromptInjectionError,
    RateLimitExceededError,
    TokenBudgetExceededError,
    CircuitBreakerOpenError,
    ContentFilterError,
    RBACError,
    SchemaValidationError,
    ReplayAttackError,
    CostBudgetExceededError,
    SemanticFirewallError,
    ExternalPolicyDeniedError,
    SensitiveContentError,
    AuthenticationError,
    ToolNotAllowedError,
    SessionScopeExceededError,
    ToolMetadataPoisoningError,
    GroundingViolationError,
    PromptGuardUnavailableError,
    AgentAccessDeniedError,
    ServerVerificationError,
)
import logging
logger = logging.getLogger(__name__)

try:
    result = await middleware(context, call_next)
except (
    PromptInjectionError,
    RateLimitExceededError,
    TokenBudgetExceededError,
    CircuitBreakerOpenError,
    ContentFilterError,
    RBACError,
    SchemaValidationError,
    ReplayAttackError,
    CostBudgetExceededError,
    SemanticFirewallError,
    ExternalPolicyDeniedError,
    SensitiveContentError,
    AuthenticationError,
    ToolNotAllowedError,
    SessionScopeExceededError,
    ToolMetadataPoisoningError,
    GroundingViolationError,
    PromptGuardUnavailableError,
    AgentAccessDeniedError,
    ServerVerificationError,
) as e:
    logger.warning("blocked: %s", e.to_mcp_error())
// TypeScript: handlers return isError: true
import { logger, setLogLevel } from "@mcp-bastion/core";
setLogLevel("debug");  // optional: "debug" | "info" | "warn" | "error"
const result = await guardedHandler(request);
if (result.isError) {
  logger.error("blocked", result.content);
}

测试

MCP Inspector:

# Start your guarded server
python server.py   # or: npx tsx server.ts

# In another terminal, launch the Inspector
npx -y @modelcontextprotocol/inspector

通过 HTTP(http://localhost:8000/mcp)或 stdio 连接,然后:

  1. 列出工具,并使用无害参数调用其中一个(应成功)
  2. 使用“忽略之前的指令”调用一个工具(应被拦截)
  3. 在一个会话中触发 16 次或更多工具调用(应触发速率限制)

测试

# Python (PYTHONPATH=src on Windows: $env:PYTHONPATH="src")
python -m pytest tests/ -v

# TypeScript
npm run test --workspace=@mcp-bastion/core

# Full validation checklist (build, pillars, latency)
PYTHONPATH=src python scripts/validate_checklist.py

# MCP Inspector (manual)
npx -y @modelcontextprotocol/inspector

第三方组件

许可证信息请参阅 NOTICE。MCP-Bastion 使用 Meta Llama Prompt Guard 2(Llama 4 Community License)和 Microsoft Presidio。有关与 OWASP 相关的缓解措施和依赖项审计,请参阅 docs/SECURITY.md。如需私下报告漏洞,请参阅 SECURITY.md。

许可证

MCP-Bastion 根据 MCP-Bastion Community and Commercial License (LICENSE) 发布。

  • 非商业用途可免费使用,但须注明 MCP-Bastion 并保留版权声明(参阅 CITATION.cff;你可以将你自己的姓名、团队或组织列为作者或软件使用者,但仍须在致谢中注明项目和代码仓库)。
  • 版权予以保留。请勿删除许可证或版权文本,也不得在未满足许可证条款的情况下,将本作品的副本作为无关软件重新发布。
  • 商业用途(按许可证中的定义)可能仍需另行签订书面协议 - 请参阅 COMMERCIAL_LICENSE.md。

另请参阅:


产品概览与安全演示文稿

演示文稿适用场景
MCP-Security-Deck-v3.pdf首选 — 面向购买者、安全审查以及 LinkedIn / 销售分享的安全 / FinOps / 基准测试证明材料(原始文件)
docs/mcp-bastian-features-deck.pdf面向深入了解的相关方,提供更详尽的功能介绍 / 核心支柱概览

演示文稿背后可复现的数据:docs/BENCHMARKS.md · 威胁模型:docs/THREAT_MODEL.md。

评论

支持 Markdown

第一次接触 MCP?

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

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