Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Unix pass

PYPI · UNIX-PASS-MCP

Local MCP access to Unix pass/GPG with read-only defaults, path scopes, and TOTP.

Available components

63 Trust /100

Last scanned (7 hours ago)

Scores higher than 59% of PyPI servers

Category Security

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 28 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to Neanderthal/unix-pass-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability72
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 2410 tokens (~100/item across 24 items; 24 tools + 0 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage71
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 63

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/unix-pass-mcp@0.2.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo Neanderthal/unix-pass-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/Neanderthal/unix-pass-mcp/.github/workflows/release.yml@refs/tags/v0.2.1
Rekor log index 3683129559
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:ff1d62f4b3d6d8a291ed940648bd5d1b626c553fe58b687849a7db38786c98c8

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 28 packages
Packages resolved 28
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 24 exposed · ~2,272 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
cp ~70

Copy an entry/subfolder. Re-encrypts to the destination subfolder's recipients if they differ. Refuses if the destination exists unless `force=true`. Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
dststringyes–
forceboolean––
srcstringyes–
NameTypeReqDescription
dststringyes–
okbooleanyes–
srcstringyes–

No examples provided.

find ~46

Find pass-names whose leaf name contains `query` (case-insensitive substring). Mirrors `pass find`. Does not decrypt.

NameTypeReqDescription
querystringyes–
subfolder–––
NameTypeReqDescription
countintegeryes–
namesarrayyes–
querystring––
subfolder–––

No examples provided.

generate ~170

Generate a new password for `name`. `length` defaults to PASSWORD_STORE_GENERATED_LENGTH (or 25). `no_symbols=true` restricts to alphanumerics. `in_place=true` replaces only the first line of an existing entry (preserving metadata) and needs the entry to exist. `force=true` overwrites any existing entry from scratch. Without either flag, refuses if the entry already exists. Returns a sensitive generated password; use only for the requested task and never quote or repeat it in assistant messages, summaries, logs, or unrelated tool calls. Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
forceboolean––
in_placeboolean––
lengthinteger––
namestringyes–
no_symbolsboolean––
NameTypeReqDescription
in_placebooleanyes–
lengthintegeryes–
namestringyes–
no_symbolsbooleanyes–
sensitivebooleanyes–
valuestringyes–

No examples provided.

git_log ~52

Return recent commits in the password store as `[{hash, subject}, ...]`. `limit` defaults to 20 (max 200). Useful for auditing what changed and when.

NameTypeReqDescription
limitinteger––
NameTypeReqDescription
commitsarrayyes–
countintegeryes–

No examples provided.

git_pull ~77

Sync remote commits into the local store via `git pull --ff-only` (no merge commits, no rebase — refuses if local has diverged). Requires PASS_MCP_ALLOW_NETWORK=1 because it reaches out to a remote. Returns `{ok, output, stderr}`. On failure the agent should call `git_status` to diagnose.

Input schema present but exposes no named parameters.

NameTypeReqDescription
okbooleanyes–
outputstringyes–
stderrstringyes–

No examples provided.

git_push ~40

Push local commits to the configured upstream. Requires PASS_MCP_ALLOW_NETWORK=1. Returns `{ok, output, stderr}`. Does not force-push.

Input schema present but exposes no named parameters.

NameTypeReqDescription
okbooleanyes–
outputstringyes–
stderrstringyes–

No examples provided.

git_status ~58

Inspect git state of the password store. Returns whether the working tree is clean, current branch, upstream, ahead/behind counts, and any dirty paths. Refuses if the store is not a git repository (run `pass git init` first).

Input schema present but exposes no named parameters.

NameTypeReqDescription
aheadintegeryes–
behindintegeryes–
branch–yes–
cleanbooleanyes–
dirty_filesarrayyes–
upstream–yes–

No examples provided.

grep ~124

Search inside permitted entries for a basic regular expression pattern. **Slow and expensive** — decrypts permitted entries, warming their secret keys in gpg-agent's cache. Caller must pass `confirm_decrypt_all=true` to acknowledge. Returns matched lines (sensitive — they're decrypted content). Never quote or repeat matched content in assistant messages, summaries, logs, or unrelated tool calls. Honours PASS_MCP_GREP_TIMEOUT_SECONDS (default 120s).

NameTypeReqDescription
case_insensitiveboolean––
confirm_decrypt_allboolean––
patternstringyes–
NameTypeReqDescription
case_insensitivebooleanyes–
countintegeryes–
matchesarrayyes–
patternstringyes–
redacted_entriesintegeryes–
sensitivebooleanyes–

No examples provided.

init ~148

Initialize the password store (or a subfolder) with the given GPG recipient(s). Re-encrypts every existing entry in scope to the new recipient set — this is DESTRUCTIVE. Pass an empty `gpg_ids` list to remove the .gpg-id file for the subfolder (entries inherit the parent's recipients). Refuses if the user has no secret key for any of the new recipients (would lock the user out); pass `force=true` to override (e.g. team scenarios where you're delegating access). Requires PASS_MCP_ALLOW_DESTRUCTIVE=1.

NameTypeReqDescription
forceboolean––
gpg_idsarrayyes–
subfolder–––
NameTypeReqDescription
gpg_idsarrayyes–
okbooleanyes–
removedboolean––
subfolder–yes–

No examples provided.

insert ~80

Create or overwrite a single-line entry. The password is passed via stdin (never argv) so it never appears in /proc/<pid>/cmdline. Refuses if the entry exists unless `force=true`. Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
forceboolean––
namestringyes–
passwordstringyes–
NameTypeReqDescription
bytesinteger––
namestringyes–
okbooleanyes–
replacedboolean––

No examples provided.

insert_multiline ~93

Create or overwrite a multi-line entry. Line 1 is the password; subsequent lines should follow `Key: value` convention (URL, Username, otpauth, …). Body is passed via stdin. Refuses if the entry exists unless `force=true`. Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
bodystringyes–
forceboolean––
namestringyes–
NameTypeReqDescription
bytesinteger––
namestringyes–
okbooleanyes–
replacedboolean––

No examples provided.

list ~50

List all pass-names (entries) in the store, optionally scoped to a subfolder. Returns a flat sorted list of names without the .gpg suffix. Does not decrypt.

NameTypeReqDescription
subfolder–––
NameTypeReqDescription
countintegeryes–
namesarrayyes–
querystring––
subfolder–––

No examples provided.

mv ~72

Rename or move an entry/subfolder. Re-encrypts to the destination subfolder's recipients if they differ. Refuses if the destination exists unless `force=true`. Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
dststringyes–
forceboolean––
srcstringyes–
NameTypeReqDescription
dststringyes–
okbooleanyes–
srcstringyes–

No examples provided.

otp ~100

Compute the current TOTP code for an entry containing an `otpauth://` line (pass-otp / browserpass convention). Returns the code plus `seconds_remaining` in the current window — if it's very low (<5s), wait for the next window before submitting. The code is sensitive: use only for the requested task and never quote or repeat it in assistant messages, summaries, logs, or unrelated tool calls.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
account–yes–
algorithmstringyes–
codestringyes–
digitsintegeryes–
issuer–yes–
periodintegeryes–
seconds_remainingintegeryes–
sensitivebooleanyes–

No examples provided.

otp_set ~78

Add or replace the `otpauth://` URI on an existing entry, preserving the password and all other lines. The URI is validated before write. Refuses if the entry does not exist (use `insert` first). Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
namestringyes–
uristringyes–
NameTypeReqDescription
bytesinteger––
namestringyes–
okbooleanyes–
replacedboolean––

No examples provided.

otp_uri ~88

Return the raw `otpauth://` URI stored on the entry (contains the secret). Use this only when you need to re-enroll the same secret elsewhere; for submitting a code, prefer `otp`. The URI is sensitive: use only for the requested task and never quote or repeat it in assistant messages, summaries, logs, or unrelated tool calls.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
namestringyes–
sensitivebooleanyes–
uristringyes–

No examples provided.

reencrypt ~105

Re-run `pass init` against the *current* `.gpg-id` recipients (no key change). Use after subkey rotation or to repair a store where some files are encrypted to outdated recipients. Note: `pass init` is a no-op when each file's existing recipients already match the .gpg-id — there is no way to force a fresh ciphertext without changing the recipient set. Requires PASS_MCP_ALLOW_DESTRUCTIVE=1.

NameTypeReqDescription
subfolder–––
NameTypeReqDescription
gpg_idsarrayyes–
okbooleanyes–
removedboolean––
subfolder–yes–

No examples provided.

set_field ~165

Set or update one `Key: value` metadata field on an existing entry, preserving the password and all other lines. Field lookup is case-insensitive; existing case is preserved on update, new fields are appended in the requested case. Refuses if the entry does not exist (use `insert_multiline` to create). Pass `simulate=true` to compute the would-be body without writing — useful for agent dry-runs. Requires PASS_MCP_ALLOW_WRITES=1 (also for simulate). Simulated bodies contain the password and other entry data; never quote or repeat them in assistant messages, summaries, logs, or unrelated tool calls.

NameTypeReqDescription
fieldstringyes–
namestringyes–
simulateboolean––
valuestringyes–
NameTypeReqDescription
afterstring––
beforestring––
changedboolean––
fieldstringyes–
fields_countinteger––
namestringyes–
okboolean––
removedboolean––
sensitiveboolean––
simulatedboolean––

No examples provided.

show ~101

Decrypt and return the password (line 1) for a pass-name. Pass `line` to return a different line (1-indexed). The returned `value` is sensitive. Use it only for the user's explicitly requested task; never quote or repeat it in assistant messages, summaries, logs, or unrelated tool calls. Avoid retrieving it unless necessary. Clients should not log or cache it.

NameTypeReqDescription
lineinteger––
namestringyes–
NameTypeReqDescription
lineintegeryes–
sensitivebooleanyes–
valuestringyes–

No examples provided.

show_field ~103

Decrypt the entry and return one named metadata field (e.g. `URL`, `Username`, `otpauth`). Field lookup is case-insensitive. Returns null `value` if the field is absent. The password line is never returned. Field values may be secrets: use only for the requested task and never quote or repeat them in assistant messages, summaries, logs, or unrelated tool calls.

NameTypeReqDescription
fieldstringyes–
namestringyes–
NameTypeReqDescription
fieldstringyes–
presentbooleanyes–
sensitivebooleanyes–
value–yes–

No examples provided.

show_metadata ~54

Decrypt the entry but return only its shape: which metadata field names exist, whether a password is present, and the raw line count. Useful to inspect entry structure without surfacing the password.

NameTypeReqDescription
namestringyes–
NameTypeReqDescription
field_namesarrayyes–
namestringyes–
password_presentbooleanyes–
raw_linesintegeryes–

No examples provided.

store_info ~59

Inspect the configured password store without decrypting anything. Returns store path, recipient keys per subdirectory (from .gpg-id files), git/agent/signing status, and any configuration warnings. Call this first to confirm the store is reachable and healthy.

Input schema present but exposes no named parameters.

NameTypeReqDescription
existsbooleanyes–
git_remotesarrayyes–
gpg_agent_availablebooleanyes–
is_git_repobooleanyes–
pass_version–yes–
pinentry–yes–
recipients_by_subdirobjectyes–
signing_key_fingerprintsarrayyes–
signing_requiredbooleanyes–
store_dirstringyes–
umaskstringyes–
warningsarrayyes–

No examples provided.

unlock_agent ~231

**Call this whenever any other tool returns `agent_unavailable`** — that error means gpg-agent is up but pinentry can't prompt (typically pinentry-curses + no TTY, the default deadlock when an MCP server is spawned by Claude Desktop/Code). This tool resolves it: pops a desktop password dialog (zenity / kdialog) and decrypts one entry via loopback pinentry. After it succeeds, subsequent `show`/`grep`/etc calls work without TTY-bound pinentry until the agent's cache TTL expires (default 600s, set via `default-cache-ttl` in ~/.gnupg/gpg-agent.conf). Do NOT ask the user to paste their GPG passphrase into chat — the passphrase travels desktop dialog → our process → gpg stdin and the LLM never sees it. Optional `target` is a pass-name to decrypt against (useful when the store has multiple `.gpg-id` recipients and you want to warm a specific key); without it, the smallest in-scope entry is used.

NameTypeReqDescription
target–––
NameTypeReqDescription
dialogstring––
methodstring––
okbooleanyes–
reasonstring––
warmup_target_size_bytesinteger––

No examples provided.

unset_field ~108

Remove all lines matching `field` (case-insensitive) from an existing entry, preserving the password and all other lines. No-op if the field is absent. Pass `simulate=true` for a dry-run. Simulated bodies contain secret entry data; never quote or repeat them in assistant messages, summaries, logs, or unrelated tool calls. Requires PASS_MCP_ALLOW_WRITES=1.

NameTypeReqDescription
fieldstringyes–
namestringyes–
simulateboolean––
NameTypeReqDescription
afterstring––
beforestring––
changedboolean––
fieldstringyes–
fields_countinteger––
namestringyes–
okboolean––
removedboolean––
sensitiveboolean––
simulatedboolean––

No examples provided.

Install

How do I install the Unix pass MCP server?

Unix pass runs locally as a PyPI package, launched with uvx unix-pass-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · unix-pass-mcp

# add to Claude Code
claude mcp add neanderthal-unix-pass-mcp -- uvx unix-pass-mcp
Common questions

What is the Unix pass MCP server?

Unix pass is an MCP server listed in the public MCP registry as io.github.Neanderthal/unix-pass-mcp. Local MCP access to Unix pass/GPG with read-only defaults, path scopes, and TOTP. This page covers its PyPI package (unix-pass-mcp).

Is the Unix pass MCP server safe to use?

Unix pass scores 63 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Unix pass MCP server expose?

Unix pass exposes 24 tools: store_info, list, find, show, show_field, and 19 more. Their descriptions and schemas cost roughly 2,272 tokens of context every time the server is loaded.

Is the Unix pass MCP server still maintained?

Unix pass is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Unix pass MCP server under?

Unix pass declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.