mcp-rule34 について
mcp-rule34は、MCPクライアントをrule34.xxxのタグ検索APIに接続します。タグの確認、条件付き検索、投稿情報の取得に対応し、個人アカウントとAPIキーが必要です。
主な機能
- 01タグ表記と件数の検索
- 02必須・候補・除外タグでの検索
- 03メディア種別とレーティングでの絞り込み
- 04検索結果の並べ替えとページ指定
- 05IDまたはURLによる投稿情報の取得
活用シーン
- 01検索前のタグ表記の確認
- 02複数のタグ条件に合う投稿の検索
- 03タグの除外やメディア種別での絞り込み
- 04既知の投稿の詳細情報の取得
MCP 対応
rule34.xxxからタグ検索や投稿情報の取得を行うツールをMCPクライアントに公開します。利用には本人のrule34.xxxアカウントIDとAPIキーが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
3掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | |
| sort | enum | いいえ | 「score」はサイト独自の投票数で、1日1回再計算されます。「id」は新しい順です。「updated」は投稿の最終変更日時順で、タグの付け直しでも更新されます。「random」は呼び出すたびに異なるセットを抽出します。score | id | updated | random |
| tags | array | はい | 投稿がすべて含む必要があるタグ。例:['asuka langley sohryu', 'black hair']。 |
| limit | integer | いいえ | |
| any_of | array | いいえ | 投稿が少なくとも1つ含む必要があるタグ。 |
| rating | enum | いいえ | rule34.xxx が使用する2種類のレーティングです。未指定の場合は両方を検索します。questionable | explicit |
| exclude | array | いいえ | 投稿に含まれていてはならないタグ。たとえば ['monochrome'] を指定すると白黒の投稿を除外します。 |
| media_type | enum | いいえ | 静止画は 'image'、GIF は 'animated'、MP4 は 'video' を指定します。サイト独自のタグに基づくため、分類の精度はタグ付け次第です。image | animated | video | any |
詳細
mcp-rule34
rule34.xxx は、投稿がすべてタグで分類され、閲覧用の API も公開している大規模な画像掲示板です。各投稿には識別子、ページとファイルのアドレス、サイズ、閲覧者によるスコア、レーティング、分類に使われたタグの完全な一覧が含まれています。サイトには数千万件の投稿があり、タグ検索に対して一致した件数を返します。
このサーバーは、チャットクライアントをそのインデックスに接続します。必須タグ、候補タグ、除外タグを組み合わせて投稿を検索したり、識別子で投稿の記録を取得したり、検索前にサイトでのタグの正確な表記を確認したりできます。アカウントと API キーが必要です。これらはサイトが利用者ごとに発行します。
インストール
Claude Code
claude mcp add rule34 --env RULE34_USER_ID=your-id --env RULE34_API_KEY=your-key -- npx -y mcp-rule34
Claude Desktop、Cursor、および標準の設定形式を使用するクライアント
{
"mcpServers": {
"rule34": {
"command": "npx",
"args": ["-y", "mcp-rule34"],
"env": {
"RULE34_USER_ID": "your-id",
"RULE34_API_KEY": "your-key"
}
}
}
}
Node 24 以降が必要です。2 つの認証情報は必須で、設定にあるその他の項目はすべて任意です。
Docker を使用する場合
{
"mcpServers": {
"rule34": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"RULE34_USER_ID",
"-e",
"RULE34_API_KEY",
"ghcr.io/smeet666/mcp-rule34:2.0.2"
]
}
}
}
-i はプロトコルが流れる標準入力を開いたままにするためのもので、TTY はストリームを書き換えてしまうため -t は指定しません。コンテナーには api.rule34.xxx と rule34.xxx への送信 HTTPS 接続、および環境変数に設定した 2 つの認証情報が必要です。ボリュームもポートも必要ありません。
npm を使わずにバンドルを使用する場合
最新リリースから mcp-rule34-2.0.2.mcpb をダウンロードして開きます。MCP バンドルに対応するクライアントなら、npm を実行せずに自動でインストールできます。認証情報は引き続きクライアントの設定で指定します。
できること
- 「サイトではそのタグをどう表記していますか?」
- 「その 2 つのタグが付いた投稿をスコア順で探してください。」
- 「同じ検索で、monochrome は除外してください。」
- 「投稿 1234567 の記録を読み上げてください。」
- 「この検索に一致する投稿は何件ありますか?」
通常はタグの照会から検索へと進みます。find_tags でサイトでの表記を確認し、それを search_posts に渡します。
ツール
| ツール | 機能 |
|---|---|
find_tags | サイトでのタグの表記と、そのタグが付いた投稿数を調べます。 |
search_posts | 候補タグと除外タグを指定して、タグで投稿を検索します。 |
get_post | 識別子またはアドレスで、1 件の投稿の記録を取得します。 |
検索する前にタグを照会してください。 サイトはタグだけでインデックスを作成しているため、存在しないタグは何にも一致せず、スペルミスではなく空の検索結果として返されます。
find_tags
サイトでのタグの表記を調べます。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | string、最大 60 文字 | はい | 照会するテキストです。 |
戻り値: 送信されたままの query と、サイトでの表記およびそのタグが付いた投稿数を含む tags。
search_posts
タグで投稿を検索します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
tags | 1~10 個のタグ名の配列 | はい | 投稿に付いている必要があるタグです。 |
any_of | 1~10 個のタグ名の配列 | いいえ | 少なくとも 1 つ付いている必要があるタグです。 |
exclude | 1~10 個のタグ名の配列 | いいえ | どれも付いていない必要があるタグです。 |
media_type | image、animated、video または any、既定値は any | いいえ | 静止画、GIF、MP4 のいずれかです。 |
rating | questionable または explicit | いいえ | 省略すると両方が検索されます。 |
sort | score、id、updated または random、既定値は score | いいえ | サイト上での並び順です。 |
limit | 1~100 の整数、既定値は 20 | いいえ | 返す投稿数です。 |
page | 1~200 の整数、既定値は 1 | いいえ | 投稿のページ番号です。 |
media_type はサイト独自のタグを基に判定されるため、分類の精度はタグ付けの正確さに左右されます。上記の 2 つのレーティングがサイトにある唯一の値です。それ以外の値を指定すると、エラーにはなりませんが、該当する投稿は 0 件と返されます。これは、サイトに存在しなかった投稿が返されることを防ぎます。
返される内容: サイトでの表記どおりの tags、any_of、exclude、サイト独自の言語で送信された検索内容である query、サイトが数えた検索全体の一致投稿数である total、および各投稿の id、post_url、file_url、preview_url、sample_url、width、height、score、rating、tags を含む投稿自体です。スコアはサイト独自のもので、1 日に 1 回更新されます。
get_post
1 件の投稿レコードを読み取ります。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
id | 1 以上の整数 | どちらか一方 | 投稿の識別子です。 |
url | rule34.xxx の投稿 URL | どちらか一方 | 投稿ページのアドレスです。 |
返される内容: 検索結果の行に含まれる投稿情報と、タグの完全な一覧です。
設定
2つの認証情報は必須です。それ以外はすべて任意で、クライアント設定の env ブロックに指定します。
| 変数 | デフォルト | 説明 |
|---|---|---|
RULE34_USER_ID | なし、必須 | 数値のアカウント ID です。 |
RULE34_API_KEY | なし、必須 | 個人用の API キーです。 |
RULE34_USER_AGENT | プロジェクトの識別情報 | 連絡の取れる担当者の連絡先を添えて、サイトにアプリケーション名を伝えます。 |
RULE34_MIN_INTERVAL_MS | 1000 | リクエスト間の間隔です。1000~60000 の範囲で指定します。 |
RULE34_TIMEOUT_MS | 20000 | 1回のリクエストの制限時間です。1000~120000 の範囲で指定します。 |
RULE34_MAX_RETRIES | 3 | 一時的な障害が発生した後の再試行回数です。0~10 の範囲で指定します。 |
RULE34_CACHE_TTL_MS | 300000 | 回答をメモリに保持する時間です。0~86400000 の範囲で指定します。 |
RULE34_CACHE_MAX_ENTRIES | 300 | 一度にメモリに保持する回答数です。0~10000 の範囲で指定します。 |
RULE34_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。stderr に出力されます。 |
認証情報の取得方法。 サインインして、
アカウント設定を開き、
API Access Credentials という行を探してください。そこに &api_key=…&user_id=… と表示されます。この2つの値を上記の設定に指定します。キーが空の場合は、Generate New Key? にチェックを入れて保存してください。
サイトは1人につき1つのキーを発行しており、サイトのコンテンツを提供するアプリケーションには、広告を表示せず、ペイウォールも設けないよう求めています。このサーバーは独自のキーを同梱せず、各ユーザーがそれぞれ自分のキーを用意します。認証情報なしで起動した場合も実行され、ツールを公開し、呼び出しのたびに設定が必要な2つの変数を案内します。サイトに拒否されると分かっているリクエストは送信しません。
値が指定範囲外の場合はデフォルト値に戻り、その理由が stderr に出力されます。
エラー
すべての失敗には、6 種類のコードとメッセージが含まれます。また、次に行うべきことを示すヒントが付く場合があります。
| コード | 発生したこと | 対処方法 |
|---|---|---|
not_found | サイトから応答がありましたが、そのアドレスには何もありません。 | search_posts で識別子を確認してください。 |
invalid_input | リクエストを送信する前に引数が拒否されました。 | メッセージを確認してください。対象の引数が示されています。認証情報が不足している場合もここで報告されます。 |
rate_limited | サイトから、このクライアントのリクエストを控えるよう求められました。 | ヒントに示された秒数だけ待ち、同じ引数でもう一度呼び出してください。投稿は引き続き存在します。 |
parse_failure | このクライアントでは読み取れない形式で応答が届きました。 | イシュートラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストが期限を超過しました。 | RULE34_TIMEOUT_MS を増やすか、取得する投稿数を減らしてください。 |
ライブラリとして
サイトを読み取るレイヤーは、独自のリクエスト間隔制御、キャッシュ、エラーを備え、プロトコルに依存しない形で単独で公開されています。
import { Rule34Client } from "mcp-rule34/client";
const client = new Rule34Client({ credentials: { userId: "…", apiKey: "…" } });
const { data, cached } = await client.searchPosts({ tags: ["example"], limit: 5 });
console.log(data.total, cached);
読み取りのたびに { data, cached } が返され、6 種類のコードのいずれかを持つエラーがスローされます。リクエスト間には、ここでも最低 1 秒の間隔が設けられます。
リクエスト間隔と帰属表示
リクエストは一度に 1 件ずつ送信され、少なくとも 1 秒の間隔が設けられます。この間隔は、サーバーの設定にかかわらず維持されます。User-Agent は常に、プロジェクトの識別情報と、連絡可能な担当者のアドレスで終わります。
読み取りには、サイトが公開している API を使用し、サイトが発行する認証情報は、利用規約に沿って自動読み取りに使用します。すべての結果には、投稿ページのアドレスが含まれます。ファイルはダウンロードされず、ファイルのアドレスは文字列として応答に含まれます。
この MCP サーバーは非公式のプロジェクトであり、rule34.xxx とは一切関係ありません。
プライバシー
このサーバーはあなたに関する情報を収集せず、作成者にも何も送信しません。お使いのマシン上で実行され、api.rule34.xxx と rule34.xxx にのみ接続し、実行中は応答をメモリーに保持します。ディスクへの書き込みは行いません。認証情報は環境変数から読み取られ、そのサイトだけに送信されます。
PRIVACY.md では、リクエストに含まれる情報と、その内容を変更する設定について説明しています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストでは生成されたフィクスチャを使用し、ネットワークリクエストは行いません。ライブテストスイートの npm run test:live は各ルートに 1 件ずつリクエストを送信し、毎晩サイト自体に対して実行されます。
コントリビューション
バグ、質問、アイデアは イシュートラッカーにお寄せください。プルリクエストも歓迎します。まずイシューを作成すると、変更の方向性を相談できます。CONTRIBUTING.mdを参照してください。
ライセンス
MIT ライセンスです。LICENSEを参照してください。投稿とタグは rule34.xxx および投稿した人々に帰属します。
mcp-rule34(フランス語)
rule34.xxxは、投稿がすべてタグでインデックス化された大規模なイメージボードで、投稿を閲覧するためのAPIを公開しています。投稿には、ID、ページとファイルのURL、寸法、訪問者による評価、評価区分、および分類に使われているタグの全一覧が含まれます。このサイトには数千万件の投稿があり、タグで検索すると、該当件数が返されます。
このサーバーは、会話型クライアントをこのインデックスに接続します。必須タグ、代替タグ、除外タグを組み合わせて投稿を検索したり、IDで投稿の詳細を読んだり、検索前にサイトでのタグの綴りを確認したりできます。アカウントとAPIキーが必要です。これらはサイトからユーザーごとに発行されます。
インストール
Claude Code
claude mcp add rule34 --env RULE34_USER_ID=votre-id --env RULE34_API_KEY=votre-cle -- npx -y mcp-rule34
Claude Desktop、Cursor、および標準設定形式に対応するすべてのクライアント
{
"mcpServers": {
"rule34": {
"command": "npx",
"args": ["-y", "mcp-rule34"],
"env": {
"RULE34_USER_ID": "votre-id",
"RULE34_API_KEY": "votre-cle"
}
}
}
}
Node 24以降が必要です。2つの認証情報は必須で、設定に記載されているその他の項目はすべて任意です。
Dockerを使用する場合
{
"mcpServers": {
"rule34": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"RULE34_USER_ID",
"-e",
"RULE34_API_KEY",
"ghcr.io/smeet666/mcp-rule34:2.0.2"
]
}
}
}
-iはプロトコルの通信路である標準入力を開いたままにします。-tはTTYがストリームを書き換えるため省略します。コンテナにはapi.rule34.xxxおよびrule34.xxxへのHTTPSによる外向きアクセスと、環境から取得した2つの認証情報が必要です。ボリュームもポートも不要です。
npmを使わないバンドル
最新リリースからmcp-rule34-2.0.2.mcpbをダウンロードして開きます。MCPバンドルに対応するクライアントなら、npmを実行せずに自動でインストールできます。認証情報は引き続きクライアントの設定に入力します。
できること
- 「このタグの綴りをサイトで確認して。」
- 「この2つのタグが付いた投稿を、評価順に検索して。」
- 「同じ検索を、monochromeを除外して。」
- 「投稿1234567の詳細を読んで。」
- 「この検索で何件の投稿が見つかる?」
通常はタグ検索から投稿検索へ進みます。find_tagsでサイトが使用している綴りを確認し、search_postsでその綴りを使います。
ツール
| ツール | 機能 |
|---|---|
find_tags | タグの綴りと、そのタグが付いている投稿数を調べます。 |
search_posts | 代替タグや除外タグを指定して、タグで投稿を検索します。 |
get_post | IDまたはURLで投稿の詳細を読み取ります。 |
検索する前にタグを確認してください。 サイトはタグのみでインデックス化しており、認識されないタグは何にも一致しません。そのため、スペルミスではなく検索結果が空であるように見えます。
find_tags
タグの綴りを調べます。
| 引数 | 型 | 必須 | 機能 |
|---|---|---|---|
query | 文字列、最大60文字 | はい | 確認するテキストです。 |
戻り値: 送信されたとおりのqueryと、サイトで使われている綴りおよび該当する投稿数を含むtagsです。
search_posts
タグで投稿を検索します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
tags | 1~10 個のタグ名からなる配列 | はい | 投稿に付いている必要があるタグです。 |
any_of | 1~10 個のタグ名からなる配列 | いいえ | 投稿に少なくとも 1 つ付いている必要があるタグです。 |
exclude | 1~10 個のタグ名からなる配列 | いいえ | 投稿に付いていてはならないタグです。 |
media_type | image、animated、video、または any。既定値は any | いいえ | 静止画像、GIF、または MP4 です。 |
rating | questionable または explicit | いいえ | 省略した場合は両方が検索されます。 |
sort | score、id、updated、または random。既定値は score | いいえ | サイトの並べ替え順です。 |
limit | 整数、1~100。既定値は 20 | いいえ | 返す投稿数です。 |
page | 整数、1~200。既定値は 1 | いいえ | 投稿のページ番号です。 |
media_type はサイト自身のタグを基準に判定されるため、分類の正確さはタグ付けの品質に依存します。上記の 2 つの評価区分がサイトで認識されるすべてです。それ以外の値を指定すると、エラーではなく投稿が 0 件返されます。これは、サイトに存在しない結果を返すことになります。
戻り値: サイトでの表記どおりの tags、any_of、exclude、サイトの言語で送信された検索内容である query、サイトが数えた検索結果全体の投稿数である total、および各投稿の id、post_url、file_url、preview_url、sample_url、width、height、score、rating、tags。スコアはサイトのもので、1 日に 1 回更新されます。
get_post
投稿の詳細を取得します。
| 引数 | 型 | 必須 | 説明 |
|---|---|---|---|
id | 整数、1 以上 | どちらか一方 | 投稿の識別子です。 |
url | rule34.xxx のページアドレス | どちらか一方 | ページのアドレスです。 |
戻り値: 検索結果の 1 行に含まれる投稿と、その完全なタグ一覧です。
設定
2つの認証情報は必須です。それ以外はすべて任意で、クライアント設定の env ブロックにすべて記述します。
| 変数 | デフォルト | 説明 |
|---|---|---|
RULE34_USER_ID | なし、必須 | アカウントの数値 ID です。 |
RULE34_API_KEY | なし、必須 | 個人用の API キーです。 |
RULE34_USER_AGENT | プロジェクトの識別情報 | サイトに対してアプリケーションを識別し、担当者への連絡先を提示します。 |
RULE34_MIN_INTERVAL_MS | 1000 | 2つのリクエスト間隔です。1000~60000の範囲で指定します。 |
RULE34_TIMEOUT_MS | 20000 | リクエストのタイムアウトです。1000~120000の範囲で指定します。 |
RULE34_MAX_RETRIES | 3 | 一時的な失敗後の再試行回数です。0~10の範囲で指定します。 |
RULE34_CACHE_TTL_MS | 300000 | 応答をメモリに保持する期間です。0~86400000の範囲で指定します。 |
RULE34_CACHE_MAX_ENTRIES | 300 | 一度にメモリに保持する応答数です。0~10000の範囲で指定します。 |
RULE34_LOG_LEVEL | error | silent、error、info、debug のいずれかを指定します。エラー出力に書き込みます。 |
認証情報の確認方法。 ログインし、
アカウント設定を開いて、
API Access Credentials の行を探します。&api_key=…&user_id=… と表示されるので、
この2つの値を上記の設定に入力します。キーが空の場合は、Generate New Key? にチェックを入れて保存します。
サイトでは1人につき1つのキーが発行され、コンテンツを提供するアプリケーションには、広告を表示せず、ペイウォールの内側に置かないよう求めています。このサーバーにキーは含まれておらず、各自が自分のキーを用意します。認証情報なしで起動しても動作し、ツールを公開します。呼び出しのたびに、設定が必要な2つの変数を案内します。サイトに拒否されると分かっているリクエストは送信しません。
範囲外の値はデフォルト値に戻され、その理由はエラー出力に書き込まれます。
エラー
各エラーには6つのコードのいずれか、メッセージ、必要に応じて次の操作の案内が含まれます。
| コード | 発生したこと | 対処 |
|---|---|---|
not_found | サイトは応答しましたが、そのアドレスには何もありません。 | search_posts で識別子を確認してください。 |
invalid_input | リクエストを送信する前に引数が拒否されました。 | 引数名が示されたメッセージをお読みください。識別子が不足している場合はここに表示されます。 |
rate_limited | サイトから、このクライアントのリクエストを控えるよう求められています。 | 示された秒数だけ待って、同じ引数でもう一度呼び出してください。投稿は引き続き存在します。 |
parse_failure | 応答は届きましたが、ここでは読み取れない形式でした。 | イシュートラッカーで報告してください。 |
network_error | リクエストが完了しませんでした。 | 少し待ってから再試行してください。 |
timeout | リクエストがタイムアウトしました。 | RULE34_TIMEOUT_MS を増やすか、取得する投稿を減らしてください。 |
ライブラリとして使う
サイトを読み取るレイヤーは、プロトコルに依存せず、リクエスト間隔、キャッシュ、エラー処理とともに単独で公開されています。
import { Rule34Client } from "mcp-rule34/client";
const client = new Rule34Client({ credentials: { userId: "…", apiKey: "…" } });
const { data, cached } = await client.searchPosts({ tags: ["example"], limit: 5 });
console.log(data.total, cached);
各読み取りは { data, cached } を返し、6つのコードのいずれかを持つエラーをスローします。リクエスト間に最低1秒の間隔を設ける制約も、ここで適用されます。
リクエスト間隔とクレジット表記
リクエストは1つずつ送信され、間隔は最低1秒です。この制約は、どのような設定でも適用されます。User-Agent の末尾には、必ずプロジェクトの識別情報と連絡先アドレスが付加されます。
読み取りにはサイトがドキュメントで案内している API を使用します。また、自動読み取りで使用するようサイトの規約に定められている識別子を使います。各結果には投稿ページのアドレスが含まれます。ダウンロードは行われず、ファイルアドレスは文字列として応答を通過します。
この MCP は非公式プロジェクトであり、rule34.xxx とは無関係です。
プライバシー
このサーバーはユーザーに関する情報を収集せず、作者に情報を送信することもありません。お使いのマシン上で動作し、api.rule34.xxx と rule34.xxx へのみ接続します。応答は動作中のみメモリに保持し、ディスクには何も書き込みません。認証情報は環境変数から読み込まれ、このサイトにのみ送信されます。PRIVACY.md には、リクエストに含まれる情報と、それを変更する設定が記載されています。
開発
npm install
npm run build:fixtures
npm test
npm run check
テストは生成されたフィクスチャを使用して実行され、リクエストは一切送信しません。ライブテストスイート npm run test:live は各ルートにつき1回リクエストを送信し、毎晩サイト自体に対して実行されます。
貢献
不具合、質問、アイデアはイシュートラッカーでお知らせください。変更の提案も歓迎します。まずチケットを作成すると、変更内容の方向性を合わせやすくなります。CONTRIBUTING.mdをご覧ください。
ライセンス
MIT。詳細は LICENSE をご覧ください。投稿とタグの権利は rule34.xxx および投稿者に帰属します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。