# Presio — agent playbook > Upload a PDF to start a local presentation, or validate Presio sidecar attachments. ## Start a presentation (local, skip share) ```bash curl -s -F file=@deck.pdf https://staging.presio.xyz/api/present ``` Response: ```json { "id": "ABC123", "url": "https://staging.presio.xyz/start/ABC123?t=…", "filename": "deck", "totalSlides": 12, "next": "Open url in a browser to start a local presentation (skips share). The PDF is copied into the browser and removed from the server. Unclaimed links expire after 24h (7 days when authenticated)." } ``` **Next step:** open `url` in a browser. That page pulls the PDF into IndexedDB (local session), deletes the server copy, and lands on the controller — no share screen. The `url` stays valid until a browser claims it (after that the server copy is gone and the link is dead); unclaimed handoffs expire after 24 hours (7 days when authenticated). `filename` is the display title — the uploaded name minus its `.pdf` extension. - No auth required. Optional `Authorization: Bearer ` attaches ownership. - Max PDF size: 50MB. Max pages: 3000. - Syncing across devices still requires a human login in the UI. ## Validate sidecar attachments ```bash curl -s -F file=@deck.pdf https://staging.presio.xyz/api/check | jq . ``` Returns a structured check report (`$schema` points at https://staging.presio.xyz/schema/check-report.schema.json). ## MCP Connect an MCP client to `https://staging.presio.xyz/mcp` (discover via `https://staging.presio.xyz/.well-known/mcp.json`). Tools: - `present_pdf` — same as `POST /api/present` (pass `pdf_base64` + optional `filename`) - `check_pdf` — same as `POST /api/check` ## Other surfaces - API docs: https://staging.presio.xyz/api.md · https://staging.presio.xyz/openapi.json - Agent brief: https://staging.presio.xyz/AGENTS.md - Index: https://staging.presio.xyz/llms.txt