A Model Context Protocol (MCP) server that provides secure access to Keeper Secrets Manager. This server allows MCP-compatible clients (like Claude Desktop, Postman, or other AI assistants) to retrieve specific assigned secrets from the Keeper vault.
- 🔐 Secure Access: Connect to your Keeper vault using official Keeper Secrets Manager SDK
- 🔍 Search Capabilities: Search secrets by title or content
- 📝 Field Access: Retrieve specific fields from secrets (passwords, URLs, custom fields)
- 🚀 Easy Setup: Simple configuration with support for multiple authentication methods
- 🛡️ Zero Knowledge: Your secrets remain encrypted and secure
- Node.js 18 or higher
- A Keeper Security account with Secrets Manager enabled
- An application configured in Keeper Secrets Manager
npm install -g @keeper/mcp-server
git clone https://github.com/Keeper-Security/keeper-mcp-node.git
cd keeper-mcp-node
npm install
npm run build
- Log into your Keeper Vault
- Navigate to Secrets Manager → Applications
- Create a new application or select an existing one
- Add the secrets/folders you want to access
- Go to the Devices tab and create a new device
- Download the configuration file
You have two options for providing your Keeper configuration:
Place your downloaded configuration file in one of these locations:
~/.keeper/ksm-config.json
(recommended)./ksm-config.json
(in the current directory)
If you have a one-time token instead:
export KSM_TOKEN="US:YOUR_ONE_TIME_TOKEN_HERE"
The server will use this token to generate and save a configuration file automatically.
Run the server directly to test:
npm start
You should see: Keeper MCP server is running
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json
):
{
"mcpServers": {
"keeper": {
"command": "node",
"args": ["/path/to/keeper-mcp-node/dist/index.js"]
}
}
}
- In Postman, go to the API Network tab
- Create or select an MCP request
- Configure the stdio connection:
- Command:
node
- Arguments:
/path/to/keeper-mcp-node/dist/index.js
- Command:
The server communicates via stdio, so you can integrate it with any MCP-compatible client by running:
node /path/to/keeper-mcp-node/dist/index.js
List all secrets accessible to your application (metadata only).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_list_secrets",
"arguments": {}
}
}
Response:
[
{
"uid": "XXXXXXXXXXXXXXXXXXXXXX",
"title": "My Secret",
"type": "login"
}
]
Retrieve a complete secret by UID or title (sensitive fields masked by default).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_get_secret",
"arguments": {
"identifier": "My Secret",
"unmask": false
}
}
}
Search for secrets by title, notes, or other field content.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_search_secrets",
"arguments": {
"query": "database"
}
}
}
Create a new secret in Keeper Secrets Manager (requires confirmation).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_create_secret",
"arguments": {
"title": "New Database Credentials",
"type": "login",
"fields": {
"login": "admin",
"password": "secure_password",
"url": "https://db.example.com"
},
"notes": "Production database",
"folderId": "FOLDER_UID"
}
}
}
Update an existing secret (requires confirmation).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_update_secret",
"arguments": {
"identifier": "My Secret",
"updates": {
"title": "Updated Title",
"fields": {
"password": "new_password"
}
}
}
}
}
Delete a secret from Keeper Secrets Manager (requires confirmation).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_delete_secret",
"arguments": {
"identifier": "My Secret"
}
}
}
Get a specific field value from a secret.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_get_field",
"arguments": {
"identifier": "My Secret",
"field": "password"
}
}
}
Common field names:
password
- The password fieldlogin
- Username/emailurl
- Website URL- Custom field labels
List all accessible folders in Keeper Secrets Manager.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_list_folders",
"arguments": {}
}
}
Create a new folder (requires confirmation; must specify a parent shared folder).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_create_folder",
"arguments": {
"name": "Development Secrets",
"parentFolderId": "PARENT_FOLDER_UID"
}
}
}
Delete a folder (requires confirmation).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_delete_folder",
"arguments": {
"folderId": "FOLDER_UID",
"force": false
}
}
}
Upload a file attachment to a secret (requires confirmation).
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_upload_file",
"arguments": {
"identifier": "My Secret",
"filePath": "/path/to/certificate.pem",
"fileName": "server-cert.pem"
}
}
}
Download a file attachment from a secret.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_download_file",
"arguments": {
"identifier": "My Secret",
"fileId": "certificate.pem",
"outputPath": "/tmp/downloaded-cert.pem"
}
}
}
Generate a secure password. Can optionally save directly to a new secret without exposing it to the AI.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_generate_password",
"arguments": {
"length": 24,
"includeUppercase": true,
"includeLowercase": true,
"includeNumbers": true,
"includeSpecial": true,
"saveToSecret": {
"title": "Generated API Key",
"login": "api-user",
"url": "https://api.example.com",
"notes": "Auto-generated API key"
}
}
}
}
Get the current TOTP code for a secret that has TOTP configured.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_get_totp_code",
"arguments": {
"identifier": "My 2FA Secret"
}
}
}
Get the current version of the KSM MCP server.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_get_server_version",
"arguments": {}
}
}
Check the operational status of the MCP server and its connection to KSM.
Request:
{
"method": "tools/call",
"params": {
"name": "ksm_health_check",
"arguments": {}
}
}
- Ensure your configuration file is in one of the supported locations
- Check that the file has proper JSON formatting
- Verify file permissions (should be readable by your user)
- Verify your configuration file contains all required fields
- Check that your application has access to the shared folders/secrets
- Ensure your device hasn't been revoked in Keeper
- Verify you have internet connectivity
- Check if your organization has IP restrictions enabled
- Ensure your Keeper subscription includes Secrets Manager
npm install
npm run build
npm run dev
npm test
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
- Built on the Model Context Protocol
- Powered by Keeper Security
- For issues with the MCP server: GitHub Issues
- For Keeper-specific questions: Keeper Support
- For MCP protocol questions: MCP Documentation