clippy

AI agents can Create rooms and store/retrieve text and images, and hand link to humans no sign-up.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
99%
Qualität der Benennung
61%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Befunde (9)

  • LOWTool 'create-room-tool' doesn't follow camelCase/snake_casein create-room-tool
  • LOWTool 'store-item-tool' doesn't follow camelCase/snake_casein store-item-tool
  • LOWTool 'store-image-tool' doesn't follow camelCase/snake_casein store-image-tool
  • LOWTool 'list-items-tool' doesn't follow camelCase/snake_casein list-items-tool
  • LOWTool 'room-status-tool' doesn't follow camelCase/snake_casein room-status-tool
  • LOWTool 'update-item-tool' doesn't follow camelCase/snake_casein update-item-tool
  • LOWTool 'delete-item-tool' doesn't follow camelCase/snake_casein delete-item-tool
  • LOWTool 'clear-room-tool' doesn't follow camelCase/snake_casein clear-room-tool
  • LOWTool 'set-room-password-tool' doesn't follow camelCase/snake_casein set-room-password-tool

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~3,713Tokens (Tool-Definitionen)
~4.5 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (2.90% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "clippy": {
      "url": "https://useclippy.cc/mcp"
    }
  }
}

Remote-Endpunkte

https://useclippy.cc/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (9)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟡create-room-tool(password)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "password": {
      "description": "Optional. Lock the new room with this password so only holders of the password (or the owner_token) can read/write it.",
      "type": "string"
    }
  }
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The new 6-character room code.",
      "type": "string"
    },
    "url": {
      "description": "Human-shareable URL that opens the room on any device.",
      "type": "string"
    },
    "owner_token": {
      "description": "Private token granting password control over the room. Keep secret.",
      "type": "string"
    },
    "locked": {
      "description": "Whether the room is password-protected.",
      "type": "boolean"
    }
  },
  "required": [
    "code",
    "url",
    "owner_token",
    "locked"
  ]
}
🟡store-item-tool(room, text, device, password, owner_token)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link). The room is created if new.",
      "type": "string"
    },
    "text": {
      "description": "The text content to store (a snippet, link, message, etc.). Up to 200,000 characters.",
      "type": "string"
    },
    "device": {
      "description": "Optional short label for who is posting (max 64 chars). Defaults to \"AI Agent\" so humans can tell agent posts apart.",
      "type": "string"
    },
    "password": {
      "description": "Required only if the room is password-protected and you are not using owner_token.",
      "type": "string"
    },
    "owner_token": {
      "description": "Optional. The room owner_token; bypasses the password on a locked room.",
      "type": "string"
    }
  },
  "required": [
    "room",
    "text"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code the item was stored in.",
      "type": "string"
    },
    "url": {
      "description": "Human-shareable URL that opens the room on any device.",
      "type": "string"
    },
    "item": {
      "description": "The stored item.",
      "properties": {
        "id": {
          "description": "The item id (UUID).",
          "type": "string"
        },
        "text": {
          "description": "The text content, or null for image-only items.",
          "type": [
            "string",
            "null"
          ]
        },
        "device": {
          "description": "Label for who posted the item.",
          "type": "string"
        },
        "createdAt": {
          "description": "Creation time, Unix milliseconds.",
          "type": [
            "integer",
            "null"
          ]
        },
        "updatedAt": {
          "description": "Last-update time, Unix milliseconds.",
          "type": [
            "integer",
            "null"
          ]
        },
        "edited": {
          "description": "Whether the item was edited after it was created.",
          "type": "boolean"
        },
        "hasImage": {
          "description": "Whether the item has one or more images.",
          "type": "boolean"
        },
        "imageCount": {
          "description": "Number of images attached to the item.",
          "type": "integer"
        },
        "images": {
          "description": "Attached images, ordered by position. Present only when hasImage is true.",
          "items": {
            "properties": {
              "url": {
                "description": "Absolute URL to fetch the image bytes.",
                "type": "string"
              },
              "mime": {
                "description": "Image MIME type.",
                "type": "string"
              },
              "size": {
                "description": "Image size in bytes.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "position": {
                "description": "0-based position in the gallery.",
                "type": "integer"
              }
            },
            "type": "object",
            "required": [
              "url"
            ]
          },
          "type": "array"
        },
        "imageUrl": {
          "description": "Legacy convenience: URL of the first image. Present only when hasImage is true.",
          "type": "string"
        },
        "imageMime": {
          "description": "Legacy convenience: MIME type of the first image.",
          "type": "string"
        },
        "imageSize": {
          "description": "Legacy convenience: size of the first image in bytes.",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object",
      "required": [
        "id",
        "device",
        "edited",
        "hasImage",
        "imageCount"
      ]
    }
  },
  "required": [
    "code",
    "url",
    "item"
  ]
}
🟡store-image-tool(room, images, text, device, password, ...)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link). The room is created if new.",
      "type": "string"
    },
    "images": {
      "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.",
      "minItems": 1,
      "maxItems": 10,
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "text": {
      "description": "Optional caption to store alongside the image(s). Up to 200,000 characters.",
      "type": "string"
    },
    "device": {
      "description": "Optional short label for who is posting (max 64 chars). Defaults to \"AI Agent\".",
      "type": "string"
    },
    "password": {
      "description": "Required only if the room is password-protected and you are not using owner_token.",
      "type": "string"
    },
    "owner_token": {
      "description": "Optional. The room owner_token; bypasses the password on a locked room.",
      "type": "string"
    }
  },
  "required": [
    "room",
    "images"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code the image was stored in.",
      "type": "string"
    },
    "url": {
      "description": "Human-shareable URL that opens the room on any device.",
      "type": "string"
    },
    "item": {
      "description": "The stored item, including image URLs.",
      "properties": {
        "id": {
          "description": "The item id (UUID).",
          "type": "string"
        },
        "text": {
          "description": "The text content, or null for image-only items.",
          "type": [
            "string",
            "null"
          ]
        },
        "device": {
          "description": "Label for who posted the item.",
          "type": "string"
        },
        "createdAt": {
          "description": "Creation time, Unix milliseconds.",
          "type": [
            "integer",
            "null"
          ]
        },
        "updatedAt": {
          "description": "Last-update time, Unix milliseconds.",
          "type": [
            "integer",
            "null"
          ]
        },
        "edited": {
          "description": "Whether the item was edited after it was created.",
          "type": "boolean"
        },
        "hasImage": {
          "description": "Whether the item has one or more images.",
          "type": "boolean"
        },
        "imageCount": {
          "description": "Number of images attached to the item.",
          "type": "integer"
        },
        "images": {
          "description": "Attached images, ordered by position. Present only when hasImage is true.",
          "items": {
            "properties": {
              "url": {
                "description": "Absolute URL to fetch the image bytes.",
                "type": "string"
              },
              "mime": {
                "description": "Image MIME type.",
                "type": "string"
              },
              "size": {
                "description": "Image size in bytes.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "position": {
                "description": "0-based position in the gallery.",
                "type": "integer"
              }
            },
            "type": "object",
            "required": [
              "url"
            ]
          },
          "type": "array"
        },
        "imageUrl": {
          "description": "Legacy convenience: URL of the first image. Present only when hasImage is true.",
          "type": "string"
        },
        "imageMime": {
          "description": "Legacy convenience: MIME type of the first image.",
          "type": "string"
        },
        "imageSize": {
          "description": "Legacy convenience: size of the first image in bytes.",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object",
      "required": [
        "id",
        "device",
        "edited",
        "hasImage",
        "imageCount"
      ]
    }
  },
  "required": [
    "code",
    "url",
    "item"
  ]
}
🟢list-items-tool(room, since, limit, password, owner_token)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link).",
      "type": "string"
    },
    "since": {
      "description": "Optional. Return only items created strictly after this Unix timestamp in milliseconds. Use the `now` value from a previous call to poll incrementally.",
      "type": "integer"
    },
    "limit": {
      "description": "Optional. Maximum number of items to return (1–100). Defaults to 100.",
      "type": "integer"
    },
    "password": {
      "description": "Required only if the room is password-protected and you are not using owner_token.",
      "type": "string"
    },
    "owner_token": {
      "description": "Optional. The room owner_token; bypasses the password on a locked room.",
      "type": "string"
    }
  },
  "required": [
    "room"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code that was read.",
      "type": "string"
    },
    "locked": {
      "description": "Whether the room is password-protected.",
      "type": "boolean"
    },
    "count": {
      "description": "Number of items returned.",
      "type": "integer"
    },
    "items": {
      "description": "The matching items, newest first.",
      "items": {
        "properties": {
          "id": {
            "description": "The item id (UUID).",
            "type": "string"
          },
          "text": {
            "description": "The text content, or null for image-only items.",
            "type": [
              "string",
              "null"
            ]
          },
          "device": {
            "description": "Label for who posted the item.",
            "type": "string"
          },
          "createdAt": {
            "description": "Creation time, Unix milliseconds.",
            "type": [
              "integer",
              "null"
            ]
          },
          "updatedAt": {
            "description": "Last-update time, Unix milliseconds.",
            "type": [
              "integer",
              "null"
            ]
          },
          "edited": {
            "description": "Whether the item was edited after it was created.",
            "type": "boolean"
          },
          "hasImage": {
            "description": "Whether the item has one or more images.",
            "type": "boolean"
          },
          "imageCount": {
            "description": "Number of images attached to the item.",
            "type": "integer"
          },
          "images": {
            "description": "Attached images, ordered by position. Present only when hasImage is true.",
            "items": {
              "properties": {
                "url": {
                  "description": "Absolute URL to fetch the image bytes.",
                  "type": "string"
                },
                "mime": {
                  "description": "Image MIME type.",
                  "type": "string"
                },
                "size": {
                  "description": "Image size in bytes.",
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "position": {
                  "description": "0-based position in the gallery.",
                  "type": "integer"
                }
              },
              "type": "object",
              "required": [
                "url"
              ]
            },
            "type": "array"
          },
          "imageUrl": {
            "description": "Legacy convenience: URL of the first image. Present only when hasImage is true.",
            "type": "string"
          },
          "imageMime": {
            "description": "Legacy convenience: MIME type of the first image.",
            "type": "string"
          },
          "imageSize": {
            "description": "Legacy convenience: size of the first image in bytes.",
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "type": "object",
        "required": [
          "id",
          "device",
          "edited",
          "hasImage",
          "imageCount"
        ]
      },
      "type": "array"
    },
    "now": {
      "description": "Server time in Unix milliseconds; pass as `since` next call to poll incrementally.",
      "type": "integer"
    }
  },
  "required": [
    "code",
    "locked",
    "count",
    "items",
    "now"
  ]
}
🟢room-status-tool(room)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link).",
      "type": "string"
    }
  },
  "required": [
    "room"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code that was checked.",
      "type": "string"
    },
    "exists": {
      "description": "Whether the room currently exists.",
      "type": "boolean"
    },
    "locked": {
      "description": "Whether the room is password-protected.",
      "type": "boolean"
    },
    "itemCount": {
      "description": "Number of items currently in the room.",
      "type": "integer"
    },
    "url": {
      "description": "Human-shareable URL for the room.",
      "type": "string"
    }
  },
  "required": [
    "code",
    "exists",
    "locked",
    "itemCount",
    "url"
  ]
}
🟡update-item-tool(room, item_id, text, password, owner_token)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link).",
      "type": "string"
    },
    "item_id": {
      "description": "The item id (UUID) to edit, as returned in the `id` field of a stored/listed item.",
      "type": "string"
    },
    "text": {
      "description": "The new text. For a text-only item this cannot be empty — delete it instead.",
      "type": "string"
    },
    "password": {
      "description": "Required only if the room is password-protected and you are not using owner_token.",
      "type": "string"
    },
    "owner_token": {
      "description": "Optional. The room owner_token; bypasses the password on a locked room.",
      "type": "string"
    }
  },
  "required": [
    "room",
    "item_id",
    "text"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code containing the item.",
      "type": "string"
    },
    "item": {
      "description": "The updated item.",
      "properties": {
        "id": {
          "description": "The item id (UUID).",
          "type": "string"
        },
        "text": {
          "description": "The text content, or null for image-only items.",
          "type": [
            "string",
            "null"
          ]
        },
        "device": {
          "description": "Label for who posted the item.",
          "type": "string"
        },
        "createdAt": {
          "description": "Creation time, Unix milliseconds.",
          "type": [
            "integer",
            "null"
          ]
        },
        "updatedAt": {
          "description": "Last-update time, Unix milliseconds.",
          "type": [
            "integer",
            "null"
          ]
        },
        "edited": {
          "description": "Whether the item was edited after it was created.",
          "type": "boolean"
        },
        "hasImage": {
          "description": "Whether the item has one or more images.",
          "type": "boolean"
        },
        "imageCount": {
          "description": "Number of images attached to the item.",
          "type": "integer"
        },
        "images": {
          "description": "Attached images, ordered by position. Present only when hasImage is true.",
          "items": {
            "properties": {
              "url": {
                "description": "Absolute URL to fetch the image bytes.",
                "type": "string"
              },
              "mime": {
                "description": "Image MIME type.",
                "type": "string"
              },
              "size": {
                "description": "Image size in bytes.",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "position": {
                "description": "0-based position in the gallery.",
                "type": "integer"
              }
            },
            "type": "object",
            "required": [
              "url"
            ]
          },
          "type": "array"
        },
        "imageUrl": {
          "description": "Legacy convenience: URL of the first image. Present only when hasImage is true.",
          "type": "string"
        },
        "imageMime": {
          "description": "Legacy convenience: MIME type of the first image.",
          "type": "string"
        },
        "imageSize": {
          "description": "Legacy convenience: size of the first image in bytes.",
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "type": "object",
      "required": [
        "id",
        "device",
        "edited",
        "hasImage",
        "imageCount"
      ]
    }
  },
  "required": [
    "code",
    "item"
  ]
}
🔴delete-item-tool(room, item_id, password, owner_token)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link).",
      "type": "string"
    },
    "item_id": {
      "description": "The item id (UUID) to delete.",
      "type": "string"
    },
    "password": {
      "description": "Required only if the room is password-protected and you are not using owner_token.",
      "type": "string"
    },
    "owner_token": {
      "description": "Optional. The room owner_token; bypasses the password on a locked room.",
      "type": "string"
    }
  },
  "required": [
    "room",
    "item_id"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code that was targeted.",
      "type": "string"
    },
    "deleted": {
      "description": "Whether an item was actually deleted (false if it did not exist).",
      "type": "boolean"
    }
  },
  "required": [
    "code",
    "deleted"
  ]
}
🔴clear-room-tool(room, password, owner_token)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link).",
      "type": "string"
    },
    "password": {
      "description": "Required only if the room is password-protected and you are not using owner_token.",
      "type": "string"
    },
    "owner_token": {
      "description": "Optional. The room owner_token; bypasses the password on a locked room.",
      "type": "string"
    }
  },
  "required": [
    "room"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code that was cleared.",
      "type": "string"
    },
    "cleared": {
      "description": "Number of items that were deleted.",
      "type": "integer"
    }
  },
  "required": [
    "code",
    "cleared"
  ]
}
🔴set-room-password-tool(room, owner_token, password)

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.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "room": {
      "description": "The 6-character room code (or a Clippy share URL / #CODE link).",
      "type": "string"
    },
    "owner_token": {
      "description": "The room owner_token proving you own this room. Required.",
      "type": "string"
    },
    "password": {
      "description": "The new password to lock the room with. Pass an empty string to remove the password and make the room open.",
      "type": "string"
    }
  },
  "required": [
    "room",
    "owner_token"
  ]
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "code": {
      "description": "The room code whose lock state changed.",
      "type": "string"
    },
    "locked": {
      "description": "Whether the room is now password-protected.",
      "type": "boolean"
    }
  },
  "required": [
    "code",
    "locked"
  ]
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet9 Tools
verifiziertVersion nicht aufgezeichnet9 Tools
verifiziertVersion nicht aufgezeichnet9 Tools