HashiCorp Vault MCP 服务器是一个全功能的模型上下文协议(MCP)集成,允许语言模型和其他支持MCP的客户端通过一个安全且可审计的接口管理Vault的秘密和策略。它将Vault的安全模型与MCP期望的结构化交互模型连接起来,因此您可以自动化诸如凭证轮换、策略编写和发现等任务,而无需暴露原始的Vault API。
该服务器封装了HashiCorp Vault KV v2 API和常见的策略工作流程,这些都在MCP原语中实现。一旦客户端连接,它可以调用类型化的工具,浏览资源,并请求由您已操作的同一Vault实例支持的提示完成。每次交互都是明确的:客户端必须提供它们想要处理的路径、数据和策略,服务器使用您控制的令牌将这些请求直接转发给Vault。
<img width="1222" height="909" alt="image" src="https://github.com/user-attachments/assets/4517458f-e882-4928-83ba-2ba3be2354a0" />create_secret或create_policy等工具;服务器验证负载,将其转发到Vault,并返回结构化响应。vault://secrets列出客户端可以浏览或用于后续提示的数据驱动内容。generate_policy帮助您从自然语言意图合成Vault准备的HCL。实现是用TypeScript编写的,打包成一个JavaScript文件,并依赖官方的@modelcontextprotocol/sdk进行传输和模式验证。
hvs.开头并授予所需能力(读取、创建、更新、删除以及/或sudo用于策略工作)的Vault令牌。生产(推荐)——使用官方镜像。将以下内容粘贴到~/.cursor/mcp.json:
{
"mcpServers": {
"Vault": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"VAULT_ADDR=https://your-vault-server:8200",
"-e",
"VAULT_TOKEN=hvs.your-vault-token",
"ashgw/vault-mcp:latest"
]
}
}
}
Cursor按需启动容器,将stdio连接到MCP传输,并在会话结束时关闭容器。如果您需要固定版本,请指定标签(例如ashgw/vault-mcp:1.x.y)。
您可以构建并运行本地服务,并这样使用:
{
"mcpServers": {
"Vault": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network=host",
"-e",
"VAULT_ADDR=http://127.0.0.1:8200",
"-e",
"VAULT_TOKEN=hvs.test-token-1234567890abcdef",
"vault-mcp:local"
]
}
}
}
git clone https://github.com/rccyx/vault-mcp.git
cd vault-mcp
docker build -t vault-mcp:local .
docker run -i --rm \
--network=host \
-e VAULT_ADDR=http://127.0.0.1:8200 \
-e VAULT_TOKEN=hvs.test-token-1234567890abcdef \
vault-m-:local
VAULT_ADDR(必需):Vault集群的URL,例如https://vault.internal:8200或http://127.0.0.1:8200。VAULT_TOKEN(必需):以hvs.开头的短期或可续期Vault令牌。使用Vault策略严格限定其作用域。NODE_TLS_REJECT_UNAUTHORIZED(可选):仅在使用自签名证书测试时设置为0。建议添加正确的CA捆绑包。如果部署需要其他Vault环境变量(如VAULT_NAMESPACE),请提供;服务器将进程环境转发给Vault客户端库。
对于本地测试的合理默认值,请使用
.env.copy.example文件。
MCP服务器公开了直接映射到Vault操作的工具。在发送到Vault之前会验证负载,响应则模仿Vault的JSON结构。
create_secretpath(字符串):KV v2逻辑路径,例如apps/myapp/config。data(对象):存储在data下的键值对。await tool("create_secret", {
path: "apps/myapp/config",
data: {
apiKey: "secret-key-123",
environment: "production",
},
});
read_secretpath(字符串):KV v2逻辑路径。version(可选数字):要获取的具体版本,默认为最新版本。data对象连同元数据(created_time,version)。const secret = await tool("read_secret", { path: "apps/myapp/config" });
console.log(secret.data.apiKey);
delete_secretpath(字符串):KV v2逻辑路径。await tool("delete_secret", { path: "apps/myapp/config" });
create_policyname(字符串):要插入或更新的策略名称。policy(字符串):HCL策略定义。true。await tool("create_policy", {
name: "app-readonly",
policy: """
path "secret/data/apps/myapp/*" {
capabilities = ["read", "list"]
}
"""
});
资源公开了可浏览的数据集,有助于MCP客户端决定下一步调用哪个工具。
vault://secrets列出KV存储根目录下可用的键。嵌套目录以/结尾,以便客户端可以深入浏览。
{
"keys": ["apps/", "databases/", "certificates/"]
}
vault://policies枚举令牌可以读取的策略名称。对于审核或作为提示输入很有用。
{
"policies": ["default", "app-readonly", "admin"]
}
提示通过将结构化输入转换为Vault友好的输出来协助高级别创作任务。
generate_policypath(字符串):目标KV路径或模式,例如secret/data/apps/*。capabilities(字符串):逗号分隔的能力(例如read,list,delete)。create_policy。const draft = await prompt("generate_policy", {
path: "secret/data/apps/*",
capabilities: "read,list",
});
VAULT_TOKEN有效且未被撤销。运行vault token lookup hvs.your-token检查TTL和策略。secret/data/...与kv/data/...)。VAULT_CACERT提供CA捆绑包,或在测试时暂时设置NODE_TLS_REJECT_UNAUTHORIZED=0。list的路径。请再次检查策略是否允许相关前缀上的list能力。根据MIT许可分发。