使用说明
Vanta MCP服务器
使用模型上下文协议直接从IDE查询Vanta合规性数据。
一个MCP服务器,将AI助手(Cursor、Claude Desktop等)连接到您的Vanta实例,使工程师能够查询合规性测试、查看失败的实体,并在不离开编辑器的情况下获取补救上下文。
安装
来自GitHub发布(推荐)
-
下载
vanta-mcp-server.zip从 发布 -
解压缩到机器上的某个位置(例如。,
~/vanta-mcp-server) -
运行安装脚本:
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证书
- 首选 Vanta → 设置 → 开发者控制台
- 点击 +创建 创建新应用程序
- 选择 “管理Vanta” 作为应用程序类型
- 复制您的 客户端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 人工制品。
扩展服务器
添加新工具
- 在中添加Zod验证模式
src/validation.ts:
export const ListFrameworksSchema = z.object({
pageSize: z.number().int().min(1).max(500).optional(),
pageCursor: z.string().optional(),
});
- 在中创建工具处理程序
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,
};
}
}
- 在中注册
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 ?? {}));
- 重建并重新启动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在每一个建筑上。
许可证
麻省理工学院