About Extracto
Extracto is an MCP server that turns a URL and a typed schema into validated JSON for MCP clients. It offers synchronous and asynchronous extraction, with absent fields returned as null rather than guessed.
Key features
- 01Extract typed data from a URL
- 02Validate output against a schema
- 03Return missing fields as null
- 04Run asynchronous extraction jobs
- 05Check job status and list recent jobs
Use cases
- 01Collect structured fields from a web page
- 02Extract data from heavy or anti-bot pages asynchronously
- 03Retrieve article or product details in a defined JSON shape
MCP support
Exposes URL extraction and asynchronous job-management tools to MCP clients. The stdio server uses an Extracto API key.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y extracto-mcpEXTRACTO_API_KEYSecretYour Extracto API key from https://app.getextracto.dev/keysEXTRACTO_BASE_URLOverride the API host (defaults to https://app.getextracto.dev)EXTRACTO_TIMEOUT_MSPer-request timeout in milliseconds (default 90000)Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
4Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The public HTTPS URL to extract from. |
| schema | object | Yes | An object mapping each field name to a type. A type is one of the literals "string", "number", "boolean", "array", "object"; OR a one-element array for a list (e.g. ["string"] for a list of strings, or [{ "title": "string", "price": "number" }] for a list of objects); OR a nested object (e.g. { "author": { "name": "string" } }). Use the most specific shape you can. Example: { "title": "string", "price": "number", "tags": ["string"], "reviews": [{ "user": "string", "stars": "number" }] }. |
| examples | array | No | Up to 3 few-shot examples to anchor the output format. |
Details
From the project READMEextracto-mcp
Model Context Protocol server for Extracto. It gives Claude, Cursor, Claude Code, and any MCP client the ability to turn a URL plus a schema into validated, typed JSON — no prompt engineering, no HTML parsing, and no hallucinated fields (missing data comes back as null).
Quick start
You need an Extracto API key. Get one at app.getextracto.dev/keys.
The server runs over stdio and is published to npm, so most clients just need this config block.
Claude Desktop
Edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"extracto": {
"command": "npx",
"args": ["-y", "extracto-mcp"],
"env": { "EXTRACTO_API_KEY": "exa_live_your_key_here" }
}
}
}
Cursor
Add to ~/.cursor/mcp.json (or the project .cursor/mcp.json) with the same block.
Claude Code
claude mcp add extracto -e EXTRACTO_API_KEY=exa_live_your_key_here -- npx -y extracto-mcp
Restart the client and ask it to extract something, e.g. "Use extracto to pull the title, language and star count from github.com/facebook/react."
Tools
| Tool | What it does |
|---|---|
extract | Synchronous extraction from a single URL (up to ~90s). Returns { data, meta }. |
extract_async | Submit an async job for heavy or anti-bot pages. Returns a job id immediately. |
get_job | Poll an async job for status and result. |
list_jobs | List your recent async jobs. |
The schema argument
A schema is an object mapping field names to types. A type is:
- a literal:
"string","number","boolean","array","object" - a one-element array for a list:
["string"], or[{ "title": "string" }] - a nested object:
{ "author": { "name": "string" } }
{
"title": "string",
"price": "number",
"tags": ["string"],
"reviews": [{ "user": "string", "stars": "number" }]
}
Only fields that are actually found on the page are returned; anything missing is null rather than guessed.
Configuration
All configuration is via environment variables passed by your MCP client:
| Variable | Required | Description |
|---|---|---|
EXTRACTO_API_KEY | yes | Your key from app.getextracto.dev/keys. |
EXTRACTO_BASE_URL | no | Override the API host (defaults to https://app.getextracto.dev). |
EXTRACTO_TIMEOUT_MS | no | Per-request timeout in ms (default 90000). |
Development
npm install
npm run dev # run from source with tsx
npm run typecheck
npm run build # bundle to dist/ with tsup
Related
extracto— the official TypeScript/JavaScript SDK.- getextracto.dev — docs and API reference.
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.