# Connect to the PdfParse MCP server

Source: https://pdfparse.net/docs/mcp

Connect an AI assistant to PdfParse to upload PDFs, create extraction tables, query saved data, and configure document workflows.



PdfParse exposes document processing actions through a remote Model Context Protocol (MCP) server. Your assistant can discover the available actions and call them on your behalf after you authorize access to your PdfParse account.

## Connection settings

| Setting          | Value                          |
| ---------------- | ------------------------------ |
| Server URL       | `https://mcp.pdfparse.net/mcp` |
| Transport        | Streamable HTTP                |
| Authentication   | OAuth                          |
| Read permission  | `mcp:read`                     |
| Write permission | `mcp:write`                    |

Add the URL as a remote MCP server in a client that supports Streamable HTTP and OAuth. Follow the sign-in and consent flow. Project API keys do not authenticate this MCP endpoint.

The documentation lives here on `pdfparse.net`; the MCP subdomain is the protocol endpoint.

## First conversation

Start with:

> Show my PdfParse projects and the tables in the project I choose.

The assistant uses `connection.info` to discover your projects and `tables.list` to inspect a selected project. Supply `project_slug` explicitly when working across projects. Actions operate on projects owned by the connected account.

Then try:

> Create a purchase-orders table in my selected project, with purchase order number, supplier, order date, and total columns. Upload this PDF into that table and show the extracted rows when processing finishes.

See the [usage examples](https://pdfparse.net/docs/mcp/examples) for the exact action sequence and request inputs.

Tables created through MCP include an automatic integer primary key named `id`, just like tables created in the dashboard. Supply only the fields you want extracted; the database generates `id` when a row is saved. This also applies to tables provisioned by `workflow.setup`.

## Available capabilities

* **Accounts and projects:** identify the connected account, list owned projects, and create a project.
* **Tables and data:** list or create extraction tables and query saved rows.
* **Documents and jobs:** upload PDFs, start extraction for existing document keys, and inspect job status.
* **Routing:** list, create, update, and delete document classification rules.
* **Splitters:** create logical or fixed page-range drafts, inspect and update them, publish or archive them, and preview or run fixed page-range splitting.
* **Email workflows:** list inboxes and provision an inbox as part of workflow setup.
* **Workflow setup:** preview a structured intent, then provision a table, routing rule, optional inbox, and optional logical splitter in an existing project.
* **Analysis:** crosscheck extracted data and generate a commercial loan credit memo with citations.

The [action reference](https://pdfparse.net/docs/mcp/actions) lists every action, its permission, parameters, and schemas.

## Uploading a local document

The remote server cannot read a path on your computer. A client with local file access must read the PDF and pass its bytes as `data_base64` to `documents.upload`. PDFs must be no larger than **8 MiB before base64 encoding**.

`documents.upload_file` accepts a client-provided attachment object containing `download_url` and `file_id`. It requires a configured, approved download host. If the server reports that attachment downloads are not configured, use `documents.upload` with PDF bytes from a client that can read the file. Attaching a PDF in a chat does not guarantee the client can deliver it through MCP.

Uploads return `uploadId`, `fileId`, and `status`. These acknowledge ingestion; they do not prove extraction has finished. Check job status when a job ID is available and query saved rows before reporting success. Do not substitute `fileId` for a numeric job ID or assume it is an extraction document key.

## Workflow setup limits

`workflow.setup` takes structured fields, rather than a free-text goal alone. The assistant turns your request into a table schema, classification prompt, and optional inbox or splitter configuration.

Use it for coordinated creation of a new table and routing rule, optionally with a new inbox and published logical splitter. To reuse an existing table or make individual configuration changes, use `tables.create`, `routing_rules.create`, `routing_rules.update`, and the relevant `splitters` actions.

* Use an existing project. Call `projects.create` separately if you need a new one.
* Preview with `dry_run: true`, review the configuration, then apply with `dry_run: false`.
* Each intent provisions one table. Use separate table actions for additional tables.
* Identical applied intents reuse saved progress. Inspect `in_progress` or partial/error results before retrying; saved checkpoints are not a guarantee of atomic setup across services.
* Publishing a splitter activates configuration for future documents. Review the destination and inbox before publishing.

## Troubleshooting

| Result                                  | Next step                                                                                                                |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Authentication required                 | Reconnect using OAuth and finish sign-in and consent.                                                                    |
| Missing `mcp:read` or `mcp:write`       | Reauthorize with the permission needed by the action. Even a workflow preview requires write permission.                 |
| Select a `project_slug`                 | Call `connection.info`, select an owned project, and pass its slug.                                                      |
| Attachment downloads are not configured | Send PDF bytes through `documents.upload` from a client with local file access.                                          |
| Draft revision conflict                 | Call `splitters.get`, review the current draft, and use its revision in the update or publish request.                   |
| No extracted rows yet                   | Check the extraction job and table configuration. An accepted upload can still be processing or awaiting routing/review. |

Errors can be returned as MCP tool results with `isError: true`; an HTTP 200 alone does not mean the action succeeded. Analysis output is a first pass and should be reviewed against the cited source data.

