mcpField
P
pulse-fetch

pulse-fetch

ローカル
github.com/pulsemcpブラウザ自動化818 週間前に更新

pulse-fetch について

Pulse Fetch は、特定の Web ページを コンテキストに取り込む MCP サーバーです。組み込みの取得機能を持たないエージェントフレームワークや MCP クライアント向けで、PulseMCP が開発・保守しています。HTML のノイズを除去してトークン使用量を抑え、アンチボット対策サービスを経由して取得することもできます。

主な機能

  1. 01Readability による本文抽出
  2. 02取得結果の MCP リソースとしてのキャッシュ
  3. 03Firecrawl と BrightData の任意の連携
  4. 04Markdown、HTML、スクリーンショットなどの出力形式
  5. 05自然言語による特定情報の抽出

活用シーン

  1. 01記事本文をコンテキストに読み込んで要約する
  2. 02CAPTCHA や スクレイピング対策で保護されたページを取得する
  3. 03Web ページをリソースとして保存し後で再利用する

MCP 対応

MCP クライアントに scrape ツールを公開する MCP サーバーです。取得結果は MCP リソースとして保存でき、MCP プロンプトも提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"com-pulsemcp-pulse-fetch": {
"command": "npx",
"args": [
"-y",
"@pulsemcp/pulse-fetch"
],
"env": {
"FIRECRAWL_API_KEY": "<FIRECRAWL_API_KEY>",
"BRIGHTDATA_API_KEY": "<BRIGHTDATA_API_KEY>",
"STRATEGY_CONFIG_PATH": "<STRATEGY_CONFIG_PATH>",
"OPTIMIZE_FOR": "<OPTIMIZE_FOR>",
"MCP_RESOURCE_STORAGE": "<MCP_RESOURCE_STORAGE>",
"MCP_RESOURCE_FILESYSTEM_ROOT": "<MCP_RESOURCE_FILESYSTEM_ROOT>",
"SKIP_HEALTH_CHECKS": "<SKIP_HEALTH_CHECKS>",
"LLM_PROVIDER": "<LLM_PROVIDER>",
"LLM_API_KEY": "<LLM_API_KEY>",
"LLM_API_BASE_URL": "<LLM_API_BASE_URL>",
"LLM_MODEL": "<LLM_MODEL>"
}
}
}
}
起動コマンドnpx -y @pulsemcp/pulse-fetch
設定が必要な環境変数
FIRECRAWL_API_KEYシークレットAPI key for Firecrawl service to bypass anti-bot measures.
BRIGHTDATA_API_KEYシークレットBearer token for BrightData Web Unlocker service.
STRATEGY_CONFIG_PATHPath to markdown file containing scraping strategy configuration.
OPTIMIZE_FOROptimization strategy for scraping: cost or speed.
MCP_RESOURCE_STORAGEStorage backend for saved resources: memory or filesystem.
MCP_RESOURCE_FILESYSTEM_ROOTDirectory for filesystem storage of resources.
SKIP_HEALTH_CHECKSSkip API authentication health checks at startup.
LLM_PROVIDERLLM provider for extraction: anthropic, openai, or openai-compatible.
LLM_API_KEYシークレットAPI key for the chosen LLM provider.
LLM_API_BASE_URLBase URL for OpenAI-compatible LLM providers.
LLM_MODELSpecific LLM model to use for extraction.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@pulsemcp/pulse-fetch0.3.3

ツール

1

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
urlstringはい取得するウェブページの URL(例:"https://example.com/article"、"https://api.example.com/docs")
timeoutnumberいいえページ読み込みを待機する最大時間(ミリ秒)。読み込みの遅いサイトでは値を大きくします(例:2 分の場合は 120000)。デフォルト:60000(1 分)
maxCharsnumberいいえ取得したコンテンツから返す最大文字数。応答サイズの制限に使用します。デフォルト:100000
startIndexnumberいいえ読み取りを開始する文字位置です。maxChars と併用して、大きなドキュメントをページ分割して読み取ります(例:startIndex: 100000 で先頭の 10 万文字をスキップ)。デフォルト:0
cleanScrapebooleanいいえ取得したコンテンツをクリーンアップし、HTML をページ内容の意味に沿った Markdown に変換して、広告、ナビゲーション、定型部分を削除するかどうか。通常、主要な内容を保ちながらサイズを 50~90%削減できます。デバッグ時、または正確な生の HTML 構造が必要な場合にのみ無効にしてください。デフォルト:true
forceRescrapebooleanいいえこの URL のキャッシュ済みコンテンツがあっても、強制的に新しく取得します。コンテンツが変更されたと分かっている場合に便利です。デフォルト:false
resultHandlingenumいいえ取得したコンテンツと MCP Resources の処理方法。選択肢:"saveOnly"(リンクリソースとして保存し、コンテンツは返さない)、"saveAndReturn"(埋め込みリソースとして保存し、コンテンツを返す-デフォルト)、"returnOnly"(保存せずにコンテンツを返す)。デフォルト:"saveAndReturn"saveOnly | saveAndReturn | returnOnly

詳細

Pulse Fetch MCP サーバー

MCP についてまだご存じないですか?最新情報を入手する最も簡単な方法は、PulseMCP の週刊ニュースレターを読むことです。


これは、オープンインターネットから特定のリソースをコンテキストに取り込む MCP(Model Context Protocol)サーバーです。組み込みのフェッチ機能を備えていないエージェント構築用フレームワークや MCP クライアント向けに設計されています。

Pulse Fetch は、トークン使用量を抑えながらウェブページからクリーンで構造化されたコンテンツを抽出することを目的に開発されました。また、高度なボット対策回避機能によって、保護されたコンテンツにも確実にアクセスできます。

このプロジェクトは、PulseMCP が開発・保守しています。

目次

主な特長

クリーンなコンテンツ抽出:Mozilla の Readability アルゴリズムを使用して HTML のノイズを取り除き、MCP ツール呼び出し時のトークン使用量を抑えます。

インテリジェントなキャッシュ:スクレイピングしたコンテンツを MCP リソースとして自動的にキャッシュします。同じ URL への次回以降のリクエストでは、ネットワーク呼び出しを行わずにキャッシュ済みのコンテンツを即座に返し、パフォーマンスを大幅に向上させます。

ボット対策の回避:Firecrawl API と BrightData API を統合し、スクレイピング対策技術を確実に回避します。

スマートな戦略選択:URL パターンごとに最適なスクレイピング方法を自動的に学習して適用し、時間とともにパフォーマンスを向上させます。

LLM に最適化:LLM とのやり取りの信頼性を高めるため、MCP プロンプトと説明的なツール設計を提供します。

柔軟な形式:クリーンな Markdown、HTML、スクリーンショット、構造化データ抽出など、複数の出力形式に対応しています。

インテリジェントな抽出:LLM を活用した自然言語のクエリで、特定の情報を抽出します。

機能

このサーバーは macOS と Claude Desktop で構築・テストされています。他の MCP クライアントでも動作するはずです。

ツール名説明
scrape高度なコンテンツ抽出オプションと複数の出力形式を使用して、単一のウェブページをスクレイピングします。

使用のヒント

  • scrape ツールは、ウェブコンテンツのあらゆる抽出に対応し、必要に応じてボット対策を自動的に回避します
  • 結果の処理モード:resultHandling パラメーターで、スクレイピングしたコンテンツの処理方法を制御します。
    • saveAndReturn(デフォルト):コンテンツを MCP リソースとして保存し、さらに返します。再利用に最適です
    • returnOnly:保存せずにコンテンツを返します。コンテンツを一度だけ使う場合に使用します
    • saveOnly:コンテンツを MCP リソースとして保存し、リソースリンクのみを返します。大きなコンテンツを扱う場合に効率的です
  • 自動キャッシュ:以前にスクレイピングした URL はデフォルトでキャッシュされます。同じ URL への再リクエストでは、キャッシュ済みのコンテンツが即座に返されます
  • ページが更新されたことがわかっている場合は、forceRescrape: true を使用してキャッシュを回避し、最新のコンテンツを取得します
  • トークン制限を超える大きなコンテンツを扱うには、maxChars パラメーターと startIndex パラメーターを使用します
  • 読み込みの遅いサイトでは、タイムアウトパラメーターを設定します(デフォルトは 60s)
  • ページから特定の情報を抽出するには、自然言語のクエリとともに extract パラメーターを使用します(LLM の設定が必要です)

例

基本的なウェブコンテンツの抽出

User: "Get the main content from this article: https://example.com/article"
Assistant: I'll extract the content from that article for you.

[Uses scrape tool with onlyMainContent: true]

I've extracted the main article content. The article is titled "Example Article Title" and contains approximately 2,500 words discussing...

構造化データの抽出

User: "Extract the product information from this e-commerce page: https://shop.example.com/product/123"
Assistant: I'll extract the structured product data from that page.

[Uses scrape tool with format: 'extract' and appropriate schema]

I've extracted the product information:
- Product Name: Example Product
- Price: $99.99
- Rating: 4.5/5 stars
- Description: High-quality example product...

保護されたコンテンツの処理

User: "This page is blocking me with CAPTCHA. Can you get the content from https://protected.example.com/data"
Assistant: I'll extract the content from that protected page for you.

[Uses scrape tool with automatic anti-bot bypass]

I successfully bypassed the protection and extracted the content from the page using BrightData's Web Unlocker capabilities.

インテリジェントなキャッシュ

User: "Get the content from https://example.com/article again"
Assistant: I'll retrieve that content for you.

[Uses scrape tool - automatically returns cached content]

I've retrieved the content from cache (originally scraped 2 hours ago). The article contains...

User: "Actually, I think that article was updated. Can you get the latest version?"
Assistant: I'll fetch a fresh copy of the article for you.

[Uses scrape tool with forceRescrape: true]

I've fetched the latest version of the article. I can see it was indeed updated with new information about...

結果の処理オプション

User: "I need to archive this entire article: https://example.com/long-article"
Assistant: I'll save that article as a resource for you.

[Uses scrape tool with resultHandling: 'saveOnly']

I've successfully archived the article. It's now saved as an MCP Resource that you can access later.

User: "Can you extract just the summary from https://example.com/report without saving it?"
Assistant: I'll extract just the summary without saving the full content.

[Uses scrape tool with resultHandling: 'returnOnly' and extract parameter]

Here's the summary I extracted from the report: [summary content]

Pulse Fetch を選ぶ理由

設計原則に共感いただける場合は、当サーバーの利用をご検討ください。

fetch の公式リファレンス実装が、最も近い代替手段です。ただし、次のような違いがあります。

  • fetch にはスクレイピング対策技術を回避する仕組みがないため、試行がランダムに失敗する可能性があります。当サーバーでは、安定したアクセスを実現するためにサードパーティサービスと連携しています。
  • fetch はボランティアによって保守されているため、バグや特殊なケースへの対応に時間がかかる可能性があります。
  • Pulse Fetch はレスポンスをリソースとしてキャッシュするため、ツール呼び出しの結果を簡単に確認し、再利用できます。
  • Pulse Fetch は、目的のタスクをより確実に開始して完了できる、説明がより明確なツール設計を採用しています。

その他の代替手段の多くは、次のいずれかの点で不十分です。

  • 特定のインターネットリソースをコンテキストに取り込むことに特化していません
  • 複数ページを巡回するクローラーや検索エンジンである場合や、LLM を混乱させる完全な REST API に依存している場合があります
  • リソースやプロンプトといった MCP の概念を最大限に活用していません

セットアップ

前提条件

  • Node.js(package.json で指定されているバージョンの使用を推奨)
  • Claude Desktop アプリケーション(ローカルセットアップ用)
  • 任意:スクレイピング機能を強化する Firecrawl API キー
  • 任意:ウェブのロック解除機能を利用する BrightData ベアラートークン

環境変数

コア設定
環境変数説明必須デフォルト値例
FIRECRAWL_API_KEYボット対策を回避するための Firecrawl サービスの API キーいいえN/Afc-abc123...
BRIGHTDATA_API_KEYBrightData Web Unlocker サービスのベアラートークンいいえN/ABearer bd_abc123...
STRATEGY_CONFIG_PATHスクレイピング戦略設定を含む Markdown ファイルのパスいいえOS の一時ディレクトリ/path/to/scraping-strategies.md
OPTIMIZE_FORスクレイピングの最適化戦略:cost または speedいいえcostspeed
MCP_RESOURCE_STORAGE保存済みリソースのストレージバックエンド:memory または filesystemいいえmemoryfilesystem
MCP_RESOURCE_FILESYSTEM_ROOTファイルシステムストレージ用のディレクトリ(filesystem タイプでのみ使用)いいえ/tmp/pulse-fetch/resources/home/user/mcp-resources
SKIP_HEALTH_CHECKS起動時の API 認証ヘルスチェックをスキップするかどうかいいえfalsetrue
Extract 機能の LLM 設定

extract 機能は、MCP のネイティブサンプリング機能に対応していないクライアント向けに、代替手段を提供します。設定すると、LLM を使ってスクレイピングしたコンテンツから情報をインテリジェントに抽出できます。LLM の設定も MCP サンプリングも利用できない場合、ツールには extract パラメーターが表示されません。

環境変数説明必須デフォルト値例
LLM_PROVIDERLLM プロバイダー:anthropic、openai、openai-compatibleいいえN/Aanthropic
LLM_API_KEY選択した LLM プロバイダーの API キーいいえN/Ask-abc123...
LLM_API_BASE_URLOpenAI 互換プロバイダーのベース URLいいえN/Ahttps://api.together.xyz/v1
LLM_MODEL抽出に使用する特定のモデルいいえ下記のデフォルト値を参照gpt-4-turbo

デフォルトモデル:

  • Anthropic:claude-sonnet-4-20250514(Claude Sonnet 4 - 最新かつ最も高性能)
  • OpenAI:gpt-4.1-mini(GPT-4.1 Mini - 最新かつ最も高性能)
  • OpenAI 互換:プロバイダー固有(指定が必要)

Claude Desktop

ローカルセットアップ

ローカル版を実行するには、マシンに Node.js をインストールする必要があります。

macOS:~/Library/Application Support/Claude/claude_desktop_config.json

Windows:%APPDATA%\Claude\claude_desktop_config.json

この設定を Claude Desktop の設定ファイルに追加します。

最小限の設定(ネイティブの fetch のみを使用):

{
  "mcpServers": {
    "pulse-fetch": {
      "command": "npx",
      "args": ["-y", "@pulsemcp/pulse-fetch"]
    }
  }
}

完全な設定(すべてのオプション環境変数を使用):

{
  "mcpServers": {
    "pulse-fetch": {
      "command": "npx",
      "args": ["-y", "@pulsemcp/pulse-fetch"],
      "env": {
        "FIRECRAWL_API_KEY": "your-firecrawl-api-key",
        "BRIGHTDATA_API_KEY": "your-brightdata-bearer-token",
        "STRATEGY_CONFIG_PATH": "/path/to/your/scraping-strategies.md",
        "OPTIMIZE_FOR": "cost",
        "MCP_RESOURCE_STORAGE": "filesystem",
        "MCP_RESOURCE_FILESYSTEM_ROOT": "/path/to/resource/storage"
      }
    }
  }
}

ローカル版をセットアップするには:

  1. リポジトリをクローンするか、ダウンロードします
  2. ローカルディレクトリに移動します:cd pulse-fetch/local
  3. 依存関係をインストールします:npm install
  4. プロジェクトをビルドします:npm run build
  5. Claude Desktop の設定を正しいパスに更新します
  6. Claude Desktop を再起動します
リモートセットアップ

ホスト型ソリューションについては、Pulse Fetch (Remote)を参照してください。

開発

プロジェクト構成

pulse-fetch/
├── local/                 # Local server implementation
│   ├── src/
│   │   └── index.ts      # Main entry point
│   ├── build/            # Compiled output
│   └── package.json
├── shared/               # Shared business logic
│   ├── src/
│   │   ├── tools.ts      # Tool implementations
│   │   ├── resources.ts  # Resource implementations
│   │   └── types.ts      # Shared types
│   └── package.json
└── remote/               # Remote server (planned)
    └── README.md

開発モードでの実行

# Build shared module first
cd shared
npm install
npm run build

# Run local server in development
cd ../local
npm install
npm run dev

テスト

このプロジェクトには、包括的なテスト機能が含まれています。

# Install all dependencies
npm run install-all

# Run tests (if implemented)
npm test

# Run linting
npm run lint

# Auto-fix linting issues
npm run lint:fix

# Format code
npm run format

# Check formatting
npm run format:check

リントとフォーマット

このプロジェクトでは、コードの品質と一貫性を保つために ESLint と Prettier を使用しています。

# Check for linting issues
npm run lint

# Auto-fix linting issues
npm run lint:fix

# Format all code
npm run format

# Check if code is properly formatted
npm run format:check

ツールリファレンス

scrape

コンテンツ抽出の詳細オプションを指定して、単一のウェブページをスクレイピングします。

コンテンツのクリーニング

デフォルト(cleanScrape: true)では、このツールはスクレイピングしたコンテンツを自動的にクリーニングします。

  • HTML コンテンツ:ナビゲーション、広告、サイドバーなどの定型的な要素を取り除きながら、主要コンテンツの構造を維持し、セマンティックな Markdown に変換します。通常、コンテンツのサイズを 50~90% 削減できます。
  • JSON/XML コンテンツ:そのまま出力します(すでに構造化されているため)
  • プレーンテキスト:そのまま出力します

次の場合に限り、クリーニングを無効にします(cleanScrape: false)。

  • 解析に正確な生の HTML 構造が必要な場合
  • スクレイピングの問題をデバッグする場合
  • あらかじめ構造化されたコンテンツを扱う場合

パラメーター:

  • url(string、必須):スクレイピングする URL(例:「https://example.com」または「example.com」のみ。プロトコルが指定されていない場合は https:// が自動的に追加されます)
  • timeout(number):ページの読み込みを待つ最大時間
  • maxChars(number):返す最大文字数(デフォルト:100,000)
  • startIndex(number):出力を開始する文字インデックス(ページネーション用)
  • saveResult(boolean):結果を MCP リソースとして保存するかどうか(デフォルト:true)
  • forceRescrape(boolean):キャッシュがあっても強制的に再スクレイピングするかどうか(デフォルト:false)
  • cleanScrape(boolean):HTML コンテンツをセマンティックな Markdown に変換してクリーニングするかどうか(デフォルト:true)
  • extract(string):インテリジェントなコンテンツ抽出のための自然言語クエリ(LLM の設定が必要)

ロードマップと今後のアイデア

予定されている機能
  • 抽出のための MCP Sampling サポート — 利用可能な場合は MCP クライアントのネイティブな LLM 機能を使用
  • スクレイピングが成功したかどうかを判定する Sampling(外部 API へのフォールバックあり)。成功した場合は学習データとして保存
    • 現時点では HTTP ステータスコードに基づいてスクレイピングの成功を判定していますが、信頼できない場合があります(例:200 でもアンチボット画面が表示される)
  • スクリーンショットのサポート
    • scrape ツールで screenshot および screenshot-full-page の形式を使用可能にする
今後の拡張アイデア

スクレイピングパラメーターの拡張:

  • includeHtmlTags:出力に含める HTML タグ
  • excludeHtmlTags:出力から除外する HTML タグ
  • customUserAgent:カスタム User-Agent 文字列
  • ignoreRobotsTxt:robots.txt の制限を無視するかどうか
  • proxyUrl:任意のプロキシ URL
  • headers:リクエスト用のカスタムヘッダー
  • followLinks:ページ上の関連リンクをたどる

インタラクティブ機能:

  • スクレイピング前にクリックやスクロールなどのカスタム操作を実行

画像処理:

  • imageStartIndex:画像収集を開始する位置
  • raw:処理済みの Markdown ではなく、生のコンテンツを返す
  • imageMaxCount:リクエストごとに処理する画像の最大数
  • imageMaxHeight/Width:画像サイズの上限
  • imageQuality:JPEG 品質(1~100)
  • enableFetchImages:画像の取得と処理を有効にする

ライセンス

MIT

認証ヘルスチェック

Pulse Fetch はサーバー起動時に API 認証情報を検証し、認証設定に問題がある場合は速やかにエラーを検出します。これにより、ツールの実行中に問題が表面化しない事態を防ぎます。

ヘルスチェックの動作:

  • 無効にされていない限り、サーバー起動時に自動的に実行されます
  • クレジットを消費せずに API キーを検証する、最小限のテストリクエストを送信します
  • 認証に失敗すると、明確なエラーメッセージを表示して終了します
  • SKIP_HEALTH_CHECKS=true を設定すると無効にできます

認証情報が無効な場合の出力例:

Running authentication health checks...

Authentication health check failures:
  Firecrawl: Invalid API key - authentication failed
  BrightData: Invalid bearer token - authentication failed

To skip health checks, set SKIP_HEALTH_CHECKS=true

スクレイピング戦略の設定

pulse-fetch MCP サーバーには、ウェブサイトごとに最適なスクレイピング方法を自動選択するインテリジェントな戦略システムが含まれています。

最適化モード

OPTIMIZE_FOR 環境変数は、スクレイピング戦略の順序と選択を制御します。

  • COST(デフォルト):まずネイティブ取得を試し、次に Firecrawl、最後に BrightData を試すことで、コストを最小限に抑えます

    • 順序:native → firecrawl → brightdata
    • 最適な用途:コストを重視するほとんどのユースケース
    • 動作:有料サービスを試す前に、常に無料のネイティブ方式を最初に試します
  • SPEED:ネイティブ取得をスキップし、より高性能なスクレイパーから開始することで、結果をより速く取得します

    • 順序:firecrawl → brightdata(ネイティブ取得を完全にスキップ)
    • 最適な用途:時間に制約のあるアプリケーションや、ネイティブ取得をブロックすることが知られているサイト
    • 動作:複雑なサイトでも成功する可能性が高い高度なスクレイパーをすぐに使用します

設定例:

export OPTIMIZE_FOR=SPEED  # For faster, more reliable scraping
export OPTIMIZE_FOR=COST   # For cost-effective scraping (default)

仕組み

  1. 設定済みの戦略:サーバーは、URL ごとの戦略をローカル設定ファイルで確認します
  2. 汎用フォールバック:設定済みの戦略が存在しないか失敗した場合、汎用的な方法(native → firecrawl → brightdata)にフォールバックします
  3. 自動学習:戦略が成功すると、将来の利用に備えて、インテリジェントな URL パターンとともに設定ファイルへ自動的に保存されます

戦略の種類

  • native:Node.js fetch API を使用した高速なネイティブ取得(シンプルなページに最適)
  • firecrawl:Firecrawl API を使用した拡張コンテンツ抽出(複雑なレイアウトに適しています)
  • brightdata:BrightData Web Unlocker を使用したボット対策の回避(保護されたコンテンツ向け)

設定ファイル

設定は Markdown の表に保存されます。デフォルトでは、OS の一時ディレクトリ(Unix システムでは例として /tmp/pulse-fetch/scraping-strategies.md)に自動作成されます。STRATEGY_CONFIG_PATH 環境変数を設定すると、保存先をカスタマイズできます。

表には 3 つの列があります。

  • prefix:照合するドメインまたは URL のプレフィックス(例:reddit.com または reddit.com/r/)
  • default_strategy:使用する戦略(native、firecrawl、または brightdata)
  • notes:任意の説明や理由
設定例
| prefix        | default_strategy | notes                                               |
| ------------- | ---------------- | --------------------------------------------------- |
| reddit.com/r/ | brightdata       | Reddit requires anti-bot bypass for subreddit pages |
| reddit.com    | firecrawl        | General Reddit pages work well with Firecrawl       |
| github.com    | native           | GitHub pages are simple and work with native fetch  |
プレフィックスの照合ルール
  • ドメイン照合:github.com は github.com、www.github.com、subdomain.github.com に一致します
  • パス照合:reddit.com/r/ は reddit.com/r/programming に一致しますが、reddit.com/user/test には一致しません
  • 最長一致を優先:複数のプレフィックスが一致する場合、最も長いものが使用されます

戦略の自動検出

新しい URL をスクレイピングする場合:

  1. システムは汎用フォールバックの順序(native → firecrawl → brightdata)を試します
  2. 最初に成功した戦略が、インテリジェントに抽出された URL パターンとともに設定ファイルへ自動的に保存されます
  3. 今後、そのパターンに一致するリクエストでは、検出された戦略が使用されます
URL パターンの抽出

システムは、最後のパスセグメントを削除して URL パターンを抽出します。

  • yelp.com/biz/dolly-san-francisco → yelp.com/biz/
  • reddit.com/r/programming/comments/123 → reddit.com/r/programming/comments/
  • example.com/blog/2024/article → example.com/blog/2024/
  • stackoverflow.com/questions/123456 → stackoverflow.com/questions/

単一セグメントの URL またはルート URL の場合、ホスト名のみが保存されます。パターンの抽出時に、クエリパラメーターとフラグメントは無視されます。

設定クライアントの抽象化

システムは、設定の保存に抽象化レイヤーを使用します。

  • FilesystemClient:設定をローカルの Markdown ファイルに保存します(デフォルト)
    • 設定されている場合は STRATEGY_CONFIG_PATH を使用します
    • それ以外の場合は、OS の一時ディレクトリ(例:/tmp/pulse-fetch/scraping-strategies.md)を使用します
    • 一般的なパターンを含む初期設定を自動的に作成します
  • 将来のクライアント:GCS、S3、データベースへの保存などに対応できる可能性があります

MCP サーバーの作成時に別の StrategyConfigFactory を指定すると、ストレージのバックエンドを切り替えられます。

リソースストレージ

Pulse Fetch は、キャッシュや後からの取得に備えて、スクレイピングしたコンテンツを MCP リソースとして保存します。ストレージシステムは複数の階層に対応しており、処理の異なる段階でコンテンツを保持できます。

ストレージ構造

リソースは、次の3つの段階に分けて保存されます。

  1. Raw:ウェブサイトから取得した元のコンテンツ
  2. Cleaned:コンテンツクリーナー(HTML → Markdown など)の適用後にクリーンアップされたコンテンツ
  3. Extracted:要求された情報のみを含む、LLM で処理されたコンテンツ
ファイルシステムストレージ

ファイルシステムストレージ(MCP_RESOURCE_STORAGE=filesystem)を使用すると、ファイルはサブディレクトリに整理されます。

/tmp/pulse-fetch/resources/
├── raw/
│   └── example.com_article_20250701_123456.md
├── cleaned/
│   └── example.com_article_20250701_123456.md
└── extracted/
    └── example.com_article_20250701_123456.md

各段階で同じファイル名を使うため、簡単に関連付けられます。抽出されたファイルのメタデータには、トレーサビリティを確保するため、抽出プロンプトが含まれています。

メモリストレージ

メモリストレージも同様の構造を使用し、次のような URI で表されます。

  • memory://raw/example.com_article_20250701_123456
  • memory://cleaned/example.com_article_20250701_123456
  • memory://extracted/example.com_article_20250701_123456

メリット

  • デバッグ:処理の各段階のコンテンツを簡単に確認できます
  • 効率性:クリーンアップ済みのコンテンツを、さまざまな抽出クエリで再利用できます
  • トレーサビリティ:各段階でコンテンツがどのように変換されたかを追跡できます
  • 柔軟性:ニーズに応じて返すバージョンを選択できます

抽出機能

抽出機能を使うと、LLM によってスクレイピングしたウェブコンテンツから情報をインテリジェントに抽出できます。これは、MCP のネイティブサンプリング機能をサポートしていないクライアント向けの代替手段です。

概要

抽出機能では、次の2つの方法で情報を抽出できます。

  1. MCP サンプリング(未実装):MCP クライアントのネイティブ LLM 機能を使用します
  2. LLM API の直接呼び出し:独自の API キーを使用する、設定可能なフォールバックです

どちらの方法も利用できない場合、ツールは抽出機能なしで動作し、スクレイピングした未加工のコンテンツのみを返します。

仕組み

自然言語のクエリを含む extract パラメーターを指定すると、ツールは次の処理を行います。

  1. まず、通常どおりウェブページのコンテンツをスクレイピングします
  2. LLM を使ってコンテンツを処理し、要求された情報を抽出します
  3. 未加工の HTML の代わりに、抽出したデータを返します

アーキテクチャ

LLM プロバイダーのサポート

実装では、次の3種類のプロバイダーをサポートしています。

  1. Anthropic(ネイティブ):Anthropic の SDK を使用した直接統合

    • 最適な用途:高度な推論機能を備えた Claude モデル
    • API:Anthropic ネイティブ形式を使用
  2. OpenAI:OpenAI の API との直接統合

    • 最適な用途:GPT-4 および GPT-3.5 モデル
    • API:標準の OpenAI 形式
  3. OpenAI 互換:OpenAI 互換エンドポイントを持つ任意のプロバイダーをサポート

    • 対応プロバイダー:Together.ai、Groq、Perplexity、DeepSeek、Fireworks AI など
    • API:カスタムベース URL を使用する OpenAI 形式
設定

上記の LLM Configuration セクションで説明されている環境変数を使用して、抽出機能を設定します。

使用例
基本的な抽出
User: "Get the author and publication date from this article: https://example.com/article"
Assistant: I'll extract that information from the article.

[Uses scrape tool with extract: "author name and publication date"]

The article was written by John Doe and published on March 15, 2024.
複雑なデータの抽出
User: "Extract all product specifications from this page: https://shop.example.com/laptop"
Assistant: I'll extract the detailed specifications from that product page.

[Uses scrape tool with extract: "all technical specifications including processor, RAM, storage, display details, ports, and dimensions"]

Here are the laptop specifications:
- Processor: Intel Core i7-13700H
- RAM: 16GB DDR5
- Storage: 512GB NVMe SSD
...
実装方針
  1. クライアント抽象化レイヤー:すべての LLM プロバイダーに共通のインターフェース
  2. プロバイダー固有のクライアント:
    • AnthropicClient:Anthropic ネイティブ API との統合
    • OpenAIClient:OpenAI API との統合
    • OpenAICompatibleClient:OpenAI 互換エンドポイントに対応する柔軟なクライアント
  3. 抽出パイプライン:
    • 大きなドキュメント向けのコンテンツの前処理とチャンク分割
    • 抽出クエリに基づくスマートなプロンプト生成
    • レスポンスの解析とフォーマット
  4. フォールバックの仕組み:
    • 主な方法として MCP サンプリングを使用(利用可能な場合)
    • フォールバックとして API を直接呼び出す
    • エラー処理と再試行ロジック
この方式を採用する理由
  • 柔軟性:ユーザーは好みの LLM プロバイダーを選択できます
  • コストの最適化:さまざまなプロバイダーをサポートすることで、コストとパフォーマンスのバランスを調整できます
  • 将来への対応:OpenAI 互換インターフェースにより、新しいプロバイダーにも自動的に対応できます
  • MCP 優先:MCP のサンプリング機能が利用可能な場合に使用するよう設計されています(未実装)

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。