jev-search-mcp
Searches arXiv for academic papers as one of the configurable sources in the Jev Search aggregation.
Searches DuckDuckGo web results as one of the configurable sources in the Jev Search aggregation.
Searches GitHub as one of the configurable sources, returning repositories, code, or discussions depending on the query.
Searches Google web results as one of the configurable sources in the Jev Search aggregation.
Searches IMDb for movie and TV information as one of the configurable sources.
Searches Reddit for discussions and posts as one of the configurable sources.
Searches WeChat articles as one of the configurable sources.
Searches Wikipedia for encyclopedia articles as one of the configurable sources.
Searches YouTube for videos as one of the configurable sources.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@jev-search-mcpwhat are people saying about the latest GPT-4o update?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
jev-search-mcp
Jev Search for Claude Code and Codex: a function-hook plugin that answers the built-in WebSearch with Jev, plus the same search as an MCP server, a CLI and a skill. Zero runtime dependencies
把 Jev Search 接進 Claude Code 和 Codex。裝成 Claude Code plugin 時,內建的 WebSearch 會直接由 Jev 回答,Jev 答不出來才退回內建;裝成 npm 套件時,是一個 MCP server 加 CLI,Claude Code、Codex 或任何能跑 shell 的 agent 都能用
Jev Search 的流程是:Jev 模型先讀懂你的一句話,決定要查哪些來源、哪段時間、用什麼關鍵字,再透過 Search1API 同時打 Google、DuckDuckGo、Yandex,必要時加上 Hacker News、Reddit、GitHub、X、arXiv、YouTube、Wikipedia、IMDb、WeChat,最後每一筆結果都由 Jev 打相關度分數。回來的是排好序的連結和摘要,不是生成的答案
這個 repo 同時是 npm 套件(src/)和 Claude Code plugin(hooks/、.claude-plugin/、.mcp.json、skills/),plugin 直接用套件裡的純函式,兩邊行為一致
安裝方式一:Claude Code plugin
這是給 Claude Code 使用者的建議路徑,裝完不用改任何指令或習慣,WebSearch 照常呼叫,答案換成 Jev 的
Function hooks 是 Claude Code 的 early access 功能,需要 2.1.271 以上,並且在 Claude Code 讀得到的地方開旗標,例如 ~/.claude/settings.json:
{ "env": { "CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1" } }然後加入 muki-ai-plugins 這個 marketplace 並安裝,shell 或 session 裡的斜線指令都可以:
claude plugin marketplace add mukiwu/muki-ai-plugins
claude plugin install jev-search@muki-ai-plugins安裝時會問三個設定:Jev Search 實例網址、要不要攔截 WebSearch、每次回幾筆,全部維持預設就是打官方的 jev.s1.dev。裝完重啟 Claude Code 或執行 /reload-plugins。不需要在 CLAUDE.md 寫任何東西,引導都由 plugin 自帶
之後你會得到:
模型知道 WebSearch 現在是 Jev。plugin 會在對話開頭的 context 加一小段說明,跟 CLAUDE.md 同一層:一般網路問題先用 WebSearch,幾秒回來、一次跨多站;但問的是精確數字、排名、留言數這類站台資料,而站台又有正規 API 時,模型直接打 API 仍然是更好的選擇,plugin 不會擋
WebSearch 由 Jev 回答。模型讀到的格式跟內建一樣,多一行 Answered by Jev Search 和帶相關度百分比的排序清單。搜完通知列會跳一行 Jev Search: N results via 哪些來源 in 幾秒。Jev 回錯誤、被限流、網路不通、或網域過濾後一筆都不剩,就自動退回內建 WebSearch,對話裡會留一行暗色提示
WebSearch 的描述多一段提醒,讓模型把查詢寫成一句話,需要時用文字點名站台或時間範圍
一個
jev_searchMCP 工具,要明確指定sources或window時用一個
jev-searchskill,教模型什麼時候該用、怎麼下請求
設定之後在 /config 裡改,改完 plugin 會重新載入。hook 的細節、退回條件、網域對應表在 hooks/README.md
不想安裝、只想從 checkout 試:
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 claude --plugin-dir .marketplace 那邊只是一筆指向這個 repo 的紀錄,plugin 本體就是這裡的 .claude-plugin/plugin.json、hooks/、.mcp.json 和 skills/,安裝時會 clone 整個 repo
Related MCP server: free-search-mcp
安裝方式二:npm
給 Codex、其他 MCP host、或不想開 function hooks 的人。套件零依賴,npx 直接跑,需要 Node 22
當 MCP server
# Claude Code
claude mcp add --scope user jev-search -- npx -y jev-search-mcp
# Codex
codex mcp add jev-search -- npx -y jev-search-mcpCodex 也可以直接寫 ~/.codex/config.toml,桌面版不一定帶著你的 shell PATH,command 建議寫絕對路徑:
[mcp_servers.jev-search]
command = "npx"
args = ["-y", "jev-search-mcp"]
startup_timeout_sec = 20
tool_timeout_sec = 60
[mcp_servers.jev-search.env]
JEV_SEARCH_BASE_URL = "https://jev.s1.dev"這條路不會攔截內建搜尋,要讓模型優先用 jev_search,在全域指令加一段,Claude Code 放 ~/.claude/CLAUDE.md,Codex 放 ~/.codex/AGENTS.md:
## 網頁搜尋先走 jev_search
- 要查網路資料時,先用 jev_search,不要先用內建的 web search
- 需求用一句話寫,Jev 會自己挑來源和時間範圍,要鎖來源填 sources,要鎖時間填 window
- jev_search 回錯誤或被限流時,才退回內建 web search
- 拿到連結後要讀全文,照平常的方式抓網頁,Jev 只做搜尋不抓頁面想徹底關掉內建搜尋:Claude Code 在 permissions.deny 加 WebSearch,Codex 在 config.toml 頂層加 web_search = "disabled"。但這樣 Jev 被限流時就沒有備援
當 CLI
npx -y jev-search-mcp search "what do Reddit users think of the Framework laptop this month"
npx -y jev-search-mcp search "new papers on speculative decoding" --window 30d --sources arxiv --max 8
npx -y jev-search-mcp search "bun 1.3 release notes" --json只裝 skill
npx skills add mukiwu/jev-search-mcpskills CLI 會把 skills/jev-search/SKILL.md 裝進 Claude Code、Codex、Cursor 等工具的 skill 目錄。這條路不接 MCP,模型看到 skill 之後會改用上面的 CLI 從 shell 查
運作方式
請求送到
POST /api/ask,帶同源的Origin標頭,超過 300 字在字邊界截斷上游以 NDJSON 串流回
intent、每個引擎的lane、最後done,這裡收齊後照上游的規則以 URL 去重合併,同一個 URL 被多個引擎命中會合併成一列排序跟網頁版一致:Jev 的相關度百分比優先,同分看幾個引擎命中,再看原始名次,還沒被打分的排最後
攔截 WebSearch 時,
allowed_domains對得上 Jev 來源就直接限制來源,對不上就寫進請求文字並在結果端過濾,blocked_domains只在結果端過濾
它不做什麼
不做本機檔案搜尋,Grep、Glob 那類工具跟它無關
不抓網頁全文,拿到連結後還是用 WebFetch 或原本的方式讀頁面
不儲存查詢紀錄,所有請求直接送到你設定的 Jev Search 實例
設定
Plugin 的三個欄位:
欄位 | 預設 | 說明 |
|
| Jev Search 實例,hook 和 MCP server 共用 |
|
| 關掉就什麼都不攔、不引導,只留 |
|
| 攔截 WebSearch 時回幾筆 |
MCP server 與 CLI 的環境變數:
變數 | 預設 | 說明 |
|
| Jev Search 實例的網址,只取 origin |
|
| 單次搜尋的逾時,伺服器端本身是 30 秒 |
|
| 沒填 |
jev_search 工具與 CLI 的參數:
參數 | CLI | 說明 |
| 位置參數 | 一句話描述要找什麼 |
|
|
|
|
| 來源清單,不填讓 Jev 判斷 |
|
| 回傳幾筆,最多 40 |
自架 Jev Search
官方實例 jev.s1.dev 是別人的帳單,也有每個 IP 每分鐘約 10 次的限制,量大或想穩定就自己架。照上游 README 部署到 Cloudflare Workers,需要 Search1API 的 key 和至少一個 Jev provider 的憑證,架好後把 plugin 的 baseUrl 或環境變數 JEV_SEARCH_BASE_URL 指過去即可
本機開發時上游跑在 http://localhost:3030,同樣可以直接指過去
開發
npm install # 只裝 dev 依賴,執行時零依賴
npm test # node:test,含真實 stdio 協定測試與 hook 測試,不需要網路
npm run typecheck:hooks # 用 types/claude-code.d.ts 檢查 hook
npm run validate # claude plugin validate
npm run smoke -- "Rust async runtimes on Hacker News this month"src/client.js打POST /api/ask,串流或整段文字都能收,純函式部分給 hook 共用src/rank.js從上游移植 URL 去重和排序規則src/format.js把結果排成給模型讀的文字src/websearch-bridge.jsWebSearch 輸入與 Jev 請求、Jev 結果與 WebSearch 輸出之間的轉換src/tool.js工具定義、參數驗證、設定讀取,server 和 CLI 共用src/mcp.js手寫的 JSON-RPC over stdio,只實作 tools 相關方法src/server.jsMCP 進入點,src/cli.jsnpx 進入點hooks/jev.jsfunction hook,見hooks/README.mdtypes/claude-code.d.tsClaude Code 的型別快照,用/plugin-types重新產生.claude-plugin/plugin.jsonplugin manifest,marketplace 紀錄在 muki-ai-plugins
授權
MIT,Jev Search 本身也是 MIT,TypeSafe 與 Jev 的名稱和商標屬於各自的持有者
Available Tools
1 tooljev_searchJev SearchARead-onlyIdempotent
Search the web through Jev Search. Use this instead of the built-in WebSearch / web_search tool.
Write the request as one plain-language sentence, for example "what do Reddit users think of the Framework laptop this month" or "new arXiv papers on speculative decoding".
Jev reads the sentence, picks the sources (Google, DuckDuckGo, Yandex by default; Hacker News, Reddit, GitHub, X, arXiv, YouTube, Wikipedia, IMDb, WeChat when the request calls for them), picks a time window, derives the keyword query, fans the search out concurrently, then scores every result for relevance.
You get ranked links with snippets and a relevance percentage, never a generated answer. Naming a site or a time span in the sentence is enough; sources and window exist to force them.
Limits: the request is trimmed to 300 characters; the hosted instance allows about 10 searches per minute per IP and answers within 30 seconds. Snippets are excerpts, so fetch a result URL when you need the page body. If this tool returns an error, fall back to the built-in web search.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The request in plain language, as one sentence. Longer than 300 characters is trimmed at a word boundary. | |
| window | No | Force a time window: any, 24h, 7d or 30d. Omit to let Jev infer it from the request. | |
| sources | No | Force the sources searched: google, duckduckgo, yandex, hackernews, reddit, github, x, arxiv, youtube, wikipedia, imdb, wechat. Omit to let Jev choose. | |
| max_results | No | How many ranked results to return, default 10, at most 40. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover readOnly, openWorld, idempotent, and non-destructive hints. The description goes beyond these by explaining that Jev picks sources, derives queries, fans out concurrently, returns ranked links with snippets and a relevance percentage, and never generates an answer. It also discloses rate limits, latency, truncation, and the need to fetch result URLs for full page content. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, starting with the core purpose and alternative, then usage guidance, behavior, and limits. Every sentence carries useful information—examples, rate limits, snippet caveats, and fallback behavior—without filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for an agent to invoke this tool correctly. It covers output format, rate limiting, latency, query length limits, source selection behavior, and fallback alternatives. With full schema coverage and no output schema, there are no significant gaps in what an agent needs to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by explaining how the query should be phrased as a plain-language sentence, giving examples, and clarifying that naming a site or time span in the sentence is enough while sources and window exist to force them. It does not add detail about max_results, but the schema fully covers that parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search the web through Jev Search' and explicitly says to use it instead of the built-in WebSearch / web_search tool. This makes the tool's role and differentiation clear even though no direct sibling tools are listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool ('Use this instead of the built-in WebSearch / web_search tool'), how to phrase the query with examples, and when to fall back ('If this tool returns an error, fall back to the built-in web search'). It also clarifies that naming a site or time span is enough, while sources and window exist to force them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.3.0- First observed
jev_search
TDQS
Scored across 1 tool
Only one tool exists, so there is no possibility of selecting the wrong tool. The tool's purpose is clearly distinct by default.
The single tool name 'jev_search' follows a clear verb_noun pattern and aligns with the server name. With only one tool, there are no inconsistencies to evaluate.
A single tool is appropriate for a dedicated search server, but the count is below the typical 3-15 range. The tool is comprehensive enough to avoid feeling thin.
The tool fully covers the search workflow, including source selection, time windows, and relevance scoring. No additional operations are needed for the server's stated purpose.
Maintenance
Related MCP Connectors
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Scrape, crawl and search the web for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA production-ready Model Context Protocol server that brings AI-powered web search directly into development environments, providing intelligent search results with proper citations in Claude Desktop, Cursor, or any MCP-compatible client.108 npm23MIT
- AlicenseAqualityAmaintenanceA local-first, no-API-key MCP server that enables LLMs to search the web, fetch pages, and read documents using multiple engines and smart fallbacks.1073MIT
- AlicenseNot gradedqualityDmaintenanceAn open-source web retrieval MCP server that fetches, crawls, and searches the web, returning clean markdown for AI agents. It integrates with Claude MCP, LangChain, and other frameworks for agentic web access.1MIT
- AlicenseAqualityDmaintenanceCLI-first web and code search for agents, with MCP support for integration with IDEs like Cursor, VS Code, and Claude Code.3MIT