protogrid

Search / io.github.jueluddinsf/handoff

Handoff: Send Files to Users & Agents

R0· no sign-in

Send a file to a user or agent as a share link with expiry, max opens, approval, revoke and logs.

v1.0.1 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality72needs work
Trust97of 100
Uptime, 30 days100%
Latency p50827 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "handoff": {
      "type": "http",
      "url": "https://hand-off.space/mcp",
      "headers": {
        "Authorization": "Bearer ${HANDOFF_TOKEN}"
      }
    }
  }
}
claude mcp add --transport http handoff https://hand-off.space/mcp --header "Authorization: Bearer ${HANDOFF_TOKEN}"
[mcp_servers.handoff]
url = "https://hand-off.space/mcp"
bearer_token_env_var = "HANDOFF_TOKEN"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "handoff": {
      "type": "remote",
      "url": "https://hand-off.space/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer {env:HANDOFF_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "handoff": {
      "type": "http",
      "url": "https://hand-off.space/mcp",
      "headers": {
        "Authorization": "Bearer ${HANDOFF_TOKEN}"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=handoff&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vaGFuZC1vZmYuc3BhY2UvbWNwIiwiaGVhZGVycyI6eyJBdXRob3JpemF0aW9uIjoiQmVhcmVyICR7SEFORE9GRl9UT0tFTn0ifX0%3D"
}
{
  "servers": {
    "handoff": {
      "type": "http",
      "url": "https://hand-off.space/mcp",
      "headers": {
        "Authorization": "Bearer ${HANDOFF_TOKEN}"
      }
    }
  }
}
{
  "mcpServers": {
    "handoff": {
      "httpUrl": "https://hand-off.space/mcp",
      "headers": {
        "Authorization": "Bearer ${HANDOFF_TOKEN}"
      }
    }
  }
}
extensions:
  "handoff":
    enabled: true
    name: "handoff"
    type: streamable_http
    uri: "https://hand-off.space/mcp"
    headers:
      "Authorization": "Bearer ${HANDOFF_TOKEN}"
    timeout: 300

Placeholders to fill from your own secret store: ${HANDOFF_TOKEN}. The registry never accepts secret values.

Quality 72 / 100needs work

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
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 hygiene93 · 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.annotations14 of 14 tools declare readOnlyHint or destructiveHint
  • warn
    tools.directory_hints2 of 14 tools declare all four hints; missing: signup (openWorldHint); save_file (openWorldHint); create_share_link (openWorldHint); …
  • pass
    tools.token_costabout 3,503 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability25 · weight 15
  • warn
    stability.changes14 tool changes in 30 days
  • fail
    stability.rug_pull1 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

14 tools, about 3,503 tokens to load them all · tool set e2d10f4d1fb6 · tools last changed 2026-10-30 · checked 2026-11-07 18:35 UTC

Tool changes

  • update_shareadded

    Set when an owned share expires. expires_in_hours is measured from now. Example: 168 for 7 days. Does not return the token. Requires your API key.

  • list_sharesadded

    List grants you own. Pass file_id to limit the list to one file. Returns grant_id, status, open_count, max_opens, expires_at, and audience. Does not return tokens or download urls. Requires your API key.

  • delete_fileadded

    Delete a file you own. The bytes are removed and existing share links stop working. Requires your API key.

  • fetch_shared_filechangedtitle, annotations
  • get_access_logchangedtitle, input schema, annotations
  • revoke_sharechangedtitle, input schema, annotations
  • deny_sharechangedtitle, input schema, annotations
  • approve_sharechangedtitle, input schema, annotations
  • get_share_statuschangedtitle, input schema, annotations
  • create_share_linkchangedtitle, description, input schema, output schema, annotations
    before

    Create a controlled download link for a file you own. Use this when a person or another agent should fetch the file. The response includes url and token ONCE. Save the url immediately. Later status calls do not return it. Download with GET on that url. Requires your API key.

    after · 79% of words in common

    Create a controlled download link for a file you own. Use this when a person or another agent should fetch the file. The response includes url and token ONCE, plus expires_at and max_opens. Save the url immediately. Later status calls do not return it. When expires_in_hours is omitted, the link expires in 7 days. Download with GET on that url. Requires your API key.

Showing the latest 10. Full history: list_changes · trend: quality JSON.

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 97 / 100

provenance90
liveness100
freshness100
hygiene100

+repository +namespace-matches-repo +website +reachable +uptime-100% +updated-9d-ago

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://hand-off.space/mcp streamable-httpnoneyes100%827 ms2025-11-252026-11-07

Tools (14)

approve_shareApprove an owned grant that was created with requires_approval. Opens stay blocked until this succeeds. Requires your API key.
create_share_linkCreate a controlled download link for a file you own. Use this when a person or another agent should fetch the file. The response includes url and token ONCE, plus expires_at and max_opens. Save the url immediately. Later status calls do not return it. When expires_in_hours is omitted, the link expires in 7 days. Download with GET on that url. Requires your API key.
delete_filedestructiveDelete a file you own. The bytes are removed and existing share links stop working. Requires your API key.
deny_sharedestructiveDeny an owned grant. A denied grant stays blocked. Requires your API key.
fetch_shared_fileread-onlyDownload a file from a share url or token. Use this when you were given a Handoff url and need the bytes. Honors expiry, open limits, approval, and agent audience. anyone_with_link needs no key. An agent audience uses your API key. Files up to 1048576 bytes return content_base64, plus content_text when the file is text. Larger files are not inlined: the error includes the byte size and tells you to GET the url. A successful inline return counts as an open. A file over the inline limit does not.
get_access_logread-onlyRead the latest 1000 access attempts for an owned grant, including refused downloads. Use this to see whether a share was opened. Requires your API key.
get_share_statusread-onlyRead an owned grant: token_prefix (not the secret), audience, approval, expiry, revocation, and open_count. Does not download the file and does not return the share URL. Requires your API key.
list_filesread-onlyList this account's files, newest first, up to 1000. Use this to find a file_id before sharing. Returns metadata only, never bytes or download URLs. Requires your API key.
list_sharesread-onlyList grants you own. Pass file_id to limit the list to one file. Returns grant_id, status, open_count, max_opens, expires_at, and audience. Does not return tokens or download urls. Requires your API key.
revoke_sharedestructivePermanently revoke an owned share. Later downloads fail. This cannot be undone and does not delete the file. Requires your API key.
save_fileSave a private file for this account. Pass name and content_text or content_base64. Returns the file id and metadata. Does not share the file. Requires your API key.
share_fileShare a file in one call and get a download link. Pass name and content_text (or content_base64). Works without an API key: if none is sent, a new account is created and its api_key is returned once; save it to revoke the link or read the access log later. Default link: anyone with the link, expires in 7 days.
signupCreate a Handoff account and return an API key once. No Authorization header is required. Save api_key. On later calls send Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass api_key only if you cannot set headers. share_file can create this key for you. The key is a secret. Do not put it in a file you share.
update_shareSet when an owned share expires. expires_in_hours is measured from now. Example: 168 for 7 days. Does not return the token. Requires your API key.

Schemas: list_tools.

More from io.github.jueluddinsf

Official server.json
{
  "name": "io.github.jueluddinsf/handoff",
  "title": "Handoff: Send Files to Users & Agents",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://hand-off.space/mcp",
      "type": "streamable-http",
      "headers": [
        {
          "name": "Authorization",
          "isSecret": true,
          "description": "API key from signup. Send Authorization: Bearer and the hf_ key, or the bare key. Not required to connect or list tools."
        }
      ]
    }
  ],
  "version": "1.0.1",
  "repository": {
    "url": "https://github.com/jueluddinsf/handoff-mcp",
    "source": "github"
  },
  "websiteUrl": "https://hand-off.space",
  "description": "Send a file to a user or agent as a share link with expiry, max opens, approval, revoke and logs."
}