Skip to main content
Glama

mcp-clipboard

PyPI version Python versions License CI Coverage Downloads

pip downloads pipenv downloads pipx downloads uv downloads poetry downloads pdm downloads

linux downloads macos downloads windows downloads

An MCP server that gives your AI assistant direct access to your system clipboard: read what you copied, or write clean text straight to it. Works with any MCP-compatible client, including Claude Code, Claude Desktop, Cursor, Windsurf, and others.

Why This Exists

Pasting loses structure

When you copy cells from Google Sheets or Excel and paste into a chat input, the tabular structure (rows and columns) is destroyed. It arrives as a flat string with no delimiters. The model has to guess where one cell ends and the next begins, and it often guesses wrong.

mcp-clipboard preserves it. Instead of pasting, tell your assistant to "read my clipboard." The server reads the clipboard directly, detects tabular data from the HTML that spreadsheet apps put on the clipboard, and returns it as a properly formatted Markdown table, JSON, or CSV. No structure lost, no guessing.

Bonus: it also fixes copying from Claude Code

Claude Code's terminal renderer adds 2-character padding, hard line breaks at ~80 columns, and trailing whitespace to all output. When you select and copy text from the terminal, those artifacts come along for the ride:

  echo "this is a long command that wraps and
  breaks when you paste it because of the hard
  newlines and leading spaces"

This has been reported repeatedly on the claude-code repo (issues #4686, #6827, #7670, #13378, #15199, #25040, #25427, #26016) with dozens of upvotes and no fix shipped.

mcp-clipboard sidesteps the problem entirely. Instead of copying text from the terminal, ask Claude Code to put it on your clipboard:

"Copy that command to my clipboard"

Claude Code calls clipboard_copy, writes the clean text directly to your system clipboard, and you paste it wherever you need it. No padding, no hard wraps, no cleanup.

Tip: To make this automatic, add a line to your project or global CLAUDE.md:

When you produce a shell command for the user to run, also copy it to the clipboard using clipboard_copy.

Claude Code will then copy every command it suggests without you having to ask.

Bonus: read your X11/Wayland selection without Ctrl-C

Linux desktops have two clipboards: the CLIPBOARD that Ctrl-C / Ctrl-V uses, and the PRIMARY selection. PRIMARY is whatever text you currently have highlighted, pasted by middle-click. It updates as soon as you select something; you don't have to copy it.

mcp-clipboard reads PRIMARY too. Pass selection="primary" to clipboard_paste, clipboard_read_raw, or clipboard_list_formats and the server reads the selection buffer instead of the Ctrl-C clipboard. Some workflows this enables:

  • Terminal triage. An error message scrolls past, mouse-select it, ask the model what it means. Your Ctrl-C buffer stays intact for whatever you had on it.

  • vim / IDE visual selection. v-select a function, ask the model to explain it or refactor it.

  • Browser / PDF reading. Drag-select a paragraph, ask "what's this saying?" without leaving the reading flow.

  • Two-buffer workflows. Keep a snippet in CLIPBOARD (Ctrl-C) and pull a different one through PRIMARY in the same conversation.

Linux only. macOS and Windows have no equivalent buffer; passing selection="primary" on those platforms returns a clear error.

Related MCP server: Clipboard MCP

Tools

Tool

Description

clipboard_paste

Primary tool. Read any clipboard content: tables, text, code, JSON, URLs, images. Tables are formatted as Markdown/JSON/CSV; pass include_schema=true to append inferred column types. Images are returned as image content the model can see. Optional selection="primary" reads the X11/Wayland PRIMARY selection (middle-click / select-text-to-paste buffer) instead of the default Ctrl-C clipboard.

clipboard_copy

Write text content to the system clipboard. Accepts an optional mime_type parameter (text/plain by default; also text/html, text/rtf, image/svg+xml, or any text/* on Wayland/X11).

clipboard_copy_markdown

Render markdown to HTML and place both formats on the clipboard so paste targets pick the right one — Slack/Gmail/Notion/Discord get rich text; vim/terminal get the source. macOS/Windows write both atomically; Wayland/X11 are single-MIME and write only text/html.

clipboard_copy_image

Write a PNG or JPEG image to the system clipboard from base64-encoded bytes. Pass-through with no re-encoding; magic bytes are validated against the declared MIME. Use clipboard_copy for text.

clipboard_list_formats

List what MIME types are currently on the clipboard. Accepts selection="primary" for the X11/Wayland PRIMARY selection.

clipboard_read_raw

Return raw clipboard content for a given MIME type (diagnostic). Any non-binary type passes through; only image/*, audio/*, video/*, and application/octet-stream are rejected. Use clipboard_paste for images. Accepts selection="primary" for the X11/Wayland PRIMARY selection.

clipboard_version

Return the running mcp-clipboard package version as {"name": "mcp-clipboard", "version": "<x.y.z>"}. Diagnostic. Useful for hosts that don't surface the standard MCP serverInfo block to the model, and for test harnesses that need to record which build served a given run.

Setup

Step 1: Install a Python package runner

mcp-clipboard is a Python package on PyPI. Any Python tool that can install and launch console-script entry points works for running it as an MCP server. The two most common choices are pipx and uv; both appear in the install-counts badges at the top of this README and both are in active use. Pick whichever you have or prefer:

  • pipx: install instructions per platform are in the official pipx install docs. On most distros pipx is available via the system package manager (apt, dnf, pacman, brew, etc.).

  • uv: install instructions per platform are in the official uv install docs. Astral documents package-manager paths, signed standalone-binary downloads, and shell installers for each platform.

Verify your chosen runner is on PATH:

pipx --version   # if you chose pipx
uv --version     # if you chose uv

The rest of this section shows commands for both runners; substitute the one you installed.

Step 2: Install the platform clipboard tool (Linux only)

macOS and Windows have everything they need built in. Linux needs one CLI utility:

Platform

Tool

Install

Fedora / RHEL (Wayland)

wl-copy / wl-paste

sudo dnf install wl-clipboard

Ubuntu / Debian (Wayland)

wl-copy / wl-paste

sudo apt install wl-clipboard

Linux (X11)

xclip

sudo dnf install xclip or sudo apt install xclip

macOS

Built-in

No install needed (pbcopy / pbpaste)

Windows

Built-in

No install needed (PowerShell)

Platform status: Linux with Wayland is tested and actively used. Windows has been exercised end-to-end on a QEMU Windows guest (a real Windows-only encoding bug, #129, was found and fixed via that testing in v2.5.x). X11 and macOS implementations are complete but unverified beyond the unit tests. Bug reports and PRs are welcome.

Step 3: Verify mcp-clipboard works on your system

Before wiring it into a client, confirm the package installs and detects your platform correctly. With pipx:

pipx run mcp-clipboard --check

Or with uv:

uvx mcp-clipboard --check

Both forms fetch the package on demand without a permanent install (use pipx install mcp-clipboard or uv tool install mcp-clipboard first if you'd rather install it persistently). Expected output:

mcp-clipboard 2.5.1
Platform: ...
Backend: ... (detected)
OK: mcp-clipboard should work on this system.

If you see Backend: NOT AVAILABLE, follow the platform-specific hint in the error message (typically: install the Linux clipboard tool from Step 2) and re-run.

Step 4: Register the server with your MCP client

The MCP host launches mcp-clipboard via a command + args pair. Both pipx and uv expose a one-shot run subcommand that fetches and executes the package, so the most convenient configs use those forms.

Claude Code

With pipx:

claude mcp add clipboard --scope user -- pipx run mcp-clipboard

With uv:

claude mcp add clipboard --scope user -- uvx mcp-clipboard

Claude Desktop

Locate your Claude Desktop config file (paste the path into your file manager's address bar to jump straight there):

  • Linux: ~/.config/Claude/claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add an entry to mcpServers using one of the forms below. With pipx:

{
  "mcpServers": {
    "clipboard": {
      "command": "pipx",
      "args": ["run", "mcp-clipboard"]
    }
  }
}

Or with uv:

{
  "mcpServers": {
    "clipboard": {
      "command": "uvx",
      "args": ["mcp-clipboard"]
    }
  }
}

Save the file, then fully quit and relaunch Claude Desktop for the new server to load.

Windows tip: Claude Desktop caches the environment (including PATH) from the moment it launches. If pipx/uvx was installed after Claude Desktop was started, Claude Desktop will not see it until restart. If the snippet above produces "Server failed to start" or a "command not found" style error in the MCP logs, right-click the Claude Desktop tray icon, choose Quit, then reopen Claude Desktop. A taskbar-X close just hides the window; the cached environment is still there.

Other MCP clients

Any client that supports MCP stdio servers can use mcp-clipboard. Common one-shot forms are pipx run mcp-clipboard and uvx mcp-clipboard; if you've installed mcp-clipboard persistently (pipx install mcp-clipboard or uv tool install mcp-clipboard), the resulting mcp-clipboard binary on PATH also works as the command. Consult your client's documentation for how to register MCP servers.

Step 5: Confirm it works end-to-end

In your client, ask:

What's on my clipboard?

The client should call clipboard_paste and return the content. If you copied a spreadsheet selection or a URL beforehand, you'll see it formatted appropriately.

If nothing happens or you get a tool error, re-run --check (whichever runner you used in Step 3) to confirm the package install is healthy, then check your client's MCP server logs (each MCP host exposes them differently; consult your client's documentation).

Installing from source

If you prefer a local clone instead of installing from PyPI:

git clone https://github.com/cmeans/mcp-clipboard.git
cd mcp-clipboard
uv sync

Then point your client at the local install:

{
  "mcpServers": {
    "clipboard": {
      "command": "uv",
      "args": [
        "run",
        "--directory", "/path/to/mcp-clipboard",
        "mcp-clipboard"
      ]
    }
  }
}

Environment variables

Environment variables can be passed via the "env" key in the config.

Variable

Platform

Purpose

Default

MCP_CLIPBOARD_DEBUG

All

Enable debug logging (1 to enable)

Off

WAYLAND_DISPLAY

Linux (Wayland)

Compositor socket name or absolute path

Auto-detected

XDG_RUNTIME_DIR

Linux (Wayland)

Directory containing the Wayland socket

/run/user/<uid>

XDG_SESSION_TYPE

Linux

Session type hint (wayland or x11)

Auto-detected via socket scan

Most Linux users won't need to set any of these. Override if auto-detection fails (multiple compositors, non-standard socket path, or containerized environments).

Usage

Reading your clipboard

Copy anything (spreadsheet cells, code, text, a URL, JSON, an image), then:

  • "Paste my clipboard"

  • "Read my clipboard"

  • "What's on my clipboard?"

  • "I copied some data, take a look"

Your assistant calls clipboard_paste and returns the content with structure preserved.

Writing to your clipboard

When your agent generates a command, code block, or any text you need to use elsewhere:

  • "Copy that to my clipboard"

  • "Put that command on my clipboard"

  • "Copy that as HTML" (writes text/html so rich-text apps paste with formatting)

The agent calls clipboard_copy and the clean text goes straight to your system clipboard. No terminal rendering artifacts, just clean text. This is especially useful with Claude Code (see above).

Tip: auto-copy behavior. By default the agent only copies to the clipboard when you ask. If you want commands and code blocks copied automatically, add this to your system prompt (e.g. in a Claude Desktop project or Claude Code's CLAUDE.md):

When you output a command or code block that the user is likely to paste elsewhere, proactively copy it to the clipboard using clipboard_copy.

Table output formats

When the clipboard contains tabular data, output_format controls the format:

Format

Destination

What you get

markdown

Claude, GitHub, most tools

GFM pipe table (default)

notion

Notion

GFM pipe table (Notion renders these natively)

slack

Slack

*bold* header + space-aligned data in a monospace code block

jira

Jira

||Header|| / |Cell| wiki markup

confluence

Confluence

same as jira (shared wiki syntax)

html

Email, web, rich-text editors

<table> with <thead>/<th>/<tbody>/<td>

json

APIs, code

Array of objects keyed by header row

csv

Excel, data tools

Comma-separated values

Examples:

  • "Read my clipboard as Slack" → output_format=slack

  • "Convert my clipboard to Jira table" → output_format=jira

  • "Give me that as HTML" → output_format=html

Table schema inference

Add include_schema=true to get a column-type summary alongside the table:

"Read my clipboard with schema"

Inferred types: integer, float, currency, percentage, date, boolean, text. Uses majority-wins per column — if no type accounts for more than half the non-empty cells, the column is typed as text. Empty cells are skipped; the header row is excluded from inference.

This is useful when handing tabular data to Claude for SQL CREATE TABLE statements, Pandas dtype mappings, or validation rules — Claude gets the types upfront instead of guessing from the data.

Tips for reliable triggering

The server includes MCP instructions that tell the client when to use the clipboard tools, but results vary by model and client. If the agent doesn't pick up on your intent, be explicit: "copy that to my clipboard" or "read what I copied" work most reliably.

If you have access to a custom system prompt (e.g. in a Claude Desktop project or a custom agent), you can reinforce the behavior:

When the user asks to copy output, use clipboard_copy to write it to the system clipboard. When the user references data not in the conversation, check the clipboard using clipboard_paste.

Content handling

Content type

What happens

Spreadsheet table

Parsed from HTML/TSV, returned in your choice of format (Markdown, JSON, CSV, Slack, Jira, HTML, Notion)

JSON

Pretty-printed in a JSON code block

Code

Returned in a fenced code block

URL

Returned cleanly as a URL

Rich HTML (no table)

HTML tags stripped, readable text returned

RTF

Returned in a fenced code block (macOS, Windows, and Wayland/X11 via pass-through)

Plain text

Returned as-is

Images (PNG, etc.)

Returned as an MCP image content block the model can see and analyze

SVG

Readable as text via clipboard_read_raw with image/svg+xml, or returned as image via clipboard_paste. Writable via clipboard_copy(mime_type="image/svg+xml") — apps that consume SVG (Inkscape, Figma, browsers) get the image. On Wayland, wl-copy automatically also advertises text/plain, so editors get the source for free. On X11 / macOS / Windows the SVG-only path is single-MIME — non-SVG-aware apps will not see any text fallback until multi-format simultaneous write lands (#109).

Audio / video

Not supported; returns a message identifying the format

How It Works

  1. Platform detection: At startup, the server detects your clipboard backend (Wayland, X11, macOS, or Windows) and selects the appropriate system commands.

  2. Reading (clipboard_paste): Calls the platform's clipboard read command. Tries text/html first (Google Sheets and Excel put <table> markup on the clipboard), parses with Python's built-in html.parser. Falls back to text/plain tab-separated values, then text/rtf, then checks for images.

  3. Writing text (clipboard_copy): Pipes text to the platform's clipboard write command (wl-copy, xclip -selection clipboard, pbcopy, or PowerShell Set-Clipboard). Supports a mime_type parameter for writing typed content (e.g. text/html, text/rtf, image/svg+xml).

  4. Writing images (clipboard_copy_image): Decodes base64 PNG or JPEG bytes and writes them to the platform's clipboard via wl-copy --type, xclip -target, NSPasteboard setData:forType: (macOS), or Clipboard::SetImage (Windows). Magic bytes are validated against the declared MIME type before any subprocess runs.

  5. Image passthrough on read: If the clipboard contains an image (PNG, etc.), it's returned as a base64-encoded MCP image content block that the model can see and analyze.

  6. Content classification: Non-tabular text content is classified as JSON, URL, code, or plain text and returned with appropriate formatting (pretty-printed JSON, fenced code blocks, etc.).

Limitations

  • Audio and video are not supported. If the clipboard contains audio or video, the server reports the format but cannot return the content.

  • Image write supports PNG and JPEG only via clipboard_copy_image. Pass-through, no re-encoding. Other binary formats (GIF, WebP, TIFF, BMP) are not yet writable. SVG rides the typed-text path via clipboard_copy(mime_type="image/svg+xml") since SVG is XML.

  • Writing multiple MIME types atomically is not supported on Wayland/X11. wl-copy and xclip carry a single MIME per invocation, so clipboard_copy_markdown writes only text/html on those platforms. On Wayland, wl-copy auto-advertises text/plain for UTF-8 content but the bytes returned are the rendered HTML markup (not the markdown source) — vim users pasting after the tool runs will see <h1>... etc. On X11, plain-text targets see an empty clipboard. For a plain-text paste of the markdown source, call clipboard_copy(markdown_source) directly. macOS and Windows do support atomic multi-format writes via NSPasteboard / DataObject.

  • Text content is truncated at 50KB to avoid overwhelming the model's context window.

  • Platform coverage is uneven. Linux with Wayland is tested and actively used. Windows has been exercised end-to-end on a QEMU Windows guest as of v2.5.x (which surfaced and resolved a Windows-only UTF-8 stdin encoding bug, #129). X11 and macOS implementations are complete and have unit tests but have not been verified beyond that. Bug reports and PRs are welcome, especially for X11 and macOS.

Development

# Install with dev dependencies
uv sync --extra dev

# Run tests
uv run pytest

# Run the server directly (stdio mode)
uv run mcp-clipboard

# Run with debug logging
uv run mcp-clipboard --debug

# Test with MCP Inspector
uv run mcp dev src/mcp_clipboard/server.py

Debug logging can also be enabled via MCP_CLIPBOARD_DEBUG=1, which is useful when the server is launched by Claude Desktop or Claude Code.

Project structure

mcp-clipboard/
├── src/mcp_clipboard/
│   ├── __init__.py          # Package version
│   ├── server.py            # MCP server, tool definitions, debug logging
│   ├── clipboard.py         # Platform-agnostic clipboard backend
│   ├── parser.py            # HTML table parser, formatters, content detection
│   ├── instructions/        # Tool and server descriptions (loaded at startup)
│   │   ├── server.md
│   │   ├── clipboard_copy.md
│   │   ├── clipboard_copy_image.md
│   │   ├── clipboard_copy_markdown.md
│   │   ├── clipboard_paste.md
│   │   ├── clipboard_read_raw.md
│   │   ├── clipboard_list_formats.md
│   │   └── clipboard_version.md
│   └── icons/               # SVG icons for MCP client display (light/dark)
│       ├── mcp-clipboard-logo-light.svg
│       └── mcp-clipboard-logo-dark.svg
├── tests/
│   ├── test_parser.py       # Parser and formatter tests
│   └── test_server.py       # Server, backend, and Wayland detection tests
├── .github/
│   ├── workflows/
│   │   ├── publish.yml      # PyPI publish on v* tags (OIDC trusted publisher)
│   │   └── test-publish.yml # TestPyPI publish on test-v* tags
│   └── ISSUE_TEMPLATE/      # Bug report, feature request, platform test forms
├── pyproject.toml
├── CHANGELOG.md
├── CLAUDE.md                # Claude Code project guidance
├── LICENSE                  # Apache 2.0
└── README.md

Acknowledgments

This project was designed and built in collaboration with Claude Code (Anthropic's CLI for Claude). Architecture, design decisions, and release management were driven by the human; implementation, testing, code review, and documentation were delegated conversationally, with Claude writing code, catching stale docs, and filling test coverage gaps across every commit.

License

Apache 2.0. See LICENSE.

Available Tools

4 tools
clipboard_copyA
DestructiveIdempotent

Copy text to the user's system clipboard. Replaces whatever is currently on the clipboard with the provided content.

WHEN TO CALL THIS TOOL:

Call this tool when the user says "copy this", "put this on my clipboard", "copy to clipboard", "send to clipboard", or any phrase that implies writing content to the clipboard.

Also call this tool when you have produced formatted output (cleaned-up JSON, a markdown table, reformatted code, etc.) and the user wants to use it outside the conversation — copying to clipboard lets them paste it elsewhere.

Args: content: The text to place on the clipboard. Any string is accepted.

Returns: A confirmation message with the number of characters copied.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes

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?

Adds behavioral context beyond annotations: replaces current clipboard content and returns confirmation with character count. No contradiction with annotations.

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?

Well-structured with clear sections, concise yet informative description 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?

For a simple one-param tool with output schema and annotations, the description covers all needed aspects: purpose, usage, parameter meaning, and return value.

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%, but description explains 'content' parameter as 'The text to place on the clipboard. Any string is accepted.', which compensates.

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 explicitly states 'Copy text to the user's system clipboard' and distinguishes from sibling tools that read or list clipboard formats.

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?

Provides explicit when-to-call triggers (user phrases like 'copy this', and formatted output context). Lacks explicit when-not-to-call, but context is clear.

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

clipboard_list_formatsA
Read-onlyIdempotent

List the MIME types / formats currently on the system clipboard. Diagnostic tool — use clipboard_paste to actually read and return clipboard content.

Lists what formats are present. For spreadsheet data, you want to see "text/html" (best) or "text/plain" (fallback with tab-separated values).

Returns: A list of available clipboard formats.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent behavior. The description adds context about being diagnostic and the relationship to paste, but does not introduce new behavioral details beyond that. No contradictions.

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 concise (four sentences) with no redundancy. It front-loads the primary action and efficiently provides usage guidance and output description.

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?

For a simple tool with no parameters and an output schema, the description sufficiently covers purpose, usage context, and output format. It is complete for the tool's complexity.

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?

There are no parameters (schema coverage 100%), so baseline is 4. The description adds no parameter info, but that's appropriate. It does describe the output, which adds value.

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: 'List the MIME types / formats currently on the system clipboard.' It distinguishes it from siblings by explicitly saying it's a 'Diagnostic tool — use clipboard_paste to actually read and return clipboard content.'

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

Usage Guidelines5/5

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

The description provides explicit guidance: it's for diagnostic purposes, recommends clipboard_paste for actual content retrieval, and hints at what to expect for different data types (e.g., 'text/html' for spreadsheet).

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

clipboard_pasteA
Read-onlyIdempotent

Paste clipboard contents. Reads the user's system clipboard and returns the content. This is the primary clipboard tool.

WHEN TO CALL THIS TOOL:

Call this tool when the user says "paste", "paste it", "paste the data", "what's on my clipboard", "read my clipboard", "read what I copied", "what did I copy", "show clipboard", "from my clipboard", "use what I copied", "I copied something", "check my clipboard", or ANY phrase that implies reading from or pasting from the clipboard.

Also call this tool when the user references data that is NOT present in the conversation — for example: "format this list" but no list was given, "clean up this JSON" but no JSON is in the message, "here's a table" but no table was provided, "analyze this data" with nothing attached. In these cases, the data is likely on the clipboard. Check it BEFORE asking the user to provide the data manually.

Do NOT ask the user to paste or provide data — just call this tool.

Handles any clipboard content: tables (from spreadsheets, HTML), plain text, code, JSON, URLs, rich text, and images. Tables are auto-detected and formatted per output_format. Non-tabular content is returned with smart formatting. Images on the clipboard are returned directly as image content.

Args: output_format: Format for table data (case-insensitive). Only applies when the clipboard contains a table. Ignored for non-tabular content. Options: - "markdown" (default): GitHub-flavored Markdown table - "json": Array of objects keyed by header row - "csv": Comma-separated values - "slack": bold header + space-aligned data in a monospace code block - "jira": ||Header|| / |Cell| wiki markup (also works for Confluence) - "confluence": same as jira - "html": with /// - "notion": GFM pipe table (Notion renders these natively) include_schema: When True and the clipboard contains a table, append a column-type schema table after the data. Inferred types: integer, float, currency, percentage, date, boolean, text. Defaults to False.

Returns: The clipboard content, formatted appropriately for the content type. Images are returned as image content (base64-encoded) for visual analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_formatNomarkdown
include_schemaNo

TDQS

A4.9/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, etc.), the description details handling of various content types (tables, text, code, images), table auto-detection, and return format, with no contradictions.

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?

Well-structured with summary, usage section, and parameter details, but slightly lengthy; still efficient and front-loaded with key purpose.

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?

Covers all needed context: how to call, content types handled, parameter behavior, and return type (including image handling), sufficient for proper agent use without output schema.

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?

Despite 0% schema description coverage, the description fully explains both parameters: output_format with all options and defaults, and include_schema with its effect, compensating effectively.

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 reads the clipboard and returns content, and positions itself as the primary clipboard tool, distinguishing it from sibling tools like clipboard_copy and clipboard_read_raw.

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

Usage Guidelines5/5

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

Provides an extensive 'WHEN TO CALL' section with numerous example phrases, explains when to check clipboard for absent data, and explicitly instructs not to ask the user to paste.

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

clipboard_read_rawA
Read-onlyIdempotent

Read raw clipboard content in a specific MIME format. Diagnostic tool only — use clipboard_paste instead for normal clipboard access.

This tool returns the clipboard content as-is without any parsing or restructuring. Use clipboard_list_formats first to see what MIME types are available.

Supports all text/* MIME types plus these text-readable types that have non-text prefixes: image/svg+xml, application/json, application/xml, application/xhtml+xml. Binary MIME types (image/png, audio/, video/, etc.) are rejected — use clipboard_paste for images.

Args: mime_type: The MIME type to read from the clipboard. Common values: "text/plain", "text/html", "image/svg+xml", "application/json"

Returns: The raw clipboard content in the requested format, or an error message.

ParametersJSON Schema
NameRequiredDescriptionDefault
mime_typeNotext/plain

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds: returns content as-is without parsing, lists supported MIME types (including those with non-text prefixes), and states binary types are rejected. This goes beyond annotations.

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 first line stating purpose and usage recommendation, followed by details on behavior and examples. It is slightly lengthy but each sentence adds value. Could be trimmed slightly, but very effective.

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 tool has one parameter, annotations, and an output schema (context signals indicate presence), the description covers all necessary aspects: purpose, usage, supported types, args, return value, and error behavior. No gaps remain.

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?

Input schema has only a name and default for mime_type, with 0% description coverage. The tool description provides a full argument description: explains what it is, gives common values like 'text/plain', 'text/html', etc., and clarifies supported types. This adds substantial meaning beyond the 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 it reads raw clipboard content for a specific MIME format, explicitly distinguishing itself from siblings: 'Diagnostic tool only — use clipboard_paste instead for normal clipboard access.' It also mentions clipboard_list_formats for discovering available types, making the purpose highly specific and differentiated.

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

Usage Guidelines5/5

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

Provides explicit when-to-use instructions ('Diagnostic tool only'), recommends alternative (clipboard_paste), and advises using clipboard_list_formats first. This gives clear context and exclusion criteria.

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.

  1. 1 tool updatev2.0.0
    • Changedclipboard_paste1 field changed
      • addedInput schema / properties / include_schema
        Added value: +{
        +  "default": false,
        +  "title": "Include Schema",
        +  "type": "boolean"
        +}
  2. 4 tool updatesv1.0.1
    • First observedclipboard_copy
    • First observedclipboard_list_formats
    • First observedclipboard_paste
    • First observedclipboard_read_raw

TDQS

A4.8/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: copy writes, paste reads with formatting, list_formats discovers formats, and read_raw provides raw access. No overlap or ambiguity.

Naming Consistency5/5

All tools follow the 'clipboard_verb_noun' pattern consistently, using snake_case with clear verbs (copy, list_formats, paste, read_raw).

Tool Count5/5

4 tools is well-scoped for a clipboard utility. Each tool serves a necessary function without redundancy or bloat.

Completeness5/5

The set covers all core clipboard operations: writing (copy), reading with formatting (paste), format discovery (list_formats), and raw access (read_raw). No obvious gaps for the domain.

Maintenance

ActivityInactive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives Claude and other AI assistants access to your Maccy clipboard history, allowing search, retrieval, and management of copied content through natural conversation.
    9
    -
  • F
    license
    A
    quality
    D
    maintenance
    A Windows-native MCP server that enables users to paste images, Excel tables, rich text, and plain text directly into Claude via a dedicated popup interface. It supports multi-item management and format conversion to streamline sharing complex clipboard data with the model.
    1
    -