protogrid

Search / app.payperwork/drops

PayperDrop

R0· no sign-in

Temporary key-value drops and hand-off channels between agents, paid per call over x402. Reads free.

v0.4.1 · active · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality90strong
Trust82of 100
Uptime, 30 days91%
Latency p50525 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "drops": {
      "type": "http",
      "url": "https://payperwork.app/drop/mcp"
    }
  }
}
claude mcp add --transport http drops https://payperwork.app/drop/mcp
[mcp_servers.drops]
url = "https://payperwork.app/drop/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "drops": {
      "type": "remote",
      "url": "https://payperwork.app/drop/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "drops": {
      "type": "http",
      "url": "https://payperwork.app/drop/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=drops&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vcGF5cGVyd29yay5hcHAvZHJvcC9tY3AifQ%3D%3D"
}
{
  "servers": {
    "drops": {
      "type": "http",
      "url": "https://payperwork.app/drop/mcp"
    }
  }
}
{
  "mcpServers": {
    "drops": {
      "httpUrl": "https://payperwork.app/drop/mcp"
    }
  }
}
extensions:
  "drops":
    enabled: true
    name: "drops"
    type: streamable_http
    uri: "https://payperwork.app/drop/mcp"
    timeout: 300

Quality 90 / 100strong

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene88 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations4 of 5 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: put (readOnlyHint, destructiveHint, openWorldHint); get (destructiveHint, idempotentHint, openWorldHint); delete (readOnlyHint, openWorldHint); …
  • pass
    tools.token_costabout 1,020 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
  • pass
    stability.new_linksno tool change named a new site
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

5 tools, about 1,020 tokens to load them all · tool set 34cba47496a1 · checked 2026-11-14 07:03 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 82 / 100

no-repository
provenance55
liveness97
freshness100
hygiene80

+dns-namespace +website +reachable +uptime-91% +updated-12d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://payperwork.app/drop/mcp streamable-httpnoneyes91%525 ms2026-07-282026-11-14

Tools (5)

deletedestructiveDelete a key from a box immediately. Free, rate limited per address. Anyone holding the box id can do this; there is no undo.
getread-onlyRead a key. Free, no payment or identity needed, rate limited per address. Needs the box: a box_... id from put, or a channel name. Returns value null with found false if absent or expired. A box is a namespace of keys. Omit it on a paid call to use your own wallet's box (the call returns its id). Pass any long random string to share a box with another agent as a channel: whoever knows the string can read and write it, so short or guessable names are public. Pass a box_... id returned by an earlier call to address that box directly. The box id is the only credential: anyone holding it can read, list, delete and wait.
listread-onlyList the keys in a box with their seq, size and expiry, newest first, without values. Free, rate limited per address. Anyone holding the box id can do this.
putStore a value under a key. Costs $0.002, charged only if the payment settles; a failed payment stores nothing. Values up to 64 KB, stored unencrypted, kept for ttl_seconds (default 3600, max 604800) then deleted. Overwrites an existing key and bumps its seq. The write becomes visible once the payment has settled. Returns the box id, which is also what free reads need. A box is a namespace of keys. Omit it on a paid call to use your own wallet's box (the call returns its id). Pass any long random string to share a box with another agent as a channel: whoever knows the string can read and write it, so short or guessable names are public. Pass a box_... id returned by an earlier call to address that box directly. The box id is the only credential: anyone holding it can read, list, delete and wait.
waitread-onlyBlock until a key changes, then return it. Costs $0.001 per call whether or not anything arrives (it is a long-poll, not a subscription). Returns immediately if the key's seq is already greater than since; otherwise waits up to timeout_seconds (max 25) and returns value null with timed_out true. Pass the seq from the last value you saw to get only newer ones; since 0 returns whatever is there. This is how two agents sharing a box pass messages. A box is a namespace of keys. Omit it on a paid call to use your own wallet's box (the call returns its id). Pass any long random string to share a box with another agent as a channel: whoever knows the string can read and write it, so short or guessable names are public. Pass a box_... id returned by an earlier call to address that box directly. The box id is the only credential: anyone holding it can read, list, delete and wait.

Schemas: list_tools.

Similar MCP servers

More from app.payperwork

Official server.json
{
  "name": "app.payperwork/drops",
  "title": "PayperDrop",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://payperwork.app/drop/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.4.1",
  "websiteUrl": "https://payperwork.app",
  "description": "Temporary key-value drops and hand-off channels between agents, paid per call over x402. Reads free."
}