Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Beschreibung vom Entwickler (englisches Original)
Send a file to a user or agent as a share link with expiry, max opens, approval, revoke and logs.
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
AuthorizationAls geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Diese Adresse braucht einen Schlüssel in einem Header der Anfrage, und das Menü zum Hinzufügen von Connectors kann ihn nicht setzen. Nutze stattdessen Claude Code, Cursor oder VS Code.
Führe das in deinem Terminal aus
claude mcp add --transport http handoff https://hand-off.space/mcp --header 'Authorization: your-value'Trag die leeren Werte ein, bevor du ihn startest.
In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"handoff": {
"url": "https://hand-off.space/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"handoff": {
"type": "http",
"url": "https://hand-off.space/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Diese Adresse braucht einen Schlüssel in einem Header der Anfrage, und das Menü zum Hinzufügen von Connectors kann ihn nicht setzen. Nutze stattdessen Claude Code, Cursor oder VS Code.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Authorization geheim HTTP headerDiese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Tool-Namen und -Beschreibungen genau so, wie der Server sie am 7. Nov. 2026 gemeldet hat. Geschrieben hat sie der Entwickler, nicht wir; wir zeigen sie als reinen Text.
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 wi
signupCreate a Handoff account and return an API key once. No Authorization header is required. Save api_key. On later calls send Authorization: Bearer , 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
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.
list_filesList 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.
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 om
get_share_statusRead 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.
approve_shareApprove an owned grant that was created with requires_approval. Opens stay blocked until this succeeds. Requires your API key.
deny_shareDeny an owned grant. A denied grant stays blocked. Requires your API key.
revoke_sharePermanently revoke an owned share. Later downloads fail. This cannot be undone and does not delete the file. Requires your API key.
get_access_logRead 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.
fetch_shared_fileDownload 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,
delete_fileDelete a file you own. The bytes are removed and existing share links stop working. Requires your API key.
list_sharesList 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.
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.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto jueluddinsf bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Antwort in 955 ms (HTTP 200)
Keine Anmeldung nötig
Wir haben 14 Tool-Beschreibungen gelesen und keine versteckten Anweisungen an die KI gefunden
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 3 von 3 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Das musst du eintragen: Authorization
Er läuft in der Cloud des Entwicklers. Du verbindest dich übers Internet, ohne etwas zu installieren, aber was du sendest, läuft über die Server des Entwicklers.
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (1.0.1) kam vor 8 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.
In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Intervals MCP
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Remote MCP server for intervals.icu run data and analysis
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
Send a file from an AI agent to a user or another agent with a controlled share link: expiry, max opens, human approval, agent-only audience, revoke and access log. Remote MCP server + REST API, no human signup.
Handoff gives an agent a safe way to hand a file to someone else, either a human or another agent. One call (`share_file` over MCP, or `POST /v1/share`) returns a download link, with no API key needed. For more control, the agent saves the file privately, then creates a share link with the rules it needs: an expiry, a maximum number of opens, an optional human approval step, and a specific recipient agent. It can check status, revoke, and read the access log at any time.
https://hand-off.space/mcp (Streamable HTTP)https://hand-off.space/v1 (OpenAPI, llms.txt)share_file / POST /v1/share without a key creates an account and returns its api_key once. Later calls send Authorization: Bearer (or pass api_key as a tool argument when the client can't set headers). You can also get a key on its own with signup / POST /v1/signup. No email, card or human account is needed.share_file, signup, save_file, list_files, create_share_link, get_share_status, approve_share, deny_share, revoke_share, get_access_log, fetch_shared_file, delete_file, list_shares, update_share. initialize and tools/list need no key.io.github.jueluddinsf/handoffThis repository holds docs and listing metadata. The service is hosted, so you have nothing to install.
report.pdf, then sends a link that expires in 24 hours and opens at most 3 times.pending_approval) until the owner approves it.share_file with name and content_text (or content_base64), or POST /v1/share, and reply with the returned url. The user opens it in a browser. No account is needed to download.share_file expire in 7 days by default. Set expires_in_hours and max_opens on share_file or create_share_link. After that the link returns 410 expired or 429 limit.audience: "agent" with the recipient's agent_id. Only that agent's key can open it, through fetch_shared_file or a plain GET.requires_approval: true. Opens are blocked until approve_share is called.revoke_share and get_access_log. Refused opens are logged too.REST, raw bytes. The response is the URL, plus api_key: hf_… on a second line when the call created an account:
curl -s --data-binary @report.pdf "https://hand-off.space/v1/share?name=report.pdf&format=url"
REST, JSON:
curl -s -X POST https://hand-off.space/v1/share -H 'content-type: application/json' \
-d '{"name":"notes.md","content_text":"# Notes","expires_in_hours":24,"max_opens":3}'
MCP. Connect to https://hand-off.space/mcp with no auth, then call:
{"name": "share_file", "arguments": {"name": "notes.md", "content_text": "# Notes"}}
The result has url, expires_at (7 days by default), grant_id, file_id and, for a new account, api_key once. Give the url to the recipient, who downloads with a plain GET. Save the `api_key`: you need it to revoke the link, check its status or read the access log. Send it as Authorization: Bearer (or as the api_key argument) on later calls, so new files stay in the same account.
share_file and POST /v1/share also take expires_in_hours, max_opens, audience (anyone_with_link or agent), audience_value, requires_approval, mime and an optional ref label. With raw bytes, pass them as query parameters.
Use this when you want to store a file once and create several links for it, each with its own rules.
BASE=https://hand-off.space
curl -s -X POST $BASE/v1/signup -H 'content-type: application/json' -d '{"agent_id":"my-agent"}'
export HANDOFF_API_KEY=hf_...
curl -s -X POST $BASE/v1/files -H "authorization: Bearer $HANDOFF_API_KEY" -H 'content-type: application/json' \ -d '{"name":"report.md","mime":"text/markdown","content_text":"# Q3 report"}'
curl -s -X POST $BASE/v1/files/FILE_ID/grants -H "authorization: Bearer $HANDOFF_API_KEY" -H 'content-type: application/json' \ -d '{"audience":"anyone_with_link","expires_in_hours":24,"max_opens":3}'
https://hand-off.space/mcp (configs below).signup MCP tool (no key needed) or POST /v1/signup. Put it in your client's Authorization: Bearer … header and reconnect, or pass api_key on each call.save_file → create_share_link, then hand over the returned url.| Tool | What it does |
|---|---|
share_file | One call. name plus content_text or content_base64. Optional mime, expires_in_hours (default 168), max_opens, audience, audience_value, requires_approval, ref. Returns url, expires_at, grant_id, file_id, and api_key once if no key was sent. No key needed. |
signup | Create an account and return an API key once. No key needed. Optional agent_id. |
save_file | Save a file privately: name, content_text or content_base64, optional mime. Returns the file id. No link is created. |
list_files | List your files, newest first. |
create_share_link | file_id, audience (anyone_with_link or agent), optional audience_value (the recipient's agent_id), expires_in_hours (default 168, 7 days), max_opens, requires_approval. Returns grant_id, url (shown once), expires_at and max_opens. |
get_share_status | Approval, expiry, revocation and open_count for a link, without using up an open. |
approve_share | Approve a link created with requires_approval. Opens stay blocked until this succeeds. |
deny_share | Deny a link that is waiting for approval. It stays blocked. |
revoke_share | Permanently revoke a link. The file is kept. |
get_access_log | Up to the latest 1,000 opens and refusals for a link. |
fetch_shared_file | Download a file from a Handoff share url or token (honors expiry, open limits, approval and agent audience). Files up to 1 MB come back inline as content_base64 (plus content_text for text); larger files return an error telling you to GET the url. |
delete_file | Delete a file you own. The bytes are removed and existing share links stop working. |
list_shares | List links you own, optionally for one file_id: grant_id, status, open_count, max_opens, expires_at, audience. No tokens or URLs. |
update_share | Set a link's expiry: grant_id, expires_in_hours measured from now (e.g. 168 for 7 days). |
Every tool except share_file, signup and fetch_shared_file (on an anyone_with_link share) needs your API key. share_file with no key creates a new account.
You can connect with no header at all and call share_file, then save the api_key it returns. To add the key, replace YOUR_HANDOFF_API_KEY in the configs below with your key, or use the environment-variable form shown.
claude mcp add --transport http handoff https://hand-off.space/mcp \
--header "Authorization: Bearer YOUR_HANDOFF_API_KEY"
You can also commit a project-scoped .mcp.json, which is the file in this repo. Claude Code expands ${HANDOFF_API_KEY} from your environment:
{ "mcpServers": { "handoff": { "type": "http", "url": "https://hand-off.space/mcp",
"headers": { "Authorization": "Bearer ${HANDOFF_API_KEY}" } } } }
Claude Desktop custom connectors don't take a static header, so bridge with mcp-remote in claude_desktop_config.json:
{
"mcpServers": { "handoff": { "command": "npx", "args": ["-y", "mcp-remote", "https://hand-off.space/mcp", "--header", "Authorization:${HANDOFF_AUTH}"], "env": { "HANDOFF_AUTH": "Bearer YOUR_HANDOFF_API_KEY" } } } }
~/.cursor/mcp.json or .cursor/mcp.json){
"mcpServers": { "handoff": { "url": "https://hand-off.space/mcp", "headers": { "Authorization": "Bearer ${env:HANDOFF_API_KEY}" } } } }
.vscode/mcp.json){
"inputs": [ { "type": "promptString", "id": "handoff_api_key", "description": "Handoff API key", "password": true } ], "servers": { "handoff": { "type": "http", "url": "https://hand-off.space/mcp", "headers": { "Authorization": "Bearer ${input:handoff_api_key}" } } } }
cline_mcp_settings.json)Set "type": "streamableHttp" explicitly. If you leave it out, Cline falls back to legacy SSE.
{
"mcpServers": { "handoff": { "type": "streamableHttp", "url": "https://hand-off.space/mcp", "headers": { "Authorization": "Bearer YOUR_HANDOFF_API_KEY" }, "disabled": false, "autoApprove": [] } } }
~/.codeium/windsurf/mcp_config.json){
"mcpServers": { "handoff": { "serverUrl": "https://hand-off.space/mcp", "headers": { "Authorization": "Bearer ${env:HANDOFF_API_KEY}" } } } }
import asyncio, os
from agents import Agent, Runner from agents.mcp import MCPServerStreamableHttp
async def main(): async with MCPServerStreamableHttp( name="handoff", params={ "url": "https://hand-off.space/mcp", "headers": {"Authorization": f"Bearer {os.environ['HANDOFF_API_KEY']}"}, }, cache_tools_list=True, ) as handoff: agent = Agent( name="R
Nur der Anfang wird gezeigt; den Rest findest du im Repo