batch_scrape_cancel
Cancel a batch scrape job
Request cancellation of a batch scrape job (DELETE /batch/scrape/{id}). 409 if already finished.
id必填io.github.grepsr由 GitHub 账号 grepsr 发布v0.3.12更新于 Nov 4, 2026
Scrape, crawl, batch-scrape, map, and search the web through the hosted pline.ai API.
pline.ai MCP 服务器让助手通过托管的 pline.ai API 抓取单页、批量抓取网址列表、爬取整站、列出站点网址并进行网页搜索。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
Run this MCP server on your own machine to scrape pages, crawl sites, discover URLs, and search through the hosted pline.ai API. Each user supplies their own API key.
The scraping backend stays on pline.ai's infrastructure. You do not need to run the orchestrator, browser fetcher, Redis, or Temporal locally.
The server is published to npm as pline-api: a small
launcher that selects the prebuilt binary for your platform (macOS arm64/x64, Linux x64/arm64,
Windows x64) from an optional dependency, falling back to a checksum-verified download from the
GitHub Release. Node.js 18+ is the only requirement:
Arguments pass straight through to the binary (npx -y pline-api --http 127.0.0.1:8080), and
PLINE_MCP_BINARY=/path/to/pline-mcp makes the launcher run a build of your own. The launcher
source is in ../npm; per-platform packages are named pline-api-<os>-<cpu>.
Use the platform downloads and checksum instructions in the
repository setup guide. Extract pline-mcp (or
pline-mcp.exe on Windows) and configure your MCP client with its absolute path below.
You do not need Rust, Cargo, or a repository checkout for a prebuilt installation.
Each release is also published as a multi-platform image at
ghcr.io/grepsr/pline-mcp (linux/amd64 and linux/arm64), which is the package the
MCP Registry entry io.github.grepsr/pline-api points at.
With Docker installed, an MCP client can run the server over stdio without downloading a binary:
-e NAME without a value forwards the variable from the client-provided environment into the
container, so the key never appears on the command line. The image runs as an unprivileged user and
has no access to your filesystem, so save_dir and download_dir are unavailable unless you mount a
volume. Pin the tag to a release version; latest moves. The same image serves Streamable HTTP when
started without --stdio:
You need Git, a current stable Rust toolchain with Cargo, and an API key. The server calls the public
API at https://apix.pline.ai/v1 unless PLINE_BASE_URL overrides it.
From the repository root:
Edit .env with your API URL and your own key, then load it before starting your MCP client:
These environment-loading commands are for POSIX shells. On other platforms, set the same two
environment variables in your shell or MCP client configuration. The server does not load .env
automatically; the file is ignored by Git.
PLINE_BASE_URL is optional and defaults to the public API, https://apix.pline.ai/v1. Internal
deployment addresses are not reachable from a user's machine.
For a client with a mcpServers JSON configuration, add this entry. Replace the binary path, API
URL, and key with your own values. On Windows the binary has an .exe suffix.
Use an absolute binary path so the client can launch it from any working directory.
For source builds, the executable is mcp-server/target/release/pline-mcp inside the checkout. Store real
credentials in your local client settings, not in a committed configuration file.
For Claude Code launched from the repository root, the root .mcp.json runs the server through
Cargo and expands the two environment variables from your shell. The first release build can
take a while; building it first avoids waiting during the client's connection attempt.
The MCP client launches and manages the stdio process. You do not need to start an HTTP listener
or expose a port. Logs go to stderr (RUST_LOG=debug for more detail).
For prebuilt installs, download the new archive, verify its checksum, and replace the executable. For source builds:
Restart or reconnect the MCP client to load the rebuilt binary.
Tool results contain structured JSON. API errors return the HTTP status and the service's
detail message. The client sends your key to the configured API as x-api-key.
scrape remembers sessions per caller and host for the process lifetime. A second scrape of the
same host reuses the session unless you pass session_id or set new_session=true. Same-host
scrapes are serialized locally. A 4xx response on a remembered session drops it for the next call.
Over stdio, save_dir writes scrape outputs to your local filesystem and returns their paths. Without it,
outputs are clipped at max_chars (default 60000); truncated_outputs lists clipped fields.
Over stdio, the status tools can download finished job artifacts to a local download_dir.
HTTP requests with save_dir or download_dir are rejected before contacting the API.
Read pline://guide for usage guidance and pline://reference for the API fields and constraints.
The documents are also available in docs/guide.md and
docs/reference.md.
The remote MCP endpoint can use Pline sign-in instead of asking every agent user to paste an API
key. After sign-in, each user selects a workspace and an active API key. Follow
docs/oauth-hosting.md to configure the Pline web app and host.
The executable is pline-mcp; its public MCP identity is pline.ai.
Set PLINE_BASE_URL and PLINE_API_KEY for local stdio use.
For HTTP mode, PLINE_MCP_HTTP_ADDR sets the listener address and
PLINE_MCP_ALLOWED_HOSTS accepts a comma-separated list of allowed hosts. OAuth mode also uses
PLINE_PLATFORM_BASE_URL (Pline web app origin), PLINE_SUPABASE_URL (Supabase project origin),
and PLINE_MCP_PUBLIC_URL (public MCP origin).
The server is published to the official MCP Registry as io.github.grepsr/pline-api with the npm
package and the GHCR image above as its packages, and the repository root is installable as a Claude
Code plugin (pline-ai) that runs the npm package. The root .cursor/mcp.json
and .vscode/mcp.json configure npx -y pline-api for Cursor and VS Code
workspaces. PUBLISHING.md describes how each listing is produced and kept current.
The binary also supports Streamable HTTP, for example for local transport development:
/health reports liveness. /openapi.json serves a public OpenAPI 3.1 description of the server,
generated from the live tool list. /mcp accepts the caller's API key through Authorization: Bearer or
x-api-key; the legacy /<key>/mcp route also exists, but puts credentials in URLs and access logs.
The server forwards each caller's key rather than using the stdio environment key. A Supabase OAuth
access token is also accepted when the platform and OAuth environment variables are configured. The
user selects an active workspace API key in Pline's OAuth consent screen, and the server resolves it
for each request through the authenticated Pline platform. The MCP process does not keep a shared API
key.
Configure Supabase OAuth 2.1 with dynamic client registration enabled and /oauth/consent as its
authorization UI path. Apply API service migrations with uv run alembic upgrade head from the
pline-hades-api-service repository before enabling the hosted endpoint.
HTTP transport is stateless: no Mcp-Session-Id is issued, and standalone GET streams and DELETE
session requests return 405. Each POST uses its own API key; remembered scrape sessions remain
scoped to that key. Session replay and MCP cancellation notifications are not supported in HTTP
mode. The Git installation above uses stdio.
Run from mcp-server/:
The guide and reference are embedded with include_str!; rebuild after editing them.
来源:mcp-server/README.md,提交 19f4f2a
Cancel a batch scrape job
Request cancellation of a batch scrape job (DELETE /batch/scrape/{id}). 409 if already finished.
id必填Start a batch scrape job
Scrape a known list of URLs as one durable background job (POST /batch/scrape). Returns 202 metadata with the job id. Poll with batch_scrape_status. Completed jobs expose one JSONL artifact per output format, one line per URL: index, url, success, status, finalUrl, output, error. Cheaper and more predictable than a crawl when the URLs are already known. API docs: https://apidocs.pline.ai/guides/endpoints/batch-scrape
tagbodyurls必填emaillimitmethodoutputpromptschemaactionstimeoutwait_ms另有 9 个Check a batch scrape job
Read a batch scrape job's progress (GET /batch/scrape/{id}). status is scraping | completed | failed | cancelled with completed/failed/pending/inFlight counts. On completion s3PresignedUrls maps each format to an expiring JSONL download. Long jobs are fine to leave running: report the id instead of blocking.
id必填download_dirwait_secondsCancel a crawl job
Request cancellation of a crawl job (DELETE /crawl/{id}). 409 if already finished.
id必填Start a site crawl job
Discover and scrape a whole site by following links, as a durable background job (POST /crawl). Returns 202 metadata with the job id. Poll with crawl_status. Completed jobs expose one ZIP per format with a manifest.json mapping files to source URLs. Scope it first: an unscoped crawl of a large site burns credits fast, and map_site shows what a crawl would hit for one cheap call. API docs: https://apidocs.pline.ai/guides/endpoints/crawl
tagurl必填emaillimitoutputactionssitemaptimeoutwait_mswebhookjs_rendergeolocation另有 13 个Check a crawl job
Read a crawl job's progress (GET /crawl/{id}). status is scraping | completed | failed | cancelled with completed/failed/pending/inFlight counts. On completion s3PresignedUrls maps each format to an expiring ZIP download. Long jobs are fine to leave running: report the id instead of blocking.
id必填download_dirwait_secondsDiscover a site's URLs
List a site's URLs synchronously (POST /map), each with a type classification plus title and description when known. Cheap. Use it to size up a site before crawl_start, or when only the URL list is needed. API docs: https://apidocs.pline.ai/guides/endpoints/map
url必填limitsitemaptimeoutignore_cacheinclude_subdomainsignore_query_parametersScrape one page
Fetch one page synchronously and return its content in the requested formats (POST /scrape). Returns the flat pline.ai response: data (keyed by output), status (the page's HTTP status), final_url, session_id, request_id, effective_geolocation, site_tier. A 200 with empty data is a soft failure: retry with js_render=true if it was unset, or drop a proxy_strategy pin. The session returned is remembered per host and reused on the next scrape of that host. API docs: https://apidocs.pline.ai/guides/endpoints/scrape
tagurl必填bodymethodoutputpromptschemaactionstimeoutwait_mssave_dirjs_render另有 8 个Get search results
Search the web (GET /serp) and return organic results, plus search features in full mode. Organic results carry position, title, link, snippet, domain, page, and html_body/clean_html/links when output was requested. API docs: https://apidocs.pline.ai/guides/endpoints/serp
tbsmodequery必填deviceoutputcountrylanguagenum_resultsonly_main_contentList remembered sessions
Return the host -> session_id map this server is reusing for you. Empty until the first scrape.
无需输入参数。
已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
Your MCP client → local MCP process (stdio) → hosted pline.ai API (HTTPS){ "mcpServers": { "pline.ai": { "command": "npx", "args": ["-y", "pline-api"], "env": { "PLINE_BASE_URL": "https://apix.pline.ai/v1", "PLINE_API_KEY": "your-own-api-key" } } }}{ "mcpServers": { "pline.ai": { "command": "docker", "args": ["run", "-i", "--rm", "-e", "PLINE_BASE_URL", "-e", "PLINE_API_KEY", "ghcr.io/grepsr/pline-mcp:0.3.12", "--stdio"], "env": { "PLINE_BASE_URL": "https://apix.pline.ai/v1", "PLINE_API_KEY": "your-own-api-key" } } }}docker run --rm -p 8080:8080 -e PLINE_BASE_URL=https://apix.pline.ai/v1 ghcr.io/grepsr/pline-mcp:0.3.12git clone https://github.com/grepsr/pline-api.gitcd pline-apicargo build --manifest-path mcp-server/Cargo.toml --release --lockedcp .env.example .envset -a. ./.envset +a{ "mcpServers": { "pline.ai": { "command": "/absolute/path/to/pline-mcp", "args": ["--stdio"], "env": { "PLINE_BASE_URL": "https://apix.pline.ai/v1", "PLINE_API_KEY": "your-own-api-key" } } }}git pull --ff-onlycargo build --manifest-path mcp-server/Cargo.toml --release --lockedPLINE_BASE_URL=https://apix.pline.ai/v1 \ ./mcp-server/target/release/pline-mcp --http 127.0.0.1:8080cargo test --lockedcargo clippy --locked --all-targets --all-features -- -D warningscargo fmt --check