Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
Secure MCP server for public web search and URL fetching.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 AceAtDev 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.0)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 MCPB。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Odysseus Web MCP is a standalone Model Context Protocol (MCP) server for safe public-web search and URL fetching. It runs locally over stdio and gives MCP-compatible AI assistants two retrieval tools: web_search to discover sources and web_fetch to retrieve and extract public URLs.
Built for clients such as Claude Code, Cursor, and Codex, it combines search-provider fallback, readable HTML/PDF/text extraction, optional JavaScript rendering, and SSRF protections including DNS validation and redirect rechecks.
Requirements: Python 3.11+ and uv.
# after downloading/extracting this folder (or cloning your copy)
cd odysseus-web-mcp uv venv .venv uv pip install -e '.[dev]' ./run-web-mcp.sh
The server communicates over stdio, so it does not open a web port and does not need to be installed into your host application's Python environment. Register the absolute launcher path in your MCP client:
{
"name": "odysseus-web-mcp", "command": "/absolute/path/to/odysseus-web-mcp/run-web-mcp.sh", "args": [], "cwd": "/absolute/path/to/odysseus-web-mcp" }
The launcher automatically uses the package's .venv. State defaults to ~/.local/share/odysseus-web-mcp; set WEB_MCP_DATA_DIR to place it elsewhere. No API key is required for the default fallback path, though Brave, Tavily, and Serper keys can be added when you want those providers.
web_searchUse it to discover sources for a focused question. It accepts one to three queries plus optional mode, vertical, and freshness controls.
{
"queries": "Model Context Protocol Python SDK", "mode": "discovery", "vertical": "general" }
The response contains ranked URLs, titles, snippets, provider attempts, cache state, a plain-text display projection, and an evidence_id. A host can take any returned URL directly into web_fetch.
web_fetchUse it to read a known public URL or a bounded batch of URLs.
{
"url": "https://example.com", "focus": "the page's purpose", "render": "auto" }
It returns extracted text, title and document kind, content quality, link discovery, redirect history, HTTP status, truncation/continuation metadata, and an evidence_id. Private and special-use destinations are rejected before transport by default.
An agent normally uses the tools as a two-step retrieval loop: search first, then fetch the source it wants to inspect. The payloads below show the shape of a real MCP interaction; IDs and result text are abbreviated for readability.
{
"name": "web_search", "arguments": { "queries": "official Model Context Protocol architecture", "mode": "grounding", "vertical": "general" } }
The MCP returns a text content block containing structured JSON:
{
"status": "ok", "query": "official Model Context Protocol architecture", "sources": [ { "title": "Architecture - Model Context Protocol", "url": "https://modelcontextprotocol.io/docs/concepts/architecture", "snippet": "Understand the architecture and communication model...", "provider": "duckduckgo", "relevance_score": 1.0 } ], "provider_attempts": { "searxng": "empty", "duckduckgo": "ok" }, "evidence_id": "a1b2c3d4...", "exit_code": 0 }
The agent takes the returned URL and calls the second tool:
{
"name": "web_fetch", "arguments": { "url": "https://modelcontextprotocol.io/docs/concepts/architecture", "focus": "How do clients and servers communicate?", "render": "auto" } }
The MCP returns bounded, extracted evidence:
{
"success": true, "url": "https://modelcontextprotocol.io/docs/concepts/architecture", "final_url": "https://modelcontextprotocol.io/docs/concepts/architecture", "http_status": 200, "document_kind": "html", "content_quality": "good", "content": "The Model Context Protocol defines how clients and servers...", "links": [ { "url": "https://modelcontextprotocol.io/docs/concepts/transports", "text": "Transports" } ], "evidence_id": "e5f6g7h8...", "exit_code": 0 }
The agent can now answer the user from the extracted content, preserve the evidence_id for traceability, and continue with another web_fetch using a returned cursor if the page was longer than the output budget.
MCP host ──stdio──▶ mcp_server.py
├─ web_search → provider chain → ranked evidence └─ web_fetch → security → HTTP/extract/render → evidence
All persistent state is rooted under WEB_MCP_DATA_DIR. The package has no runtime imports from Odysseus and no access to its credentials, database, memory, browser profiles, scheduler, or agent loop.
Read the full local system design in docs/TECHNICAL_DESIGN.md, and see how the GIFs were recorded in docs/INTERACTIVE_DEMO.md.
The default provider chain is:
SearXNG → Brave → Tavily → Serper → DuckDuckGo → Wikipedia → Bing
Configure it with WEB_MCP_SEARCH_PROVIDER_CHAIN. Optional credentials are DATA_BRAVE_API_KEY, TAVILY_API_KEY, and SERPER_API_KEY. Copy .env.example as a reference, but keep secrets in the host environment rather than committing them.
The optional browser path is disabled by default:
uv pip install -e '.[render]'
./.venv/bin/python -m playwright install chromium export WEB_MCP_RENDER_ENABLED=true
The server is published in the official MCP Registry under io.github.AceAtDev/odysseus-web-mcp.
For Claude Desktop and other MCPB-compatible clients, download the validated MCPB release bundle from the v0.1.0 GitHub Release. The bundle uses the uv runtime to resolve the declared Python dependencies without shipping a machine-specific virtual environment.
The project has a focused test suite and a live qualification runner:
./.venv/bin/python -m pytest -q
./.venv/bin/python tests/live_20_cases.py --output reports/live-20-cases.json
The live qualification runs 10 searches and 10 fetches through the real MCP launcher with disposable state. The latest verification record is in VERIFICATION.md.
To re-record the terminal previews from fresh live calls (requires ImageMagick's convert command):
./.venv/bin/python demos/record_terminal_demos.py
Each GIF is intentionally under ten seconds and shows a real MCP handshake and result shape, not a static product mockup.
This package is a retrieval primitive, not an agent loop, general-purpose crawler, scheduler, memory store, browser-profile manager, or credential vault. It is designed to be downloaded and connected as an independent MCP server.
This is the standalone extraction workspace for the Odysseus web search/fetch capability. See MIGRATION_MAP.md for the source-to-module mapping and VERIFICATION.md for the current evidence-based status.