Communitygithub.com

exray エージェントスキル

exray のためのエージェントスキルとユーザードキュメンテーション。エージェントネイティブな MCP ウェブスクレイピングランタイムです。サービスは mcp.exray.dev でホストされており、ローカルで実行するものはありません。

exray エージェントスキル とは?

exray は、ウェブページをレンダリングし、ユーザーが独自の TypeScript スクレイピング・抽出コードを再利用可能な名前付きツールとして登録できる、リモート MCP サーバーです。エージェントは `scrape`(コンテンツ取得)、`extract`(フラットスキーマによるフィールド抽出)、`crawl`(サイト全体のクロール)、`define_extractor`(複雑な抽出ロジック)などのビルトインツールを呼び出すことができます。フラットスキーマのみをサポートし、エージェントはコードアセット(fetcher、extractor、handler)を TypeScript で登録できますが、登録後は `publish_definition` を呼び出して公開する必要があります。また、ハンドラーの公開時には `site.next_action` フィールドを確認し、ユーザーにページが実際に公開されたかどうかを伝える必要があります。エラー処理、スコープ管理、ストレージバインディングの制約もサポートしており、`402` や `budget_exceeded` エラー時は即座に停止する必要があります。

対応~Claude Code~Codex CLI~Cursor
npx skills add rtx3/exray-kit

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

exray

exray は、ウェブページをレンダリングし、独自の TypeScript スクレイピング・抽出コードを再利用可能な名前付きツールとして登録できるリモート MCP サーバーです。

exray を実行したりインストールしたりする必要はありません。 これは https://mcp.exray.dev/mcp でホストされているサービスです。ユーザーがベアラートークンを提供し、エージェントは MCP 経由でツールを呼び出します。

最初に: 接続されていますか?

exray ツールがツールリストにない場合、MCP サーバーは設定されていません。ユーザーに次のように伝えてください:

  1. https://app.exray.dev/sign-in でサインアップする — /welcome ページでトークンが発行されます(一度だけ表示)
  2. クライアントにサーバーを追加する — 設定は https://docs.exray.dev/docs/mcp-clients にあります
  3. クライアントを再起動する — MCP 設定は起動時に読み込まれます

接続がない場合に fetch やシェルツールでスクレイピングしようとしないでください。不足しているものを伝え、処理を停止してください。

ツールの選択

状況ツール
1ページ、コンテンツが欲しいscrape
1ページ、特定のフィールドが欲しいフラットスキーマで extract
サイト内の複数ページcrawl、その後 get_crawl_results
同じ抽出を繰り返し行う、またはフラットスキーマでは複雑すぎるロジックdefine_extractor を作成
ページがレンダリング前にクリックやスクロールを必要とするdefine_fetcher を作成
ユーザーが結果を見たい場合define_handler(結果ページ)を作成

まずは scrape / extract を使用してください。ビルトインツールで本当に表現できない場合にのみコードを書いてください — 登録されたアセットはユーザーが保守する必要があります。

フラットスキーマのみ

extract は正確に4つの型を受け入れます: string、number、boolean、string[]。ネストはできません。

{ "title": "string", "price": "number", "tags": "string[]" }

ネストされた構造や条件付きの形状には、代わりに define_extractor が必要です。

コードアセットの作成

3種類あり、すべて TypeScript で、受け入れられる前に静的に検証されます:

  • fetcher — エントリ fetch(ctx)、ブラウザを駆動し、PageSnapshot を返します
  • extractor — エントリ extract(snapshot, ctx?)、スナップショットを JSON に変換します
  • handler — エントリ handle(request, ctx)、公開ウェブページを提供します

厳格な制約 — これらに違反するコードは登録時に拒否されます:

  • 許可されるインポートは @exray/exray-api からの import type のみです。ランタイムインポートは禁止です。 DOM クエリが必要な場合は、snapshot.html を文字列処理で扱うか、fetcher 内で ctx.page.evaluate() を使用して DOM 操作を行ってください。
  • eval / new Function は禁止、トップレベルの副作用も禁止
  • サンドボックス内からのネットワークアクセスは禁止

登録後、アセットは draft 状態になります — まだ実行できません。 使用する前に publish_definition を呼び出してください。これは頻繁に問題を引き起こします。define_* だけでの成功を報告しないでください。

結果ページ — next_action を読み、それに従って行動する

handler を公開すると、レスポンスには site オブジェクトが含まれます。公開が成功しても、ページが到達可能であるとは限りません。 常に site.next_action を読み、ユーザーにまだ不足している具体的な内容を伝えてください:

next_actionユーザーに伝えること
set_username"app.exray.dev/settings/profile でユーザー名を設定してください — アドレスは <username>-<project>.exray.app になります"
enable_site"あなたのページは <site.url> にあります。有効にするには: exray site enable、またはダッシュボードから行ってください。"
shorten_slug"<username>-<slug> は63バイトを超えています。より短いプロジェクトスラッグを使用してください。"
contact_supportサーバー側の設定問題です。そのように報告してください
nullsite.url で公開されています — リンクをユーザーに伝えてください

ハンドラーの公開を、ページの場所やブロック要因を伝えずに完了しないでください。 ユーザーに他に知る方法はなく、「公開成功」と表示されると「完了した」と受け取られます。

ハンドラーができることとできないこと:

  • 可能: このプロジェクトのジョブデータを ctx.data 経由で読み取る(ジョブ一覧、結果の取得)、HTML または JSON を返す、パスでルーティングする
  • 不可能: 何かを保存する、ネットワークにアクセスする、フォーム送信を受け入れる、他のプロジェクトのデータを読み取る

これはプレゼンテーション層であり、バックエンドではありません。

ストレージバインディング

エージェントコードはデフォルトで永続化機能を持ちません。プロジェクトでバインディングが有効になっている場合、fetcher は ctx.kv / ctx.db / ctx.storage を取得します。extractor は ctx.kv のみを取得します。handler は3つすべてを 読み取り専用 で取得します。

呼び出しで binding_not_enabled がスローされた場合、バインディングは有効になっていません — これを有効にするには管理者トークン(exray bindings set --kv on)が必要です。ユーザーに伝えてください。自分で有効にすることはできません。

認識すべきエラー

エラー意味
403 forbiddenトークンにスコープが不足しています。実行には tools.execute、登録には tools.define、公開には tools.publish、アカウント操作には admin が必要です
402月間クォータを使い切りました。停止し、ユーザーに伝えてください
definition_incompatible_apiアセットが異なるメジャーバージョンの @exray/exray-api に対してコンパイルされました。再登録してください
extractor_invalid / fetcher_invalid静的検証がコードを拒否しました — 通常はランタイムインポートまたはトップレベルの副作用が原因です
binding_not_enabled上記のストレージバインディングを参照
concurrent_exceeded同時実行呼び出しが多すぎます。待機してください。タイトループで再試行しないでください

budget_exceeded または 402 の場合、停止してください。 再試行はユーザーのクォータを消費し、進展はありません。

スコープ

初回のスクレイプワークフローには tools.read + tools.execute のみが必要です。登録と公開には tools.define / tools.publish が必要です。アカウントに関わる操作 — トークンの発行、結果ページの有効化、バインディングの切り替え — には admin が必要であり、それはユーザーの仕事であり、エージェントの仕事ではありません。

完全なドキュメント

https://docs.exray.dev — クイックスタート、クライアント設定、CLI リファレンス、結果ページ、ツールパラメータ、抽出コントラクト。

関連スキル