> 518.PLUS — easily share files and AI capabilities. Use the tools on the web, or let an AI agent call them through MCP. To give a person a link to a file: call share; hand them result_url (one page for all files) — page_url is per file, download_url is a direct download. ## MCP endpoint - URL: https://518.plus/mcp (Streamable HTTP: stateless HTTP POST, JSON-RPC 2.0) - Protocol versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 (latest: 2025-11-25) - Auth: Bearer API key, prefix fsk_. Connect without a key first: initialize and tools/list work anonymously, and the tool `register` (optional username) creates an account and returns its key — then send Authorization: Bearer . Same over plain HTTP: POST /auth/mcp/register with an optional {"username": "..."} JSON body. Humans can also create keys in the web UI at /account/keys (Account → API keys) - Agent guide (this file): /llms.txt ## No-install usage (curl) MCP is plain HTTP POST JSON-RPC — no installation needed: curl -s https://518.plus/mcp \ -H "Authorization: Bearer fsk_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}' curl -s https://518.plus/mcp \ -H "Authorization: Bearer fsk_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' # tools/list is your working set: first-party tools, your own tools and your favorites (paginate with params {"cursor":""}). The meta tool catalog_search finds any other tool by keyword; call it by name, and pin_tool / unpin_tool manage your favorites. curl -s https://518.plus/mcp \ -H "Authorization: Bearer fsk_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"share", "arguments":{"files":[{"filename":"a.png","b64":"..."}], "client_ref":"my-stable-op-1"}}}' client_ref is REQUIRED on every tools/call: a stable identity for one logical operation — reuse the same value to retry safely (replays return the original result, no double charge). ## Inputs (tools/call) files[] items — 0..20 files per the tool's declared window (text-only tools take no files); each item is exactly one form: 1. Inline: {"filename":"a.png","b64":""} — one /mcp request body is capped at 16 MB 2. https URL: {"url":"https://example.com/a.png"} — 518 fetches it server-side (public hosts only) 3. Reference: {"public_id":"...","source_token":"..."} to an existing upload of yours — a file item returned by an earlier call is referenced with just {"public_id":"..."} (chain tools without re-uploading) Plain-text input goes through the tool's params (text parameters accept up to 100,000 characters). ## Results (items) Every call returns an ORDERED list of items (at most 20): {"kind":"text","text":"..."} {"kind":"json","data":{...}} {"kind":"file","filename":"...","content_type":"...","size":N} In tools/call the items arrive directly: structuredContent.items carries them with a download_url per file; small images also appear as image content blocks — unless the image bytes are identical to this call's input (a pass-through share never echoes your own bytes back). Every structuredContent response additionally carries a content text block holding the JSON serialization of that structuredContent (backward-compat form). result_url is a human-viewable page (/r/{id}). ## Delivery (result retention) Every tools/call accepts an optional `delivery` object that governs how long the result (and its file items) stays available and how many times files may be downloaded: {"delivery": {"expiry_days": 1, "allowed_downloads": 50}} - expiry_days: how long the result lives (default 1). Legal values: [1, 3, 7, 30]. - allowed_downloads: total downloads allowed across the file items (default 50). Legal values: [1, 10, 50, 100, 200, 1000]. - Values outside your plan's allowance need a higher plan; an invalid value is returned as an isError result listing the legal values. structuredContent.expires_at is the epoch second at which the result expires; after it, result_url and every file link 404. ## Large files: two-stage upload (bytes never pass through the model) For files too large to inline as base64 (the request body cap is 16 MB), call the free meta tool create_upload first, PUT the raw bytes to the returned one-time URL, then reference the result. Staged files are intermediates, not shares: use the PUT within 10 minutes; the stored copy lives at most 1 day and never appears in list_uploads (only its public_id/source_token reference matters). curl -s https://518.plus/mcp \ -H "Authorization: Bearer fsk_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_upload", "arguments":{"filename":"big.png","size":5242880, "client_ref":"stage-big"}}}' # → {"upload_url":".../mcp/upload/","expires_at":...,"max_bytes":...} curl -s -X PUT --data-binary @big.png "" # → {"public_id":"...","source_token":"..."} (no Authorization header; the URL is the one-time credential, 10-minute expiry) Then tools/call any tool with files[]: [{"public_id":"...","source_token":"..."}]. ## Your live files: list and delete (free meta tools) - list_uploads: your still-live SHARED files (files you shared or that tool calls produced for you — create_upload staging is not listed), newest first, 20 per page, params {"offset":N}) — each entry: public_id, filename, size, content_type, expires_at, downloads_remaining, page_url, download_url. - delete_upload: delete ONE of your own files by public_id — identical to deleting on the web (the /f/{public_id} page 404s immediately; stored bytes and mapping go together). Example: curl -s https://518.plus/mcp \ -H "Authorization: Bearer fsk_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"list_uploads","arguments":{}}}' ## Share links - /f/{id} is the human page; /f/{id}?download=1 is the direct download (302 redirect to the file). - File pages (/f/{public_id}) and result pages (/r/{id}) answer `Accept: application/json` with their facts (file name, size, type, expiry, remaining downloads, download_url) instead of HTML. - Download counts and expiry follow the `delivery` object of the tools/call that produced the file; anonymous download needs no token. ## Billing - Tool calls are metered in credits: 1000 credits = 1 USD. Each tool's description states its price (free or N credits/call); a call is charged when it runs — no confirmation step. Failed calls are refunded automatically. - Out of credits → the call returns err_insufficient_credits; the account owner logs in and tops up at https://518.plus/pricing, then the agent retries with the same client_ref (never charged twice). Free tools need no credits. ## Limits - Per file: 50 MB (every files[] item and every file a tool produces). - Anonymous / free accounts: up to 100 files and 1.0 GB per rolling 24 hours. - Free delivery options: expiry_days [1, 3, 7], allowed_downloads [1, 10, 50, 100, 200]. - Membership plans raise the file count, the 24-hour total and the delivery options — see /pricing. ## Publish your own tool Full guide — request/response examples, declarations, limits, pricing and commission: https://518.plus/developers Wrap any public HTTPS endpoint as a 518 tool: implement one JSON contract — source files arrive as one-time signed fetch URLs, you answer with ordered text/json/file items — and submit it at https://518.plus/account/tools/publish. A new tool starts unlisted; after one successful run from its page it can go public, and then the web interface and every MCP agent can call it, earning you credits on each paid call. ## Recommended tools (generated live; catalog_search finds every other public tool) - share: Lossless Share [free] - privacy: Clean [free] - beautify: Frame [free] - compress: Compress [free] - crop_white: Crop White [free] - ico: ICO Favicon [free] - img2pdf: Images to PDF [free] - pdf_merge: Merge PDF [free] - zip_pack: Zip Files [free] (server: 518plus/1.4; this file is generated — do not edit by hand)