pline.ai

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.

概览

AI 生成的概览

pline.ai MCP 服务器让助手通过托管的 pline.ai API 抓取单页、批量抓取网址列表、爬取整站、列出站点网址并进行网页搜索。

可以做什么
  • 同步抓取单个页面,按需返回 markdown、HTML 等格式,可设置 JS 渲染、代理策略与等待选项
  • 对已知网址列表启动、查询进度并取消后台批量抓取任务,按格式输出 JSONL 结果文件
  • 启动、查询并取消跟随链接的整站爬取任务,完成后输出带清单的 ZIP 文件,清单将文件映射到来源网址
  • 同步列出站点网址及类型、标题和描述,便于在爬取前评估站点规模
  • 搜索网页并返回自然结果,含排名、标题、链接、摘要和域名
  • 查看服务器为调用方复用的主机与会话对应关系
适用场景
适合助手需要获取实时网页内容的场景:阅读单个页面、收集大量已知网址、发现并抓取整个站点,或执行网页搜索,而无需自行运行浏览器或抓取基础设施。
运行要求
以本地进程方式运行,可通过 npx(需 Node.js 18+)、Docker 镜像或预编译二进制启动;每位用户需自备 pline.ai API 密钥,放在 PLINE_API_KEY 中,并以 x-api-key 请求头发送给 API。PLINE_BASE_URL 可选,默认指向公共 API。需要能访问该托管 API 的网络。
安装前请注意
API 密钥是可计费的凭据:抓取、爬取以及 premium 代理策略都会消耗付费额度,成本随爬取范围和代理等级上升。爬取与批量任务在 pline.ai 基础设施上运行,目标网址会发送给该第三方。使用 save_dir 或 download_dir 时,结果会写入本地文件系统。密钥应保存在本地客户端设置中,不要提交到配置文件。

安装

在 SourceWeft 中

  1. 打开 控制台中的 pline.ai,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

pline.ai MCP server

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.

text
Your MCP client → local MCP process (stdio) → hosted pline.ai API (HTTPS)

The scraping backend stays on pline.ai's infrastructure. You do not need to run the orchestrator, browser fetcher, Redis, or Temporal locally.

Run with npx

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:

json
{  "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"      }    }  }}

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

Install a prebuilt binary

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.

Run the Docker image

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:

json
{  "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"      }    }  }}

-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:

sh
docker run --rm -p 8080:8080 -e PLINE_BASE_URL=https://apix.pline.ai/v1 ghcr.io/grepsr/pline-mcp:0.3.12

Build from Git

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:

sh
git clone https://github.com/grepsr/pline-api.gitcd pline-apicargo build --manifest-path mcp-server/Cargo.toml --release --lockedcp .env.example .env

Edit .env with your API URL and your own key, then load it before starting your MCP client:

sh
set -a. ./.envset +a

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.

Connect an MCP client

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.

json
{  "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"      }    }  }}

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).

Update

For prebuilt installs, download the new archive, verify its checksum, and replace the executable. For source builds:

sh
git pull --ff-onlycargo build --manifest-path mcp-server/Cargo.toml --release --locked

Restart or reconnect the MCP client to load the rebuilt binary.

Tools

ToolEndpoint
scrapePOST /scrape
batch_scrape_start / batch_scrape_status / batch_scrape_cancel/batch/scrape
crawl_start / crawl_status / crawl_cancel/crawl
map_sitePOST /map
searchGET /serp
sessions_listlocal: remembered host-to-session map for this caller

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.

Hosted OAuth connection

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.

Configuration

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).

Where this server is listed

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.

HTTP mode

The binary also supports Streamable HTTP, for example for local transport development:

sh
PLINE_BASE_URL=https://apix.pline.ai/v1 \  ./mcp-server/target/release/pline-mcp --http 127.0.0.1:8080

/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.

Develop

Run from mcp-server/:

sh
cargo test --lockedcargo clippy --locked --all-targets --all-features -- -D warningscargo fmt --check

The guide and reference are embedded with include_str!; rebuild after editing them.

来源:mcp-server/README.md,提交 19f4f2a

工具

10

batch_scrape_cancel

Cancel a batch scrape job

Request cancellation of a batch scrape job (DELETE /batch/scrape/{id}). 409 if already finished.

输入参数id必填

batch_scrape_start

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 个

batch_scrape_status

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_seconds

crawl_cancel

Cancel a crawl job

Request cancellation of a crawl job (DELETE /crawl/{id}). 409 if already finished.

输入参数id必填

crawl_start

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 个

crawl_status

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_seconds

map_site

Discover 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_parameters

scrape

Scrape 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 个

sessions_list

List remembered sessions

Return the host -> session_id map this server is reusing for you. Empty until the first scrape.

无需输入参数。

版本历史

8
  1. v0.3.12最新Nov 4, 2026
  2. v0.3.10Oct 29, 2026
  3. v0.3.9Oct 14, 2026
  4. v0.3.7Oct 14, 2026
  5. v0.3.6Oct 13, 2026
  6. v0.3.5Oct 12, 2026
  7. v0.3.4Oct 12, 2026
  8. v0.3.3Oct 10, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分