Read PDF Out Loud Open the app

Read PDF Out Loud for AI assistants

Connect Read PDF Out Loud to an AI assistant, and it can add PDFs to your library, read their clean text and summaries, and send you a link to listen in a natural voice with every word highlighted.

MCP serverhttps://readpdfoutloud.com/mcp

Connect your assistant

  1. In your assistant, add Read PDF Out Loud from its connector directory, or add a custom connector (an MCP server) with the address https://readpdfoutloud.com/mcp.
  2. Sign in with Google or with a link sent to your email, as you do on the site. New here? That creates your free account.
  3. Check what the assistant asks to do, then press Allow.

Disconnect it at any time from Connected apps in the account menu on readpdfoutloud.com.

It reads PDFs the way the site does: running headers, page numbers, footnotes, citation numbers and the reference list are left out, two-column pages are read in order, and equations are written the way you'd say them. PDFs your assistant adds are in your library, ready to listen to on any device.

Things to ask

For developers

The connector is a remote MCP server. It holds no session, answers every request with plain JSON, and speaks both the current protocol and the handshake-based versions most clients still use.

WhatDetails
TransportStreamable HTTP: POST https://readpdfoutloud.com/mcp, one JSON-RPC message a request, answered with application/json. There are no event streams or sessions, so GET and DELETE answer 405.
Protocol versions2026-07-28 (version and capabilities in each request's _meta, mirrored in the MCP-Protocol-Version, Mcp-Method and Mcp-Name headers; server/discover), and 2025-11-25, 2025-06-18 and 2025-03-26 (initialize first).
AuthorizationOAuth 2.1 authorization code flow with PKCE (S256), following the MCP authorization spec. A request without a valid token gets 401 with WWW-Authenticate pointing at the protected resource metadata.
Registering your appA Client ID Metadata Document (your client_id is the https address of your app's metadata, with token_endpoint_auth_method none), or Dynamic Client Registration at /oauth/register for public or confidential clients. Redirect URIs must match exactly and be https, http://localhost or 127.0.0.1, or your app's own scheme.
TokensSend Authorization: Bearer … with every request. Access tokens last an hour. Refresh tokens last 60 days and are replaced each time they're used; a refresh token used twice disconnects the app. Tokens are issued for https://readpdfoutloud.com/mcp (the resource parameter) and work nowhere else.

Endpoints

EndpointAddress
MCPhttps://readpdfoutloud.com/mcp
Protected resource metadatahttps://readpdfoutloud.com/.well-known/oauth-protected-resource/mcp
Authorization server metadatahttps://readpdfoutloud.com/.well-known/oauth-authorization-server
Authorizationhttps://readpdfoutloud.com/oauth/authorize
Tokenhttps://readpdfoutloud.com/oauth/token
Registrationhttps://readpdfoutloud.com/oauth/register
Revocationhttps://readpdfoutloud.com/oauth/revoke

Scopes

ScopeLets the appTools
documents:readSee the library and read PDFs' text, contents and summariesget_document, list_documents, get_text, get_contents, get_summaries
documents:writeAdd PDFs (they count toward the month's pages) and delete themadd_pdf, delete_document
account:readSee the plan and the pages used this monthget_account

An app that asks for no scope gets all three. Calling a tool without its scope answers 403 with error="insufficient_scope" and the scope to ask for.

A request

curl https://readpdfoutloud.com/mcp \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2026-07-28" \
  -H "Mcp-Method: tools/call" \
  -H "Mcp-Name: get_account" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call",
       "params": {"name": "get_account", "arguments": {},
         "_meta": {"io.modelcontextprotocol/protocolVersion": "2026-07-28",
                   "io.modelcontextprotocol/clientCapabilities": {}}}}'

Tools

ToolWhat it does
add_pdfAdds a PDF to the library from a link or a file, and starts reading it
get_documentSays whether a PDF is ready, how long it takes to listen to, and where to listen
list_documentsLists the library, most recently used first
get_textReturns the clean text, with its structure or as it's read aloud
get_contentsReturns the table of contents, with a link to listen from each entry
get_summariesReturns summaries of figures, tables, code and equations
delete_documentDeletes a PDF from the library
get_accountReturns the plan and the pages used this month

Every result is structured JSON matching the tool's output schema, repeated as text for clients that read only text. Page numbers are the PDF's own, starting at 1.

add_pdf

Adds a PDF to the library and starts reading it. It answers at once; a typical paper takes a minute or two, and get_document says when it's ready.

ParameterDescription
urlA direct https link to a PDF, or an arXiv abstract page such as https://arxiv.org/abs/1706.03762
fileA file the user attached, as {"download_url", "file_id"} (how ChatGPT passes files)
content_base64, filenameThe PDF itself, base64-encoded, when there's no link
titleOptional: the name to show in the library. By default, the title found in the PDF
{
  "document_id": "3f9c2a71b8d0",
  "title": null,
  "filename": "1706.03762.pdf",
  "pages": 15,
  "status": "queued",
  "text_ready": false,
  "summaries": {"done": 0, "total": 0},
  "words": null,
  "listening_minutes": null,
  "listen_url": "https://readpdfoutloud.com/#/doc/3f9c2a71b8d0/p/1",
  "resume_url": null,
  "last_page": null,
  "added_at": "2026-09-30T09:12:04Z",
  "error": null,
  "check_again_in_seconds": 10,
  "already_in_library": false
}

get_document

Takes a document_id and returns the fields above (without already_in_library):

FieldDescription
statusqueued, reading, narrating, explaining (writing summaries), ready or failed
text_readyTrue once the text, contents and links work. Summaries may still be coming
summariesHow many summaries are written, of how many
words, listening_minutesThe length of what's read aloud, and how long it takes to hear at normal speed
listen_url, resume_urlOpen the PDF in the reader at page 1, or where the user left off
errorWhat went wrong, in plain words, when status is failed
check_again_in_secondsWhile it's being read: when to ask again

list_documents

Lists the library, most recently used first. query keeps PDFs whose title or file name contains it; limit is 1 to 50 (10 by default). Each entry has document_id, title, filename, pages, status, text_ready, added_at and last_page; total counts every match.

get_text

ParameterDescription
document_idRequired
pagesA page ("3") or a range ("2-5"). Default: the whole document
formatmarkdown (default): headings, lists, tables, equations in LaTeX, and a <!-- page N --> marker before each page, best for answering questions and citing pages. spoken: exactly what the voice reads, with equations in words
include_summariesAdd each figure's, table's and equation's summary where it appears. Default false
max_characters2,000 to 60,000; 20,000 by default

Text stops at the end of the page before the limit, and next_pages says which pages to ask for next (null at the end). A single page longer than the limit is cut at a paragraph, with truncated true. Before the text is ready, it answers not_ready.

For example, page 4 of “Attention Is All You Need”, asked for with "pages": "4" and "format": "spoken" (text shortened):

{
  "document_id": "3f9c2a71b8d0",
  "title": "Attention Is All You Need",
  "format": "spoken",
  "pages_included": "4",
  "next_pages": null,
  "page_count": 15,
  "truncated": false,
  "summaries_complete": true,
  "characters": 2425,
  "text": "Figure 2: (left) Scaled Dot-Product Attention. … We compute the matrix of outputs as:\n\nAttention of Q, K and V, equals softmax of the fraction Q times K transpose, over square root of d sub k, V. …"
}

get_contents

Takes a document_id and returns entries, each with its title, level (1 is the top), page and a listen_url that opens the reader there. The contents come from the PDF's own outline when it has one, and from its headings otherwise.

get_summaries

Takes a document_id and optional pages, and returns items in reading order, each with its page, kind (figure, chart, table, code, algorithm or equation), label (such as “Figure 2”), caption and summary. complete is false while summaries are still being written.

delete_document

Takes a document_id and deletes the PDF with everything made from it. It can't be undone, and pages already counted this month aren't given back. Assistants should confirm with the user first.

get_account

Returns the account's email, plan, pages_used this month, pages_allowance and pages_left, and the date the allowance resets_on.

Limits

WhatLimit
A PDFUp to 200 pages and 20 MB
Pages added a month500 on the free plan, counted when a PDF is added
PDFs added an hour8
Tool calls120 a minute
LanguageEnglish

Errors

When a tool can't do what was asked, its result has isError set and carries {"error": {"code", "message", …}}: a sentence to show the user, and a code for the assistant.

CodeMeaning
invalid_argumentsA parameter is missing or wrong; the message says which
invalid_urlThe link isn't a public https link
not_a_pdfThe link or file isn't a PDF
too_largeOver 200 pages or 20 MB
fetch_failedThe PDF couldn't be downloaded; try again later
not_foundThere's no such PDF in this library
not_readyThe text isn't ready yet; ask again after check_again_in_seconds
failedReading the PDF failed; the message says why
busyThe PDF is still being read, so it can't be deleted yet
limit_reachedThis month's pages are used up; resets_on says when they come back
rate_limitedToo many requests; wait retry_after_seconds
pausedAdding PDFs is paused for a little while; try again later

If the connection has expired or been removed, requests are refused with 401 and the assistant asks the user to connect again.

Privacy

The privacy policy and terms cover the connector.

Support and changes

Questions, or building on the connector? Write to support@readpdfoutloud.com.