ブログに戻ります

MCPサーバーの例:ウェブリサーチワークフローの作成

Daniel Kim
Daniel Kim

Lead Scraping Automation Engineer

29-Sep-2026

TL;DR:

  • MCPサーバーの例は、その役割が明確なときに有用です。 ウェブデータサーバーはソースを取得し、ファイルシステムサーバーは承認されたローカルアーティファクトを処理します。
  • ツールの発見は接続されたサーフェスを確認します。 古い構成からツールの数をコピーするのではなく、実際の名前とスキーマを調査します。
  • 名前空間はホストの境界に属します。 名前空間を持つアプリケーションのアクションをルーティングするときは、サーバーの元のツール名を保持します。
  • スコープ付きディレクトリはアーティファクトワークフローを制限します。 必要な証拠フォルダーが1つだけの研究タスクに対して、ホームディレクトリ全体を公開してはいけません。
  • ツールの結果は証拠であり、指示ではありません。 取得したページやファイルは、新しいアクションを承認したり、研究の範囲を拡大したりすることはできません。

イントロダクション:各サーバーに明確な役割を与える

研究ワークフローは異なるリソースの境界を横断します。検索は候補を見つけ、ページアクセスは証拠を取得し、ローカルストレージは回答を支持するために使用される素材を保持します。各境界に対してサーバーを接続することは、ホストがその責任を明確に保つときにのみ有用です。

MCPは、ツールの発見と呼び出しのための共通インターフェースを提供します。それは、自動的にどのツールが適切か、どのソースが主張を支持するか、またはどこにファイルが書き込まれるかを決定しません。これらの決定は、アプリケーションとその許可の一部として残ります。

以下の例は、スコープ付きファイルシステムサーバーでScrapeless MCPを構成しています。これらは、ツールルーティングと証拠の引き渡しを明確にする実装パターンへと、Scrapeless MCPのユースケースを拡張します。

これらのサーバー例でできること

慎重にスコープを設定した少数のツールが、いくつかの異なる研究タスクをサポートできます。

例 ウェブデータ役割 ローカルアーティファクト役割 完了条件
研究ブリーフ 承認されたソースを見つけて読む ソースの抜粋を保持 各結論には支持する証拠があります
文書比較 選択されたリファレンスページを取得 保存されたバージョンを比較 変更された主張がソーステキストを指す
カタログ調査 許可された公開リストを読む 検証済みの行を保存 必要なフィールドと身元確認がパス
出典修正 引用されたページを再訪 提案された証拠バンドルを更新 ソースが引用された主張をまだ支持している
ブラウザ専用ページ 表示されたコンテンツを調査 関連する観察を保持 意図されたページ状態が確認される

データベースツールは後の境界になることがありますが、それはページからの任意のテキストではなく、検証済みのレコードを受け入れるべきです。ここでの例は、ローカル証拠処理までに留まり、データベースへの書き込みは研究リクエストに静かに含まれません。

なぜウェブデータレイヤーにScrapeless MCPを使用するのか?

Scrapeless MCPは、検索、ページアクセス、およびブラウザツールを共有MCPサーフェスを通じて公開します。互換性のあるホストは、ツールを発見し、各ページアクションのための別個の統合を維持することなく、承認された操作を選択できます。

Scrapeless MCP接続設定では、ローカルのstdioとホストされたStreamable HTTPオプションが文書化されています。この例ではstdioを使用しているため、サーバープロセスとそのライフタイムが表示されます。Scrapeless Agent Browserは、研究が実際に表示されたインタラクションを必要とする際のブラウザ実行サーフェスです。

MCPツール発見契約には名前と入力スキーマが含まれます。接続されたサーバーからこれらの値を読み取ります。ラッパーは、基盤となるサービスとは独立してそのツールサーフェスを変更できます。

前提条件:発見をサービスアクセスから分離する

パッケージによってサポートされる現在のNode.js環境を使用し、新しい作業ディレクトリを作成します。この例では、承認された公開ソースから配置されたsource.txtという名前の実際のテキストキャプチャを含む証拠ディレクトリも必要です。ファイルシステムサーバーがそのファイルを読み取ることができることを確認するために、書き込みツールは必要ありません。

認証されたScrapeless操作には有効なSCRAPELESS_KEYが必要です。モデル駆動型研究ループには、モデルプロバイダーキーが別に必要です。それらのリモート操作は、資格情報なしでライブ確認を保留し続けます。ローカルツールスキーマの発見は、サービス認証を証明するものではありません。

ファイルシステムサーバーは、許可されたディレクトリ内に読み取りおよび書き込み機能を提供する参照実装です。以下のホストレジストリは、意図的に狭いサブセットのみを公開します。ホストフィルタリングは有用ですが、オペレーティングシステムの隔離およびサーバーサイドのアクセス制御の代替にはなりません。

2つのサーバーを接続し、ツールを確認する

以下のセットアップでは、固定されたパッケージをインストールし、証拠ディレクトリを作成します。クライアントを実行する前に、そのディレクトリに承認されたソースキャプチャを置いてください。

bash Copy
npm install @modelcontextprotocol/sdk@1.30.1 \
  @modelcontextprotocol/server-filesystem@2026.8.31 \
  scrapeless-mcp-server@0.6.3
mkdir -p evidence

次のスクリプトを inspect_servers.mjs として保存し、node_modules と evidence を含むディレクトリから実行します。これにより、両方のサーバーが接続され、選択されたツールが検証され、アプリケーションレジストリが構築され、承認されたローカルキャプチャが読み込まれます。Scrapelessサービス呼び出しは行われません。

注: ローカルScrapelessプロセスを開始するには、空でない SCRAPELESS_KEY が必要です。通常の使用のために実際のキーを設定してください。ローカルメタデータの発見は、明らかに認証情報のない起動値で別に行われました。そのチェックはWebの取得を認証しません。認証されたWeb呼び出しとモデル駆動の研究実行は、ライブ検証が保留中です。

javascript Copy
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { resolve } from 'node:path';

if (!process.env.SCRAPELESS_KEY) {
  throw new Error('Configure SCRAPELESS_KEY before starting');
}
const directory = resolve('evidence');
const specs = [
  ['web', 'node_modules/scrapeless-mcp-server/build/index.js', []],
  ['files', 'node_modules/@modelcontextprotocol/server-filesystem/dist/index.js',
    [directory]]
];
const clients = new Map();
const registry = new Map();
const permitted = {
  web: new Set(['google_search', 'scrape_markdown']),
  files: new Set(['read_text_file', 'list_allowed_directories'])
};
try {
  for (const [prefix, entry, args] of specs) {
    const client = new Client({ name: 'research-host', version: '1.0.0' });
    clients.set(prefix, client);
    const transport = new StdioClientTransport({
      command: process.execPath, args: [resolve(entry), ...args],
      env: { ...process.env }, stderr: 'pipe'
    });
    await client.connect(transport);
    let cursor;
    const discovered = [];
    do {
      const page = await client.listTools(cursor ? { cursor } : {});
      discovered.push(...page.tools);
      cursor = page.nextCursor;
    } while (cursor);
    for (const name of permitted[prefix]) {
      const tool = discovered.find(item => item.name === name);
      if (!tool) throw new Error(`Required tool missing: ${prefix}:${name}`);
      registry.set(`${prefix}:${name}`, { client, name, schema: tool.inputSchema });
    }
    console.log(JSON.stringify({ server: prefix, discovered: discovered.length }));
  }
  const host = Object.freeze({
    tools: [...registry.keys()],
    async call(key, arguments_) {
      const route = registry.get(key);
      if (!route) throw new Error('Tool not permitted');
      return route.client.callTool({ name: route.name, arguments: arguments_ });
    }
  });
  const result = await host.call('files:read_text_file', {
    path: resolve(directory, 'source.txt')
  });
  if (result.isError) throw new Error('Filesystem read failed');
  const text = result.content.filter(part => part.type === 'text')
    .map(part => part.text).join('\n');
  if (!text.trim()) throw new Error('Evidence capture is empty');
  console.log(JSON.stringify({ exposed_tools: host.tools,
    local_capture_characters: text.length }));
} finally {
  for (const client of clients.values()) await client.close();
}

web:google_search と files:read_text_file は、アプリケーション所有のルーティングキーです。リモート呼び出しは、元のサーバーツール名をまだ使用しています。この区別は、プロトコルやSDKが自動的に名前空間を追加することを仮定することを避けます。

ファイルシステムプロセスは、選択された証拠ディレクトリのみを初期スコープとして受け取ります。MCPルートは関連するファイルシステムの境界を説明しますが、ルート自体はセキュリティサンドボックスではありません。サーバーのディレクトリの施行とホストの利用可能なツールをそれぞれ確認してください。

Scrapelessでスクレイピングを開始する

ScrapelessでWebスクレイピングと自動化のワークフローを強化しましょう!
今日サインアップして、$5の無料クレジットを取得 — クレジットカード不要。

今すぐScrapelessダッシュボードで無料クレジットを請求してください。

例1: 研究ソースを検索して読む

検索と読書のワークフローは、候補を見つけるために検索を使用し、ページアクセスで回答をサポートするソースを取得します。検索スニペットを基になるページの代替と見なすべきではありません。

プロトコルに関するタスクの場合、候補を関連する標準組織に制限します。引数を構築する前に発見された google_search スキーマを確認し、選択した公開URLに scrape_markdown を使用します。現在のツールサーフェスには、検索のための q とページの読み取りのための url が含まれています。アプリケーションの制約も選択可能なソースを制限すべきです。

この例は、発見後の認証された次のステップについて説明します。有効なサービス資格情報がない場合は、確認されたローカル配線で停止し、リクエストされたWeb結果を未解決のままにします。

例2: 文書を比較して文脈を失わない

文書比較には、別々のソースキャプチャと明示的なバージョンまたは収集時刻が必要です。差分概要を作成する前に、関連するテキストとソースアドレスを保存します。

ファイルシステムサーバーは承認されたキャプチャを読み取ることができるため、ホストはそれらを比較します。古いファイルを読むことは、その内容が現在のものであることを確立せず、変更された段落が変更された製品機能を必ずしも示すわけではありません。その区別が重要なときには、関連する実装またはリリースソースを検証してください。

起源モデルは、データをそれを生成した活動およびエージェントから分離します。その原則を適用し、ソースがどのように取得され、派生した文がどのように形成されたかを記録します。

例3: 欠落している状態のためだけにブラウザを追加する

ブラウザステップは、許可されたソースがレンダリングされたコンテンツやページテキストリードでは提供できない特定の対話を必要とする場合に適しています。すでに単純な文書として入手可能なソースを持つワークフローには含めないでください。

現在のブラウザツールを発見してから、それらをホストの許可リストに追加します。必要なセッション操作を慎重に選択し、セッション識別子に関連付けて以降のアクションを保持し、タスクが終了したらセッションを閉じます。上の狭いレジストリはブラウザアクションを公開しません。その拡張は明示的なアプリケーション変更です。

ページには、エージェントに設定を変更するかファイルを書くように求めるテキストが含まれている可能性があります。そのテキストをソースコンテンツとして扱います。ユーザーのタスクとアプリケーションの権限のみがアクションを許可できます。

実際にこれをどのように使用するか: 研究ホストにプロンプトする

良いプロンプトは、ツール選択の前にスコープと証拠要件を定義します。例えば:

「選択されたプロトコルが信頼性のある配信を定義しているかどうかを答えてください。承認された標準ドメインのみを使用し、関連するソーステキストを読み込み、サポートする抜粋を含む短い回答を返してください。提案された成果物は研究フォルダー内に保管してください。未サポートの主張は未解決として報告してください。」
ホストの計画は、ツールを発見し、許可されたソースを見つけ、それを取得し、証拠を評価し、回答を準備する必要があります。モデルは、利用可能なツールポリシーの範囲内でのみアクションを選択します。上記のローカルホストオブジェクトはルーティングを示していますが、完全な言語モデルエージェントループではありません。

あなたが戻ってくるものとそれが証明すること

発見スクリプトは、接続された各サーバーによって宣伝されているツールの数、ホストによって公開された狭いリスト、および実際のローカルキャプチャの文字数を報告します。これらの出力は、ローカルハンドシェイク、ルーティング構築、スコープのあるファイル読み取りを証明します。

成功した検索、ブラウジングセッション、モデルの回答、またはデータベース書き込みを証明するものではありません。完成した研究アーティファクトには、さらにソースURL、取得コンテキスト、関連する抜粋、およびレビューされた結論が必要です。これらのフィールドはアプリケーション所有とし、すべてのMCPサーバーが同じ証拠スキーマを返すことを暗示しないでください。

選択したウェブデータ操作のために Scrapeless pricing を確認し、モデルの使用を別個に追跡してください。ローカルサーバープロセスとリモートツール呼び出しは、異なるコスト境界を持つ可能性があります。

結論:証拠の境界を中心にツールを構成する

研究タスクを完了できる最小のサーバーセットから始めます。発見とルーティングを確認し、必要なアクションのみを公開し、各結論を形成するために使用されたソースを保持します。ワークフローが実際にそれらを必要とする場合にのみ、ブラウザまたはストレージ機能を追加し、これらの新しい境界を独立してテストします。

ウェブデータワークフローを構築する準備はできましたか?

実用的な収集ワークフローについて議論する開発者に参加してください: Discord · Telegram。

app.scrapeless.com でアカウントを作成し、出力を検証できる認可されたタスクから始めてください。

FAQ

Q: ウェブ研究のためのMCPサーバーの例は何ですか?

スコープ付きファイルシステムサーバーとペアになったウェブデータサーバーが実用的な例です。最初はソースを取得し、2番目は承認されたローカルアーティファクトを処理します。

Q: tools/listはサービスクレデンシャルが機能することを確認しますか?

ツール発見は、宣伝されたツールの表面を確認します。リモート操作の認証は、実際の認可されたサービス呼び出しによって確認する必要があります。

Q: MCPはツール名を自動的に名前空間化しますか?

MCPはサーバーツール名を公開しますが、ホストはアプリケーション固有の名前空間を追加することがあります。サーバーへの呼び出しをルーティングする際には、元の名前を保持してください。

Q: ファイルシステムのルートは完全なサンドボックスですか?

ルートは完全なセキュリティサンドボックスではありません。ディレクトリの強制、プロセスの権限、およびホストが公開するツールも意図したスコープと一致する必要があります。

Q: これらのツールはAIモデルなしで実行できますか?

決定論的プログラムは、モデルなしでMCPツールを発見し、呼び出すことができます。モデルは、アプリケーションが意図的に推論またはアクション選択を委任する場合にのみ必要です。

Q: ページコンテンツはファイル書き込みを許可できますか?

取得されたページコンテンツは、アクションの権限を付与することはできません。それを信頼できない証拠として扱い、書き込みに対してはユーザーのタスクとアプリケーションポリシーに従ってください。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ