Upload PDF
upload_pdfUpload a PDF from a ChatGPT file attachment.
MANDATORY WORKFLOW — follow EVERY step in order:
ALWAYS call check_upload_status FIRST — even if you think the file is new.
If a job with the same filename already exists, reuse its job_id — do NOT call upload_pdf.
Only call upload_pdf if the file is confirmed absent from check_upload_status. Skipping step 1 and calling upload_pdf directly is FORBIDDEN.
Use this when the user provides a file attachment in ChatGPT. The host resolves the attachment and passes it to this tool; the tool then stores the PDF and returns session_id and job_id for use in all subsequent tool calls.
Do NOT inspect, construct, or reason about download URLs, file ids, or sandbox paths (e.g. '/mnt/data/...') — just pass the attachment straight through. NEVER invent, guess, or synthesise a download_url or file_id. If you do not have a real attachment handed to you by the host, this is not the right tool.
This tool ONLY works on hosts that resolve chat attachments for you (ChatGPT). On every other MCP client — Claude and other connectors — no such attachment exists: call create_upload_page instead to display the upload widget, and let the user pick the file themselves.
Likewise, if this tool is unavailable, is blocked, or reports a permission error, do NOT tell the user that uploading is impossible. Fall back to create_upload_page.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pdf_file | Yes | The file attachment, supplied by the host. | |
| session_id | No | Existing session ID to group this file with previous uploads. If omitted, a new session is created. Always pass the same session_id throughout the entire conversation. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | ||
| job_id | Yes | ||
| reused | Yes | ||
| filename | Yes | ||
| page_count | Yes | ||
| reply_note | Yes | ||
| session_id | Yes | ||
| instructions | Yes |