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 分