An agent can connect on its own if it already holds X_API_KEY, X_API_KEY.Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.
tools.schemasevery tool has an object input schema
fail
tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
fail
tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: crawl_status (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); detect_site (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); extract_page (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
pass
tools.token_costabout 659 tokens to load every tool
pass
tools.api_dumptools are not a one-to-one API dump
stability50 · weight 15
pass
stability.changes2 tool changes in 30 days
fail
stability.rug_pull1 tools kept their name but changed most of their description in 30 days; review before trusting them
dependenciesn/a · weight 15
n/a
deps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know [email protected]
5 tools, about 659 tokens to load them all · tool set acb7fad52978 · tools last changed 2026-10-01 · checked 2026-10-20 23:27 UTC
Tool changes
extract_pagechangeddescription, input schema
before
Extract structured data from ONE page. ``fields`` declares your own
schema, e.g. ["title", "salary:number", "tags:list"]; omit it for the
product schema. First call on a new site compiles a recipe (300
credits); later calls replay it for 1 credit per row.
after · 67% of words in common
Extract structured data from ONE page. ``fields`` declares your own
schema, e.g. ["title", "salary:number", "tags:list"]; omit it for the
product schema. First call on a new site compiles a recipe (300
credits); later calls replay it for 1 credit per row.
A site nobody could read is remembered for a week and answered
without calling the model, so re-reading a dead page costs nothing.
`retry` asks anyway.
Walk a site from one listing URL and extract every item. Waits up
to four minutes; a longer crawl returns a job_id to pass to
crawl_status.
after · 31% of words in common
Walk a site and extract every item. Waits up to four minutes; a
longer crawl returns a job_id to pass to crawl_status.
`mode` picks how the items are found. "rows" (the default) reads every
card on the listing itself and follows its pagination -- right for
search results, categories and tables. "links" follows each card into
its own page, for sites where an item has one. "like" starts from one
example item page, given as `like_page`, and finds every other page
shaped like it; pass `listing_url` as well when you know the stock or
results page, because inferring it is the part that fails.
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
Dependencies
[email protected]PyPIthis version is not known to the dependency resolver
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
Endpoints
remote
auth
reachable
uptime 30d
p50
protocol
last ok
https://scrapewright.app/mcpstreamable-http
api_key ${X_API_KEY}
yes
99%
387 ms
2026-07-28
2026-10-20
package
registry
version
runtime
secrets
scrapewright
pypi
1.0.3
uvx
ANTHROPIC_API_KEY
Tools (5)
account
Credits left and this month's usage for the key in use.
crawl_site
Walk a site and extract every item. Waits up to four minutes; a
longer crawl returns a job_id to pass to crawl_status.
`mode` picks how the items are found. "rows" (the default) reads every
card on the listing itself and follows its pagination -- right for
search results, categories and tables. "links" follows each card into
its own page, for sites where an item has one. "like" starts from one
example item page, given as `like_page`, and finds every other page
shaped like it; pass `listing_url` as well when you know the stock or
results page, because inferring it is the part that fails.
crawl_status
Fetch a crawl that outlived its call.
detect_site
Report what platform a site runs on and which strategy to use.
Cheap; call it before a large job.
extract_page
Extract structured data from ONE page. ``fields`` declares your own
schema, e.g. ["title", "salary:number", "tags:list"]; omit it for the
product schema. First call on a new site compiles a recipe (300
credits); later calls replay it for 1 credit per row.
A site nobody could read is remembered for a week and answered
without calling the model, so re-reading a dead page costs nothing.
`retry` asks anyway.
Crawl any documentation site and return heading-bounded, LLM-ready chunks with source metadata.
Official server.json
{
"name": "io.github.Ozymandias-Owens-2/scrapewright",
"title": "scrapewright",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://scrapewright.app/mcp",
"type": "streamable-http",
"headers": [
{
"name": "X-API-Key",
"isSecret": true,
"isRequired": true,
"description": "Your scrapewright API key. Free at https://scrapewright.app — 1,000 rows a month, no card."
}
]
}
],
"version": "1.0.3",
"packages": [
{
"version": "1.0.3",
"transport": {
"type": "stdio"
},
"identifier": "scrapewright",
"runtimeHint": "uvx",
"registryType": "pypi",
"registryBaseUrl": "https://pypi.org",
"packageArguments": [
{
"type": "positional",
"value": "mcp",
"description": "scrapewright is a CLI first; `mcp` is the subcommand that speaks the protocol."
}
],
"runtimeArguments": [
{
"name": "--from",
"type": "named",
"value": "scrapewright[mcp,llm,excel]",
"description": "The MCP server, the model client and spreadsheet export are optional extras; the bare package cannot start the server."
}
],
"environmentVariables": [
{
"name": "ANTHROPIC_API_KEY",
"isSecret": true,
"description": "Only needed for sites on no known platform, where a recipe has to be written once. Shopify and WooCommerce stores work without it."
},
{
"name": "SCRAPEWRIGHT_CACHE",
"description": "Where compiled recipes are kept. Point it at durable storage, or every restart pays to work the same sites out again. Defaults to ~/.scrapewright/recipes.json"
},
{
"name": "SCRAPEWRIGHT_OBEY_ROBOTS",
"choices": [
"0",
"1"
],
"default": "1",
"description": "Set to 0 to ignore robots.txt. Only reasonable on sites you own or have written permission for; the default is to obey."
}
]
}
],
"repository": {
"url": "https://github.com/Ozymandias-Owens-2/scrapewright",
"source": "github"
},
"websiteUrl": "https://scrapewright.app",
"description": "Give it a URL, get structured rows. A model writes the parser once; replays are free."
}