Lunoo Rankings

com.lunoo由 lunoo.com 發布官方發布者v1.0.0更新於 Oct 24, 2026

Consensus rankings for 75,000+ products across 2,600+ niches.

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取資料與分析

概覽

AI 產生的概覽

一個唯讀的遠端 MCP 伺服器,讓助理查詢 Lunoo 涵蓋數千個類別的共識排行榜。

可以做什麼
把自然語言請求解析為相符的 Lunoo 排行類別,回傳信心度、項目數量和連結,對不支援的查詢直接拒絕而不猜測 slug。依類別或自然語言請求取得排行項目,回傳名次、0-10 分制評分、描述、信心度和標準連結。依項目 slug 查詢單一項目,取得其公開的結構化中繼資料。
適用情境
當使用者詢問最佳推薦或比較,例如適合影片剪輯的筆記型電腦或最佳動畫,而你需要有評分和來源的排行而非模型猜測時適用。它為唯讀且不需帳號,用於一般推薦類問題風險較低。
執行需求
遠端 Streamable HTTP 端點;不需驗證、API 金鑰或環境變數。若自行部署則需要 Node 18+ 和 npm,並將連接埠置於 HTTPS 反向代理之後保持私有。
安裝前請注意
三個工具皆為唯讀,伺服器聲明不儲存原始提示、工具參數或結果。查詢會傳送至 Lunoo 的公開服務,結果快取 15 分鐘至 24 小時,排行可能落後於線上網站。自行部署時不應直接暴露 Node 連接埠。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Lunoo Rankings,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.lunoo%2Frankings/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "lunoo-rankings": {
      "type": "http",
      "url": "https://lunoo.com/mcp"
    }
  }
}

README

lunoo-mcp

Public Model Context Protocol (MCP) server for Lunoo, a rankings platform covering more than 231,000 items across more than 2,600 categories on a 0-10 scale.

Ask for rankings in normal language, from anime and laptops to software, travel, books, and thousands of other categories. The server resolves the closest live category, returns scored items with Lunoo links, and refuses unsupported queries instead of inventing a result.

Overview

This is a read-only public proxy over Lunoo's public web API. No authentication required, no database access, no API keys, no cost.

  • Live endpoint: https://lunoo.com/mcp (Streamable HTTP, JSON-RPC 2.0)
  • Transport: Stateless POST over HTTP
  • Caching: Browse page 24h, rankings and items 15 minutes
  • Timeout: 10 seconds per upstream request
  • Coverage: 2,677+ categories and 231,982+ ranked items, verified on 2026-08-21
  • Privacy: No raw prompts, tool arguments, or tool results are stored. See https://lunoo.com/privacy
  • Safety: All three tools are read-only and expose MCP read-only annotations

Security and abuse controls

  • The server listens on 127.0.0.1 by default so a reverse proxy can expose only the intended HTTPS route.
  • Each client is limited to 120 MCP requests per minute.
  • No more than 20 MCP requests and 12 upstream Lunoo requests run at once.
  • JSON bodies are limited to 32 KB, JSON-RPC batches to 20 messages, and tool inputs to documented lengths.
  • The in-memory cache is limited to 256 entries and evicts old keys.
  • User input is encoded into fixed Lunoo paths. It cannot select an arbitrary upstream host.
  • The server does not execute commands, evaluate user code, read local files, or expose environment variables.

Self-hosted deployments should keep the Node port private and expose /mcp through an HTTPS reverse proxy. Do not publish port 8972 directly.

Quick Start

Claude custom connector

Open Claude's connector settings, choose Add custom connector, and enter:

text
Name: Lunoo RankingsURL: https://lunoo.com/mcp

No authentication is required. Test with a request such as Find the best laptop for video editing using Lunoo.

Claude Code

In your project's .claude/settings.json:

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

Or run from any Claude Code session:

bash
claude mcp add --transport http lunoo https://lunoo.com/mcp

Generic HTTP Client

Post JSON-RPC 2.0 requests to https://lunoo.com/mcp. Example:

bash
curl -X POST https://lunoo.com/mcp \  -H 'Content-Type: application/json' \  -d '{    "jsonrpc": "2.0",    "method": "tools/list",    "id": 1  }'

Local Development (self-hosted)

bash
npm installnpm start# Server listens on http://localhost:8972

Health check:

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

Tools

find_niche

Resolve a normal-language request to live ranking categories. Returns up to 10 matches with confidence, matched terms, item counts, and tracked Lunoo links.

Input:

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

Output: Array of niches with slug, display name, Lunoo URL, and JSON endpoint URL.

Example Request:

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

Example Response:

json
{  "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

Fetch ranked items for a category slug or a normal-language request. Returns the resolved category, match explanation, score metadata, and top items.

Input:

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

Output: Niche metadata plus ranked items with rank, name, score (0-10), description, URL, and confidence label.

Example Request:

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

Example Response:

json
{  "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

Extract structured metadata (JSON-LD) for an item by slug. Parses all schema.org blocks embedded on the item page.

Input:

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

Output: Item URL and array of parsed JSON-LD objects (BreadcrumbList, AggregateRating, etc.).

Example Request:

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

Example Response:

json
{  "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 Initialization

The server implements Model Context Protocol v2025-03-26. Initialize with:

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

Response includes server capabilities, protocol version, and instructions.

Caching Behavior

Results are cached locally in the live service at https://lunoo.com/mcp:

  • Browse page (used by find_niche): 24 hours
  • Rankings JSON (used by get_rankings): 15 minutes
  • Item pages (used by get_item): 15 minutes

When self-hosting, cache is in-memory per server instance and cleared on restart.

Error Handling

On failure (404, timeout, network error), tools return:

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

Never throws unhandled exceptions; all errors are JSON-RPC compliant.

Citation

Link to full rankings pages on Lunoo as:

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

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

See https://lunoo.com/llms.txt for how to cite Lunoo rankings in LLM outputs.

Self-Hosted Deployment

Prerequisites

Node 18+, npm

Installation

bash
git clone https://github.com/PeakProductivity/lunoo-mcp.gitcd lunoo-mcpnpm install

Running

bash
npm start# or with custom port:PORT=9000 npm start

Production Setup

  1. Use a process manager (PM2, systemd, etc.):
bash
pm2 start server.mjs --name lunoo-mcp
  1. Reverse proxy (nginx):
nginx
location /mcp {  proxy_pass http://localhost:8972;  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr;}
  1. Monitor cache size and logs periodically.

CORS Policy

The live service accepts browser requests only from the configured Claude origins. Requests from arbitrary browser origins are rejected. Server-side MCP clients without an Origin header are accepted.

Self-hosted instances use the same safe defaults. Override the browser allowlist with the comma-separated MCP_ALLOWED_ORIGINS environment variable when necessary.

API Endpoints

MethodPathDescription
POST/mcpJSON-RPC 2.0 endpoint
GET/healthzHealth check

Support

Found an issue with a ranking? Report it on Lunoo: https://lunoo.com

License

MIT. See LICENSE file.

Links

來源:README.md,提交 b156e7e

工具

3

find_niche

Resolve a Lunoo niche

Resolve a natural-language ranking request to one or more verified Lunoo niche slugs. Pass the user's request instead of guessing a slug. It handles common aliases, typos, and use-case terms, and returns item counts, match explanations, confidence, and tracked Lunoo URLs. Unsupported or unclear requests return an error instead of an unrelated fallback. Choose the closest returned slug, then call get_rankings with that exact slug. Never invent a niche slug or ranking.

輸入參數query必填

get_rankings

Get ranked Lunoo results

Fetch ranked Lunoo results for a verified niche slug or natural-language request. It returns rank, score, description, confidence, and a canonical Lunoo URL for every item, plus the selected niche and resolution explanation. Prefer calling find_niche first, but this tool can resolve natural language itself. Cite the returned ranking URL and do not invent items, scores, or slugs.

輸入參數limitniche必填

get_item

Get Lunoo item details

Use this after a ranking result when the user wants details about one item. Pass the exact item slug from a Lunoo result or URL. It returns the canonical Lunoo URL for the item and public structured metadata. This is read-only and must not be used to invent rankings that were not returned by get_rankings.

輸入參數slug必填

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分