Geonode Scraper API
Extract web pages, crawl and map sites, search the web. Extract needs no key; other tools need one.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"scraper": {
"url": "https://scraper.geonode.io/mcp"
}
}
}远程端点
https://scraper.geonode.io/mcpstreamable-http它能做什么
工具清单
工具(1)
🟢extract(extract_request, api_key)
Extract content from a web page. Supports HTML and Markdown output formats, optional JavaScript rendering via headless browser, proxy geo-targeting, custom HTTP headers, and explicit browser wait controls via the wait_config object. Can run synchronously (returns content immediately) or asynchronously (returns a job ID that can be polled with the 'job' tool). Use 'render_js=true' for pages that require JavaScript to load their content; supplying wait_config also enables browser rendering automatically. Omit wait_config or set it to null to keep the adaptive browser settle path; send {} or concrete values to opt into explicit mode. Without an API key, extraction is synchronous only, without JavaScript rendering or request headers other than Accept-Language, and limited to a small per-client rate and daily volume. An API key, sent as the X-Api-Key header, lifts these restrictions; the plan's own limits apply instead.
输入模式
{
"type": "object",
"properties": {
"extract_request": {
"$ref": "#/$defs/ExtractRequest"
},
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Key"
}
},
"required": [
"extract_request"
],
"$defs": {
"ExtractRequest": {
"properties": {
"url": {
"description": "URL to extract content from",
"format": "uri",
"minLength": 1,
"title": "Url",
"type": "string"
},
"formats": {
"default": [
"html"
],
"description": "Output formats to return",
"items": {
"$ref": "#/$defs/OutputFormat"
},
"title": "Formats",
"type": "array"
},
"render_js": {
"default": false,
"description": "If true, uses a headless browser to render the page (slower, more expensive).",
"title": "Render Js",
"type": "boolean"
},
"processing_mode": {
"$ref": "#/$defs/ProcessingMode",
"default": "sync",
"description": "Processing mode: sync (block until done) or async (starts job and return job ID)"
},
"timeout": {
"anyOf": [
{
"minimum": 1000,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Milliseconds this request may take, counted from when we receive it and including any queue wait. A wait for the per-site rate limit or for a free thread uses the same time: when it does not fit, the request is refused with 429 instead of being held longer. On expiry the escalation chain stops rather than the response merely arriving sooner: no further browser is launched, and the request is not billed. Omit it to keep the system ceiling. Sync requests only: sending it with processing_mode=async is rejected rather than ignored, because an async caller holds a job id and polls at its own pace. Values above the ceiling are clamped to it.",
"title": "Timeout"
},
"proxy": {
"anyOf": [
{
"$ref": "#/$defs/ProxySettings"
},
{
"type": "null"
}
],
"default": {
"country": null,
"type": "residential"
},
"description": "Proxy configuration. Optional — when omitted or explicitly `null`, defaults are applied: residential type, country auto-resolved from the target URL (domain/path overrides first, then the TLD; if nothing matches, the upstream proxy provider picks the exit region). Send an object to override either field; individual fields inside the object may also be null (see ProxySettings)."
},
"headers": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Custom HTTP headers to include in extraction request. `Accept-Language` is the one exception on browser-rendered requests: it is not forwarded verbatim, because it would override the header the browser derives from its locale and leave the wire value contradicting `navigator.language`. The language you ask for is still honoured — it selects the browser locale, paired with the proxy country's region, so `en-US` through a German proxy renders the page as `en-DE`. `Host` and `:authority` are dropped: the target host always comes from `url`.",
"title": "Headers"
},
"wait_config": {
"anyOf": [
{
"$ref": "#/$defs/WaitConfig"
},
{
"type": "null"
}
],
"default": null,
"description": "Grouped browser wait policy. Optional: when omitted or null, browser requests use the adaptive default settle policy whenever a browser runs. Send a non-null object to opt into caller-owned explicit wait mode, which skips the adaptive default settle phase. Null fields inside wait_config behave the same as absence. If render_js is not set explicitly, any non-null wait_config auto-enables browser rendering and the effective render_js value is returned in metadata. If render_js=false is sent together with a non-null wait_config, the request is rejected as ambiguous."
}
},
"required": [
"url"
],
"title": "ExtractRequest",
"type": "object"
},
"OutputFormat": {
"enum": [
"markdown",
"html"
],
"title": "OutputFormat",
"type": "string"
},
"ProcessingMode": {
"enum": [
"sync",
"async"
],
"title": "ProcessingMode",
"type": "string"
},
"ProxySettings": {
"properties": {
"country": {
"anyOf": [
{
"pattern": "^[A-Z]{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "ISO 3166-1 alpha-2 country code for geo-targeting (e.g., 'US', 'GB'). Codes that are not backed by a geo-targeted proxy pool are rejected rather than silently ignored. If null, the server auto-resolves a country from the target URL (domain/path overrides first, then the TLD). If no country can be inferred, the upstream proxy provider picks the exit region.",
"title": "Country"
},
"type": {
"$ref": "#/$defs/ProxyType",
"default": "residential",
"description": "Type of proxy to use (datacenter or residential). Defaults to 'residential' when omitted."
}
},
"title": "ProxySettings",
"type": "object"
},
"ProxyType": {
"enum": [
"datacenter",
"residential",
"mix"
],
"title": "ProxyType",
"type": "string"
},
"WaitConfig": {
"description": "Explicit browser wait policy applied in order: wait_until → wait_for → wait_timeout.\nWhen a non-null WaitConfig is provided, the adaptive default settle phase is skipped\nand the caller owns the full wait sequence. Null fields inside the object are treated\nthe same as absence of that field.",
"properties": {
"wait_until": {
"anyOf": [
{
"$ref": "#/$defs/WaitUntil"
},
{
"type": "null"
}
],
"default": null,
"description": "Playwright page lifecycle event to wait for during navigation, before the selector wait or explicit delay. Accepted values: `commit` — response headers received and navigation committed; `domcontentloaded` — HTML parsed and DOM ready (no sub-resources); `load` — page and all sub-resources (images, scripts) fully loaded; `networkidle` — no network activity for 500 ms. When omitted, defaults to `domcontentloaded`."
},
"wait_for": {
"anyOf": [
{
"maxLength": 4096,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "CSS selector or XPath expression to wait for before extracting the DOM. At least one matching element must become attached to the DOM for the wait to succeed. XPath expressions must start with `//` or `xpath=`; anything else is treated as a CSS selector. Applied after wait_until.",
"title": "Wait For"
},
"wait_timeout": {
"anyOf": [
{
"maximum": 30000,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Deliberate pause in milliseconds inserted after wait_for resolves (or immediately after wait_until when wait_for is omitted), before the DOM is captured. Use to allow late-settling JavaScript to finish rendering. Range: 0–30 000 ms.",
"title": "Wait Timeout"
}
},
"title": "WaitConfig",
"type": "object"
},
"WaitUntil": {
"enum": [
"commit",
"domcontentloaded",
"load",
"networkidle"
],
"title": "WaitUntil",
"type": "string"
}
},
"title": "extractArguments"
}社区
证据