mcpField
B
Benchline

Benchline

リモート
benchline.fabwaseem.com開発ツール05 日前に更新
リポジトリ公式サイト

Benchline について

Benchline は、ソフトウェア開発やデータ、文書、SEO、セキュリティなどを扱うブラウザツールのディレクトリです。各ツールは純粋関数としてサイトとステートレスな HTTP MCP サーバーの両方で利用でき、API キーは不要です。

主な機能

  1. 01検索可能なツール一覧とカテゴリ・タグ
  2. 02コードとデータ形式のブラウザツール
  3. 03PDF、画像、音声の処理
  4. 04SEO、クローラー、メタデータの確認
  5. 05セキュリティ、暗号、ネットワークツール
  6. 06ステートレス HTTP MCP と HTTP API

活用シーン

  1. 01JSON の整形・検証やデータ形式の変換
  2. 02ブラウザで PDF や画像を編集・変換
  3. 03公開ページの SEO とクローラー設定を確認
  4. 04ヘッダー、トークン、DNS レコードを調査

MCP 対応

Benchline は /mcp でステートレスな Streamable HTTP MCP サーバーを提供します。API キーやセッションは不要で、公開 URL を読む処理を除き、ツール入力は端末内にとどまります。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://benchline.fabwaseem.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

Benchline

Benchline

MITライセンス 公開サイト MCPエンドポイント プルリクエスト歓迎 fabwaseem/benchline MCPサーバー

Benchlineは、ソフトウェアのリリースにまつわる、JSON、PDF、画像、トークン、ヘッダー、クローラーが引用できるファイルなどの細かな作業に使える、無料のブラウザツールディレクトリです。各ツールは純粋関数で、サイト上にページがあり、ステートレスなMCPサーバーでも同じ関数を利用できます。ツールの処理が公開URLの読み取りである場合を除き、入力データはデバイス上にとどまります。Postgresを設定すると、サイトに匿名の利用回数を保存できます。詳しくは「プライバシー」をご覧ください。

公開サイト: https://benchline.fabwaseem.com

スクリーンショット

ライトモードのディレクトリダークモードのディレクトリ
ライトモードのJSONフォーマッターダークモードのJSONフォーマッター

ディレクトリがホームページです。JSONフォーマッターはツールページの一例です(/t/json-formatter)。

機能

  • カテゴリーやタグで絞り込める検索可能なディレクトリと、⌘Kで開くコマンドパレットを備えています。フィルタリングはブラウザ内で実行されます。
  • ツールごとにフォルダーがあり、メタデータ、クライアントページ、vitestでテストされる純粋なlib/が含まれます。
  • ステートレスなStreamable HTTP MCPサーバーを/mcpで提供します。APIキーもセッションも不要です。
  • HTTPでも同じ関数をPOST /api/v1/tools/<slug>で利用できます。OpenAPIドキュメントは/openapi.jsonにあります。
  • レジストリから生成される/llms.txtと/llms-full.txtを提供します。
  • ライトテーマとダークテーマに対応しています。角の半径は小さなトークンスケールに統一されています。

ツール

toolOrderに記載されたすべてのツールです。ツールを追加したら、pnpm gen:readme-toolsを実行してください。

開発者向け

ビルドファイル、スケジュール、デプロイに必要な小さなプログラムを作成します。

Cron。 Cron式を作成し、次回の実行時刻を確認します。

  • Cron式ビルダー — Cronスケジュールを作成または貼り付け、平易な英語で確認し、次回の実行時刻を表示します。

Next.js。 Next.jsアプリをコンテナーでリリースするための本番用ファイルを作成します。

フィクスチャ。 スキーマ用の仮テキストや初期データ行を作成します。

  • Lorem ipsum — シードから仮テキスト、またはJSON、CSV、SQL形式のダミー行を作成します。

正規表現。 JavaScriptの正規表現をサンプルに対してテストします。

  • 正規表現テスター — JavaScriptのパターンをテストし、グループを確認して、置換結果をプレビューします。

コード。 ソースコードを圧縮、変換します。

  • コード圧縮ツール — JavaScript、CSS、HTMLを圧縮し、バイト単位の削減量を確認できます。
データとフォーマット

JSON、テーブル、システム間でデータをやり取りするエンコーディング。

JSON。 JSON を整形し、YAML に変換します。

  • JSON フォーマッター — JSON を整形表示、圧縮、検証します。エラーが発生した場合は、正確な行と列を示します。
  • JSON YAML コンバーター — ブラウザーで JSON、YAML、TOML、XML を変換します。ドキュメントにエラーがある場合は、行番号も確認できます。
  • JSON Schema — JSON からスキーマを推論し、スキーマに対して検証して、TypeScript と Zod にエクスポートします。
  • JSONPath テスター — JSONPath Plus で JSON をクエリし、一致するすべての項目を確認できます。
  • JSON から型へ — JSON を貼り付けると、TypeScript、Zod、Pydantic、dataclass、Go の型を取得できます。

テーブル。 CSV を JSON に、JSON を行に変換します。

  • CSV JSON コンバーター — CSV を JSON に、JSON を CSV に変換します。区切り文字とヘッダー行を選択できます。

エンコーディング。 Base64 と、文字列に隠されたバイト列。

  • Base64 コーデック — URL セーフな文字セットを含め、テキストやファイルを Base64 にエンコード、またはデコードします。
  • プログラマー向け電卓 — 基数変換、ビット演算、クリック操作できるビットグリッドを備えています。
  • ZIP ツール — すべてブラウザー内で ZIP アーカイブを作成、展開できます。

マークアップ。 Markdown と HTML を双方向に変換します。

  • Markdown HTML — Markdown を HTML に、または HTML を Markdown に変換し、ライブプレビューを表示します。

SQL。 クエリを実行せずに整形します。

  • SQL フォーマッター — PostgreSQL、MySQL、BigQuery、Snowflake などの SQL 方言に対応して SQL を整形します。
SEO と AI 検索

マークアップ、クローラー、AI 検索エンジンが引用できるファイル。

AI 検索。 AI クローラーが取得、引用、スキップできるものを決めるファイルとチェックです。

  • llms.txt ジェネレーター — 公開サイトマップを読み込み、llms.txt インデックスを作成します。オプションで llms-full.txt も作成できます。
  • AI SEO チェッカー — クローラーのアクセス、llms.txt、構造化データ、AI 検索で使われるページ上のシグナルを評価します。
  • robots.txt チェッカー — 許可ルールと拒否ルール、サイトマップへのリンク、robots.txt ファイルの内容が実態と食い違う原因となるミスを読み取ります。
  • ページを Markdown に変換 — 公開ページを取得し、記事を Markdown に変換します。

SEO。 構造化データと、クローラーが推測せずに引用できるマークアップです。

AI 開発。 送信前に、トークン数とプロンプトのコストを確認できます。

  • AI トークンカウンター — GPT、Claude、Gemini のモデル向けに、プロンプトのトークン数を数え、API コストを見積もります。

ソーシャルプレビュー。 Open Graph カード、メタタグ、共有リンクを展開したときに表示される画像です。

  • OG 画像ジェネレーター — テンプレートを選んでカードの更新を確認し、PNG をダウンロードするか Next.js ファイルをコピーできます。
  • OG テンプレート一覧 — Open Graph のテンプレート ID、フィールド、カラープリセットを確認できます。
  • メタタグインスペクター — 1 つの公開 URL から、title、description、canonical、robots、Open Graph、Twitter、JSON-LD のタイプを読み取ります。
  • ソーシャル画像リサイズ — 選択した被写体に合わせてトリミングし、写真を Instagram、YouTube、X、LinkedIn、Facebook の正確なサイズに調整します。
  • ミームジェネレーター — スタイルまたは独自の画像から、上下にキャプションを付けた定番のミームを作成します。
画像とメディア

ブラウザー上で画像を変換、圧縮、サイズ変更できます。ファイルはデバイス上にとどまります。

画像。 ブラウザー上で画像を変換、圧縮、サイズ変更できます。ファイルはデバイス上にとどまります。

  • 画像形式コンバーター — HEIC、WebP、PNG、JPG、AVIF をブラウザー上で変換できます。アップロードはされません。
  • 画像圧縮ツール — JPEG、PNG、WebP、AVIF をブラウザー上で圧縮し、圧縮前後の実際のサイズを確認できます。
  • 画像リサイズツール — 縦横比を固定して、ピクセル数またはパーセントでサイズを変更できます。一括 ZIP にも対応しています。
  • QRコード・バーコードリーダー — 写真、貼り付けた画像、カメラから QR コードとバーコードを読み取れます。
  • SVG 最適化ツール — SVG を縮小してサイズを比較できます。無効にしない限り、viewBox は保持されます。
  • EXIF ビューアー・削除ツール — GPS を含む写真のメタデータを読み取り、すべて削除するか、位置情報のみを削除できます。
  • 画像トリミングツール — 自由な範囲や円形を含む縦横比のプリセットでトリミングできます。
  • 画像からテキストへ — 画像内の文字を読み取ります。OCR モデルは一度ダウンロードされ、このブラウザー上で実行されます。
  • 背景削除ツール — ブラウザー上で人物写真を切り抜くか、ダウンロードせずに単色の背景を消去できます。
  • フォトコラージュ — 写真をグリッドレイアウトに配置し、高解像度の PNG としてエクスポートできます。

オーディオ。 ブラウザー上で音声をトリミング、調整できます。ファイルはデバイス上にとどまります。

  • オーディオトリマー — 音声ファイルから一部を切り出します。波形を確認し、トリミング範囲をドラッグして、フェードを追加し、WAV としてエクスポートできます。
PDF とドキュメント

ブラウザー上で PDF を結合、分割、圧縮、作成できます。ファイルはこのデバイス上にとどまります。

  • PDF を結合 — ブラウザー上で PDF を結合します。順序を変更したり、各ファイルからページ範囲を指定したりして、1 つのドキュメントをダウンロードできます。
  • PDF を分割 — ページ範囲を抽出するか、PDF を単一ページまたは複数のまとまりに分割して、PDF または ZIP をダウンロードできます。
  • PDF を圧縮 — ブラウザー上で PDF を圧縮します。プリセットまたは目標サイズを選び、圧縮前後のファイルを比較できます。
  • 画像から PDF へ — JPG、PNG、WebP の画像を 1 つの PDF に変換します。ページサイズ、向き、余白、順序を設定できます。
  • PDF からテキストへ — PDF の選択可能なテキストを読み取ります。文字サイズが大きい場合は、Markdown の見出しとして表示されます。
  • PDF を回転 — ページの順序を変更、回転、削除してから PDF をダウンロードできます。
  • PDF から画像へ — PDF のページを PNG または JPEG に変換し、画像または ZIP をダウンロードできます。
  • PDF を保護 — AES パスワードを追加するか、すでにパスワードを知っている PDF のロックを解除できます。
  • 履歴書ビルダー — プロフィール、職歴、学歴、スキルを含む洗練された履歴書をブラウザー上で作成し、見やすい PDF としてエクスポートできます。
  • PDF 署名 — ブラウザー上で PDF に署名します。署名を手描きまたは入力し、任意のページに配置して、署名済みファイルをダウンロードできます。
  • PDF フォーム入力 — ブラウザー上でインタラクティブな PDF フォームに入力し、エクスポートできます。
セキュリティと暗号技術

トークン、ハッシュ、パスワード、権限を構成するビット。

認証のデバッグ。 JSON Web Token を読み取り、署名を確認して、セッションが期限切れになった理由を調べます。

  • JWT デコーダー — JSON Web Token を貼り付けてクレームを読み取り、ブラウザーで署名を検証します。
  • TOTP 認証アプリ — アカウント用のリアルタイム 2FA コードを生成します。otpauth:// のインポートと QR コードのエクスポートに対応しています。

暗号技術。 ハッシュ、パスワード、UUID、権限ビット。

  • ハッシュ生成ツール — テキストまたはファイルの MD5、SHA-1、SHA-256、SHA-512 チェックサムを HMAC 付きで生成します。
  • UUID 生成ツール — UUID v4 または v7 を一括生成し、v7 ID に保存された時刻を読み取ります。
  • パスワード生成ツール — エントロピー強度メーター付きで、暗号学的に安全なパスワードとパスフレーズを生成します。
  • Chmod 計算ツール — 権限グリッドを 8 進数および記号形式の chmod に変換し、逆方向にも変換します。
  • Bcrypt ハッシュ — bcrypt または argon2id でパスワードをハッシュ化し、検証します。データは保存されません。
  • 鍵ペア — RSA、EC、Ed25519 の鍵を生成し、PEM と JWK を相互変換します。
  • AES 暗号化 — ブラウザーで AES-GCM の暗号化と復号を行います。データはアップロードされません。

ヘッダー。 Content-Security-Policy と、ブラウザーが適用するヘッダー。

  • CSP ビルダー — Content-Security-Policy と Next.js のヘッダー設定スニペットを作成します。
デザイン

色の値、コントラスト、レイアウトを構成する要素。

  • カラー変換ツール — あらゆる色を HEX、RGB、HSL、OKLCH、CMYK に変換し、コントラスト比を確認します。
  • QR コード生成ツール — テキスト、URL、Wi-Fi、vCard 用の静的 QR コードを作成します。色と誤り訂正を設定して、SVG または PNG をダウンロードできます。
  • ファビコン生成ツール — 画像または文字から ICO、各サイズの PNG、マニフェスト、HTML スニペットを作成します。
テキスト

文字数、大文字・小文字、2 つのテキスト間で変更された行。

差分。 2 つのテキストを比較して、変更された行を確認します。

  • 差分チェッカー — 2 つのテキストを横並びまたはインラインで比較し、統一形式のパッチをダウンロードします。

ライティング。 文字数、大文字・小文字、タイトルや投稿に適用される制限。

  • 文字数カウンター — 単語数、書記素数、読了時間、タイトルや投稿に適用される制限を確認します。
  • 大文字・小文字変換ツール — camelCase、snake_case、タイトルケースに変換します。AP と Chicago のルールにも対応しています。
数学と金融

ローン、割合、単位、スケジュールの計算に使われるタイムスタンプです。

時間。 Unix タイムスタンプと、2 つの日付の間の日数です。

金融。 ローンの返済スケジュールと、小数点以下を丸めるパーセンテージ計算です。

  • ローン EMI 計算ツール — 月々の返済額と、セント単位に丸めた完全な償却表を表示します。
  • パーセンテージ計算ツール — パーセントの計算、増減率、逆算、利益率を計算し、数式も表示します。
  • 請求書ジェネレーター — ブラウザーで請求書や見積書を作成できます。明細、税金、割引を追加して、整った PDF をダウンロードできます。
  • 通貨換算ツール — リアルタイムの為替レート、過去の推移、複数通貨の一覧を表示します。

単位。 長さ、質量、温度、データサイズを換算します。

  • 単位換算ツール — 長さ、質量、温度、データサイズを換算し、10 進単位と 2 進単位を区別します。
ネットワーク

DNS、証明書、レスポンスヘッダー、リクエストの構成に使われる URL です。

URL。 URL とそのクエリをエンコードおよびデコードします。

DNS。 HTTPS 経由でパブリック DNS レコードを検索します。

IP とサブネット。 IPv4 と IPv6 のサブネットを計算します。

  • CIDR 計算ツール — IPv4 と IPv6 のネットワーク、ブロードキャスト、ホスト範囲、所属判定を行います。

HTTP。 レスポンスヘッダー、リダイレクト、セキュリティヘッダーの評価を確認します。

  • HTTP ヘッダー — リダイレクトをたどり、パブリック URL のセキュリティヘッダーを評価します。
  • HAR アナライザー — HAR キャプチャをドロップして、時間がかかった箇所を確認できます。
  • cURL コンバーター — 任意の curl コマンドを fetch、Python、Go、PHP、Rust に変換します。
  • GraphQL クライアント — 変数、ヘッダー、履歴を使って、任意の GraphQL エンドポイントにクエリーを送信します。
  • WebSocket テスター — 任意の ws/wss エンドポイントに接続し、リアルタイムのフレームを確認します。

TLS。 パブリックホスト上の証明書の有効期限、チェーン、名前を確認します。

  • SSL チェッカー — ポート 443 の証明書の有効期限、名前、チェーンを確認します。

AI エージェントから利用する

サーバーは https://benchline.fabwaseem.com/mcp です。Streamable HTTP 経由で JSON-RPC を使用し、JSON(enableJsonResponse)で応答します。セッション ID はありません。POST のみ使用できます。人間向けのセットアップページは /mcp/guide にあります。

Open Graph は 2 回の呼び出しで作成します。list_og_templates はテンプレート ID、カテゴリ、デフォルト値、フィールドのスキーマを返します。build_open_graph はテンプレート ID、そのテンプレートで使うフィールド、色、サイズ、任意の画像を受け取り、PNG と Next.js ファイルを返します。入力スキーマは docs/MCP.md にあります。

Cursor

~/.cursor/mcp.json

{
  "mcpServers": {
    "benchline": {
      "url": "https://benchline.fabwaseem.com/mcp"
    }
  }
}
Claude Desktop

Claude Desktop を開き、「Customize」>「Connectors」に進み、カスタムコネクターを追加します。https://benchline.fabwaseem.com/mcp を貼り付けます。サーバーへのサインインは不要です。これが使用するセットアップです。

この URL を stdio コマンドとしてブリッジするには、claude_desktop_config.json に次の内容を記述します。

{
  "mcpServers": {
    "benchline": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://benchline.fabwaseem.com/mcp"]
    }
  }
}
VS Code

.vscode/mcp.json

{
  "servers": {
    "benchline": {
      "type": "http",
      "url": "https://benchline.fabwaseem.com/mcp"
    }
  }
}
curl

content-type: application/json と accept: application/json, text/event-stream を送信してください。この2つの呼び出しは、最初に initialize を実行しなくてもライブサーバーに対して動作します。

tools/list:

curl -sS -X POST https://benchline.fabwaseem.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

format_json に対する tools/call:

curl -sS -X POST https://benchline.fabwaseem.com/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"format_json","arguments":{"json":"{\"a\":1}"}}}'

呼び出しが成功すると、result.structuredContent と同じ JSON のテキストコピーが返されます。失敗すると、result.isError: true とテキストメッセージが返されます。

レート制限

/mcp では、アドレスごとに1分あたり60リクエストまで許可されます。POST /api/v1/tools/<slug> には、独自の1分あたり60リクエストの制限があります。アドレスには、最初の x-forwarded-for のホップを使用し、それがない場合は x-real-ip を使用します。429の本文はJSON-RPCエラー(Too many requests.)で、レスポンスには retry-after が設定されます。

リクエストに Origin が含まれる場合、その値はリクエストのホスト、localhost、127.0.0.1、または https://benchline.fabwaseem.com(NEXT_PUBLIC_SITE_URL のオリジン)と一致する必要があります。Origin ヘッダーがなくても問題ありません。curlではこの形式になります。

ファイル入力

ファイル引数には url または data のどちらか一方を指定できます。両方は指定できません。

  • data は標準またはURLセーフなbase64、あるいは data: URIです。デコード後のバイト数は10 MBまでです。
  • url は、ユーザー名やパスワードを含まない、ポート80または443のパブリックな http または https である必要があります。localhost、*.local、*.internal、metadata.google.internal は拒否されます。ホストは解決され、いずれかのアドレスがループバック、プライベート、リンクローカル、CGNAT(100.64.0.0/10)、マルチキャスト、またはIPv6の同等の範囲に該当する場合は拒否されます。リダイレクトは最大4回まで手動で追跡され、各ホップで再度チェックされます。フェッチは15秒でタイムアウトします。宣言された本文またはストリーミングされた本文が10 MBを超える場合は拒否されます。

入力の全リストはdocs/MCP.mdを参照してください。

プライバシー

ブラウザー内ですべての処理を行うツールでは、テキスト、ファイル、結果がデバイス上に保持されます。

以下のツールは、このサイト経由でパブリックURLを取得できます。ページから送信されたURLまたはホスト名を受け取り、ルートがそのアドレスを取得します。情報はどこにも書き込まれず、プライベートアドレスは拒否されます。これらのルートでは、1つのアドレスから10分ごとに8リクエストまで許可されます。

  • llms.txt ジェネレーター — パブリックなサイトマップを読み込み、llms.txt インデックスと、オプションで llms-full.txt を作成します。
  • AI SEO チェッカー — クローラーのアクセス、llms.txt、構造化データ、AI検索で使用されるページ上のシグナルを評価します。
  • robots.txt チェッカー — 許可ルールと拒否ルール、サイトマップリンク、robots.txt ファイルが誤った情報を返す原因となる問題を読み取ります。
  • メタタグインスペクター — 1つのパブリックURLから、タイトル、説明、canonical、robots、Open Graph、Twitter、JSON-LDのタイプを読み取ります。
  • ページから Markdown へ — パブリックページを取得し、記事をMarkdownに変換します。
  • DNS ルックアップ — DNS-over-HTTPS経由でA、AAAA、MX、TXT、CNAME、CAAを照会します。
  • サイトマップバリデーター — サイトマップのURLまたはXMLをチェックするか、リストからurlsetを生成します。
  • HTTP ヘッダー — リダイレクトを追跡し、パブリックURLのセキュリティヘッダーを評価します。
  • SSL チェッカー — ポート443の証明書について、有効期限、名前、チェーンを確認します。
  • GraphQL クライアント — 変数、ヘッダー、履歴を使用して、任意のGraphQLエンドポイントにクエリを送信します。
  • WebSocket テスター — 任意のws/wssエンドポイントに接続し、リアルタイムのフレームを確認します。
  • 通貨換算 — 最新の為替レート、過去の推移、複数通貨の表を確認します。
利用回数

DATABASE_URL が設定されている場合、サーバーは匿名の利用回数を記録します。対象はツールの実行(MCP、POST /api/v1/tools/<slug>、ブラウザー)、ページビュー、ツールのオープン、ディレクトリ検索テキスト、コピーまたはダウンロードのクリックです。実行ごとに、時刻、ツールのスラッグ、ソース、結果、validation や timeout などのエラー分類、所要時間、バイト数を保存します。ツールへの入力、ツールの出力、ファイルのバイトデータ、送信された URL、生の IP アドレスは保存しません。

これらの利用回数に使うクライアントのアドレスは、まず X-Real-Ip を参照し、次に X-Forwarded-For の最初のホップを参照します。Traefik は TCP 接続から両方を設定します。保存されるアドレスは sha256(ANALYTICS_SALT + UTC date + ip) です。国は、DB-IP IP to Country Lite データベース(CC BY 4.0)を使ったサーバー側のアドレス検索による ISO コードです。このファイルがない場合、国は空のままになります。CDN の国ヘッダー(cf-ipcountry および他のエッジにある同様のヘッダー)は、検索結果がない場合にのみ使用します。ユーザーエージェントはファミリー(chrome、curl、…)、リファラーはホスト名として保存します。ブラウザーの訪問者には localStorage のランダムなファーストパーティ ID と、bl_vid / bl_sid Cookie が設定されます。

POST /api/track はブラウザーのビーコンを受け付けます。MCP と同じ方法で Origin を確認し、既知のボットとプリフェッチを無視し、リクエスト本文を 4 KB に制限し、アドレスごとに 1 分間で 30 件まで受け付けます。不明なツールのスラッグは拒否されます。URL またはトークンに見える検索テキストは破棄されます。利用回数はメモリ内のキューに格納され、数秒ごとにフラッシュされます。バッファーがいっぱいの場合、またはデータベースエラーが発生した場合、そのバッチは破棄され、警告が記録されます。データベースへの書き込みによってツールの応答が遅れることはありません。

GET /api/v1/stats は、ツール、ソース、結果、日ごとの合計に加え、MCP クライアント、国、エラー率、p50/p95 の所要時間を返します。Authorization: Bearer <STATS_TOKEN> を送信してください。トークンがない場合、または正しくない場合は 404 になります。フィルターは from、to、slug、source です(最大 366 日、既定の期間は 30 日)。

/admin は同じデータベースを使用する非公開パネルです。ADMIN_PASSWORD と ADMIN_SESSION_SECRET の両方が設定されていない場合は 404 になります。パスワードは定時間比較で検証されます。ログインに成功すると、HMAC 署名付きの httpOnly、Secure、SameSite=Strict Cookie が 7 日間設定されます。ログイン試行は IP ハッシュごとにレート制限されます。ページと CSV エクスポートはサーバー上で実行され、STATS_TOKEN がブラウザーに送信されることはありません。管理用パスは noindex に設定され、サイトマップと robots の許可リストから除外され、ページビューとして記録されません。クエリでは、最近の行に生テーブルを、すでに集計済みの日には analytics_daily を使用し、statement_timeout(ADMIN_QUERY_TIMEOUT_MS、既定値は 8s)が設定されます。

ANALYTICS_RETENTION_DAYS(既定値は 90)より古い生データの行は analytics_daily に集約された後、削除されます。このジョブは起動時と、その後は 1 日に 1 回実行されます。また、pnpm db:retain で手動実行できます。pnpm db:migrate は、サーバーの起動時に適用されるものと同じ SQL を適用します。起動時にはアドバイザリロックを取得し、必要に応じて schema_migrations を作成して、まだ記録されていないバージョンを適用します。DATABASE_URL が設定されていない場合、またはデータベースが数秒以内に応答しない場合、トラッキングは無効のままになり、サイトは引き続きツールを提供します。

集約ジョブを使わない場合、同じ削除処理は次のとおりです。

DELETE FROM tool_runs WHERE ts < now() - interval '90 days';
DELETE FROM page_views WHERE ts < now() - interval '90 days';
DELETE FROM tool_opens WHERE ts < now() - interval '90 days';
DELETE FROM search_queries WHERE ts < now() - interval '90 days';
DELETE FROM ui_actions WHERE ts < now() - interval '90 days';

MCP の呼び出しはページとは異なります。サーバーが関数を実行します。base64 として送信されたファイル、またはサーバーが取得する公開 URL は、その呼び出しの間、メモリ上で読み取られ、ディスクには書き込まれません。MCP エントリーにネットワークを取得すると記載されているツールは、レジストリで openWorld としてマークされます。画像と PDF のページ処理は引き続きブラウザーで行われます。エージェントはこのサーバー上にローカルディスクを持たないため、MCP ハンドラーはファイルを受け付けます。

技術スタック

Next.js 16(App Router、React Server Components、output: "standalone")、React 19、strict モードの TypeScript、Tailwind CSS v4、Base UI 上の shadcn/ui(base-nova)、zod 4、vitest、Model Context Protocol TypeScript SDK。pnpm 10.33.4。CI と Docker イメージでは Node 22 を使用します。フォントは Geist Sans と Geist Mono です。テーマには next-themes(<html> の class)を使用します。

プロジェクト構成

src/app/                  directory, category, tag, tool, explore, search, about, AI, MCP guide
src/app/mcp/route.ts      POST /mcp
src/app/api/v1/tools/     POST /api/v1/tools/<slug>
src/app/api/v1/stats/     GET /api/v1/stats
src/app/api/track/        POST /api/track
src/app/api/tools/        browser routes for tools that fetch
src/lib/analytics/        usage counts, queue, migrations, country lookup
src/tools/<slug>/         meta.ts, tool.tsx, lib/, mcp.ts
src/registry/             generated index, loaders, MCP registry, search index
src/lib/                  shared helpers, MCP handler, SSRF guard, rate limit
src/components/kit/       tool workspace blocks
src/components/ui/        themed primitives
src/components/shell/     directory
public/tools/<slug>/      cover.png and logo.png
scripts/gen-registry.ts
scripts/db-migrate.ts
scripts/db-retain.ts
scripts/download-geodb.ts
scripts/gen-readme-tools.ts
scripts/gen-mcp-docs.ts
scripts/live-mcp-smoke.mts

pnpm gen:registry は src/tools/*/meta.ts と mcp.ts をスキャンして検証し、レジストリを書き出します。ディレクトリがインポートするのはメタデータのみです。ツールの UI は生成されたホストから next/dynamic を使って読み込まれるため、ディレクトリを開いてもすべてのツールがダウンロードされることはありません。

詳しくは docs/ARCHITECTURE.md をご覧ください。

ローカル開発

Node 22(.nvmrc を参照)と pnpm 10.33.4(package.json の packageManager。Corepack が使用します)。

pnpm install
pnpm dev

pnpm dev は Next をポート 3000 で起動します。

pnpm test
pnpm lint
pnpm typecheck
pnpm build
pnpm start

pnpm build は最初に pnpm gen:registry を実行します。テストには vitest を使用し、対象は src/**/*.test.ts です。

レジストリを変更した後は、次を実行します。

pnpm gen:readme-tools
pnpm gen:mcp-docs
Docker

Dockerfile のイメージは、インストール、pnpm geo:download と pnpm build、そしてポート 3000 で node server.js を起動する Node 22 Alpine ランナーの 3 段階でビルドされます。国データベースのダウンロードは失敗しても構いません。イメージのビルドは続行され、ファイルが存在するまでは国データは空のままです。ランナーはサーバーの隣に data/ をコピーします。

docker build -t benchline .
docker run --rm -p 3000:3000 benchline

ランナーは、PDF、バーコード、OCR、Open Graph のツールが読み込めるように、pdfjs-dist、zxing-wasm、tesseract.js、そのワーカー依存関係である tesseract.js-core、satori、および @resvg/resvg-js をスタンドアロンサーバーの隣にコピーします。

環境変数
変数用途デフォルト
NEXT_PUBLIC_SITE_URL正規 URL、Open Graph、MCP オリジンチェックhttps://benchline.fabwaseem.com
MCP_URLscripts/live-mcp-smoke.mts のみhttps://benchline.fabwaseem.com/mcp
DATABASE_URL匿名利用数を記録する Postgres 17 接続未設定(トラッキング無効)
ANALYTICS_SALT日次 IP ハッシュ未設定(ハッシュを省略)
STATS_TOKENGET /api/v1/stats 用のベアラートークン未設定(ルートは 404)
ADMIN_PASSWORD/admin のパスワード未設定(/admin は 404)
ADMIN_SESSION_SECRET管理者セッション Cookie の HMAC キー未設定(/admin は 404)
ADMIN_QUERY_TIMEOUT_MS管理者 SQL の statement_timeout8000
ANALYTICS_RETENTION_DAYSロールアップ前の生イベント保持期間90
GEOIP_DB_PATHDB-IP 国別 lite mmdbdata/dbip-country-lite.mmdb
GEOIP_DOWNLOAD0 の場合、起動時のダウンロードをスキップファイルがない場合にダウンロード

ローカルオリジンを使う場合は .env.example をコピーしてください。これらを何も設定しなくてもアプリは実行できます。

ライブ MCP スモークテスト

scripts/live-mcp-smoke.mts は MCP クライアントで接続し、tools/list を呼び出した後、一覧にあるすべてのツールに対して tools/call を呼び出します。サンプルはこのファイルにあります。1 分あたり 60 回の制限内で全件を実行できるよう、呼び出しの間隔を 1.2 秒空け、429 の場合は再試行します。結果は /tmp/benchline-mcp-live-results.json に書き込まれます。呼び出しに失敗した場合、または一覧にあるツールにサンプルがない場合、プロセスは 1 で終了します。

MCP_URL=https://benchline.fabwaseem.com/mcp pnpm exec tsx scripts/live-mcp-smoke.mts

ツールの追加

meta.ts、tool.tsx、純粋な lib/ とその vitest ファイル、および mcp.ts を含む src/tools/<slug>/ を作成します。toolOrder にスラッグを追加し、アートワークを追加して、エンドポイントテストと scripts/live-mcp-smoke.mts に呼び出しサンプルを追加したら、pnpm gen:registry を実行します。手順、UI のルール、MCP の仕様については CONTRIBUTING.md をご覧ください。

ロードマップ

新しいツールや変更は GitHub issues で管理されています。ツールのアイデアを提案する際は、ツールリクエストのテンプレートを使ってください。提案には、ツールの機能、必要とされている根拠、MCP の呼び出し、ライセンス方針のもとでブラウザー上で実行できるかどうかを記載します。このリポジトリでは、非公開の機能一覧を別途管理していません。

ライセンス

MIT。Copyright (c) 2026 Waseem Anjum。

謝辞

Benchline は、Next.js、React、Tailwind CSS、shadcn/ui と Base UI、zod、Vitest、Model Context Protocol TypeScript SDK、Lucide、Geist(next/font 経由で読み込み)を基盤としています。ツールの実装には、pdf-lib や sharp など、package.json に記載されたパッケージを使用します。新たに追加する依存関係には、寛容なライセンスのものを使用します。CONTRIBUTING.md をご覧ください。

IP ジオロケーションには、DB-IP の無料の IP to Country Lite データベースを使用します。CC BY 4.0。このイメージは、ビルド時に dbip-country-lite-YYYY-MM.mmdb.gz をダウンロードします。ファイルが見つからない場合、国は空のままになります。

コメント

MCP は初めてですか?

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

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