{
  "markdown": "# extracto-mcp\n\n[Model Context Protocol](https://modelcontextprotocol.io) server for [Extracto](https://getextracto.dev). 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`).\n\n## Quick start\n\nYou need an Extracto API key. Get one at [app.getextracto.dev/keys](https://app.getextracto.dev/keys).\n\nThe server runs over stdio and is published to npm, so most clients just need this config block.\n\n### Claude Desktop\n\nEdit `claude_desktop_config.json` (Settings → Developer → Edit Config):\n\n```json\n{\n  \"mcpServers\": {\n    \"extracto\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"extracto-mcp\"],\n      \"env\": { \"EXTRACTO_API_KEY\": \"exa_live_your_key_here\" }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `~/.cursor/mcp.json` (or the project `.cursor/mcp.json`) with the same block.\n\n### Claude Code\n\n```bash\nclaude mcp add extracto -e EXTRACTO_API_KEY=exa_live_your_key_here -- npx -y extracto-mcp\n```\n\nRestart 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.\"_\n\n## Tools\n\n| Tool            | What it does |\n| --------------- | ------------ |\n| `extract`       | Synchronous extraction from a single URL (up to ~90s). Returns `{ data, meta }`. |\n| `extract_async` | Submit an async job for heavy or anti-bot pages. Returns a job id immediately. |\n| `get_job`       | Poll an async job for status and result. |\n| `list_jobs`     | List your recent async jobs. |\n\n### The `schema` argument\n\nA schema is an object mapping field names to types. A type is:\n\n- a literal: `\"string\"`, `\"number\"`, `\"boolean\"`, `\"array\"`, `\"object\"`\n- a one-element array for a list: `[\"string\"]`, or `[{ \"title\": \"string\" }]`\n- a nested object: `{ \"author\": { \"name\": \"string\" } }`\n\n```json\n{\n  \"title\": \"string\",\n  \"price\": \"number\",\n  \"tags\": [\"string\"],\n  \"reviews\": [{ \"user\": \"string\", \"stars\": \"number\" }]\n}\n```\n\nOnly fields that are actually found on the page are returned; anything missing is `null` rather than guessed.\n\n## Configuration\n\nAll configuration is via environment variables passed by your MCP client:\n\n| Variable             | Required | Description |\n| -------------------- | -------- | ----------- |\n| `EXTRACTO_API_KEY`   | yes      | Your key from [app.getextracto.dev/keys](https://app.getextracto.dev/keys). |\n| `EXTRACTO_BASE_URL`  | no       | Override the API host (defaults to `https://app.getextracto.dev`). |\n| `EXTRACTO_TIMEOUT_MS`| no       | Per-request timeout in ms (default `90000`). |\n\n## Development\n\n```bash\nnpm install\nnpm run dev        # run from source with tsx\nnpm run typecheck\nnpm run build      # bundle to dist/ with tsup\n```\n\n## Related\n\n- [`extracto`](https://www.npmjs.com/package/extracto) — the official TypeScript/JavaScript SDK.\n- [getextracto.dev](https://getextracto.dev) — docs and API reference.\n\n## License\n\nMIT\n",
  "bytes": 3007,
  "sha": "113f8ce96e7a8e3b6f9134e9fccf5527ddb761744dd4d07ed177f98b184638d1",
  "repo_slug": "massanaroger/extracto-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_massanaroger_extracto_mcp_9c06ffaf/readme"
}