The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Clipboard MCP Server listing page.
Read, write, and inspect the system clipboard across macOS, Linux (X11/Wayland), and Windows via MCP. STDIO or Streamable HTTP.
3 tools for reading, writing, and inspecting the system clipboard:
| Tool | Description |
|---|---|
clipboard_read | Read clipboard contents in a specified format (text, HTML, RTF, image, or auto-select richest) |
clipboard_write | Write plain text or HTML to the clipboard, replacing current contents, or clear it outright |
clipboard_inspect | List available clipboard formats and byte sizes without reading full content |
clipboard_readRead the current clipboard contents in a requested format.
auto mode returns the richest format explicitly present — priority: image > html > rtf > textimage returns base64-encoded PNG data, with pixel dimensions on every platform whenever the capture carries a readable PNG headerhtml returns raw HTML source as copied from a browserrtf returns raw RTF markuptext returns plain textoffset/limit instead of erroring outright: pass both to read a bounded window (limit is at least 4 and clamped to the format's size limit) and follow the returned nextOffset until complete is true. Every response carries totalByteSize and complete; text/HTML/RTF slices never split a multi-byte UTF-8 sequence. Omitting both reads the whole payload as before, still bounded by the size limitformat_unavailable error when the requested format is not on the clipboard — use clipboard_inspect first to check availabilitycontent_too_large error only when no offset/limit was given and the content exceeds the size limit; the recovery hint points at the slicing parameters aboveclipboard_writeWrite content to the clipboard, replacing current contents — or clear it.
text writes plain texthtml writes HTML; macOS and Windows also publish an auto-generated, tag-stripped plain-text fallback, while Linux X11 and Wayland publish only text/htmlclear: true removes every representation instead of writing, so a following clipboard_inspect reports primaryFormat: "empty". It returns cleared: true, byteSize: 0, and no format. On Linux X11 this needs xsel alongside xclip — see Prerequisitescontent or clear: true. Omitting both, sending an empty content, or combining the two is rejected as invalid arguments rather than silently writing a zero-byte representationpreviousContent — the plain text that was on the clipboard immediately before the write or clear, so an unintended overwrite can be undone by writing it back. Absent when the clipboard was empty, held no text representation, or its text exceeded the 512 KB read limitdestructiveHint: true — replaces or removes whatever is currently on the clipboardCLIPBOARD_READ_ONLY is set, which gates clearing along with writing — see Configurationclipboard_inspectList the formats and byte sizes of what is currently on the clipboard without reading the full content.
primaryFormat — the richest format present (image > html > rtf > text), or emptyavailableFormats — all semantic formats present, for deciding which format to pass to clipboard_readrawTypes — all raw platform type identifiers with byte sizes (UTIs on macOS, TARGETS on X11/Wayland, format names on Windows). An entry whose size could not be measured carries measurementFailed: true and no bytes, so a failed measurement is never reported as a zero-byte representationinspect_unreadable error when the platform helper's output cannot be read, instead of reporting an empty clipboardclipboard_read to avoid format_unavailable errors and to check content size before readingBuilt on @cyanheads/mcp-ts-core:
none, jwt, oauth)Clipboard-specific:
text, html, rtf, image across all backendsContentTooLargeError with byte/limit metadata before content returnstext/htmlAdd the following to your MCP client configuration file.
Or with npx (no Bun required):
For Streamable HTTP, set the transport and start the server:
macOS: No additional tools required — pbcopy, pbpaste, and osascript are built in.
Linux X11: xclip must be installed. xsel is additionally required for clipboard_write's clear mode — it is the only one of the two that can hand the selection back rather than owning an empty one.
Linux Wayland: wl-clipboard must be installed.
Windows: PowerShell 5.1+ (built-in on Windows 10 and later).
| Variable | Description | Default |
|---|---|---|
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_HTTP_HOST | Hostname for HTTP server. | 127.0.0.1 |
MCP_HTTP_ENDPOINT_PATH | Endpoint path for the HTTP server. | /mcp |
MCP_HTTP_MAX_BODY_BYTES | Max inbound JSON-RPC request body, in bytes. Raised above the framework's 1 MiB default so a full-size clipboard_write survives JSON escaping (worst case costs 6 wire bytes per source byte). 0 disables the guard and defers to the reverse proxy. | 7340032 |
MCP_SESSION_MODE | HTTP session mode: auto, stateful, or stateless. auto resolves to stateful. This server defaults to stateless — it keeps no per-session state. | stateless |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_LOG_LEVEL | Log level (debug, info, notice, warning, error). | info |
OTEL_ENABLED | Enable OpenTelemetry instrumentation. | false |
CLIPBOARD_READ_ONLY | Serve the clipboard read-only. When true, clipboard_write is not registered — absent from tools/list and uncallable, though still shown in a disabled state on the manifest and landing page. Accepts true/false/1/0/yes/no/on/off; an unrecognized value fails startup. | false |
See .env.example for the full list of optional overrides.
| Path | Purpose |
|---|---|
src/index.ts | Entry point — registers tools via createApp() |
src/mcp-server/tools/definitions/ | Tool definitions: clipboard_read, clipboard_write, clipboard_inspect |
src/services/clipboard/ | Platform backends (macOS, Linux X11, Wayland, Windows) and service facade |
tests/ | Vitest tests for tools and backends |
skills/ | Agent workflow skills (add-tool, field-test, polish-docs-meta, etc.) |
See CLAUDE.md for the full developer protocol — tool patterns, service patterns, error handling, logging conventions, and the checklist for shipping changes.
Issues and pull requests welcome at github.com/cyanheads/clipboard-mcp-server.
Apache 2.0 — see LICENSE.