Skip to main content
Glama
massanaRoger

extracto-mcp

by massanaRoger

extracto-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."

Related MCP server: agent-api-gateway-mcp

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

License

MIT

Available Tools

4 tools
extractExtract structured data from a URLA
Read-only

Extract structured data from a public web page and return it as validated, typed JSON. Extracto renders the page (JavaScript included), runs a schema-constrained extraction, and returns ONLY fields that match the schema. Missing data comes back as null rather than a hallucinated guess. Best for a single known URL. This call is synchronous (up to ~90s); for heavy or anti-bot pages prefer extract_async.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe public HTTPS URL to extract from.
schemaYesAn 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" }] }.
examplesNoUp to 3 few-shot examples to anchor the output format.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, openWorldHint), the description discloses JavaScript rendering, schema-constrained extraction, return of only matching fields, null for missing data, and synchronous behavior with ~90s timeout. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at about 5 sentences, front-loaded with the main purpose, and each sentence adds essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description adequately explains return format (validated typed JSON), missing data handling, and execution constraints. All three parameters are thoroughly described in the schema, making the description complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that only schema-matching fields are returned and missing data is null, enhancing understanding of parameter behavior beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool extracts structured data from a public web page and returns validated typed JSON. It distinguishes from sibling tool 'extract_async' by noting this is synchronous and best for a single known URL.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context: 'Best for a single known URL' and recommends 'extract_async' for heavy or anti-bot pages. It does not address when to use other siblings like 'get_job' or 'list_jobs', but those have different purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_asyncSubmit an async extraction jobA
Read-only

Submit an asynchronous extraction job for a heavy, slow, or anti-bot-protected page. Returns a job id immediately; poll it with get_job until status is "success" or "failed". Use this instead of extract when a page is large or likely to need stealth rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe public HTTPS URL to extract from.
schemaYesAn 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" }] }.
examplesNoUp to 3 few-shot examples.
webhookUrlNoOptional URL to receive a signed callback when the job completes.
idempotencyKeyNoOptional key; a retry with the same key replays the original job.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds async behavior and polling pattern beyond the annotations. Annotations declare readOnlyHint: true and openWorldHint: true, which are consistent. The description provides valuable behavioral context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, immediately followed by usage guidance. No redundant or vague language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Captures the key aspects: async submission, polling flow, alternatives, and mentions status outcomes. Sufficient for an async job tool with sibling context and schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not add extra meaning beyond what the schema provides, but it implies the 'url' and 'schema' are for extraction. Adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Submit') and resource ('asynchronous extraction job'), and specifies the context ('heavy, slow, or anti-bot-protected page'). It distinguishes from sibling tools by naming 'extract' as the alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance on when to use this tool (heavy/slow/anti-bot pages) and when to use alternatives (use 'extract' for simpler pages). Also explains polling flow with 'get_job'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobGet an extraction jobA
Read-only

Fetch the current status and (once complete) the result of an async extraction job created with extract_async. Status is one of pending, processing, success, failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe job id returned by `extract_async`.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and description confirms read-only nature (fetching, not modifying). Adds status values and async context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, efficient, front-loaded with purpose. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description covers what is returned (status and result) and lists status values. Adequate for simple poll operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage 100%, description mentions job id implicitly. Baseline score; description adds no extra semantics beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it fetches status and result of an async extraction job, specifically for jobs created with extract_async, distinguishing it from sync extract and list_jobs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states this tool is for jobs from extract_async and lists status values. Provides clear context but no explicit when-not-to-use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_jobsList recent extraction jobsA
Read-only

List your recent async extraction jobs, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true; description adds ordering behavior (newest first) beyond what annotations provide, enhancing transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is highly concise, front-loading the purpose and ordering, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no parameters and clear annotations, the description fully covers the needed context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters in schema (baseline 4). Description adds no parameter details, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists recent async extraction jobs in newest-first order, distinguishing it from sibling tools like extract_async (starts jobs) and get_job (single job).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies use for listing recent jobs but does not explicitly state when to use or when not to use this tool versus alternatives like get_job for a specific job.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool serves a distinct purpose: synchronous extraction, async submission, polling, and listing. No overlap or ambiguity.

Naming Consistency4/5

Names are mostly lowercase and descriptive, but 'extract_async' breaks the verb_noun pattern seen in 'get_job' and 'list_jobs'. Minor inconsistency.

Tool Count5/5

With 4 tools covering sync/async extraction and job management, the count is well-scoped for a focused extraction service.

Completeness4/5

Covers core extraction workflows, but lacks a cancel job or delete job tool. Minor gap for a complete surface.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Structured web context infrastructure for AI agents. Extract reliable schema-guided JSON from websites using Claude-powered parsing, Browserless fallback rendering, and MCP-native workflows.
    1
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables live web retrieval through MCP, allowing Claude to fetch and extract current web information with validations, SSRF protections, and structured results for grounded responses.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/massanaRoger/extracto-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server