# Freaking Fast File Drive > A private file drive with fast links. Public files are served from the closest of 11 regions, > stream in any player, and carry no download or streaming fees. Files can be up to 2 TB. Files upload directly to object storage under a presigned policy, so throughput is not bounded by the API. Private files are shared with time-limited links; public files get a permanent URL. ## For agents - [MCP server](https://www.npmjs.com/package/freaking-fast-mcp): `npx -y freaking-fast-mcp`. Seven tools — upload_file, get_download_url, list_files, delete_files, restore_files, set_file_visibility, get_storage_usage. - [A2A agent card](https://freakingfast.io/.well-known/agent-card.json): skills for upload, sharing, and library management. - [OpenAPI spec](https://freakingfast.io/openapi.yaml): the underlying HTTP API. ## Authentication Set `FREAKING_FAST_API_TOKEN` to an API token from account settings. The MCP server exchanges it for a short-lived session token automatically and re-mints before expiry. No browser flow, so it works in headless and containerised environments. ## Limits - Maximum file size: 2 TB per file - Total storage: set by the account's subscription tier - Presigned upload policies expire 2 days after issue - Private download links expire 6 hours after issue ## Uploading without the MCP server Three calls. Get a presigned form from `POST /generate-file-urls`, `POST` the file as multipart/form-data to the returned `uploadUrl` including every `uploadForm` field verbatim, then record it with `POST /insert-file`. The final call re-reads the stored object's length and rejects the insert if it disagrees with the submitted `fileSize`, so send the exact byte count. Files over 64 MiB can go up in parts instead: `POST /create-multipart-upload`, send each part to its signed URL, then `POST /complete-multipart-upload` and `POST /insert-file`. Calling create again with the same `objectKey` resumes an upload that stopped.