Koskamo

Handoff MCP

Provides AI agents with private file storage and controlled sharing capabilities via share links with expiry, open limits, and approval workflows. Supports saving files, listing files, creating share links, managing access, and downloading shared content through REST and MCP interfaces.

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.

Handoff MCP logo, by jueluddinsfCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by jueluddinsf
MCP endpoint (Streamable HTTP)
https://hand-off.space/mcp
Vendor documentation

What you can do with it

  • Save a file and generate a share link with expiry and open limits
  • Store private files for agent use without human signup
  • Approve or deny access to shared files requiring approval
  • List and manage file grants and access logs

Source and maintenance

Community listingRegistry 1.0.1
Maintenance checked

Protocol and capabilities

Server
io.github.jueluddinsf/handoff 1.0.1
MCP protocol
2025-06-18
Tools
14 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

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

To send a file, call share_file. Send a file to a user or agent as a share link with expiry, max opens, approval, revoke and logs. Save api_key when you receive one. Then send Authorization: Bearer <api_key>, the bare key, or X-Handoff-Api-Key. Pass api_key only if you cannot set headers. save_file stores a private file. create_share_link returns a download url once and expires in 7 days when expires_in_hours is omitted. get_share_status does not return that url. list_shares lists grant ids, status, opens, and expiry without tokens. update_share sets a new expiry. delete_file removes a file. fetch_shared_file downloads a share url.

Tools

14 advertised

share_file — Share a file
Advertised by the server during the last successful anonymous check.
Open-world

Share 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.

share_file input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "ref": {
      "type": "string",
      "pattern": "^[a-z0-9._-]+$",
      "maxLength": 64,
      "minLength": 1,
      "description": "Optional attribution label. Lowercase letters, digits, dot, underscore, or hyphen. At most 64 characters."
    },
    "mime": {
      "type": "string",
      "pattern": "^[\\w.+-]+\\/[\\w.+-]+$",
      "maxLength": 200,
      "description": "MIME type. Inferred from the file name when omitted."
    },
    "name": {
      "type": "string",
      "pattern": "^[^/\\\\\\x00-\\x1f]+$",
      "maxLength": 255,
      "minLength": 1,
      "description": "File name with an extension. No slashes or control characters."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "audience": {
      "enum": [
        "anyone_with_link",
        "agent"
      ],
      "type": "string",
      "description": "Default anyone_with_link."
    },
    "max_opens": {
      "type": "integer",
      "maximum": 2147483647,
      "description": "Successful downloads allowed. Omit for no limit.",
      "exclusiveMinimum": 0
    },
    "content_text": {
      "type": "string",
      "maxLength": 70000000,
      "description": "UTF-8 text. Pass exactly one of content_text or content_base64."
    },
    "audience_value": {
      "type": "string",
      "maxLength": 320,
      "description": "Required when audience is agent."
    },
    "content_base64": {
      "type": "string",
      "maxLength": 70000000,
      "description": "Standard or url-safe base64. A data:*;base64, prefix is stripped. Example: aGk="
    },
    "expires_in_hours": {
      "type": "number",
      "maximum": 87600,
      "description": "Hours until the link expires. Default 168 (7 days).",
      "exclusiveMinimum": 0
    },
    "requires_approval": {
      "type": "boolean",
      "description": "Default false. When true, downloads wait until the owner approves."
    }
  },
  "additionalProperties": false
}
share_file output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url",
    "expires_at",
    "max_opens",
    "requires_approval",
    "file_id",
    "grant_id",
    "token_prefix",
    "next"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "next": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "required": [
            "header",
            "mcp_url",
            "if_no_headers",
            "configs",
            "first_call"
          ],
          "properties": {
            "header": {
              "type": "string"
            },
            "configs": {
              "type": "object",
              "required": [
                "claude_code",
                "cursor_json"
              ],
              "properties": {
                "claude_code": {
                  "type": "string"
                },
                "cursor_json": {
                  "type": "object",
                  "required": [
                    "mcpServers"
                  ],
                  "properties": {
                    "mcpServers": {
                      "type": "object",
                      "required": [
                        "handoff"
                      ],
                      "properties": {
                        "handoff": {
                          "type": "object",
                          "required": [
                            "url",
                            "headers"
                          ],
                          "properties": {
                            "url": {
                              "type": "string"
                            },
                            "headers": {
                              "type": "object",
                              "required": [
                                "Authorization"
                              ],
                              "properties": {
                                "Authorization": {
                                  "type": "string"
                                }
                              },
                              "additionalProperties": false
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            },
            "mcp_url": {
              "type": "string"
            },
            "first_call": {
              "type": "string"
            },
            "if_no_headers": {
              "type": "string"
            }
          },
          "additionalProperties": false
        }
      ]
    },
    "api_key": {
      "type": "string"
    },
    "file_id": {
      "type": "string"
    },
    "grant_id": {
      "type": "string"
    },
    "max_opens": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ]
    },
    "expires_at": {
      "type": "string"
    },
    "token_prefix": {
      "type": "string"
    },
    "requires_approval": {
      "type": "boolean"
    }
  },
  "additionalProperties": false
}
share_file annotations
{
  "title": "Share a file",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
signup — Create an account
Advertised by the server during the last successful anonymous check.

Create 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.

signup input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "ref": {
      "type": "string",
      "pattern": "^[a-z0-9._-]+$",
      "maxLength": 64,
      "minLength": 1,
      "description": "Optional attribution label. Lowercase letters, digits, dot, underscore, or hyphen. At most 64 characters."
    },
    "agent_id": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9_-]+$",
      "maxLength": 80,
      "minLength": 1,
      "description": "Optional label, unique across Handoff. Letters, numbers, underscore, and hyphen."
    }
  },
  "additionalProperties": false
}
signup output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "account_id",
    "api_key",
    "agent_id",
    "caps",
    "next"
  ],
  "properties": {
    "caps": {
      "type": "object",
      "required": [
        "total_mb",
        "files",
        "opens_per_day",
        "file_mb"
      ],
      "properties": {
        "files": {
          "type": "number"
        },
        "file_mb": {
          "type": "number"
        },
        "total_mb": {
          "type": "number"
        },
        "opens_per_day": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "next": {
      "type": "object",
      "required": [
        "header",
        "mcp_url",
        "if_no_headers",
        "configs",
        "first_call"
      ],
      "properties": {
        "header": {
          "type": "string"
        },
        "configs": {
          "type": "object",
          "required": [
            "claude_code",
            "cursor_json"
          ],
          "properties": {
            "claude_code": {
              "type": "string"
            },
            "cursor_json": {
              "type": "object",
              "required": [
                "mcpServers"
              ],
              "properties": {
                "mcpServers": {
                  "type": "object",
                  "required": [
                    "handoff"
                  ],
                  "properties": {
                    "handoff": {
                      "type": "object",
                      "required": [
                        "url",
                        "headers"
                      ],
                      "properties": {
                        "url": {
                          "type": "string"
                        },
                        "headers": {
                          "type": "object",
                          "required": [
                            "Authorization"
                          ],
                          "properties": {
                            "Authorization": {
                              "type": "string"
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "additionalProperties": false
                    }
                  },
                  "additionalProperties": false
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "mcp_url": {
          "type": "string"
        },
        "first_call": {
          "type": "string"
        },
        "if_no_headers": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "api_key": {
      "type": "string"
    },
    "agent_id": {
      "type": "string"
    },
    "account_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
signup annotations
{
  "title": "Create an account",
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
save_file — Save a file
Advertised by the server during the last successful anonymous check.

Save 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.

save_file input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "mime": {
      "type": "string",
      "pattern": "^[\\w.+-]+\\/[\\w.+-]+$",
      "maxLength": 200,
      "description": "MIME type. Inferred from the file name when omitted."
    },
    "name": {
      "type": "string",
      "pattern": "^[^/\\\\\\x00-\\x1f]+$",
      "maxLength": 255,
      "minLength": 1,
      "description": "File name with an extension. No slashes or control characters."
    },
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "content_text": {
      "type": "string",
      "maxLength": 70000000,
      "description": "UTF-8 text. Pass exactly one of content_text or content_base64."
    },
    "content_base64": {
      "type": "string",
      "maxLength": 70000000,
      "description": "Standard or url-safe base64. A data:*;base64, prefix is stripped. Example: aGk="
    }
  },
  "additionalProperties": false
}
save_file annotations
{
  "title": "Save a file",
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
list_files — List files
Advertised by the server during the last successful anonymous check.
Advertised read-only

List 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_files input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    }
  },
  "additionalProperties": false
}
list_files annotations
{
  "title": "List files",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
create_share_link — Create a share link
Advertised by the server during the last successful anonymous check.

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.

create_share_link input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file_id",
    "audience"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "file_id": {
      "type": "string",
      "minLength": 1,
      "description": "File id returned by save_file or list_files."
    },
    "audience": {
      "enum": [
        "anyone_with_link",
        "agent"
      ],
      "type": "string",
      "description": "anyone_with_link: whoever has the saved url. agent: only the registered agent_id in audience_value."
    },
    "max_opens": {
      "type": "integer",
      "maximum": 2147483647,
      "description": "Successful downloads allowed. The next one is refused.",
      "exclusiveMinimum": 0
    },
    "audience_value": {
      "type": "string",
      "maxLength": 320,
      "description": "Required for agent: the recipient's registered agent_id. Example: their-agent"
    },
    "expires_in_hours": {
      "type": "number",
      "maximum": 87600,
      "description": "Hours until the link expires. Default 168 (7 days) when omitted.",
      "exclusiveMinimum": 0
    },
    "requires_approval": {
      "type": "boolean",
      "default": false,
      "description": "When true, downloads wait until the owner approves the grant."
    }
  },
  "additionalProperties": false
}
create_share_link output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id",
    "url",
    "token",
    "token_prefix",
    "expires_at",
    "max_opens"
  ],
  "properties": {
    "url": {
      "type": "string"
    },
    "token": {
      "type": "string"
    },
    "grant_id": {
      "type": "string"
    },
    "max_opens": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ]
    },
    "expires_at": {
      "type": "string"
    },
    "token_prefix": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
create_share_link annotations
{
  "title": "Create a share link",
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_share_status — Get share status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read 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.

get_share_status input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "grant_id": {
      "type": "string",
      "minLength": 1,
      "description": "grant_id returned when the share was created."
    }
  },
  "additionalProperties": false
}
get_share_status annotations
{
  "title": "Get share status",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
approve_share — Approve a share
Advertised by the server during the last successful anonymous check.

Approve an owned grant that was created with requires_approval. Opens stay blocked until this succeeds. Requires your API key.

approve_share input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "grant_id": {
      "type": "string",
      "minLength": 1,
      "description": "grant_id returned when the share was created."
    }
  },
  "additionalProperties": false
}
approve_share annotations
{
  "title": "Approve a share",
  "readOnlyHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
deny_share — Deny a share
Advertised by the server during the last successful anonymous check.
Advertised destructive

Deny an owned grant. A denied grant stays blocked. Requires your API key.

deny_share input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "grant_id": {
      "type": "string",
      "minLength": 1,
      "description": "grant_id of the share to deny."
    }
  },
  "additionalProperties": false
}
deny_share annotations
{
  "title": "Deny a share",
  "readOnlyHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
revoke_share — Revoke a share
Advertised by the server during the last successful anonymous check.
Advertised destructive

Permanently revoke an owned share. Later downloads fail. This cannot be undone and does not delete the file. Requires your API key.

revoke_share input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "grant_id": {
      "type": "string",
      "minLength": 1,
      "description": "grant_id of the share to revoke."
    }
  },
  "additionalProperties": false
}
revoke_share annotations
{
  "title": "Revoke a share",
  "readOnlyHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
get_access_log — Get access log
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read 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_access_log input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "grant_id": {
      "type": "string",
      "minLength": 1,
      "description": "grant_id of the share to audit."
    }
  },
  "additionalProperties": false
}
get_access_log annotations
{
  "title": "Get access log",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch_shared_file — Fetch a shared file
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Download 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.

fetch_shared_file input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url_or_token"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "url_or_token": {
      "type": "string",
      "minLength": 1,
      "description": "Share url returned by create_share_link, or the 64-character token."
    }
  },
  "additionalProperties": false
}
fetch_shared_file annotations
{
  "title": "Fetch a shared file",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
delete_file — Delete a file
Advertised by the server during the last successful anonymous check.
Advertised destructive

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

delete_file input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file_id"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "file_id": {
      "type": "string",
      "minLength": 1,
      "description": "File id returned by save_file, list_files, or share_file."
    }
  },
  "additionalProperties": false
}
delete_file output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file_id",
    "deleted"
  ],
  "properties": {
    "deleted": {
      "type": "boolean",
      "const": true
    },
    "file_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
delete_file annotations
{
  "title": "Delete a file",
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": true
}
list_shares — List shares
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

list_shares input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "file_id": {
      "type": "string",
      "minLength": 1,
      "description": "Optional file id. Omit to list every grant on this account."
    }
  },
  "additionalProperties": false
}
list_shares annotations
{
  "title": "List shares",
  "readOnlyHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
update_share — Update share expiry
Advertised by the server during the last successful anonymous check.

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.

update_share input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id",
    "expires_in_hours"
  ],
  "properties": {
    "api_key": {
      "type": "string",
      "minLength": 1,
      "description": "Secret API key from signup. Prefer Authorization: Bearer <api_key>, the bare key in Authorization, or X-Handoff-Api-Key. Pass this only when you cannot set headers. Do not write it into a file you share."
    },
    "grant_id": {
      "type": "string",
      "minLength": 1
    },
    "expires_in_hours": {
      "type": "number",
      "maximum": 87600,
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
update_share output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "grant_id",
    "file_id",
    "status",
    "open_count",
    "max_opens",
    "expires_at",
    "audience"
  ],
  "properties": {
    "status": {
      "type": "string"
    },
    "file_id": {
      "type": "string"
    },
    "audience": {
      "type": "string"
    },
    "grant_id": {
      "type": "string"
    },
    "max_opens": {
      "type": [
        "number",
        "null"
      ]
    },
    "expires_at": {
      "type": [
        "string",
        "null"
      ]
    },
    "open_count": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
update_share annotations
{
  "title": "Update share expiry",
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
731 ms
95th percentile latency
731 ms

Maintenance history

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

  • · probe · passed · 731 ms · metadata changed · 14 tool(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 handoff-mcp-hand-off https://hand-off.space/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 handoff-mcp-hand-off --url https://hand-off.space/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable handoff-mcp-hand-off in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "handoff-mcp-hand-off": {
      "url": "https://hand-off.space/mcp"
    }
  }
}

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start handoff-mcp-hand-off and inspect its tools.
VS Code configuration
{
  "servers": {
    "handoff-mcp-hand-off": {
      "type": "http",
      "url": "https://hand-off.space/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 handoff-mcp-hand-off https://hand-off.space/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "handoff-mcp-hand-off": {
      "url": "https://hand-off.space/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": {
    "handoff-mcp-hand-off": {
      "serverUrl": "https://hand-off.space/mcp"
    }
  }
}

Let your agent find its tools

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