Koskamo

Clippy MCP

Clippy is a cross-device clipboard service that provides an MCP server for AI agents. It allows agents to create rooms, store and retrieve text, links, and images, and manage room access without requiring user sign-up. The server exposes tools like create-room, store-item, and list-items to facilitate seamless data sharing between devices.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Clippy MCP logo, by IDTitaniumCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by IDTitanium
MCP endpoint (Streamable HTTP)
https://useclippy.cc/mcp
Vendor documentation

What its tools do

9 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

9 of 9 have a description · 4 of 9 declare behavior hints · 9 of 9 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Create a new room for sharing data
  • Store text or image items in a room
  • List existing items in a room
  • Manage room access and passwords

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
Clippy 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
9 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Clippy is a no-sign-up, cross-device shared clipboard. Content lives in a "room" identified by a 6-character code (e.g. ABC123). Anyone — a person on their phone, a browser extension, or another AI agent — who knows the code can read and write that room's items. It is the fastest way to move text between an agent and a human's devices, or to leave a shared scratchpad several agents can all reach. Core model: - A room holds up to 100 items (newest first). Each item is a piece of text (and/or images) plus a small "device" label saying who posted it. - Rooms are created on demand — the first time anyone touches a code, it exists. - A room can be locked with a password. Creating a room also returns a private `owner_token`; keep it if you want to lock/unlock the room later or bypass its password. NEVER share the owner_token with anyone you wouldn't trust with full control of the room. How to use it well: - To hand a user something (a snippet, a link, an answer they want on another device): call `create-room`, `store-item` the text into it, then give the user the returned share URL — https://…/r/CODE — which opens in any browser, or tell them to point the Clippy extension at the code. Their devices get a push notification when new items land. - To pick up what a user (or another agent) left for you: `list-items` on the code they gave you. Use the `since` argument to poll only for new items. - To coordinate with other agents: agree on a code, then `store-item` / `list-items` against it as a shared blackboard. Always report the room CODE and the share URL back to the user in plain text — that string is the only thing they need to get the content onto their devices. Prefer sharing the code over dumping large content back into chat.

Tools

9 advertised

create-room-tool — Create Clippy Room
Advertised by the server during the last successful anonymous check.

Create a brand-new Clippy room and get back its 6-character code, a private owner_token, and a share URL. Use this when you want a fresh shared clipboard to push content to a user (hand them the URL) or to coordinate with other agents. Keep the owner_token private — it grants password control over the room.

create-room-tool input schema
{
  "type": "object",
  "properties": {
    "password": {
      "type": "string",
      "description": "Optional. Lock the new room with this password so only holders of the password (or the owner_token) can read/write it."
    }
  }
}
create-room-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "url",
    "owner_token",
    "locked"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Human-shareable URL that opens the room on any device."
    },
    "code": {
      "type": "string",
      "description": "The new 6-character room code."
    },
    "locked": {
      "type": "boolean",
      "description": "Whether the room is password-protected."
    },
    "owner_token": {
      "type": "string",
      "description": "Private token granting password control over the room. Keep secret."
    }
  }
}
create-room-tool annotations
{}
store-item-tool — Store Item in Clippy Room
Advertised by the server during the last successful anonymous check.

Post a piece of text to a Clippy room so it appears on every device and agent watching that room. The room is created automatically if it does not exist yet. Subscribed devices receive a push notification. This is how you "send" something to a user or leave a note for another agent. Returns the stored item.

store-item-tool input schema
{
  "type": "object",
  "required": [
    "room",
    "text"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link). The room is created if new."
    },
    "text": {
      "type": "string",
      "description": "The text content to store (a snippet, link, message, etc.). Up to 200,000 characters."
    },
    "device": {
      "type": "string",
      "description": "Optional short label for who is posting (max 64 chars). Defaults to \"AI Agent\" so humans can tell agent posts apart."
    },
    "password": {
      "type": "string",
      "description": "Required only if the room is password-protected and you are not using owner_token."
    },
    "owner_token": {
      "type": "string",
      "description": "Optional. The room owner_token; bypasses the password on a locked room."
    }
  }
}
store-item-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "url",
    "item"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Human-shareable URL that opens the room on any device."
    },
    "code": {
      "type": "string",
      "description": "The room code the item was stored in."
    },
    "item": {
      "type": "object",
      "required": [
        "id",
        "device",
        "edited",
        "hasImage",
        "imageCount"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The item id (UUID)."
        },
        "text": {
          "type": [
            "string",
            "null"
          ],
          "description": "The text content, or null for image-only items."
        },
        "device": {
          "type": "string",
          "description": "Label for who posted the item."
        },
        "edited": {
          "type": "boolean",
          "description": "Whether the item was edited after it was created."
        },
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "description": "Absolute URL to fetch the image bytes."
              },
              "mime": {
                "type": "string",
                "description": "Image MIME type."
              },
              "size": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Image size in bytes."
              },
              "position": {
                "type": "integer",
                "description": "0-based position in the gallery."
              }
            }
          },
          "description": "Attached images, ordered by position. Present only when hasImage is true."
        },
        "hasImage": {
          "type": "boolean",
          "description": "Whether the item has one or more images."
        },
        "imageUrl": {
          "type": "string",
          "description": "Legacy convenience: URL of the first image. Present only when hasImage is true."
        },
        "createdAt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Creation time, Unix milliseconds."
        },
        "imageMime": {
          "type": "string",
          "description": "Legacy convenience: MIME type of the first image."
        },
        "imageSize": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Legacy convenience: size of the first image in bytes."
        },
        "updatedAt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Last-update time, Unix milliseconds."
        },
        "imageCount": {
          "type": "integer",
          "description": "Number of images attached to the item."
        }
      },
      "description": "The stored item."
    }
  }
}
store-item-tool annotations
{}
store-image-tool — Store Image in Clippy Room
Advertised by the server during the last successful anonymous check.

Post one or more images (PNG, JPEG, GIF, or WEBP) to a Clippy room so they appear on every device watching it, optionally with a text caption. Pass each image as a base64 string or a data: URI. The room is created if it does not exist. Subscribed devices get a push notification. Returns the stored item, including direct URLs to fetch each image.

store-image-tool input schema
{
  "type": "object",
  "required": [
    "room",
    "images"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link). The room is created if new."
    },
    "text": {
      "type": "string",
      "description": "Optional caption to store alongside the image(s). Up to 200,000 characters."
    },
    "device": {
      "type": "string",
      "description": "Optional short label for who is posting (max 64 chars). Defaults to \"AI Agent\"."
    },
    "images": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "minItems": 1,
      "description": "One or more images, each a base64-encoded PNG/JPEG/GIF/WEBP or a data: URI (e.g. \"data:image/png;base64,iVBOR...\"). Up to 10 images, 10 MB each."
    },
    "password": {
      "type": "string",
      "description": "Required only if the room is password-protected and you are not using owner_token."
    },
    "owner_token": {
      "type": "string",
      "description": "Optional. The room owner_token; bypasses the password on a locked room."
    }
  }
}
store-image-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "url",
    "item"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Human-shareable URL that opens the room on any device."
    },
    "code": {
      "type": "string",
      "description": "The room code the image was stored in."
    },
    "item": {
      "type": "object",
      "required": [
        "id",
        "device",
        "edited",
        "hasImage",
        "imageCount"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The item id (UUID)."
        },
        "text": {
          "type": [
            "string",
            "null"
          ],
          "description": "The text content, or null for image-only items."
        },
        "device": {
          "type": "string",
          "description": "Label for who posted the item."
        },
        "edited": {
          "type": "boolean",
          "description": "Whether the item was edited after it was created."
        },
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "description": "Absolute URL to fetch the image bytes."
              },
              "mime": {
                "type": "string",
                "description": "Image MIME type."
              },
              "size": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Image size in bytes."
              },
              "position": {
                "type": "integer",
                "description": "0-based position in the gallery."
              }
            }
          },
          "description": "Attached images, ordered by position. Present only when hasImage is true."
        },
        "hasImage": {
          "type": "boolean",
          "description": "Whether the item has one or more images."
        },
        "imageUrl": {
          "type": "string",
          "description": "Legacy convenience: URL of the first image. Present only when hasImage is true."
        },
        "createdAt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Creation time, Unix milliseconds."
        },
        "imageMime": {
          "type": "string",
          "description": "Legacy convenience: MIME type of the first image."
        },
        "imageSize": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Legacy convenience: size of the first image in bytes."
        },
        "updatedAt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Last-update time, Unix milliseconds."
        },
        "imageCount": {
          "type": "integer",
          "description": "Number of images attached to the item."
        }
      },
      "description": "The stored item, including image URLs."
    }
  }
}
store-image-tool annotations
{}
list-items-tool — List Clippy Room Items
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read the items in a Clippy room (newest first). Use this to pick up text a user or another agent left for you, or to see what is currently in a shared room. Pass `since` (a millisecond timestamp from a previous call) to fetch only items added after that point. Image items include direct image URLs.

list-items-tool input schema
{
  "type": "object",
  "required": [
    "room"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link)."
    },
    "limit": {
      "type": "integer",
      "description": "Optional. Maximum number of items to return (1–100). Defaults to 100."
    },
    "since": {
      "type": "integer",
      "description": "Optional. Return only items created strictly after this Unix timestamp in milliseconds. Use the `now` value from a previous call to poll incrementally."
    },
    "password": {
      "type": "string",
      "description": "Required only if the room is password-protected and you are not using owner_token."
    },
    "owner_token": {
      "type": "string",
      "description": "Optional. The room owner_token; bypasses the password on a locked room."
    }
  }
}
list-items-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "locked",
    "count",
    "items",
    "now"
  ],
  "properties": {
    "now": {
      "type": "integer",
      "description": "Server time in Unix milliseconds; pass as `since` next call to poll incrementally."
    },
    "code": {
      "type": "string",
      "description": "The room code that was read."
    },
    "count": {
      "type": "integer",
      "description": "Number of items returned."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "device",
          "edited",
          "hasImage",
          "imageCount"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The item id (UUID)."
          },
          "text": {
            "type": [
              "string",
              "null"
            ],
            "description": "The text content, or null for image-only items."
          },
          "device": {
            "type": "string",
            "description": "Label for who posted the item."
          },
          "edited": {
            "type": "boolean",
            "description": "Whether the item was edited after it was created."
          },
          "images": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "description": "Absolute URL to fetch the image bytes."
                },
                "mime": {
                  "type": "string",
                  "description": "Image MIME type."
                },
                "size": {
                  "type": [
                    "integer",
                    "null"
                  ],
                  "description": "Image size in bytes."
                },
                "position": {
                  "type": "integer",
                  "description": "0-based position in the gallery."
                }
              }
            },
            "description": "Attached images, ordered by position. Present only when hasImage is true."
          },
          "hasImage": {
            "type": "boolean",
            "description": "Whether the item has one or more images."
          },
          "imageUrl": {
            "type": "string",
            "description": "Legacy convenience: URL of the first image. Present only when hasImage is true."
          },
          "createdAt": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Creation time, Unix milliseconds."
          },
          "imageMime": {
            "type": "string",
            "description": "Legacy convenience: MIME type of the first image."
          },
          "imageSize": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Legacy convenience: size of the first image in bytes."
          },
          "updatedAt": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Last-update time, Unix milliseconds."
          },
          "imageCount": {
            "type": "integer",
            "description": "Number of images attached to the item."
          }
        }
      },
      "description": "The matching items, newest first."
    },
    "locked": {
      "type": "boolean",
      "description": "Whether the room is password-protected."
    }
  }
}
list-items-tool annotations
{
  "readOnlyHint": true,
  "idempotentHint": true
}
room-status-tool — Clippy Room Status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether a Clippy room exists, whether it is password-protected, and how many items it holds — without reading the contents. Handy before deciding to read or write, or to confirm a code a user gave you is valid.

room-status-tool input schema
{
  "type": "object",
  "required": [
    "room"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link)."
    }
  }
}
room-status-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "exists",
    "locked",
    "itemCount",
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Human-shareable URL for the room."
    },
    "code": {
      "type": "string",
      "description": "The room code that was checked."
    },
    "exists": {
      "type": "boolean",
      "description": "Whether the room currently exists."
    },
    "locked": {
      "type": "boolean",
      "description": "Whether the room is password-protected."
    },
    "itemCount": {
      "type": "integer",
      "description": "Number of items currently in the room."
    }
  }
}
room-status-tool annotations
{
  "readOnlyHint": true,
  "idempotentHint": true
}
update-item-tool — Update Clippy Item
Advertised by the server during the last successful anonymous check.

Edit the text of an existing item in a Clippy room, identified by its item id (the `id` field returned by store-item / list-items). Image bytes are immutable; this changes only the text.

update-item-tool input schema
{
  "type": "object",
  "required": [
    "room",
    "item_id",
    "text"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link)."
    },
    "text": {
      "type": "string",
      "description": "The new text. For a text-only item this cannot be empty — delete it instead."
    },
    "item_id": {
      "type": "string",
      "description": "The item id (UUID) to edit, as returned in the `id` field of a stored/listed item."
    },
    "password": {
      "type": "string",
      "description": "Required only if the room is password-protected and you are not using owner_token."
    },
    "owner_token": {
      "type": "string",
      "description": "Optional. The room owner_token; bypasses the password on a locked room."
    }
  }
}
update-item-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "item"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The room code containing the item."
    },
    "item": {
      "type": "object",
      "required": [
        "id",
        "device",
        "edited",
        "hasImage",
        "imageCount"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The item id (UUID)."
        },
        "text": {
          "type": [
            "string",
            "null"
          ],
          "description": "The text content, or null for image-only items."
        },
        "device": {
          "type": "string",
          "description": "Label for who posted the item."
        },
        "edited": {
          "type": "boolean",
          "description": "Whether the item was edited after it was created."
        },
        "images": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "description": "Absolute URL to fetch the image bytes."
              },
              "mime": {
                "type": "string",
                "description": "Image MIME type."
              },
              "size": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Image size in bytes."
              },
              "position": {
                "type": "integer",
                "description": "0-based position in the gallery."
              }
            }
          },
          "description": "Attached images, ordered by position. Present only when hasImage is true."
        },
        "hasImage": {
          "type": "boolean",
          "description": "Whether the item has one or more images."
        },
        "imageUrl": {
          "type": "string",
          "description": "Legacy convenience: URL of the first image. Present only when hasImage is true."
        },
        "createdAt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Creation time, Unix milliseconds."
        },
        "imageMime": {
          "type": "string",
          "description": "Legacy convenience: MIME type of the first image."
        },
        "imageSize": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Legacy convenience: size of the first image in bytes."
        },
        "updatedAt": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Last-update time, Unix milliseconds."
        },
        "imageCount": {
          "type": "integer",
          "description": "Number of images attached to the item."
        }
      },
      "description": "The updated item."
    }
  }
}
update-item-tool annotations
{}
delete-item-tool — Delete Clippy Item
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete a single item from a Clippy room by its item id (the `id` returned by store-item / list-items). Any images attached to the item are removed too. This cannot be undone.

delete-item-tool input schema
{
  "type": "object",
  "required": [
    "room",
    "item_id"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link)."
    },
    "item_id": {
      "type": "string",
      "description": "The item id (UUID) to delete."
    },
    "password": {
      "type": "string",
      "description": "Required only if the room is password-protected and you are not using owner_token."
    },
    "owner_token": {
      "type": "string",
      "description": "Optional. The room owner_token; bypasses the password on a locked room."
    }
  }
}
delete-item-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "deleted"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The room code that was targeted."
    },
    "deleted": {
      "type": "boolean",
      "description": "Whether an item was actually deleted (false if it did not exist)."
    }
  }
}
delete-item-tool annotations
{
  "destructiveHint": true
}
clear-room-tool — Clear Clippy Room
Advertised by the server during the last successful anonymous check.
Advertised destructive

Delete ALL items in a Clippy room (and their images). Use with care — this wipes everything shared in the room and cannot be undone. The room itself continues to exist and can be reused.

clear-room-tool input schema
{
  "type": "object",
  "required": [
    "room"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link)."
    },
    "password": {
      "type": "string",
      "description": "Required only if the room is password-protected and you are not using owner_token."
    },
    "owner_token": {
      "type": "string",
      "description": "Optional. The room owner_token; bypasses the password on a locked room."
    }
  }
}
clear-room-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "cleared"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The room code that was cleared."
    },
    "cleared": {
      "type": "integer",
      "description": "Number of items that were deleted."
    }
  }
}
clear-room-tool annotations
{
  "destructiveHint": true
}
set-room-password-tool — Set Clippy Room Password
Advertised by the server during the last successful anonymous check.

Lock or unlock a Clippy room. Requires the room owner_token (returned by create-room). Pass a password to lock the room; pass an empty password to remove the lock. Only the owner can change this.

set-room-password-tool input schema
{
  "type": "object",
  "required": [
    "room",
    "owner_token"
  ],
  "properties": {
    "room": {
      "type": "string",
      "description": "The 6-character room code (or a Clippy share URL / #CODE link)."
    },
    "password": {
      "type": "string",
      "description": "The new password to lock the room with. Pass an empty string to remove the password and make the room open."
    },
    "owner_token": {
      "type": "string",
      "description": "The room owner_token proving you own this room. Required."
    }
  }
}
set-room-password-tool output schema
{
  "type": "object",
  "required": [
    "code",
    "locked"
  ],
  "properties": {
    "code": {
      "type": "string",
      "description": "The room code whose lock state changed."
    },
    "locked": {
      "type": "boolean",
      "description": "Whether the room is now password-protected."
    }
  }
}
set-room-password-tool annotations
{}

Prompts

1 advertised

share-to-devices-prompt — Share to My Devices

Advertised by the server during the last successful anonymous check.

Guides the agent to put a piece of content into a fresh Clippy room and hand the user a link they can open on their phone, laptop, or any other device.

content
The text you want available on the user's other devices (a snippet, link, note, etc.). (required)

Resources

1 advertised

usage-guide-resource — Clippy Usage Guide

Advertised by the server during the last successful anonymous check.

A concise guide to what Clippy is and how an AI agent should use its tools to move content between itself, other agents, and a human's devices.

usage-guide-resource URI
file://resources/usage-guide-resource

MIME type: text/plain

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 2 of 2 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
5744 ms
95th percentile latency
5744 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 5744 ms · metadata changed · 9 tool(s), 1 resource(s), 0 resource template(s), 1 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http clippy-mcp-useclippy https://useclippy.cc/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add clippy-mcp-useclippy --url https://useclippy.cc/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable clippy-mcp-useclippy in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "clippy-mcp-useclippy": {
      "url": "https://useclippy.cc/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "clippy-mcp-useclippy": {
      "type": "streamableHttp",
      "url": "https://useclippy.cc/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start clippy-mcp-useclippy and inspect its tools.
VS Code configuration
{
  "servers": {
    "clippy-mcp-useclippy": {
      "type": "http",
      "url": "https://useclippy.cc/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http clippy-mcp-useclippy https://useclippy.cc/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://useclippy.cc/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "clippy-mcp-useclippy": {
      "serverUrl": "https://useclippy.cc/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Clippy MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.