Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Local MCP access to Unix pass/GPG with read-only defaults, path scopes, and TOTP.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
PASS_MCP_ALLOWED_PATHS, PASSWORD_STORE_DIRต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"unix-pass": {
"command": "uvx",
"args": [
"unix-pass-mcp"
],
"env": {
"PASS_MCP_ALLOWED_PATHS": "ใส่ค่าของคุณ",
"PASSWORD_STORE_DIR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add unix-pass --env PASS_MCP_ALLOWED_PATHS='ใส่ค่าของคุณ' --env PASSWORD_STORE_DIR='ใส่ค่าของคุณ' -- uvx unix-pass-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"unix-pass": {
"command": "uvx",
"args": [
"unix-pass-mcp"
],
"env": {
"PASS_MCP_ALLOWED_PATHS": "ใส่ค่าของคุณ",
"PASSWORD_STORE_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"unix-pass": {
"type": "stdio",
"command": "uvx",
"args": [
"unix-pass-mcp"
],
"env": {
"PASS_MCP_ALLOWED_PATHS": "ใส่ค่าของคุณ",
"PASSWORD_STORE_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
PASS_MCP_ALLOWED_PATHS envPASSWORD_STORE_DIR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 9 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Neanderthal ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.2.1) เข้า registry 5 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Systemdox
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Your architecture in your agents' context: checks, specs, ADRs and docs over MCP, at write time.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
██╗ ██╗███╗ ██╗██╗██╗ ██╗ ██████╗ █████╗ ███████╗███████╗ ███╗ ███╗ ██████╗██████╗
██║ ██║████╗ ██║██║╚██╗██╔╝ ██╔══██╗██╔══██╗██╔════╝██╔════╝ ████╗ ████║██╔════╝██╔══██╗ ██║ ██║██╔██╗ ██║██║ ╚███╔╝ ██████╔╝███████║███████╗███████╗ ██╔████╔██║██║ ██████╔╝ ██║ ██║██║╚██╗██║██║ ██╔██╗ ██╔═══╝ ██╔══██║╚════██║╚════██║ ██║╚██╔╝██║██║ ██╔═══╝ ╚██████╔╝██║ ╚████║██║██╔╝ ██╗ ██║ ██║ ██║███████║███████║ ██║ ╚═╝ ██║╚██████╗██║ ╚═════╝ ╚═╝ ╚═══╝╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═════╝╚═╝
Connect your existing Unix [`pass`](https://www.passwordstore.org/)/GPG store to AI tools.
Read-only by default. Writes, key administration, and network ops behind explicit env opt-ins. Single-chokepoint subprocess. Strict input validation. No shell, no clipboard, no secrets in logs.
Status — M5 complete. Read · safe-write · key administration · TOTP/OTP · git · hardening surfaces all shipped.
24 tools with unit, real-GPG integration, and stdio protocol regression suites.
See installation examples, the demo, and
release/publishing instructions.
83-second MP4 · How it was recorded
Trying the beta? Report installation feedback. Launch status tracks package and directory publication separately.
pass is a thin wrapper around gpg(1) and the filesystem. Anything that can shell out can use it — but exposing it raw to an LLM is a recipe for rm -rf regret. This server provides:
pass.See .claude/rules/architecture.md for the full design and security model.
Requires Python 3.11+, uv, pass, GnuPG, and an initialized store. Install the published PyPI release:
claude mcp add unix-pass -e 'PASS_MCP_ALLOWED_PATHS=web/*' -- \
uvx --from unix-pass-mcp==0.2.1 unix-pass-mcp
Copy-paste configurations: Codex, Claude Code, Claude Desktop. For source-checkout development and other client setup details, see installation.
That gets you the read-only surface. To enable mutations:
PASS_MCP_ALLOW_WRITES=1 \
PASS_MCP_ALLOWED_PATHS=web/* \ uv run unix-pass-mcp
| Component | Why | Notes |
|---|---|---|
| Python ≥ 3.11 | Runtime | 3.11 / 3.12 / 3.13 tested in CI |
pass on PATH | The wrapped binary | pass --version must work |
gpg (GnuPG ≥ 2.2) on PATH | Decryption | Used directly only by unlock_agent |
gpg-agent | Passphrase caching | The server probes gpg-connect-agent /bye at startup and refuses to decrypt if no agent is reachable. Started automatically by GnuPG on first use. |
| A configured GPG key | Required for decryption / pass init | Must have its trust level set to "ultimate" — see Arch wiki |
| An initialized password store | The thing being managed | pass init if you don't have one |
The server can never serve an interactive passphrase prompt itself — pass/gpg will hang. You need one of:
~/.gnupg/gpg-agent.conf — pinentry-gnome3, pinentry-qt, pinentry-qt5, or pinentry-gtk-2. The first decrypt of each cache window pops a desktop dialog. *Recommended.*unlock_agent MCP tool once per cache window to warm gpg-agent. Use this if you can't change gpg-agent.conf.pass show in a real terminal before talking to the MCP. Cache expires per default-cache-ttl (default 600s).# Arch / Manjaro
sudo pacman -S pass gnupg pinentry zenity # zenity optional, for unlock_agent
sudo apt install pass gnupg pinentry-gnome3 zenity
sudo dnf install pass gnupg2 pinentry-gnome3 zenity
brew install pass gnupg pinentry-mac
| Component | Enables |
|---|---|
pass-otp | Cross-tool compatibility for otp (the server has a native RFC 6238 implementation, no runtime dependency) |
git | Auto-commit on writes if your store is a git repo, plus git_status / git_log / git_pull / git_push |
| Component | Why |
|---|---|
uv | Recommended installer / runner |
gpg with key-generation support | Integration tests mint throwaway keys in an ephemeral GNUPGHOME |
uv sync --locked --extra dev # for development
uv pip install . # for use
Add to ~/.config/Claude/claude_desktop_config.json (or the platform equivalent):
{
"mcpServers": { "pass": { "command": "uv", "args": ["run", "--directory", "/absolute/path/to/unix-pass-mcp", "unix-pass-mcp"], "env": { "PASSWORD_STORE_DIR": "/home/you/.password-store" } } } }
# Read-only
claude mcp add pass -- uv run --directory /absolute/path/to/unix-pass-mcp unix-pass-mcp
claude mcp add pass -s user \ -e PASS_MCP_ALLOW_WRITES=1 \ -e PASS_MCP_ALLOWED_PATHS='web/*' \ -- uv run --directory /absolute/path/to/unix-pass-mcp unix-pass-mcp
Each -e KEY=VALUE flag sets one env var on the spawned server. To change env on an existing server, claude mcp remove pass -s user then re-add — the CLI has no in-place edit. Verify with claude mcp get pass.
For account creation / profile filling workflows that combine unix-pass-mcp with a browser-controlling MCP, load .claude/rules/agent-workflow.md into the agent's system prompt. It defines the canonical naming convention (web/ / ), body format, and signup/login/rotation loops.
24 tools, grouped by capability gate.
| Tool | Description |
|---|---|
store_info | Inspect the store: path, recipients per subdir, git/agent/pinentry/signing status, warnings. No decryption. |
list | List pass-names (optionally scoped to a subfolder). No decryption. |
find | Substring search over leaf names. No decryption. |
show | Decrypt and return one line of an entry (default = line 1 = password). Marked sensitive. |
show_field | Decrypt and return one named metadata field (URL, Username, otpauth, …). Case-insensitive. |
show_metadata | Decrypt and return only the entry shape (field names, password presence, and line count). Password value is never returned. |
unlock_agent | Pop a desktop password dialog (zenity/kdialog) and warm gpg-agent's cache via loopback pinentry. Optional target for multi-recipient stores — pass an explicit pass-name if a no-arg call returns wrong_passphrase_or_decrypt_failed, which can happen on legacy stores where the smallest entry is encrypted to a rotated subkey. The LLM never sees the passphrase. |
grep | Search inside the decrypted body of permitted entries. Slow + costly (decrypts permitted entries) — requires confirm_decrypt_all=true. Marked sensitive. Honours PASS_MCP_ALLOWED_PATHS. |
otp | Compute the current TOTP code from an entry's otpauth:// line. Returns code + seconds_remaining. Marked sensitive. Native RFC 6238 — no pass-otp runtime dependency. |
otp_uri | Return the raw otpauth:// URI (contains the secret). Use only when re-enrolling the same secret elsewhere. |
PASS_MCP_ALLOW_WRITES=1| Tool | Description |
|---|---|
insert | Create or overwrite a single-line entry. Password via stdin (never argv). Refuses overwrite without force=true. |
insert_multiline | Create or overwrite a full-body entry (line 1 = password, rest = Key: value metadata). |
set_field | Update one Key: value field; preserves password and other lines. simulate=true returns the would-be body without writing. |
unset_field | Remove all lines matching a field key (case-insensitive). No-op if absent. simulate=true for dry-run. |
generate | Generate a new password (length 1–1024, optional no_symbols). in_place=true keeps metadata; force=true overwrites everything. Returns the generated value (sensitive). |
mv | Rename or move an entry/subfolder. Re-encrypts to the destination subfolder's recipients if they differ. |
cp | Copy an entry/subfolder, with the same re-encryption semantics. |
otp_set | Append or replace the otpauth:// URI on an existing entry. Validates the URI before writing. |
git_status and git_log always; git_pull and git_push need PASS_MCP_ALLOW_NETWORK=1| Tool | Description |
|---|---|
git_status | Structured status: {clean, branch, upstream, ahead, behind, dirty_files}. Refuses if the store isn't a git repo. |
git_log | Recent commits as [{hash, subject}, …]. limit defaults to 20 (max 200). |
git_pull | git pull --ff-only — refuses divergence, no merge commits, no rebase. |
git_push | git push — never --force. |
PASS_MCP_ALLOW_DESTRUCTIVE=1| Tool | Description |
|---|---|
init | Initialize the store (or a subfolder) with new GPG recipients. Re-encrypts every entry in scope. Refuses if the user has no secret key for any of the new recipients, unless force=true. Empty gpg_ids list removes a subfolder's .gpg-id. |
reencrypt | Re-run init with the *current* recipients. Useful after subkey rotation. No-op when recipients haven't changed. |
Full machine-readable surface — every arg, every error code — lives in
.claude/rules/api.md.
Server-specific env vars:
| Var | Default | Effect |
|---|---|---|
PASS_MCP_ALLOW_WRITES | unset | Required for any mutating tool |
PASS_MCP_ALLOW_DESTRUCTIVE | unset | Required for init / reencrypt |
PASS_MCP_ALLOW_NETWORK | unset | Required for git_pull / git_push |
PASS_MCP_ALLOW_UNSAFE | unset | Bypass strict startup checks (world-readable store, weak umask). Don't. |
| PASS_MCP_ALLOWED_PATHS | unset (= all) | C
ตัดมาแค่ช่วงต้น อ่านต่อใน repo