{"schema_version":"1.0","name":"PromptFax MCP Tools","endpoint":"https://promptfax.app/mcp","transport":"streamable-http","auth":"OAuth","discovery":{"tools_list":"public","real_workflow_calls":"oauth_required"},"pricing_url":"https://promptfax.app/pricing","setup_url":"https://promptfax.app/mcp-setup","demo_url":"https://promptfax.app/mcp-demo","tools":[{"name":"start_session","purpose":"Create or resume a PromptFax MCP session.","auth_requirement":"OAuth required","permission_category":"interactive_non_destructive_write","read_only":false,"destructive":false,"notes":"Opens the ChatGPT widget for ChatGPT or the neutral PromptFax MCP App for capability-advertising hosts. Text-only clients use the hosted PromptFax session page fallback.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"faxNumber":{"type":"string","description":"Destination US fax number. Accepts common human formats such as 415-555-0182 or E.164 format such as +14155550182."},"hostType":{"type":"string","description":"Identify the MCP host so PromptFax can choose the right interaction mode. Use chatgpt for ChatGPT, claude for Claude, browser for a browser-hosted app, or other for unknown clients."},"hostCapabilities":{"type":"object","description":"Optional host capability hints, such as whether the client supports widgets, file-picking, hosted links, or other interactive surfaces.","additionalProperties":true},"files":{"type":"array","description":"Optional host-supplied files for initial attachment. ChatGPT file parameters include files[].download_url and files[].file_id.","items":{"type":"object","properties":{"download_url":{"type":"string","format":"uri","description":"Temporary HTTPS download URL for a host-supplied file. PromptFax can fetch this URL to attach the document."},"file_id":{"type":"string","description":"Host-specific file identifier. This is useful for display or diagnostics, but PromptFax can only fetch files when a download URL is also supplied."},"mime_type":{"type":"string","description":"MIME type reported by the host, such as application/pdf or image/png."},"file_name":{"type":"string","description":"Original filename reported by the host, used to help the user confirm the selected document."}},"required":["download_url","file_id"],"additionalProperties":false},"maxItems":5},"metadata":{"type":"object","description":"Optional host-specific metadata for diagnostics or session continuity.","additionalProperties":true}},"additionalProperties":false}},{"name":"attach_document","purpose":"Bind a PromptFax document or HTTPS PDF URLs to an MCP session.","auth_requirement":"OAuth required","permission_category":"non_destructive_write","read_only":false,"destructive":false,"notes":"Fallback path when a host cannot use the inline widget or MCP App upload surface.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"documentId":{"type":"string","description":"PromptFax document identifier created by a prior upload or hosted session."},"fileUrls":{"type":"array","description":"One or more HTTPS URLs for PDF or image documents that PromptFax should attach to the fax workflow.","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":5}},"required":["sessionId"],"additionalProperties":false}},{"name":"get_quote","purpose":"Create a fax quote from a session, document, or HTTPS PDF URL.","auth_requirement":"OAuth required","permission_category":"non_destructive_write","read_only":false,"destructive":false,"notes":"Fallback path for generic clients. ChatGPT widget and PromptFax MCP App sessions can prepare quotes automatically after a valid document and destination are present.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"faxNumber":{"type":"string","description":"Destination US fax number. Accepts common human formats such as 415-555-0182 or E.164 format such as +14155550182."},"fileUrls":{"type":"array","description":"One or more HTTPS URLs for PDF or image documents that PromptFax should attach to the fax workflow.","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":5},"documentId":{"type":"string","description":"PromptFax document identifier created by a prior upload or hosted session."}},"additionalProperties":false}},{"name":"checkout","purpose":"Start external Stripe Checkout after the user accepts a quote.","auth_requirement":"OAuth required","permission_category":"non_destructive_write","read_only":false,"destructive":false,"notes":"Creates a payment authorization handoff. Stripe webhook confirmation, not browser redirect alone, is the source of payment truth.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"sendIntentId":{"type":"string","description":"PromptFax send intent identifier returned by get_quote or session status. Use this for checkout, send, status, retry, or cancel operations."},"autoSendAfterAuthorization":{"type":"boolean","description":"When true, PromptFax sends automatically after Stripe confirms payment authorization. When false, call send_fax after authorization."}},"additionalProperties":false}},{"name":"send_fax","purpose":"Queue a paid fax for transmission.","auth_requirement":"OAuth required","permission_category":"destructive_write","read_only":false,"destructive":true,"notes":"Only use after explicit user intent and webhook-confirmed payment authorization.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"sendIntentId":{"type":"string","description":"PromptFax send intent identifier returned by get_quote or session status. Use this for checkout, send, status, retry, or cancel operations."}},"additionalProperties":false}},{"name":"get_status","purpose":"Fetch workflow, payment, and transmission status.","auth_requirement":"OAuth required for real sessions","permission_category":"read_only","read_only":true,"destructive":false,"notes":"Read-only and idempotent. Use to poll upload, quote, payment, sending, delivered, failed, retry, and cancellation state.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"sendIntentId":{"type":"string","description":"PromptFax send intent identifier returned by get_quote or session status. Use this for checkout, send, status, retry, or cancel operations."}},"additionalProperties":false}},{"name":"retry_failed_fax","purpose":"Retry a failed fax using its existing payment authorization.","auth_requirement":"OAuth required","permission_category":"non_destructive_write","read_only":false,"destructive":false,"notes":"Queues another transmission attempt without sending the user through Checkout again. A corrected destination may be supplied.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"sendIntentId":{"type":"string","description":"PromptFax send intent identifier returned by get_quote or session status. Use this for checkout, send, status, retry, or cancel operations."},"faxNumber":{"type":"string","description":"Optional corrected US fax number for this attempt."}},"additionalProperties":false}},{"name":"cancel","purpose":"Cancel the active PromptFax send when cancellation is still possible.","auth_requirement":"OAuth required","permission_category":"destructive_write","read_only":false,"destructive":true,"notes":"Destructive action because it can affect a real fax workflow.","input_schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"PromptFax MCP session identifier returned by start_session. Use this to continue a session-backed fax workflow."},"sendIntentId":{"type":"string","description":"PromptFax send intent identifier returned by get_quote or session status. Use this for checkout, send, status, retry, or cancel operations."}},"additionalProperties":false}}]}