TUNC.AI / Tunc Art guides

Upload a file from any agent and get a private link back

Over MCP, A2A or a few REST calls: an agent saves a report, image or PDF to Tunc Art and hands you its private link.

Updated

Three ways in, one result: the file is on your Tunc account and the agent returns its link.

From an AI app, over MCP

Connect the app to https://mcp.tuncart.com/mcp; it signs in with your Tunc account in the browser. Then ask: "Save this report to Tunc Art and give me the link." The agent calls art_write. Files up to 8 MiB go inline; larger ones, up to 250 MiB, use a presigned upload.

ClientSteps
claude.ai, Claude Desktop and Claude mobileSettings → Connectors → Add custom connector → name Tunc Art, URL https://mcp.tuncart.com/mcp → Add → Connect.
Claude CodeAdd the server, then run /mcp, choose tunc-art and Authenticate.
claude mcp add --transport http tunc-art https://mcp.tuncart.com/mcp
ChatGPTSettings → Apps & Connectors → Advanced → turn on Developer mode → Create → name Tunc Art, URL https://mcp.tuncart.com/mcp, Authentication OAuth → Create → Connect.
CursorAdd it to ~/.cursor/mcp.json, then Settings → MCP: it shows “Needs login” → Login.
{
  "mcpServers": {
    "tunc-art": {
      "url": "https://mcp.tuncart.com/mcp"
    }
  }
}
VS Code (Copilot)Command Palette → MCP: Add Server → HTTP → https://mcp.tuncart.com/mcp → name tunc-art → allow the sign-in prompt.
Gemini CLIAdd it to settings.json, then run /mcp auth tunc-art.
{
  "mcpServers": {
    "tunc-art": {
      "httpUrl": "https://mcp.tuncart.com/mcp"
    }
  }
}
Copilot StudioTools → Add a tool → New tool → Model Context Protocol → URL https://mcp.tuncart.com/mcp → Authentication OAuth 2.0, Dynamic discovery.

From your own code, over REST

Create an API key at https://tunchub.com/account/keys/new with "Upload Tunc Art files" ticked (keys made from tuncart.com start with it on), then call https://api.tuncart.com: start the upload, send the bytes to the upload URL, complete it.

# Files you can open (paged)
curl -s "https://api.tuncart.com/v1/files?limit=20" -H "Authorization: Bearer $TUNC_API_KEY"

# Upload: start, send the bytes to upload.url, then complete
curl -s https://api.tuncart.com/v1/files \
  -H "Authorization: Bearer $TUNC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"display_name":"q4-report.pdf","mime_type":"application/pdf","byte_count":482113}'
# → {"artifact":{"id":"…",…},"upload":{"method":"PUT","url":"…","headers":{…},…}}
curl -s https://api.tuncart.com/v1/files/<id>/complete \
  -H "Authorization: Bearer $TUNC_API_KEY" \
  -H "Content-Type: application/json" -d '{"byte_count":482113}'

# Download, and delete a file your key uploaded
curl -s https://api.tuncart.com/v1/files/<id>/content -H "Authorization: Bearer $TUNC_API_KEY" -o q4-report.pdf
curl -s -X DELETE https://api.tuncart.com/v1/files/<id> -H "Authorization: Bearer $TUNC_API_KEY"

From another agent, over A2A

curl -s https://a2a.tuncart.com/v1 -H "Authorization: Bearer $TUNC_API_KEY" -H 'A2A-Version: 1.0' \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"SendMessage","params":{"message":{
        "messageId":"m-1","role":"ROLE_USER",
        "parts":[{"data":{"skill":"art_read","arguments":{"operation":"list"}},"mediaType":"application/json"}]}}}'
# → {"jsonrpc":"2.0","id":1,"result":{"message":{"role":"ROLE_AGENT",
#      "parts":[{"data":{…the tool's result…},"mediaType":"application/json"}],…}}}

Agents connected to Tunc Orb can store a file's artifact_id in a record ({"artifact_id": "…"}) and open it later with art_read, so a report and its notes stay together.