https://mcp.unsiloed.ai/mcp. Add it once in your MCP client
(Claude.ai, Claude Desktop, Claude Code, Cursor, Lovable, ChatGPT,
VS Code, and more) and your assistant can parse PDFs, classify
documents, and extract structured JSON on your behalf. No API key
pasting required.What is the Unsiloed MCP Server?
The Unsiloed MCP Server is a remote Model Context Protocol server that gives Claude (and any MCP-compatible client) direct, authenticated access to Unsiloed’s document-processing tools. You connect once via OAuth. Claude then has six tools at its disposal:parse_document
classify_document
extract_data
get_*_status
get_parse_status, get_classify_status, get_extract_status).How to connect
The walkthrough below uses Claude.ai; jump to Other MCP clients for Claude Code, Cursor, Lovable, ChatGPT, VS Code, n8n, and Windsurf.Paste the MCP server URL
Sign in to Unsiloed
Approve the consent screen
parse, classify, extract, and offline_access (which lets the
connection stay signed in). Click Allow.Other MCP clients
Any MCP client connects the same way: paste the URL, sign in, approve.Claude Code (CLI)
Claude Code (CLI)
/mcp inside Claude Code, select unsiloed, and choose
Authenticate to complete the browser sign-in.Cursor
Cursor
~/.cursor/mcp.json:Lovable
Lovable
- Server name:
Unsiloed - Server URL:
https://mcp.unsiloed.ai/mcp - Authentication: OAuth (default)
ChatGPT
ChatGPT
https://mcp.unsiloed.ai/mcp, and pick OAuth when prompted.VS Code
VS Code
.vscode/mcp.json (or your user-level MCP config):n8n
n8n
- Server Transport:
HTTP Streamable(not the deprecated SSE option) - Endpoint:
https://mcp.unsiloed.ai/mcp - Authentication: OAuth2
Windsurf and other stdio-only clients
Windsurf and other stdio-only clients
mcp-remote. For Windsurf,
add to ~/.codeium/windsurf/mcp_config.json:Signing in
You sign in once with your normal Unsiloed account. No API keys. On the consent screen you’ll be asked to approve four permissions. Approve all of them unless you have a specific reason not to:| Permission | What it enables |
|---|---|
parse | parse_document + get_parse_status |
classify | classify_document + get_classify_status |
extract | extract_data + get_extract_status |
offline_access | Staying signed in. Without it you’ll re-authenticate every 15 minutes |
- An actively used connection stays signed in indefinitely. Your client renews it automatically in the background.
- If a tool refuses with “Missing required OAuth scope”, you approved fewer permissions than that tool needs. Disconnect, reconnect, and approve everything.
- If your client ever shows “reconnect required” (for example after signing out of Unsiloed), just click Reconnect and approve again.
The six tools
Parse
parse_document: convert a document to markdown
parse_document: convert a document to markdown
file_url(string, optional): publicly fetchable HTTPS URL. Presigned S3 URLs work.file_base64(string, optional): base64-encoded file contents (provide either this ORfile_url).file_name(string, optional): defaults todocument.pdf. Required for non-PDF formats when usingfile_base64.mode(fast|accurate|agentic): see Processing modes.page_range(string, optional): e.g."1-5","2,4,6","1-3,7,10-12". Omit for the whole document.
status: pending envelope with a job_id. Poll with get_parse_status.get_parse_status: poll a parse job
get_parse_status: poll a parse job
parse_document returned status: pending.Inputs:job_id(UUID, required).include_chunks(boolean, default true): set false for a cheap status-only poll.
status: Succeeded. Otherwise just metadata.Processing modes
All modes run through Unsiloed’s parsing pipeline with smart layout detection. Pick the one that matches your document complexity and latency budget:| Mode | Best for |
|---|---|
fast | Clean born-digital PDFs (system-generated invoices, receipts). Lowest latency and lowest cost. |
accurate | Most real-world documents: scanned PDFs, multi-column layouts, tables spanning pages. |
agentic | Highest fidelity. Use for legal contracts, 10-K/10-Q filings, equations, handwriting. |
Classify
classify_document: label a document
classify_document: label a document
file_urlorfile_base64(one required).categories(array, required): 1 to 20 objects shaped{name: string, description?: string}. Descriptions strongly improve accuracy by giving the classifier label hints.
get_classify_status: poll a classification job
get_classify_status: poll a classification job
get_parse_status. Use when classify_document returned status: pending.Extract
extract_data: pull typed JSON via a JSON Schema
extract_data: pull typed JSON via a JSON Schema
file_urlorfile_base64(one required).json_schema(object, required): JSON Schema (draft-07 compatible) defining the desired output. Per-fielddescriptionvalues are passed to the underlying model as extraction hints.model(alpha|beta|gamma|delta): see Model tiers.enable_citations(boolean, default false): when true, includes bbox coordinates for each extracted value.
get_extract_status: poll an extraction job
get_extract_status: poll an extraction job
get_parse_status. Use when extract_data returned status: pending.Model tiers
| Tier | Pick when… |
|---|---|
alpha | Simple key/value or shallow schemas; fastest and cheapest. |
beta | Nested objects and arrays of structured items; mid-tier latency and cost. |
gamma (default) | Strong balance of accuracy and latency. Recommended for production. |
delta | Highest accuracy. Use for complex contracts, dense tables, and strict numerical extraction. |
Example prompts
Once connected, just talk to Claude naturally. Some prompts to try:Parse a PDF into markdown
Extract contract terms
https://... and extract {parties: string[], governing_law: string, effective_date: string, termination_clause: string}
using the delta model.”Classify a batch of documents
invoice, receipt, or purchase_order, then for each
invoice extract line_items: [{description, quantity, unit_price, total}].”Pull a 10-K's financials
{revenue, cogs, gross_profit, operating_expenses, net_income}.”Working with large documents
MCP clients have a limited context window, and many truncate large tool results, so a 100-page parse can come back cut off in the chat even though the server processed it fully. Work in slices instead of one big dump:Prefer extraction over full parsing
extract_data with a JSON
Schema. It returns a compact JSON object instead of the full document
markdown, usually 100x smaller and immune to truncation.Parse in page ranges
page_range to process a big document in chunks the client can
hold: “Parse pages 1-20 of this PDF”, then “now pages 21-40”, and
so on. Ask your assistant to summarize or accumulate findings as it
goes rather than echoing full text.Poll cheaply
include_chunks: false) so the full content isn’t re-sent on every
check.Limits
- Supported formats: PDF, DOCX, DOC, PPTX, PPT, XLSX, XLS, PNG, JPEG, TIFF.
- File delivery: via a publicly fetchable HTTPS URL (presigned S3 URLs work) or inline base64.
- Long documents run asynchronously. Expect a
job_id+ polling instead of an instant answer for anything past ~30 pages. - Result size: the server returns complete results, but your MCP client may truncate what fits in the conversation. See Working with large documents.
- Credits: each processed page consumes credits from your organization’s plan. Track usage in your dashboard.
Troubleshooting
I clicked Allow but Claude says 'reconnect required'
I clicked Allow but Claude says 'reconnect required'
A tool call says 'Your Unsiloed organisation is currently suspended'
A tool call says 'Your Unsiloed organisation is currently suspended'
A tool call says 'Missing required OAuth scope'
A tool call says 'Missing required OAuth scope'
parse, classify, extract.A tool call says 'Insufficient quota'
A tool call says 'Insufficient quota'
My client says 'Server does not support OAuth authentication'
My client says 'Server does not support OAuth authentication'
mcp.unsiloed.ai and hydra.unsiloed.ai.The connection keeps dropping or asks me to sign in again
The connection keeps dropping or asks me to sign in again
My client asks for a transport type. Which one?
My client asks for a transport type. Which one?
streamable-http or
just HTTP). Do not select SSE.The parsed result looks cut off or incomplete
The parsed result looks cut off or incomplete
page_range (for example pages 1-20, then 21-40), or
switch to extract_data with a JSON Schema if you only need specific
fields. See Working with large documents.
