ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Handoff: Send Files to Users & Agents

โดย jueluddinsfรุ่น 1.0.1i★ –iรันบนคลาวด์
ชื่อใน registryio.github.jueluddinsf/handoff

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

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

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนคลาวด์
  • ช่องทาง (transport): Streamable HTTP
  • หมวด: อื่น ๆ
  • ต้องใส่ค่าเหล่านี้: Authorization

ติดตั้ง

เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง

ก่อนติดตั้ง

ค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต

ต้องเตรียมก่อน

  • รันบนคลาวด์ไม่ต้องลงโปรแกรมเพิ่ม ต่อผ่านอินเทอร์เน็ตได้เลย

คุณใช้แอปไหน

เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”

ที่อยู่นี้ต้องใส่ key ใน header ของคำขอ ซึ่งเมนูเพิ่ม connector ใส่ให้ไม่ได้ ใช้ Claude Code, Cursor หรือ VS Code แทน

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add --transport http handoff https://hand-off.space/mcp --header 'Authorization: ใส่ค่าของคุณ'

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "handoff": {
      "url": "https://hand-off.space/mcp",
      "headers": {
        "Authorization": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "handoff": {
      "type": "http",
      "url": "https://hand-off.space/mcp",
      "headers": {
        "Authorization": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ที่อยู่นี้ต้องใส่ key ใน header ของคำขอ ซึ่งเมนูเพิ่ม connector ใส่ให้ไม่ได้ ใช้ Claude Code, Cursor หรือ VS Code แทน

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • Authorization ความลับ HTTP header
    API key from signup. Send Authorization: Bearer and the hf_ key, or the bare key. Not required to connect or list tools.

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

ชื่อและคำอธิบายเครื่องมือตามที่ server ตอบมาเมื่อ 7 พ.ย. 2569 ผู้ทำเป็นคนเขียน ไม่ใช่เรา แสดงเป็นข้อความล้วน

  • share_file

    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 wi

  • signup

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

    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.

  • list_files

    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.

  • create_share_link

    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 om

  • get_share_status

    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.

  • approve_share

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

  • deny_share

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

  • revoke_share

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

  • get_access_log

    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.

  • fetch_shared_file

    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,

  • delete_file

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

  • list_shares

    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.

  • update_share

    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.

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub jueluddinsf ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • ✓ ผ่าน

    endpoint ตอบ

    ตอบกลับใน 955 ms (HTTP 200)

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ไม่ต้องล็อกอิน

  • ✓ ผ่าน

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    อ่านคำอธิบายเครื่องมือ 14 ตัวแล้ว ไม่พบคำสั่งแอบแฝงถึง AI

เทียบกับตัวอื่นในหมวด อื่น ๆi

  • ดาวมากกว่า 0% ของอีก 32606 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 80% ของอีก 32606 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 32606 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Handoff: Send Files to Users & Agents ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 3 จาก 3 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: Authorization

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนคลาวด์ของผู้ทำ ต่อผ่านอินเทอร์เน็ตได้เลย ไม่ต้องลงโปรแกรม แต่ข้อมูลที่ส่งให้จะผ่านเซิร์ฟเวอร์ของผู้ทำ

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.1) เข้า registry 8 วันที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Georgia MCP

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Spec Driven Development

โดย formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

รันบนเครื่อง★ 440MITอัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

Remote Desktop Commander

โดย desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

รันบนคลาวด์★ 211อัปเดต เมื่อวานซืน
ติดตั้ง

Georgia MCP

โดย abgeo

An MCP server for Georgian public data, read from the organizations that publish it.

บนเครื่องหรือคลาวด์อัปเดต วันนี้
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ

Handoff: File Sharing for AI Agents

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.

  • Remote MCP server: https://hand-off.space/mcp (Streamable HTTP)
  • REST API: https://hand-off.space/v1 (OpenAPI, llms.txt)
  • Auth: none for the first call. 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.
  • 14 MCP tools: 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.
  • Registry name: io.github.jueluddinsf/handoff

This repository holds docs and listing metadata. The service is hosted, so you have nothing to install.

Use it when an agent needs to…

  • Deliver a report to a human. The agent saves report.pdf, then sends a link that expires in 24 hours and opens at most 3 times.
  • Hand a file to another agent. The link works only when the named recipient agent presents its own key.
  • Wait for a human before releasing a file. The link stays locked (pending_approval) until the owner approves it.
  • Take something back. Revoke a link, and see every successful and refused open.

Common questions an agent asks

  • How can my agent send a file (PDF, CSV, report, image) to the user? Call 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.
  • How do I get a temporary or expiring download link? Links from 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.
  • How do I transfer a file from one agent to another? Use audience: "agent" with the recipient's agent_id. Only that agent's key can open it, through fetch_shared_file or a plain GET.
  • Can a human approve before the file is released? Yes. Set requires_approval: true. Opens are blocked until approve_share is called.
  • Can I take a link back or see who opened it? Yes. Use revoke_share and get_access_log. Refused opens are logged too.
  • Is it a public file host or a paste bin? No. Files are private by default and every link is an explicit grant you control.

Guides

  • How an AI agent can send a file to a user: send a PDF, CSV or report as a link
  • Temporary download link for AI agents: expiring, open-limited and revocable links
  • Agent-to-agent file transfer over MCP: a link only one named agent can open
  • Human approval before an agent releases a file: links stay locked until you approve

Quickstart: one call

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"

https://hand-off.space/g/…

api_key: hf_…

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}'

→ {"url":"https://hand-off.space/g/…","expires_at":"…","max_opens":3,"requires_approval":false,

"file_id":"…","grant_id":"…","token_prefix":"…","next":{…},"api_key":"hf_…"}

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.

More control: REST (3 calls)

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

1. Sign up. The key is shown once, so store it.

curl -s -X POST $BASE/v1/signup -H 'content-type: application/json' -d '{"agent_id":"my-agent"}'

→ {"account_id":"…","api_key":"hf_…","agent_id":"my-agent","caps":{…},"next":…}

export HANDOFF_API_KEY=hf_...

2. Save a file privately (content_text, or content_base64 for binary)

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"}'

→ {"id":"FILE_ID","name":"report.md",…}

3. Create a share link

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}'

→ {"grant_id":"…","url":"https://hand-off.space/g/…","token":"…","token_prefix":"…"}

More control: MCP (3 tool calls)

  1. Connect your client to https://hand-off.space/mcp (configs below).
  2. Get a key with the 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.
  3. Call save_file → create_share_link, then hand over the returned url.
Tools
ToolWhat it does
share_fileOne 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.
signupCreate an account and return an API key once. No key needed. Optional agent_id.
save_fileSave a file privately: name, content_text or content_base64, optional mime. Returns the file id. No link is created.
list_filesList your files, newest first.
create_share_linkfile_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_statusApproval, expiry, revocation and open_count for a link, without using up an open.
approve_shareApprove a link created with requires_approval. Opens stay blocked until this succeeds.
deny_shareDeny a link that is waiting for approval. It stays blocked.
revoke_sharePermanently revoke a link. The file is kept.
get_access_logUp to the latest 1,000 opens and refusals for a link.
fetch_shared_fileDownload 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_fileDelete a file you own. The bytes are removed and existing share links stop working.
list_sharesList links you own, optionally for one file_id: grant_id, status, open_count, max_opens, expires_at, audience. No tokens or URLs.
update_shareSet 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.

Client configuration

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 Code
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

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 (~/.cursor/mcp.json or .cursor/mcp.json)
{

"mcpServers": { "handoff": { "url": "https://hand-off.space/mcp", "headers": { "Authorization": "Bearer ${env:HANDOFF_API_KEY}" } } } }

VS Code / GitHub Copilot (.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 (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": [] } } }

Windsurf (~/.codeium/windsurf/mcp_config.json)
{

"mcpServers": { "handoff": { "serverUrl": "https://hand-off.space/mcp", "headers": { "Authorization": "Bearer ${env:HANDOFF_API_KEY}" } } } }

OpenAI Agents SDK (Python)
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

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx