合规数据查询服务

Vanta MCP Server 是一款连接AI助手与Vanta实例的MCP服务器,使工程师能够直接从IDE查询合规测试、查看失败实体并获取修复上下文。

  • by Agentic-Studio-Labs
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Agentic-Studio-Labs/vanta-mcp-server

使用说明

Vanta MCP服务器

使用模型上下文协议直接从IDE查询Vanta合规性数据。

一个MCP服务器,将AI助手(Cursor、Claude Desktop等)连接到您的Vanta实例,使工程师能够查询合规性测试、查看失败的实体,并在不离开编辑器的情况下获取补救上下文。

安装

来自GitHub发布(推荐)

  1. 下载 vanta-mcp-server.zip 从 发布

  2. 解压缩到机器上的某个位置(例如。, ~/vanta-mcp-server)

  3. 运行安装脚本:

    cd ~/vanta-mcp-server
    ./setup.sh
    

    脚本将:

    • 安装依赖项
    • 提示您的Vanta API证书
    • 自动配置Cursor/Claude桌面

或手动:

cd ~/vanta-mcp-server
npm install --production
# Then configure your IDE (see below)

来源

git clone https://github.com/your-org/vanta-mcp-server.git
cd vanta-mcp-server/mcp-vanta-server
npm install
npm run build

配置

1.获取Vanta API证书

  1. 首选 Vanta → 设置 → 开发者控制台
  2. 点击 +创建 创建新应用程序
  3. 选择 “管理Vanta” 作为应用程序类型
  4. 复制您的 客户端ID 和 客户端密钥

2.配置IDE

MCP服务器已配置 全球范围内 --一旦设置好,它就可以在您的所有项目中运行。

光标

创建或编辑全局配置文件:

操作系统 位置
macOS/Linux ~/.cursor/mcp.json
窗户 %USERPROFILE%\.cursor\mcp.json

添加以下内容(替换路径和凭据):

{
  "mcpServers": {
    "vanta": {
      "command": "node",
      "args": ["/Users/YOUR_USERNAME/vanta-mcp-server/dist/index.js"],
      "env": {
        "VANTA_CLIENT_ID": "your_client_id",
        "VANTA_CLIENT_SECRET": "your_client_secret",
        "VANTA_SCOPES": "vanta-api.all:read"
      }
    }
  }
}

克劳德桌面

创建或编辑全局配置文件:

操作系统 位置
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
窗户 %APPDATA%\Claude\claude_desktop_config.json

添加以下内容(替换路径和凭据):

{
  "mcpServers": {
    "vanta": {
      "command": "node",
      "args": ["/Users/YOUR_USERNAME/vanta-mcp-server/dist/index.js"],
      "env": {
        "VANTA_CLIENT_ID": "your_client_id",
        "VANTA_CLIENT_SECRET": "your_client_secret",
        "VANTA_SCOPES": "vanta-api.all:read"
      }
    }
  }
}

3.重新启动IDE

重新启动IDE以加载MCP服务器。

可用工具

所有工具都是 只读 并相应地声明MCP工具注释。

工具 说明 参数
list_failing_tests 列出符合性测试的状态 NEEDS_ATTENTION categoryFilter?, frameworkFilter?, pageSize?, pageCursor?
get_test_details 获取特定测试的详细信息 testId (必填)
list_affected_assets 列出未通过特定测试的实体 testId (必填), pageSize?, pageCursor?
suggest_remediation 获取测试详细信息+失败实体,以获得AI驱动的补救指导 testId (必填)

所有响应都包含分页元数据(pageInfo)在适用的情况下,使用基于光标的导航。

用法示例

配置后,询问您的AI助手:

What compliance tests are failing?
Show me details on the screenlock test
Which resources are affected by test X?
How do I fix this compliance issue?

建筑

flowchart LR
    subgraph ide [IDE]
        AI[AI Assistant]
    end

    subgraph server [MCP Server]
        Log[Audit Log → stderr]
        Validate[Zod Validation]
        Tools[Tool Handlers]
        RL[Rate Limiter]
        Client[Vanta Client]
    end

    subgraph vanta [Vanta]
        API[Vanta API v1]
    end

    AI <-->|stdio| Log
    Log --> Validate
    Validate --> Tools
    Tools --> RL
    RL --> Client
    Client -->|OAuth 2.0 + timeout| API

层:

  • 审核日志 (src/index.ts, src/data/vantaClient.ts)-每个工具调用和API请求都会记录到带有时间戳的stderr中
  • 验证 (src/validation.ts)--Zod模式强制参数类型,并在ID到达工具处理程序之前对其进行清理
  • 工具 (src/tools/*.ts)-业务逻辑:形成MCP的API响应
  • 速率限制器 (src/rateLimit.ts)-滑动窗口限制器可防止API使用失控(默认值:60 req/60s)
  • 客户 (src/data/vantaClient.ts)-OAuth令牌管理,所有HTTP到Vanta API,30秒 AbortSignal 超时

使用的Vanta API端点

工具 Vanta端点
list_failing_tests GET /v1/tests?statusFilter=NEEDS_ATTENTION
get_test_details GET /v1/tests (按ID筛选客户端)
list_affected_assets GET /v1/tests/{testId}/entities?entityStatus=FAILING
suggest_remediation 联合 /v1/tests + /v1/tests/{testId}/entities

环境变量

变量 必填 描述
VANTA_CLIENT_ID 是 来自Vanta开发者控制台的OAuth客户端ID
VANTA_CLIENT_SECRET 是 OAuth客户端密钥
VANTA_SCOPES 没有 API作用域(默认值: vanta-api.all:read)

发展

# Install dependencies
npm install

# Run in development mode
npm run dev

# Type check
npx tsc --noEmit

# Build
npm run build

# Run tests
npm test

# Run linter
npm run lint

CI/CD

测试管道(.github/workflows/release.yml)

在节点18、20和22上的每次推送和PR上运行:

步骤 目的
npm audit --omit=dev 捕获依赖漏洞
npm run lint 使用TypeScript规则的ESLint
npx tsc --noEmit 运行前捕获类型错误
npm run build 确保服务器已编译
npm test 单元测试(验证、速率限制器、消毒)+MCP烟雾测试(启动服务器,验证 tools/list JSON-RPC上的响应)

构建作业重用测试作业中的已编译工件,以避免冗余工作。

CodeQL静态分析(.github/workflows/codeql.yml)

每次推送、公关和每周周一运行。使用GitHub的CodeQL引擎检测JavaScript/TypeScript中的注入漏洞、原型污染和其他安全问题。

Dependabot(.github/dependabot.yml)

自动每周PR:

  • npm依赖关系 --按开发/生产分组,将次要+补丁开发部署批处理到单个PR中
  • GitHub操作版本 --保持CI操作版本最新

当您按下版本标签时,会自动创建版本:

git tag v1.1.0
git push origin v1.1.0

这将创建一个GitHub版本,其中包含可下载的 vanta-mcp-server.zip 人工制品。

扩展服务器

添加新工具

  1. 在中添加Zod验证模式 src/validation.ts:
export const ListFrameworksSchema = z.object({
  pageSize: z.number().int().min(1).max(500).optional(),
  pageCursor: z.string().optional(),
});
  1. 在中创建工具处理程序 src/tools/:
// src/tools/listFrameworks.ts
import { getVantaFrameworks } from "../data/vantaClient.js";

export async function listFrameworks(args: { pageSize?: number; pageCursor?: string }) {
  try {
    const response = await getVantaFrameworks(args);
    const frameworks = response.results?.data ?? [];
    const pageInfo = response.results?.pageInfo;

    return {
      content: [{ type: "text" as const, text: JSON.stringify({ frameworks, pageInfo }, null, 2) }],
    };
  } catch (error: unknown) {
    const message = error instanceof Error ? error.message : String(error);
    return {
      content: [{ type: "text" as const, text: `Error: ${message}` }],
      isError: true,
    };
  }
}
  1. 在中注册 src/index.ts:
import { listFrameworks } from "./tools/listFrameworks.js";
import { ListFrameworksSchema } from "./validation.js";

// Add to the tools array in the ListToolsRequestSchema handler:
{
  name: "list_frameworks",
  description: "List all compliance frameworks in your Vanta account",
  inputSchema: { type: "object", properties: {} },
  annotations: {
    title: "List Frameworks",
    readOnlyHint: true,
    destructiveHint: false,
    openWorldHint: true,
  },
}

// Add to the switch statement in the CallToolRequestSchema handler:
case "list_frameworks":
  return listFrameworks(ListFrameworksSchema.parse(args ?? {}));
  1. 重建并重新启动IDE。

Vanta API参考

请参阅 Vanta API文件 对于可用的端点和数据模型。

可用范围

范围 访问
vanta-api.all:read 读取所有资源的访问权限
vanta-api.all:write 对所有资源的读/写访问权限
vanta-api.vendors:read 仅读取供应商数据
vanta-api.documents:read 仅读取文档

安全

  • 输入验证:所有工具参数都在运行时使用Zod模式进行验证。ID已针对同种异体模式进行了净化(^[a-zA-Z0-9_-]+$)在插入API URL之前。
  • 错误清理:API错误消息仅公开HTTP状态代码,而不公开原始响应体。
  • 默认情况下为只读默认的OAuth作用域为 vanta-api.all:read.所有工具声明 readOnlyHint: true 通过MCP工具注释。
  • 速率限制:滑动窗口速率限制器(每60秒60个请求)可防止失控的LLM循环耗尽Vanta API配额。
  • 获取超时:所有发送到Vanta API的HTTP请求都使用30秒 AbortSignal 超时,防止挂起的连接阻塞服务器。
  • 审核日志记录:每个工具调用和API请求都会记录到带有ISO 8601时间戳的stderr中。由于MCP将stdio用于协议消息,因此stderr可以安全地记录日志,并且可以在IDE的输出面板中看到。
  • 凭证处理:凭据由IDE作为环境变量传递,从不存储在代码中。如果暴露,请立即旋转凭据。
  • 依赖性审计:CI运行 npm audit 在每一个建筑上。

许可证

麻省理工学院