Skip to main content
Glama
TheNickSanchez

passkey-mcp

Passkey

A cross-platform secrets manager for AI coding assistants and CLI tools — stores named credential sets in your system keychain and injects them as environment variables at runtime.

No plaintext secrets in config files. No cloud sync. Protected by your OS keychain's access controls (optional Touch ID / sudo prompt for terminal use).

Features

  • Store multiple secrets per entry in the system keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service)

  • Inject secrets as environment variables for subprocesses

  • Tool-agnostic — works with Claude, Gemini, VS Code, Cursor, OpenCode, Windsurf, Cline, Zed, and more

  • Interactive fuzzy-search entry picker (arrow keys + type-to-filter)

  • Tab completion for bash, zsh, and fish

  • Generate cryptographically secure random secrets (configurable length, guaranteed character diversity)

  • Templates for popular services (GitHub, AWS, Slack, OpenAI, Stripe, Vercel, PostgreSQL, MySQL)

  • Share & receive entries via encrypted file + passphrase (no key exchange needed)

  • Lifecycle trackinglast_rotated timestamps, passkey rotate, passkey doctor --deep

  • Import from Chrome password exports, existing MCP configs, or passkey backups

  • Encrypted bundle export/import for safe machine-to-machine transfer

  • Full audit logging with passkey audit --summary

  • OS keychain ACL protection, with optional Touch ID / sudo prompt for terminal commands (opt-in via passkey config require-auth on)

  • Cross-platform: macOS, Linux, Windows

Related MCP server: mcpvault

Installation

# Recommended: install globally with pipx
pipx install passkey-mcp

# Or with pip
pip install passkey-mcp

# Development mode (from source)
pip install -e .

Requirements

  • Python 3.10+

  • System keychain access (macOS Keychain, Windows Credential Manager, or a running Linux keyring daemon)

Quick Start

# First run — guided onboarding
passkey
#  ┌─────────────────────────────────────────────┐
#  │           Welcome to passkey                 │
#  │  Secrets in your keychain. Not in config.    │
#  └─────────────────────────────────────────────┘
#  Create your first entry now? [Y/n]

# Create an entry
passkey new
# Entry name: github
# Field name: GITHUB_TOKEN
# Value: [hidden input]

# List all entries
passkey list

# Run a command with secrets injected
passkey run github -- python app.py

Shell Completion

Set up tab completion for your shell:

# Zsh (macOS default)
eval "$(passkey completion --zsh)"

# Bash
eval "$(passkey completion --bash)"

# Fish
passkey completion --fish > ~/.config/fish/completions/passkey.fish

After setup, tab completion works everywhere:

passkey <TAB>         # Show entries + subcommands
passkey hugg<TAB>     # Fuzzy-match: huggingface_key
passkey get <TAB>     # Complete entry names
passkey run <TAB>     # Pick entries to load

Interactive Mode

When you omit an entry name (or type a partial match), passkey shows an interactive picker with fuzzy search:

$ passkey get
? Select entry to browse: (Use arrow keys, type to filter)
❯ github
  openai
  slack
  myapi_read
  myapi_write

# Type to filter:
$ passkey get my
# Automatically shows: myapi_read, myapi_write

# Single match auto-selects:
$ passkey get github
Copied 'GITHUB_TOKEN' to clipboard (auto-clears in 30s)

# Shortcut: passkey <entry> opens the picker directly
$ passkey github

Fuzzy Matching

  • Prefix: my matches myapi_read, myapi_write

  • Contains: api matches myapi_read, myapi_write

  • Sequence: gh matches github

  • Case-insensitive: GITHUB matches github

CLI Reference

Entry Management

Command

Description

passkey new

Create a new entry interactively

passkey list

List all entry names

passkey list --names-only

Entry names only (one per line, for scripting)

passkey edit [entry]

Modify an existing entry

passkey delete [entry]

Delete an entry (exact match required)

passkey info [entry]

Show entry metadata and field names

passkey clone SOURCE [DEST]

Clone an entry under a new name

passkey set-field ENTRY FIELD [VALUE]

Upsert a single field

Retrieving Secrets

Command

Description

passkey get [entry]

Interactive field picker — select a field to copy

passkey get [entry] --all

Copy all fields to clipboard

passkey <entry>

Shortcut: same as passkey get <entry>

Running Commands

# Run with secrets from one entry
passkey run github -- python app.py

# Run with secrets from multiple entries (later entries override)
passkey run aws github -- python deploy.py

# Secrets injected as env vars
passkey run myapi -- curl -H "Authorization: Bearer $API_TOKEN" https://api.example.com/v1/data

Tool Integration

# Scan configs and migrate plaintext secrets to keychain
passkey init                    # Auto-detect all tools
passkey init --tool claude      # Specific tool
passkey init --tool vscode

# Restore wrapped configs back to inline commands (the way out)
passkey unwrap                  # Auto-detect all tools
passkey unwrap --dry-run        # Preview first

# Add or update credentials for an MCP server
passkey add my-server                            # Interactive field entry
passkey add my-server --tool claude              # Target a specific tool config
passkey add my-server API_KEY=abc TOKEN=xyz      # Non-interactive (KEY=VALUE)

# Show security status across all tools
passkey status

# Run diagnostics
passkey doctor

# List MCP servers across tools
passkey servers

Supported tools: claude, claude_desktop, gemini, vscode, cursor, opencode, windsurf, cline, zed

Export and Backup

# Export all entries to file (owner-only permissions set automatically)
passkey export backup.json

# Export specific entries
passkey export backup.json --entries github openai

# Export metadata only (no secret values)
passkey export backup.json --no-secrets

# Encrypted export (AES-256-GCM + scrypt)
passkey export backup.passkey.enc --encrypt

Import

# Import from passkey backup
passkey import backup.json

# Preview without importing
passkey import backup.json --dry-run

# Handle duplicates: skip (default), overwrite, merge
passkey import backup.json --mode merge

# Import from encrypted bundle
passkey import backup.passkey.enc --decrypt

# Import from Chrome password export (CSV)
passkey import passwords.csv --filter github.com

# Import from an existing MCP config file
passkey import claude_desktop_config.json

Audit Log

passkey audit              # View recent operations
passkey audit --limit 50   # Show more entries
passkey audit --clear      # Clear the log
passkey audit --summary    # Aggregate statistics

Verify Entry Health

# Exit non-zero if any required fields are missing
passkey check github GITHUB_TOKEN GITHUB_USERNAME

Generate Secrets

# Generate a 32-char random secret (default)
passkey generate

# Generate with custom length
passkey generate --length 64

# Generate without auto-copying to clipboard
passkey generate --no-copy

Credential Templates

# List built-in templates
passkey template list

# Show a template's fields
passkey template show github

# Apply a template to create a new entry
passkey template apply github

# Save a custom template from an existing entry
passkey template add my-service --from myapi

Share & Receive

# Share an entry (generates encrypted file + passphrase)
passkey share github --output github-shared.passkey

# Receive a shared entry
passkey receive github-shared.passkey

Lifecycle Management

# Mark an entry as rotated (updates last_rotated timestamp)
passkey rotate github

# Run expanded diagnostics
passkey doctor --deep

Authentication

The primary protection for your secrets is the OS keychain's own access control — macOS Keychain, Windows Credential Manager, and Linux Secret Service all gate access per application and may show their own unlock prompts. Passkey relies on that by default, so wrapped MCP servers can start headless (no terminal, no password prompt).

If you want an additional OS-auth prompt for interactive terminal commands (get, new, edit, export, ...), opt in:

passkey config require-auth on

The tradeoff, explicitly:

  • Off (default): Anyone with an unlocked session as your user can read secrets via passkey — same as any other tool reading your keychain (e.g. security find-generic-password). MCP servers work everywhere, including stock macOS with no tty.

  • On: Interactive commands first run sudo -v (macOS, Touch ID if pam_tid is configured) or pkexec (Linux). This breaks any non-interactive use of those commands — passkey run is never gated either way, because MCP servers invoke it headless.

  • Windows: the setting is a no-op — UAC cannot authenticate the current process, so protection comes from Credential Manager ACLs alone.

Unwrapping (leaving passkey)

passkey init rewrites your MCP configs to the wrapped form — but it is not a one-way door. Restore the original inline commands with:

passkey unwrap                      # all detected tools
passkey unwrap --tool claude        # one tool
passkey unwrap --server github      # one server
passkey unwrap --restore-secrets    # also write secret values back into the config
passkey unwrap --dry-run            # preview only

A .backup of each config is written before changes (init does this too), so you can also restore by hand.

MCP Config Example

Before (insecure — secret in plaintext):

{
  "mcpServers": {
    "github": {
      "command": "python",
      "args": ["-m", "github.server"],
      "env": {
        "GITHUB_TOKEN": "ghp_PLAINTEXT_SECRET_HERE"
      }
    }
  }
}

After (secure — secret loaded from keychain at runtime):

{
  "mcpServers": {
    "github": {
      "command": "passkey",
      "args": ["run", "github", "--", "python", "-m", "github.server"]
    }
  }
}

MCP Server Mode

Passkey can run as an MCP server itself, letting AI assistants invoke passkey tools via natural language:

{
  "mcpServers": {
    "passkey": {
      "command": "passkey-mcp-server"
    }
  }
}

Available tools: passkey_list, passkey_fields, passkey_status, passkey_doctor, passkey_wrap_server.

AI assistants can discover entry names but never see secret values — secrets only flow out via passkey run.

Data Storage

Platform

Data directory

macOS

~/Library/Application Support/passkey/

Linux

~/.config/passkey/ (respects $XDG_CONFIG_HOME)

Windows

%APPDATA%\passkey\

Secrets themselves are stored in the system keychain, not on disk. The data directory holds metadata (lock file, audit log).

Security

  • Encrypted at rest: System keychain handles encryption (AES-256-GCM on macOS, DPAPI on Windows)

  • No secrets logged: Only entry names and operation types appear in the audit log

  • Hidden input: getpass used for all secret entry

  • Clipboard auto-clear: Copied secrets cleared after 30 seconds

  • Secure export: Files created with chmod 600 (owner-only)

  • Encrypted bundles: AES-256-GCM + scrypt (N=2^20) for portable transfer

  • LLM-safe: AI assistants can list entries but never read values

See docs/SECURITY.md for full details.

Troubleshooting

"Failed to access Keychain" (macOS)

Grant Terminal / Python keychain access in System Settings → Privacy & Security.

Touch ID not working

Ensure pam_tid.so is configured in /etc/pam.d/sudo:

sudo sed -i '' '2i\
auth       sufficient     pam_tid.so
' /etc/pam.d/sudo

Linux headless / no keyring daemon

Set a backend explicitly:

export PYTHON_KEYRING_BACKEND=keyring.backends.SecretService.Keyring
# or for headless environments:
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring

Entry not found

passkey list   # check exact names (case-sensitive)

Import shows "skipped (exists)"

passkey import backup.json --mode merge

Development

pip install -e ".[dev]"
pytest tests/ -v
ruff check passkey/

License

MIT — see LICENSE

Available Tools

5 tools
passkey_doctorA

Run diagnostics on passkey and MCP configurations.

Checks for common issues including:

  • Config file existence and validity for all detected tools

  • Passkey command availability in PATH

  • Keychain access permissions

  • MCP servers with missing passkey entries

  • MCP servers with exposed secrets

  • (deep=True) entry age analysis and bundle file permissions

Args: deep: Include extended checks (entry age, bundle permissions)

Returns: Dictionary with diagnostic results

ParametersJSON Schema
NameRequiredDescriptionDefault
deepNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does enumerate the diagnostic checks performed and states the return type, which is useful. However, it does not explicitly state whether the tool is read-only or whether it requires special permissions, leaving some ambiguity about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening line, bulleted list of checks, and separate Args/Returns sections. It is somewhat redundant (the deep parameter is mentioned twice) but remains efficient and readable, with no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single optional parameter and no output schema, the description covers the main tool purpose, the specific checks performed, the parameter semantics, and the return type. It lacks detail on error conditions or how to interpret the results dictionary, but overall it provides solid context for a diagnostic tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the sole parameter `deep` both in the bullet list ('(deep=True) entry age analysis and bundle file permissions') and in the Args section ('deep: Include extended checks'). This adds meaningful context beyond the bare boolean schema, though it could be slightly more detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Run diagnostics on passkey and MCP configurations' with a specific verb and resource, and lists distinct checks (config file validity, command availability, keychain permissions, MCP server issues). This differentiates it from sibling tools like passkey_list, passkey_fields, passkey_status, and passkey_wrap_server, which focus on other operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (when you need to diagnose passkey/MCP configuration issues) by enumerating the common issues it checks. However, it does not explicitly state when not to use it or name alternative tools, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

passkey_fieldsA

List field names in a passkey entry (without revealing values).

Returns the names of secret fields stored in the specified entry. This allows discovering what secrets are available without exposing the actual secret values.

Args: entry_name: Name of the passkey entry (e.g., "slack")

Returns: List of field names (e.g., ["SLACK_TOKEN", "SLACK_COOKIE"])

Raises: Exception: If entry not found or keychain access fails

ParametersJSON Schema
NameRequiredDescriptionDefault
entry_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that it does not reveal secret values (a safety-related behavior), describes the return format, and documents exception conditions (entry not found, keychain access failure). This is comprehensive for a read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into Args, Returns, and Raises sections, making it easy to scan. Every sentence provides useful information, with no filler or redundancy. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers the tool's purpose, usage context, parameter meaning, return value behavior, and error conditions. With a single required parameter and an output schema, this description leaves no critical gaps for an agent to misuse the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It does so by providing a clear, contextual definition for entry_name, including an example ('slack') and a realistic return example. This adds meaningful semantic information beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List field names in a passkey entry' with a specific verb and resource, and also emphasizes the key behavior of not revealing values. This distinguishes it from sibling tools like passkey_list (which likely lists entries) and passkey_status (which likely checks status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that this tool is useful for 'discovering what secrets are available without exposing the actual secret values,' which implies when to use it. However, it does not explicitly state when not to use it or name alternative tools, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

passkey_listA

List all available passkey entries.

Returns the names of all secret entries stored in the system keychain. Each entry can contain multiple key-value secret pairs.

Returns: List of entry names (e.g., ["slack", "github", "aws"])

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the transparency burden. It communicates a read-only listing operation ('List', 'Returns') and adds context about the data model (multiple key-value pairs per entry), but does not mention permissions, error conditions, or empty-list behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and includes a helpful return format plus example. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the zero-parameter complexity and the presence of an output schema, the description fully covers the tool's behavior. It states the return type, provides an example, and includes relevant context about entry contents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the description does not need to explain any. The baseline for zero-parameter tools is 4, and the description correctly focuses on output rather than inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('List') and resource ('available passkey entries'). It also clarifies it returns names of secret entries from the system keychain, distinguishing it from sibling tools like passkey_fields and passkey_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when the agent needs to enumerate all passkey entries, but does not explicitly contrast with sibling tools. It provides a clear context for the operation, though no when-not or alternative guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

passkey_statusA

Show security status of MCP servers across all detected tools.

Analyzes configs for Claude, Gemini, VS Code, Cursor, OpenCode, Windsurf, Cline, and Zed to identify which MCP servers have their secrets secured via passkey and which still have credentials exposed in plaintext.

Returns: Dictionary with per-tool server status and summary counts

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of transparency. It explicitly states it 'analyzes configs for Claude, Gemini, VS Code, Cursor, OpenCode, Windsurf, Cline, and Zed,' and that it identifies 'secrets secured via passkey' versus 'credentials exposed in plaintext.' It also discloses the return structure. This provides meaningful insight beyond a simple 'status' label, though it does not mention side effects like whether it modifies configs or requires special permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is a crisp summary, followed by a short list of the analyzed tools and a 'Returns:' section. This is well-structured and front-loaded, though the tool list could arguably be condensed without losing value. Overall, every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only status tool with no parameters and no output schema, the description is quite complete: it states the purpose, the scope (which tools are covered), the kind of analysis performed (security of secrets), and the return format. It does not explain use cases or alternatives, but the core functionality is fully covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema description coverage is 100%. Per instructions, the baseline is 4 when there are no parameters. The description adds no parameter details (none exist), and no compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Show security status of MCP servers across all detected tools,' which is a specific verb+resource combination. It clearly distinguishes itself from sibling tools like passkey_list (list) and passkey_doctor (diagnostics) by focusing on security status rather than general listing or troubleshooting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given about when to use this tool versus alternatives. It does not mention passkey_doctor, passkey_list, or other siblings, nor does it state any exclusions or prerequisites. The usage context is only implied by the description of what it does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

passkey_wrap_serverA

Update MCP config files to use passkey wrapper for a server.

Prerequisites: Entry must already exist in passkey keychain.

Args: server_name: Name of the server (must match passkey entry) config_paths: Config files to update (default: all detected configs)

Returns: - configs_updated: List of updated config paths - configs_skipped: List of configs where server not found - errors: Any errors encountered

ParametersJSON Schema
NameRequiredDescriptionDefault
server_nameYes
config_pathsNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that it updates config files, returns lists of updated/skipped configs and errors, and notes the default behavior of detecting all configs. This adds transparency, though it doesn't elaborate on side effects like backup or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, starting with a one-sentence summary, then prerequisites, args, and returns. Every section adds useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has just 2 simple parameters and no output schema, and the description provides a clear return structure and prerequisite. It is complete enough for an agent to select and invoke it, though it assumes some domain knowledge about passkey wrappers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has zero descriptions, so the description must compensate. It explains server_name must match passkey entry and config_paths defaults to all detected configs, adding meaning beyond type/name. It doesn't specify path formats but adequately clarifies both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Update MCP config files to use passkey wrapper for a server,' which is a specific verb+resource and clearly distinguishes from siblings like passkey_list or passkey_status. It clarifies the tool's unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the prerequisite that the entry must exist in passkey keychain, giving context on when to use. However, it does not explicitly name alternatives or exclusions, so it stops short of full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.3.0
    • First observedpasskey_doctor
    • First observedpasskey_fields
    • First observedpasskey_list
    • First observedpasskey_status
    • First observedpasskey_wrap_server

TDQS

A4.2/5.0
Disambiguation4/5

Each tool has a distinct role: listing entries, exploring fields, showing status, running diagnostics, and updating configs. passkey_status and passkey_doctor both touch on security posture, but descriptions clarify that one is a quick status check while the other is a detailed diagnostic. No two tools are truly interchangeable.

Naming Consistency4/5

All tools share the passkey_ prefix, making the set cohesive. However, the suffix pattern is mixed: passkey_list is verb-like, while passkey_fields, passkey_status, and passkey_doctor are noun-like, and passkey_wrap_server is verb_noun. The prefix provides enough consistency that the naming is still predictable.

Tool Count5/5

Five tools is a well-scoped set for the domain of passkey management for MCP servers. Each tool addresses a clear need without redundancy or bloat, and the count is solidly within the ideal 3-15 range.

Completeness4/5

The tool surface covers the key workflows: discovering entries, inspecting fields, assessing security status, diagnosing issues, and applying the wrapper. Missing operations like creating or deleting passkey entries are likely out of scope since passkey itself manages those. The only minor gap is the lack of an 'unwrap' or 'revert' operation, but the core purpose is well covered.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    A GitHub-native secrets manager that allows AI assistants to securely manage, generate, and validate credentials without exposing sensitive values in conversation history. It supports secret scanning, environment diffing, and secure command execution by injecting masked variables directly into the runtime environment.
    8
    8
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Local, encrypted credential vault for AI agents that enables secure multi-account management across services like Supabase, GitHub, Vercel, and Stripe, allowing seamless account switching without restarting the chat client.
    11
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to securely manage API keys and secrets via the MCP protocol, with encrypted storage at rest and a simple CLI and Python SDK.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Encrypts and stores API keys and environment variables locally, providing them to AI agents via MCP with tools for listing, describing, getting secrets, and running commands with secret values redacted.
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheNickSanchez/passkey-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server