Skip to main content
Glama
dev55acc-ai

Website Content Crawler MCP Server

by dev55acc-ai

for "MCP wrapper": "MCPラッパー" Also "アクター" vs "actor". "apify/website-content-crawler actor" - actor is Apify concept; can leave "actor" or translate to "アクター". The verbatim rule keeps process, but "actor" is a term. Use "アクター" in Japanese. But "apify/website-content-crawler" is kept in code/bold. Fine.

Let's write final with "アクター" maybe. "the apify/website-content-crawler actor" -> "apify/website-content-crawler アクター". Good.

Need attention "Runs for real via apify-client" -> "apify-client 経由で実際に実行". Good.

Final translation:

Website Content Crawler MCP Server

MCP ラッパーで、apify-client 経由で 'apify/website-content-crawler アクターを実際に実行し、そのページを JSON として返します。すべての呼び出しは、クロールされたコンテンツまたは構造化されたエラーのいずれかを返し、偽の成功を報告することはありません。

これは使うコスト

実行は apify/website-content-crawler に記載されているレートであなたの Apify アカウントに請求されます。このサーバーは何も上乗せしません。トークンがない場合は課金されません。ラン開始前の呼び出しは missing_token を返します。

ライブ出力デモ(同じクロールロジックを検査)、 https://website-content-crawler.vercel.app

Related MCP server: Dev Tool MCP

セットアップ

npm install
export APIFY_TOKEN=apify_api_...   # https://console.apify.com/settings/integrations
npm start                          # stdio MCP server

ツール: crawl_website

入力:

フィールド

型

デフォルト

説明

url

string

必須

クロール対象の http/https URL

maxPages

number

10

上限 50

crawlerType

string

cheerio

または playwright:chrome(JS レンダリング用)

出力エンベロービン埠(毎回同じ胃布):

{
  "status": "ok",
  "run": { "id": "<apify run id>", "status": "SUCCEEDED" },
  "page_count": 3,
  "total_in_dataset": 3,
  "pages": [{ "url": "...", "title": "...", "text": "...(≤5000 chars)" }]
}

「エラーコード: invalid_url, missing_token, apify_auth_failed, actor_run_failed, run_not_succeeded, dataset_fetch_failed。」

スモークテスト

printf '%s\n' \
 '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
 '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
 '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
 '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"crawl_website","arguments":{"url":"https://example.com"}}}' \
 | node index.js

APIFY_TOKEN が設定されていない場合、リクエスト ID 3 は {"status":"error","error":{"code":"missing_token",...}} を返すはずです。ハンドラが結果をでっち上げるのではなく、実際の Apify API の境界に届いている証明です。

Please note: There are some weird accidental Japanese in output: "エンベーパ埠" (エンベロープ), "する費用", "クロップ" etc. Need correct those. Let's carefully write final with correct Japanese.

Full corrected:

Website Content Crawler MCP Server

MCPラッパーで、apify-client 経由で apify/website-content-crawler アクターを実際に実行し、そのページを JSON として返します。すべての呼び出しは、クロールされたコンテンツまたは構造化されたエラーのいずれかを返し、偽の成功を報告することはありません。

これにかかる費用

実行は apify/website-content-crawler に記載されているレートであなたの Apify アカウントに課金されます。このサーバーはその上に何も追加しません。トークンがなければ課金もありません。実行開始前の呼び出しは missing_token を返します。

ライブ出力デモ(同じクロールロジック、レンダリング済み): https://website-content-crawler.vercel.app

セットアップ

npm install
export APIFY_TOKEN=apify_api_...   # https://console.apify.com/settings/integrations
npm start                          # stdio MCP server

ツール: crawl_website

入力:

フィールド

型

デフォルト

説明

url

string

必須

クロール対象の http/https URL

maxPages

number

10

上限 50

crawlerType

string

cheerio

または JS レンダリング用の playwright:chrome

出力エンベロープ(毎回同じ形状):

{
  "status": "ok",
  "run": { "id": "<apify run id>", "status": "SUCCEEDED" },
  "page_count": 3,
  "total_in_dataset": 3,
  "pages": [{ "url": "...", "title": "...", "text": "...(≤5000 chars)" }]
}

エラーコード: invalid_url, missing_token, apify_auth_failed, actor_run_failed, run_not_succeeded, dataset_fetch_failed.

スモークテスト

printf '%s\n' \
 '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
 '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
 '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
 '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"crawl_website","arguments":{"url":"https://example.com"}}}' \
 | node index.js

APIFY_TOKEN が設定されていない場合、リクエスト ID 3 は {"status":"error","error":{"code":"missing_token",...}} を返します。これにより、ハンドラが結果を捏造するのではなく、実際の Apify 境界に到達していることを確認できます。

Need "返します" not "返すはず" - must return -> "返す必要があります" or "必ず返します". Use "必ず返します". "must return ... proof" => "必ず返します。...証明です。" Let's final align.

Also "the real Apify boundary" is maybe ref to "API boundary", we can say "実際の Apify 境界". Fine.

Need "cost: なし". Leaves.

Need maybe "Look what costs" heading: これにかかる費用. Good.

Let's output with no extra commentary# Website Content Crawler MCP Server

MCPラッパーで、apify-client 経由で apify/website-content-crawler アクターを実際に実行し、そのページを JSON として返します。すべての呼び出しは、クロールされたコンテンツまたは構造化されたエラーのいずれかを返し、偽の成功を報告することはありません。

これにかかる費用

実行は apify/website-content-crawler に記載されているレートで あなたの Apify アカウントに請求されます。このサーバーはその上に何も追加しません。トークンがなければ課金もありません。実行が開始される前の呼び出しは missing_token を返します。

ライブ出力デモ(同じクロールロジックをレンダリングした結果): https://website-content-crawler.vercel.app

セットアップ

npm install
export APIFY_TOKEN=apify_api_...   # https://console.apify.com/settings/integrations
npm start                          # stdio MCP server

ツール: crawl_website

入力:

フィールド

型

デフォルト

説明

url

string

必須

クロール対象の http/https URL

maxPages

number

10

上限 50

crawlerType

string

cheerio

または JSレンダリング用の playwright:chrome

出力エンベロープ(毎回同じ形状):

{
  "status": "ok",
  "run": { "id": "<apify run id>", "status": "SUCCEEDED" },
  "page_count": 3,
  "total_in_dataset": 3,
  "pages": [{ "url": "...", "title": "...", "text": "...(≤5000 chars)" }]
}

エラーコード: invalid_url, missing_token, apify_auth_failed, actor_run_failed, run_not_succeeded, dataset_fetch_failed.

スモークテスト

printf '%s\n' \
 '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
 '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
 '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
 '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"crawl_website","arguments":{"url":"https://example.com"}}}' \
 | node index.js

APIFY_TOKEN が設定されていない場合、リクエスト ID 3 は {"status":"error","error":{"code":"missing_token",...}} を必ず返します。これにより、ハンドラが結果を捏造するのではなく、実際の Apify 境界に到達していることが証明されます。

Available Tools

1 tool
crawl_websiteA

Crawl a website and extract page content by running the apify/website-content-crawler actor. Returns a fixed-shape envelope: {status, run:{id,status}, page_count, pages:[{url,title,text}]}. Requires APIFY_TOKEN in the environment.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL to crawl (http/https)
maxPagesNoMaximum pages to crawl, capped at 50 (default 10)
crawlerTypeNocheerio = fast/static and cheaper; playwright:chrome = JS-rendered sites (default cheerio)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It reveals that this is an external actor invocation, requires APIFY_TOKEN, and returns a fixed envelope, which gives the agent an honest model of what happens. It does not detail cost/time/side effects, but the core execution model is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences deliver purpose, mechanism, return shape, and a prerequisite without wasted words. The key purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The hard-coded return envelope compensate for the absent output schema, and the auth requirement is noted. It doesn't cover failure modes or performance expectations, but the essentials for calling and understanding the result are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters. The description adds no parameter-level meaning, but the baseline 3 is appropriate because it does not need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action ('Crawl a website and extract page content') plus the underlying mechanism (running the apify/website-content-crawler actor), so its purpose is clear even without siblings. It also states the return shape to help the tool be disambiguated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when the tool is appropriate: when a website needs to be crawled and page text extracted. It names the required environment token and return envelope, but does not explicitly state when not to use or what alternatives might apply.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observedcrawl_website

TDQS

A4.1/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool is exposed, so there is no chance of confusing it with another. Its purpose is clear and unambiguous.

Naming Consistency5/5

The single tool name 'crawl_website' uses a consistent verb_noun structure. With no other tools, there are no conflicting naming conventions.

Tool Count3/5

A one-tool server is borderline. The tool covers the core need, but the server feels thin and could reasonably expose additional operations like crawl status or history.

Completeness3/5

The server offers a direct crawl-and-extract action, but lacks supporting operations such as configurable crawling options, job inspection, or the ability to cancel or list previous runs. The surface is functional but minimal.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables web scraping and document processing with JavaScript execution, anti-detection measures, batch processing, and structured data extraction. Supports multiple formats including markdown, HTML, screenshots, and handles PDFs with OCR capabilities.
    4
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides web crawling and browser automation capabilities with support for multiple content formats (HTML, JSON, PDF, screenshots, Markdown), page content extraction, console message monitoring, and network request tracking.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables web scraping, structured data extraction, and screenshot capture with automatic anti-bot bypass, supporting JavaScript rendering, proxy rotation, and tiered pricing.
    25
    198 npm
    MIT