Clipboard History MCP

io.github.d-khomenko由 GitHub 帳號 d-khomenko 發布v0.5.0-alpha.0更新於 Oct 24, 2026

Your clipboard, but Claude can read it. Type-classified, secret-encrypted. macOS + Linux.

已驗證STDIO僅桌面效率與工作流安全與監控

概覽

AI 產生的概覽

在本機執行的 macOS/Linux 剪貼簿歷史伺服器,讓助理搜尋、篩選、還原與管理歷史剪貼內容,機密資訊加密並需生物辨識解鎖。

可以做什麼
依類型、來源應用程式、時間或釘選狀態列出、搜尋與檢視剪貼簿歷史,支援對內容與視窗標題的全文檢索,並提供統計與守護程序狀態。依類別取得內容:依主機去重的網址、依語言篩選的程式碼、帶解析結構的 JSON。檢視不含實際值的機密資訊中繼資料,並透過需填寫理由且經生物辨識驗證的解鎖操作解密單筆機密內容。將某筆內容還原到系統剪貼簿,釘選或加上標籤,刪除單筆內容,並依範圍清空歷史。
適用情境
適合工作時經常複製內容、希望助理在對話中直接查找、重複使用或還原稍早複製內容(例如網址、JSON 片段、SQL 查詢或程式碼)的情境。也適合需要具備機密資訊偵測與加密的剪貼簿擷取、而非單純歷史清單的設定。
執行需求
以本機程序在使用者機器上執行,僅限桌面端,需 macOS 13+ 或 Linux(X11,Wayland 部分支援)。可透過一鍵安裝包、Rust crate(Rust 1.95+)或原始碼建置安裝;由背景守護程序擷取內容。Linux 需要 Secret Service 實作,例如 GNOME Keyring 或 KWallet。選用環境變數可設定輪詢間隔、歷史上限、忽略的應用程式、視窗標題擷取、機密資訊處理、資料目錄與 Obsidian 儲存庫鏡像。
安裝前請注意
它會持續擷取所有複製內容,包括密碼與 API 金鑰,並保存在本機;機密資訊雖會被偵測並加密,但除非開啟偏執模式否則仍會記錄。視窗標題擷取需要輔助使用權限。忽略應用程式與機密資訊處理透過 CLIPBOARD_IGNORE_APPS、CLIPBOARD_NEVER_STORE_SECRETS 等環境變數設定。工具可還原、釘選、加標籤、刪除與清空歷史,unlock_secret 在生物辨識確認後回傳明文。選用的 Obsidian 鏡像會把非機密內容寫入儲存庫目錄。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Clipboard History MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

clipboard-history-mcp

Your clipboard, but Claude can read it. Type-classified, secret-encrypted, macOS-native.

[Power-draw comparison: a small green Daemon (idle ~1 mW solid, burst ~30 mW dashed) shares a bottom baseline and a vertical edge with a much larger red Chrome tab (Google Doc — idle ~100 mW solid, burst ~500 mW dashed). Square area is proportional to power.]

mermaid
flowchart LR  U[You ⌘C something] --> D[Rust daemon<br/>launchd-managed]  D -->|classify + encrypt| DB[(SQLite + FTS5)]  D -. non-secret clips .-> O[Obsidian vault<br/>optional]  C[Claude] -->|MCP stdio| M[15 tools]  M --> DB  M -->|Touch ID| V[Vault<br/>AES-256-GCM]

One Rust binary. No Node.js, no Swift toolchain, no other apps to install. Drag a .mcpb into Claude Desktop, done.

One process · ~1 mW idle · ~24 MB RAM. Replaces the clipboard-manager + secret-scanner + Obsidian-export stack a typical setup needs three or four background apps to assemble.

[Demo: copy a URL, a JSON snippet, code, an OpenAI key — daemon classifies each, then Claude lists them in chat and unlocks the secret behind Touch ID.]


What this gets you

You're working in Claude. You've copied 47 things today — URLs, JSON snippets, an OpenAI key from a dashboard, a SQL query from your DB tool, half a Stripe webhook payload. Now Claude can use any of them:

You: "Find that API key I copied from the OpenAI dashboard yesterday"Claude: Found 1 secret matching "OpenAI" — kind: openai_api_key,source: Safari, copied 14h ago. Last 4 chars: ab12.To reveal, call unlock_secret(id=23, reason="...").
You: "Give me all the GitHub URLs I copied"Claude: Returns 12 unique GitHub URLs deduplicated by repo,ranked by how often you pasted them back.
You: "There was a Stripe JSON config in the buffer — restore it to my clipboard"Claude: Found, restoring. ✓ ready to ⌘V.
You: "What code did I copy from ChatGPT over the last 2 hours?"Claude: 3 Python snippets, 1 SQL query, 1 shell command.
You: "Show me the screenshot I just copied"Claude: Returns a 142×120 PNG, mime image/png, captured from Preview 2 minutes ago.

Search uses SQLite FTS5 + window-title indexing — you find clips by where you copied them, not just by content.


Why nothing else does this

Maccymaccy-clipboard-mcpclipboard-history-mcp
Captures clipboard✓(reads Maccy's DB)✓
Classifies clip type (URL/JSON/code/SQL/secret)✗✗✓
Indexes window titles for context-search✗✗✓
Detects secrets at capture (252 gitleaks rules)✗✗✓
Encrypts secrets at rest with Touch ID gate✗✗✓
Standalone binary (no runtime needed)n/a✗✓ macOS + Linux
.mcpb one-click installn/a✗✓

The other ~20 clipboard-mcp repos on GitHub only read the current clipboard. None capture history.


Install

One-click — Claude Desktop

  1. Download clipboard-history-mcp.mcpb from the latest release.
  2. Claude Desktop → Settings → Extensions → "Install from file" → pick the .mcpb.
  3. Restart Claude Desktop. Ask: "List my recent clipboard URLs."

Manual — Claude Code / CLI

bash
curl -L https://github.com/d-khomenko/clipboard-history-mcp/releases/latest/download/clipboard-history-mcp.mcpb \  -o clipboard-history-mcp.mcpbunzip clipboard-history-mcp.mcpb -d ext
# register MCPclaude mcp add -s user clipboard-history -- ./ext/server/clipboard-history-mcp serve
# install background daemon (captures even when Claude is closed)./ext/server/clipboard-history-mcp install

Quick install — cargo install

If you have a Rust toolchain (Rust 1.95+) and use Claude Code:

bash
cargo install clipboard-history-mcpclipboard-history-mcp install                      # start daemonclaude mcp add -s user clipboard-history -- clipboard-history-mcp serve

This pulls a release crate from crates.io and compiles locally. Slightly slower than the .mcpb drag-and-drop above (compile takes ~2 min on Apple Silicon), but it's the cleanest path for Claude Code users — three commands and you're capturing.

From source (macOS)

Requirements: Rust 1.95+, macOS 13+.

bash
git clone https://github.com/d-khomenko/clipboard-history-mcpcd clipboard-history-mcpcargo build --release./target/release/clipboard-history-mcp install                                 # start daemonclaude mcp add -s user clipboard-history -- "$(pwd)/target/release/clipboard-history-mcp" serve

Linux (X11; Wayland partial)

Requirements: a working Secret Service implementation (GNOME Keyring or KWallet — comes with most desktop installs), xvfb not required for normal use (only for headless CI).

bash
git clone https://github.com/d-khomenko/clipboard-history-mcpcd clipboard-history-mcpcargo build --release
# Set a master password (used to wrap your AES master key)./target/release/clipboard-history-mcp migrate-v2
# Install systemd user service./target/release/clipboard-history-mcp install# Optional: keep daemon running after logout./target/release/clipboard-history-mcp install --linger
# Register with Claude Codeclaude mcp add -s user clipboard-history -- "$(pwd)/target/release/clipboard-history-mcp" serve

Wayland note: clipboard read/write works on Wayland via arboard's portal handling. Window-title capture (opt-in via CLIPBOARD_CAPTURE_WINDOW_TITLE=1) currently only works on X11; Wayland support is deferred to v0.4.x once xdg-desktop-portal window-title APIs are widely shipped.

1Password / Bitwarden: add app names to CLIPBOARD_IGNORE_APPS so password-manager paste events are skipped:

bash
CLIPBOARD_IGNORE_APPS="1Password,Bitwarden,KeePassXC" \  ./target/release/clipboard-history-mcp install

Auto-mirror to Obsidian vault (optional)

If you also use Obsidian, the daemon can write a sidecar .md for every captured clip plus a daily-note timeline entry. Configure at install time:

bash
clipboard-history-mcp install --vault ~/Documents/Obsidian/MyVault

Result: every non-secret clip lands as <vault>/clipboard/YYYY-MM/<id>-<kind>-<slug>.md with frontmatter (kind, source, captured-at), and a bullet appended to <vault>/daily/YYYY-MM-DD.md linking back to the sidecar. Secrets are never mirrored — they stay encrypted in the SQLite vault.

The daemon owns the ## Clipboard captures H2 section in your daily notes — append-only, idempotent. You can write anything else above or below it.


Try asking Claude

Copy any of these prompts into Claude after install:

List my last 20 clipboard entries.
Show me only the URLs I've copied today.
Search my clipboard history for "anthropic".
Find any code snippets in Python from the last 3 hours.
How many secrets are in my clipboard vault, by kind?
Pin the JSON I just copied — I'll need it again.
Show me only my pinned clips.
What apps did I copy from most this week?
Restore that GitHub PR link to my clipboard.

Claude picks the right tool from 15 available and answers directly.


Configuration

Set env vars in the launchd plist (install writes them) or via claude mcp add --env KEY=val:

VariableDefaultWhat it does
CLIPBOARD_POLL_MS1500Watcher poll interval (ms)
CLIPBOARD_HISTORY_MAX1000Ring-buffer size (unpinned clips only — pinned items sit outside the ring buffer)
CLIPBOARD_CAPTURE_WINDOW_TITLE0Capture window titles (needs Accessibility permission)
CLIPBOARD_IGNORE_APPS(empty)Comma-separated app display names to skip
CLIPBOARD_NEVER_STORE_SECRETS0Paranoid mode — metadata only, no ciphertext
CLIPBOARD_DATA_DIR~/Library/Application Support/clipboard-history-mcpOverride data dir
CLIPBOARD_VAULT_PATH(empty)Auto-mirror non-secret clips to this Obsidian vault directory (sidecar .md per clip + bullet in daily/YYYY-MM-DD.md). Set via --vault PATH at install time.
CLIPBOARD_MAX_BLOB_BYTES26214400 (25 MB)Skip image / file pasteboards larger than this. Logs a WARN line with the source app + size.

Tools (15)

Read

list_history(limit?, kind?, source_app?, since?, pinned_only?)Paginated history, newest first. pinned_only=true returns only pinned clips.
get_item(id)Single clip by id
search_history(query, limit?)FTS5 BM25 across preview + window title
get_urls(limit?)URL clips, deduped by hostname
get_code(language?, limit?)Code clips, optional language filter
get_json(limit?)JSON clips with parsed structure
get_secrets_index(kind?)Secret metadata — no values
unlock_secret(id, reason)Decrypt one secret — gated by Touch ID
get_statsCounts by kind, oldest/newest, db size
daemon_statusPID, running state

Write

copy_item(id)Restore a clip back to system clipboard
pin_item(id, pinned)Pin so it survives clear_history
tag_item(id, tag, remove?)Free-form tagging
delete_item(id)Hard delete
clear_history(scope)'all' | 'older_than_days:N' | 'kind:K'

CLI

clipboard-history-mcp daemon         # run watcher (managed by launchd)clipboard-history-mcp serve          # MCP stdio server (Claude spawns this)clipboard-history-mcp install [--window-titles]clipboard-history-mcp uninstall [--keep-data]clipboard-history-mcp status         # JSON: daemon pid, db size, etc.clipboard-history-mcp vault list     # secret metadataclipboard-history-mcp vault unlock N # decrypt secret #N (Touch ID)clipboard-history-mcp doctor         # diagnose perms/Keychain/pasteboardclipboard-history-mcp migrate-v2     # validate v0.2.x SQLite (no-op import)clipboard-history-mcp clean-legacy [-y]  # remove the v0.3.x macOS data dir (~/Library/Application Support/clipboard-history-mcp/)

Security model

  • Secrets detected at capture — 252+ gitleaks regex patterns + RFC 7519 JWT + Luhn-validated cards.
  • Encryption at rest — AES-256-GCM with a 32-byte master key in macOS Keychain.
  • Touch ID gate — unlock_secret calls LAContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics). 5-minute auth cache per session.
  • LLM-blind by default — list_history and search_history return secret rows with text: null and preview: "[REDACTED:kind]". The only path that returns plaintext is unlock_secret(id, reason), and the reason argument is mandatory and audit-logged.
  • Paranoid mode — CLIPBOARD_NEVER_STORE_SECRETS=1 keeps metadata only; ciphertext never written.
  • Transient-type respect — clips marked by password managers (1Password, Bitwarden) with org.nspasteboard.ConcealedType are never captured.

Architecture

src/├── main.rs               # binary entry; clap subcommand dispatch├── core/│   ├── db.rs             # SQLite WAL + migrations + FTS5│   ├── store.rs          # add/list/search/delete clips│   ├── crypto.rs         # AES-256-GCM + Keychain│   ├── types.rs          # classifier (url/json/sql/shell/code:lang)│   ├── secrets.rs        # gitleaks rules + JWT + Luhn│   ├── pasteboard.rs     # NSPasteboard via objc2│   └── biometry.rs       # LAContext Touch ID gate├── daemon/{watcher,context}.rs    # poll loop on pinned thread├── mcp/tools.rs                   # 15 MCP tools via rmcp└── cli/{install,uninstall,status,vault,doctor,migrate_v2}.rs

Tech stack: Rust 1.95 · rmcp 1.6 · tokio · objc2 · rusqlite (bundled FTS5) · aes-gcm · security-framework · objc2-local-authentication · clap 4


Performance

Daemon idle footprint, measured on Apple Silicon with default CLIPBOARD_POLL_MS=1500 and vault-mirror enabled:

MetricValueHow measured
CPU steady-state0.05 %ps cumulative CPU-time delta over 60 s (0.03 s / 60 s)
Memory (RSS)~24 MBps -o rss
Power draw (avg)~1 mW0.05 % of an E-core (~1 W full tilt) running continuously
Battery impact~1 % per 3 weeks1 mW × 504 h = 0.5 Wh on a 52 Wh MacBook Air battery, assuming 24/7 continuous run

See the two-squares comparison at the top of this README for a visual on how this compares to a single Chrome tab.

Burst cost on each ⌘C: ~30 ms tick at 1–3 % CPU (secret-classifier regexes + FTS5 index + AES-GCM + optional vault file write), then back to idle. Activity Monitor's Energy Impact column reports ~0 — below its detection threshold.

Linux numbers untested but expected similar order of magnitude (arboard polling + SQLite is portable).


FAQ

Does this run on Linux/Windows?
Linux: yes since v0.4 (X11 + Wayland clipboard via arboard; window-title capture is X11-only for now). See the Linux install section above. Windows: not yet — arboard works there, but the launchd/systemd-style installer hasn't been ported. PRs welcome.

What if I copy a 50MB blob?
Currently captured. A CLIPBOARD_MAX_BYTES guard is on the roadmap.

Can Claude leak my secrets?
Not without you (a) installing this tool, (b) approving Touch ID, (c) the LLM choosing to call unlock_secret with a reason that gets logged. The text field for secret rows is always null in list_history/search_history.

Does it sync across Macs?
No native cross-device sync — the SQLite vault stays local. If you set --vault PATH to point inside a synced Obsidian vault (iCloud, git, Syncthing, etc.), the per-clip sidecar markdown files follow your sync — but secrets are never mirrored to the vault, so password-protected items remain on the originating machine.

Can I use this with Maccy already running?
Yes. They don't conflict — Maccy provides UI, this provides the MCP layer. Both poll NSPasteboard.changeCount independently.

What about [other clipboard manager]?
Same answer — there's no exclusive lock. Worst case, both store the same clip; storage cost is trivial.


Changelog

See CHANGELOG.md. Latest: v0.3.0-alpha.0.

Contributing

See CONTRIBUTING.md. PRs welcome — issues with macOS 13/14 reproductions especially.

Sponsor

Pre-1.0 alpha. Built solo, in bursts. If clipboard-history-mcp finds you a leaked key, saves you from typing the same JSON twice, or just makes Claude slightly more useful at your terminal — consider becoming a backer or Founding Sponsor on Patreon.

  • $3 / month — backer ☕ — name in SUPPORTERS.md, Discord role
  • $10 / month — founding sponsor 🥇 — name + avatar in this README, permanently listed if you join before v1.0

Sponsorship is gratitude, not a support contract. It does not buy priority issue triage, custom features, or response-time SLA — solo OSS doesn't scale that way. What it buys: visibility, the occasional roadmap vote, and proof that this kind of tool is worth maintaining past 0.x.

GitHub Sponsors works too — see the Sponsor button at the top of the repo.

License

MIT. vendor/gitleaks.toml is the gitleaks rule catalog (also MIT) — see vendor/README.md.

來源:README.md,提交 c0a8177

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.5.0-alpha.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分