mcpField
L
Lunoo Rankings

Lunoo Rankings

リモート
github.com/PeakProductivity検索010 週間前に更新
リポジトリ

Lunoo Rankings について

Lunoo Rankingsは、Lunooランキングプラットフォーム向けの読み取り専用MCPサーバーです。自然言語の依頼を公開中のカテゴリに対応付け、対応できない検索では結果を捏造せずに応答します。

主な機能

  1. 01自然言語でランキングカテゴリを検索
  2. 02スコア付きランキング項目の取得
  3. 03slugによる項目の構造化データ取得
  4. 04Lunooページへのリンクを返却
  5. 05公開ランキングデータの読み取り

活用シーン

  1. 01カテゴリ間の商品比較
  2. 02特定テーマのランキング検索
  3. 03項目の構造化メタデータ確認

MCP 対応

Streamable HTTPでMCPインターフェースを提供し、カテゴリ検索、ランキング取得、項目メタデータ取得のツールを公開します。すべて読み取り専用です。

設定

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

エンドポイントhttps://lunoo.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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

lunoo-mcp

Lunoo 向けの公開 Model Context Protocol(MCP)サーバーです。0~10 のスケールで、2,600 以上のカテゴリにわたる 231,000 件以上のアイテムを扱うランキングプラットフォームです。

アニメやノート PC から、ソフトウェア、旅行、書籍、その他数千のカテゴリまで、通常の言葉でランキングを尋ねられます。サーバーは最も近い現在のカテゴリを特定し、スコア付きアイテムと Lunoo のリンクを返します。結果をでっち上げることなく、対応していないクエリは拒否します。

概要

Lunoo の公開 Web API を利用する、読み取り専用の公開プロキシです。認証、データベースアクセス、API キー、費用は不要です。

  • ライブエンドポイント:https://lunoo.com/mcp(Streamable HTTP、JSON-RPC 2.0)
  • トランスポート:HTTP 経由のステートレス POST
  • キャッシュ:閲覧ページは 24 時間、ランキングとアイテムは 15 分
  • タイムアウト:上流への各リクエストにつき 10 秒
  • 対象範囲:2,677 以上のカテゴリと 231,982 件以上のランキング対象アイテム。2026-08-21 に確認済み
  • プライバシー:生のプロンプト、ツール引数、ツールの結果は保存されません。https://lunoo.com/privacy をご覧ください
  • 安全性:3 つのツールはすべて読み取り専用で、MCP の読み取り専用アノテーションを公開します

セキュリティと不正利用の制御

  • デフォルトではサーバーは 127.0.0.1 でリッスンするため、リバースプロキシで意図した HTTPS ルートのみを公開できます。
  • 各クライアントの MCP リクエストは 1 分あたり 120 件までに制限されます。
  • 同時に実行される MCP リクエストは 20 件まで、上流への Lunoo リクエストは 12 件までです。
  • JSON ボディは 32 KB まで、JSON-RPC バッチは 20 メッセージまで、ツール入力はドキュメントに記載された長さまでに制限されます。
  • メモリ内キャッシュは 256 エントリまでで、古いキーは削除されます。
  • ユーザー入力は固定された Lunoo パスにエンコードされます。任意の上流ホストを指定することはできません。
  • サーバーはコマンドの実行、ユーザーコードの評価、ローカルファイルの読み取り、環境変数の公開を行いません。

セルフホスト可能なデプロイでは、Node のポートを非公開に保ち、HTTPS リバースプロキシ経由で /mcp を公開してください。ポート 8972 を直接公開しないでください。

クイックスタート

Claude カスタムコネクタ

Claude のコネクタ設定を開き、カスタムコネクタを追加を選択して、次を入力します。

Name: Lunoo Rankings
URL: https://lunoo.com/mcp

認証は不要です。Find the best laptop for video editing using Lunoo のようなリクエストでテストしてください。

Claude Code

プロジェクトの .claude/settings.json で次を設定します。

{
  "mcpServers": {
    "lunoo": {
      "url": "https://lunoo.com/mcp"
    }
  }
}

または、任意の Claude Code セッションで次を実行します。

claude mcp add --transport http lunoo https://lunoo.com/mcp
汎用 HTTP クライアント

JSON-RPC 2.0 リクエストを https://lunoo.com/mcp に POST します。例:

curl -X POST https://lunoo.com/mcp \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/list",
    "id": 1
  }'
ローカル開発(セルフホスト)
npm install
npm start
# Server listens on http://localhost:8972

ヘルスチェック:

curl http://localhost:8972/healthz
# {"ok":true,"service":"lunoo-mcp"}

ツール

find_niche

通常の言葉によるリクエストを、現在のランキングカテゴリに対応付けます。確信度、マッチした用語、アイテム数、Lunoo のトラッキングリンクとともに、最大 10 件の候補を返します。

入力:

{
  "query": "string - normal-language request, e.g. 'best laptop for video editing'"
}

出力: スラッグ、表示名、Lunoo URL、JSON エンドポイント URL を含むニッチの配列です。

リクエスト例:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "find_niche",
    "arguments": { "query": "anime" }
  },
  "id": 1
}

レスポンス例:

{
  "jsonrpc": "2.0",
  "result": {
    "isError": false,
    "content": [
      {
        "type": "text",
        "text": "[\n  {\n    \"slug\": \"anime\",\n    \"name\": \"anime\",\n    \"url\": \"https://lunoo.com/best/anime\",\n    \"rankings_json\": \"https://lunoo.com/best/anime.json\"\n  },\n  ...\n]"
      }
    ]
  },
  "id": 1
}
get_rankings

カテゴリのスラッグまたは通常の言葉によるリクエストを指定して、ランキング対象アイテムを取得します。特定されたカテゴリ、マッチの説明、スコアのメタデータ、上位アイテムを返します。

入力:

{
  "niche": "string - niche slug, e.g. 'anime'",
  "limit": "number? - items to return, 1-50, default 10"
}

出力: ニッチのメタデータと、順位、名前、スコア(0~10)、説明、URL、確信度ラベルを含むランキング対象アイテムです。

リクエスト例:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_rankings",
    "arguments": { "niche": "anime", "limit": 3 }
  },
  "id": 2
}

レスポンス例:

{
  "jsonrpc": "2.0",
  "result": {
    "isError": false,
    "content": [
      {
        "type": "text",
        "text": "{\n  \"name\": \"anime\",\n  \"url\": \"https://lunoo.com/best/anime\",\n  \"item_count\": 1847,\n  \"updated_at\": \"2026-07-02T08:15:00Z\",\n  \"score_scale\": \"0-10\",\n  \"ranking_method\": \"Consensus-based scoring\",\n  \"top_items\": [\n    {\n      \"rank\": 1,\n      \"name\": \"Frieren: Beyond Journey's End\",\n      \"score\": 9.15,\n      \"url\": \"https://lunoo.com/item/frieren-beyond-journeys-end\",\n      \"description\": \"A fantasy adventure about a thousand-year journey...\"\n    },\n    ...\n  ]\n}"
      }
    ]
  },
  "id": 2
}
get_item

スラッグを指定してアイテムの構造化メタデータ(JSON-LD)を抽出します。アイテムページに埋め込まれたすべての schema.org ブロックを解析します。

入力:

{
  "slug": "string - item slug, e.g. 'frieren-beyond-journeys-end'"
}

出力: アイテム URL と、解析された JSON-LD オブジェクト(BreadcrumbList、AggregateRating など)の配列です。

リクエスト例:

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_item",
    "arguments": { "slug": "frieren-beyond-journeys-end" }
  },
  "id": 3
}

レスポンス例:

{
  "jsonrpc": "2.0",
  "result": {
    "isError": false,
    "content": [
      {
        "type": "text",
        "text": "{\n  \"url\": \"https://lunoo.com/item/frieren-beyond-journeys-end\",\n  \"structured_data\": [\n    {\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"AggregateRating\",\n      \"ratingValue\": 9.15,\n      \"ratingCount\": 847\n    },\n    ...\n  ]\n}"
      }
    ]
  },
  "id": 3
}

MCP の初期化

このサーバーは Model Context Protocol v2025-03-26 を実装しています。次のように初期化します。

{
  "jsonrpc": "2.0",
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-03-26",
    "capabilities": {},
    "clientInfo": {
      "name": "my-client",
      "version": "1.0.0"
    }
  },
  "id": 0
}

レスポンスにはサーバーの機能、プロトコルバージョン、指示が含まれます。

キャッシュの動作

https://lunoo.com/mcp のライブサービスでは、結果がローカルにキャッシュされます。

  • 閲覧ページ(find_niche で使用):24 時間
  • ランキング JSON(get_rankings で使用):15 分
  • アイテムページ(get_item で使用):15 分

セルフホストの場合、キャッシュはサーバーインスタンスごとのメモリ内に保持され、再起動時に消去されます。

エラー処理

失敗した場合(404、タイムアウト、ネットワークエラー)、ツールは次を返します。

{
  "isError": true,
  "content": [
    {
      "type": "text",
      "text": "Niche \"invalid-slug\" not found (404). Try find_niche to discover available niches."
    }
  ]
}

未処理の例外は発生せず、すべてのエラーは JSON-RPC に準拠します。

引用

Lunoo のランキングページ全体へのリンクは、次のように記載します。

https://lunoo.com/best/{slug}

例:https://lunoo.com/best/anime

LLM の出力で Lunoo のランキングを引用する方法については、https://lunoo.com/llms.txt をご覧ください。

セルフホストでのデプロイ

前提条件

Node 18 以降、npm

インストール
git clone https://github.com/PeakProductivity/lunoo-mcp.git
cd lunoo-mcp
npm install
実行
npm start
# or with custom port:
PORT=9000 npm start
本番環境のセットアップ
  1. プロセスマネージャー(PM2、systemd など)を使用します。
pm2 start server.mjs --name lunoo-mcp
  1. リバースプロキシ(nginx)を設定します。
location /mcp {
  proxy_pass http://localhost:8972;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
}
  1. キャッシュサイズとログを定期的に監視します。

CORS ポリシー

稼働中のサービスでは、設定済みの Claude オリジンからのブラウザーリクエストのみを受け付けます。任意のブラウザーオリジンからのリクエストは拒否されます。Origin ヘッダーのないサーバー側の MCP クライアントは受け付けられます。

セルフホストのインスタンスでも、同じ安全なデフォルト設定が使用されます。必要に応じて、カンマ区切りの MCP_ALLOWED_ORIGINS 環境変数でブラウザーの許可リストを上書きしてください。

API エンドポイント

メソッドパス説明
POST/mcpJSON-RPC 2.0 エンドポイント
GET/healthzヘルスチェック

サポート

ランキングに問題が見つかりましたか?Lunoo までご報告ください:https://lunoo.com

ライセンス

MIT。LICENSE ファイルをご覧ください。

リンク

コメント

MCP は初めてですか?

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

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