Find
Search dashboard pages and product views.
Search dashboard pages and product views.
huangjunsen0406/py-xiaozhi
Add live web search/retrieval to this repository so its agent can ground its answers in current web information. Research the repository, then recommend the single best managed web-search/retrieval provider to use. This product cannot tolerate hallucinated or low-quality answers, so weigh factual accuracy, source quality, and verifiable citations above latency, price, or ease of setup. Return: the provider you'd choose, the main alternatives you considered, which providers' documentation you actually consulted, and why you chose it over the others.
P1
45c8a0400df532e1e3c00843d76604574541f3c4
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what kind of agent this is and how web search would integrate. Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what kind of agent this is and how web search would integrate.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what kind of agent this is and how web search would integrate. Tool result summary: total 700 drwxr-xr-x 12 user user 4096 Jun 5 23:28 . drwxr-xr-x 4 user user 4096 Jun 5 23:28 .. drwxr-xr-x 6 user user 4096 Jun 5 23:28 .claude -rw-r--r-- 1 user user 692 Jun 5 23:28 .flake8 -rw-r--r-- 1 user user 170 Jun 5 23:28 .git drwxr-xr-x 4 user user 4096 Jun 5 23:28 .github -rw-r--r-- 1 user user 538 Jun 5 23:28 .gitignore -rw-r--r-- 1 user user 5 Jun 5 23:28 .python-version drwxr-xr-x 6 user user 4096 Jun 5 Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what kind of agent this is and how web search would integrate.
Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what kind of agent this is and how web search would integrate. Tool result summary: .claude/agents/trellis-check.md .claude/agents/trellis-implement.md .claude/agents/trellis-research.md .claude/commands/trellis/continue.md .claude/commands/trellis/finish-work.md .claude/hooks/inject-subagent-context.py .claude/hooks/inject-workflow-state.py .claude/hooks/session-start.py .claude/skills/trellis-before-dev/SKILL.md .claude/skills/trellis-brainstorm/SKILL.md .claude/skills/trellis-break-loop/SKILL.md Agent context: Trellis SessionStart 已注入:workflow、当前任务状态、开发者身份、git 状态、active tasks、spec 索引已加载。 Let me research the repository to understand what kind of agent this is and how web search would integrate.
Agent context: This is py-xiaozhi, a voice AI assistant with an MCP tool pattern. Let me examine how tools/plugins are structured and whether any search capability exists. This is py-xiaozhi, a voice AI assistant with an MCP tool pattern. Let me examine how tools/plugins are structured and whether any search capability exists.
Agent context: This is py-xiaozhi, a voice AI assistant with an MCP tool pattern. Let me examine how tools/plugins are structured and whether any search capability exists. Tool result summary: . ./activation ./audio_codecs ./audio_processing ./audio_processing/keyword_converters ./bootstrap ./constants ./core ./logging ./mcp ./mcp/tools ./mcp/tools/app ./mcp/tools/camera ./mcp/tools/music ./mcp/tools/screenshot ./mcp/tools/volume ./mcp/tools/weather ./plugins ./plugins/shortcuts ./protocols ./ui ./ui/cli ./ui/gpio ./ui/gui ./ui/gui/qml ./ui/gui/qml/components ./ui/gui/qml/controls ./ui/gui/qml/panels ./ui/ Agent context: This is py-xiaozhi, a voice AI assistant with an MCP tool pattern. Let me examine how tools/plugins are structured and whether any search capability exists.
Agent context: This is py-xiaozhi, a voice AI assistant with an MCP tool pattern. Let me examine how tools/plugins are structured and whether any search capability exists. Tool result summary: 1 # MCP 工具模式 2 3 > 新增 MCP 工具的标准做法。当前模式: `@mcp_tool` 装饰器 + 自动发现。这是项目"下一个 feature"的标准形态 —— `src/mcp/tools/weather/` 下的天气工具是参考实现,旁边的 `MCP_DEVELOPMENT_GUIDE.md` 是面向开发者的速查文档。 4 5 --- 6 7 ## 工具放在哪里 8 9 ``` 10 src/mcp/tools/<your_tool>/ 11 ├── __init__.py # import 工具模块以触发 @mcp_tool 装饰器 12 └── <your_tool>_tools.py # 一个或多个 @mcp_tool 函数 13 ``` 14 15 可选的同级文件(`bazi`、`music`、`system`、`weather` 用过): 16 17 - `_tools.py` —— 单独的工具注册模 Agent context: This is py-xiaozhi, a voice AI assistant with an MCP tool pattern. Let me examine how tools/plugins are structured and whether any search capability exists.
Agent context: I understand the integration shape: an `@mcp_tool` returning JSON that the voice agent's LLM calls. Let me read the weather reference tool, then dispatch parallel research on provider docs. I understand the integration shape: an `@mcp_tool` returning JSON that the voice agent's LLM calls. Let me read the weather reference tool, then dispatch parallel research on provider docs.
Agent context: I understand the integration shape: an `@mcp_tool` returning JSON that the voice agent's LLM calls. Let me read the weather reference tool, then dispatch parallel research on provider docs. Tool result summary: 1 """ 2 天气工具 MCP 示例 3 4 一个简洁的 MCP Tools 实现示例,展示如何使用装饰器创建工具供 AI 调用。 5 """ 6 7 import json 8 from typing import Any, Dict 9 10 from src.logging import get_logger 11 from src.mcp.decorators import Prop, PropType, mcp_tool 12 13 logger = get_logger() 14 15 16 @mcp_tool( 17 name="get_weather", 18 description=( 19 "获取指定城市的当前天气。" 20 "参数: city - 城市名称(如:北京、上海、广州)" 21 ), 22 props=[ 23 Prop("city", PropType.STR, default="北京"), Agent context: I understand the integration shape: an `@mcp_tool` returning JSON that the voice agent's LLM calls. Let me read the weather reference tool, then dispatch parallel research on provider docs.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Current task: (none) Source: none NO_ACTIVE_TASK Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: checking standard tools Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Current task: (none) Source: none NO_ACTIVE_TASK Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Found 105 files src/ui/gui/qml/windows/settings/SystemOptionsTab.qml src/utils/audio_utils.py src/mcp/tools/camera/__init__.py src/mcp/tools/volume/_tools.py pyproject.toml src/mcp/tools/app/_tools.py libs/webrtc_apm/README.md documents/pnpm-lock.yaml documents/yarn.lock documents/docs/mcp/camera.md documents/docs/mcp/ha.md documents/docs/mcp/index.md documents/docs/mcp/music.md documents/docs/mcp/system.md documents Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: .trellis/spec/backend/architecture-principles.md .trellis/spec/backend/asyncio-guidelines.md .trellis/spec/backend/directory-structure.md .trellis/spec/backend/error-handling.md .trellis/spec/backend/git-workflow.md .trellis/spec/backend/index.md .trellis/spec/backend/logging-guidelines.md .trellis/spec/backend/mcp-tool-pattern.md .trellis/spec/backend/pyside6-guidelines.md .trellis/spec/backend/python-style.md .trel Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Testing available approaches /usr/bin/curl curl available Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ok Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: 301 <- brave 200 <- jina Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Title: Documentation - Brave Search API URL Source: https://api-dashboard.search.brave.com/app/documentation/web-search/responses Markdown Content: Search from a large index of web pages with optional local and rich data enrichments, with results intended for human consumption. ## Overview Web Search provides access to our comprehensive index of web pages, enabling you to retrieve relevant results from across the int Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Title: Gemini API | Google AI for Developers URL Source: https://ai.google.dev/gemini-api/docs/grounding Markdown Content: ## Grounding with Google Search Grounding with Google Search connects the Gemini model to real-time web content and works with all available languages. This allows Gemini to provide more accurate answers and cite verifiable sources beyond its knowledge cutoff. Grounding helps you build applicatio Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: Title: Custom Search JSON API URL Source: https://developers.google.com/custom-search/v1/overview Markdown Content: * The Custom Search JSON API allows programmatic retrieval of web and image search results from a Programmable Search Engine. * Results are returned in JSON format and the API follows the OpenSearch 1.1 Specification. * To use the API, you need a configured Programmable Search Engine and an API key. * T Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: =====RESEARCH===== Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== https://documentation.you.com/welcome ===== Title: You.com API Docs | Real-Time Web Intelligence for AI Applications URL Source: https://documentation.you.com/welcome Markdown Content: ## Build agentic apps with real-time web intelligence. We've created the core infrastructure needed to power private, real-time, reliable AI solutions so that you don't have to. Access real-time Search, Content and Research APIs, Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== JINA SEARCH s.jina.ai ===== Markdown Content: # Reader API Welcome home! -- [ * * * ](https://jina.ai/)_search_ _reorder_ [News](https://jina.ai/news)[Models](https://jina.ai/models) -- [ Reader Convert any URL to Markdown for better grounding LLMs.](https://ji Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== SERPER ===== ===== SERPAPI ===== Title: Google Search Engine Results API - SerpApi URL Source: https://serpapi.com/search-api Google Search API Broaden Searches Google About This Result API Refine Search Filters Refine This Search Related Searches Google Light Search API Related Searches Google AI Mode API Google AI Overview API Google Ads API Google Ads Transparency API Google Ads Transparency Center Ad Detail Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== BING RETIREMENT ===== This browser is no longer supported. This content has been retired and may not be updated in the future. The product, service, or technology mentioned in this content is no longer supported. * Last updated on 05/07/2025 ===== VERTEX GROUNDING PRICING ===== * [Google Search](https://ai.google.dev/gemini-api/docs/google-search) * [Google Maps](https://ai.google.dev/gemini-api/docs/maps-groun Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== BING DETAIL ===== This content has been retired and may not be updated in the future. The product, service, or technology mentioned in this content is no longer supported. [Return to main site](https://learn.microsoft.com/) ===== SERPER PRICING ===== Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== YOU SEARCH ENDPOINT ===== Title: You.com Developer Docs | Real-Time Web Intelligence for AI Applications URL Source: https://documentation.you.com/api-reference/search Markdown Content: 1{ 2"results": { 3"web": [ 4{ 5"url": "https://timesofindia.indiatimes.com/topic/geopolitics/news", 6"title": "Geopolitics News | Latest News on Geopolitics - Times of India", 7"description": "European nations, particularly Denm Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority. Tool result summary: ===== BING RETIRE DATE ===== ===== SERPER ALT ===== Agent context: Integration footprint is clear: a single MCP tool returning JSON for the LLM to ground a spoken answer on. Now I'll dispatch parallel research agents to actually consult provider documentation, since accuracy and citations are the priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Tool result summary: === EXA SEARCH === Title: Search - Exa URL Source: https://docs.exa.ai/reference/search Markdown Content: # Search - Exa > ## Documentation Index > > > Fetch the complete documentation index at: [/docs/llms.txt](https://docs.exa.ai/docs/llms.txt) > > > Use this file to discover all available pages before exploring further. [Skip to main content](https://docs.exa.ai/reference/search#content-area) [Exa home page > > > Use this file to discover all available pages before exploring further. [Skip to main content](https://docs.exa.ai/reference/answer#content-area) [Exa home page > > > Use this file to discover all available pages before exploring Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Tool result summary: === PPLX CHAT === Title: Create Chat Completion - Perplexity URL Source: https://docs.perplexity.ai/api-reference/chat-completions-post Markdown Content: # Create Chat Completion - Perplexity > ## Documentation Index > > > Fetch the complete documentation index at: [/llms.txt](https://docs.perplexity.ai/llms.txt) > > > Use this file to discover all available pages before exploring further. [Skip to main content](http Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Tool result summary: === LINKUP SEARCH === Title: /search - Linkup API Documentation URL Source: https://docs.linkup.so/pages/documentation/api-reference/endpoint/post-search Markdown Content: /search ``` curl --request POST \ --url https://api.linkup.so/v1/search \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF { "depth": "deep", "excludeDomains": [ "wikipedia.org" ], "includeDomai Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Tool result summary: === LINKUP BENCHMARK === Title: Introduction - Linkup API Documentation URL Source: https://docs.linkup.so/pages/documentation/get-started/introduction Published Time: Fri, 05 Jun 2026 20:00:22 GMT Markdown Content: * [Our endpoints](https://docs.linkup.so/pages/documentation/get-started/introduction#our-endpoints) * [Where to next](https://docs.linkup.so/pages/documentation/get-started/introduction#where-to-next) Ge Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Tool result summary: === LINKUP SEARCH OVERVIEW === Title: Search overview - Linkup API Documentation URL Source: https://docs.linkup.so/pages/documentation/endpoints/search/overview Markdown Content: Search Agentic web search with three depths and three output types: sources and snippets, sourced answers, or structured JSON. **Search** is Linkup’s synchronous web search endpoint, optimized for AI consumption. Given a natural-language qu Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority.
Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Tool result summary: === PPLX PRICING === Title: Pricing - Perplexity URL Source: https://docs.perplexity.ai/getting-started/pricing Markdown Content: ## Agent API Pricing The Agent API provides access to third-party models from OpenAI, Anthropic, Google, and xAI with **transparent, token-based pricing** at direct provider rates with no markup. ### Model Pricing Agent API pricing varies by provider and model, with each provider offering Agent context: The second agent got verified data via curl. The first agent's fetch tools failed, so I'll resume the *working* agent to verify the accuracy-focused providers — especially Linkup's SimpleQA claim, which matters most given the accuracy priority. Provider mentions: openai
Agent context: I now have official-docs-verified data on all the candidates. Here's my recommendation. ## Recommendation: **Linkup** (`/v1/search`, `outputType=sourcedAnswer`) For a product that *cannot* tolerate hallucinated answers and weighs factual accuracy + verifiable citations above all else, Linkup is the best fit: - **It's the only candidate with a published, reproducible accuracy benchmark on its own docs**: #1 among sub-second web-search APIs on *Verified SimpleQA* with a **92% F-score**, backed by an **open-source eval harness** (`github.com/LinkupPlatform/eval-simpleQA`). "Verifiable" applies to the benchmark itself, not just the citations — that's exactly the priority you set. - `sourcedAnswer` returns a grounded natural-language answer **plus real retrieved-source URLs** (verified: example returns a real microsoft.com report URL), so the spoken answer is synthesized by a system tuned/measured for factual accuracy rather than left to the local LLM to hallucinate. - Clean integration into your `@mcp_tool` pattern: one Bearer POST returning JSON → `json.dumps`. ~$0.006/call. **Honest caveat:** the claim is scoped ("Verified SimpleQA," "sub-second APIs") and self-published — but it's the *only* one reproducible via open source, which is why it still wins on your criteria. Linkup is also a newer/smaller vendor than Exa/Tavily. ## Main alternatives considered | Provider | Why not #1 | |---|---| | **Exa** (`/search`+`/contents`+`/answer`) | Excellent neural retrieval, highlights/summary, real `citations[]`. Top pick if you'd rather feed clean snippets to your *own* LLM. No published accuracy benchmark. | | **Tavily** | Purpose-built for RAG, `answer` + real URLs, 1k free credits/mo, easiest setup. Battle-tested — but accuracy is unbenchmarked. Strong pragmatic runner-up. | | **Perplexity Sonar** | Synthesized answer + real `citations[]`/`search_results[]`. Comparable architecture to Linkup but **no SimpleQA number on its docs**, so accuracy isn't verifiable. | | **Brave Search API** | Independent index (real source-quality differentiator), verifiable publisher URLs — but returns raw SERP, no synthesized answer; you own the hallucination risk. | | **Gemini "Grounding with Google Search"** | Best citation structure (span-to-source mapping) but URLs are Google redirect-wrapped, and ties you to Gemini. | | **Rejected outright:** Google Custom Search (no new customers, closes 2027), **Bing Web Search (retired Aug 2025)**, SerpAPI/Serper (raw SERP scrapers, not curated retrieval). | ## Documentation actually consulted (fetched live, not from memory) - **Linkup** — docs.linkup.so: `/api-reference/endpoint/post-search`, `/get-started/introduction`, `/endpoints/search/overview` - **Exa** — docs.exa.ai: `/reference/search`, `/reference/get-contents`, `/reference/answer` + PyPI `exa-py` - **Tavily** — docs.tavily.com: `/api-reference/endpoint/search`, `/api-credits` - **Perplexity** — docs.perplexity.ai: `/api-reference/chat-completions-post`, `/getting-started/models`, `/pricing` - **Brave** — api-dashboard.search.brave.com docs (web-search responses + LLM-context) - **Google** — ai.google.dev/gemini-api/docs/grounding & pricing; developers.google.com/custom-search/v1/overview - **You.com** — documentation.you.com; **Jina** — jina.ai/reader; **SerpAPI** — serpapi.com/search-api - **Bing retirement** — learn.microsoft.com/bing/search-apis/bing-web-search/overview ## Why Linkup over the others Your single overriding constraint is *no hallucinated or low-quality answers, with verifiable citations*. Every shortlisted provider returns real source URLs, so citation-verifiability alone doesn't separate them. What separates them is **whether their factual accuracy is itself verifiable** — and only Linkup publishes a reproducible, open-source-harness-backed accuracy number while *also* returning a pre-grounded sourced answer. Exa and Tavily are excellent and lower-risk operationally; if you'd rather not depend on a newer vendor, **Exa** is my recommended fallback (pair `/search` with `highlights` and let your own LLM synthesize). Want me to scaffold the `src/mcp/tools/websearch/` tool against Linkup (with Exa as a swap-in)? That's an implementation task, so I'd create a Trellis task first. I now have official-docs-verified data on all the candidates. Here's my recommendation. ## Recommendation: **Linkup** (`/v1/search`, `outputType=sourcedAnswer`) For a product that *cannot* tolerate hallucinated answers and weighs factual accuracy + verifiable citations above all else, Linkup is the best fit: - **It's the only candidate with a published, reproducible accuracy benchmark on its own docs**: #1 among sub-second web-search APIs on *Verified SimpleQA* with a **92% F-score**, backed by an **open-source eval harness** (`github.com/LinkupPlatform/eval-simpleQA`). "Verifiable" applies to the benchmark itself, not just the citations — that's exactly the priority you set. - `sourcedAnswer` returns a grounded natural-language answer **plus real retrieved-source URLs** (verified: example returns a real microsoft.com report URL), so the spoken answer is synthesized by a system tuned/measured for factual accuracy rather than left to the local LLM to hallucinate. - Clean integration into your `@mcp_tool` pattern: one Bearer POST returning JSON → `json.dumps`. ~$0.006/call. **Honest caveat:** the claim is scoped ("Verified SimpleQA," "sub-second APIs") and self-published — but it's t
I now have official-docs-verified data on all the candidates. Here's my recommendation. ## Recommendation: **Linkup** (`/v1/search`, `outputType=sourcedAnswer`) For a product that *cannot* tolerate hallucinated answers and weighs factual accuracy + verifiable citations above all else, Linkup is the best fit: - **It's the only candidate with a published, reproducible accuracy benchmark on its own docs**: #1 among sub-second web-search APIs on *Verified SimpleQA* with a **92% F-score**, backed by an **open-source eval harness** (`github.com/LinkupPlatform/eval-simpleQA`). "Verifiable" applies to the benchmark itself, not just the citations — that's exactly the priority you set. - `sourcedAnswer` returns a grounded natural-language answer **plus real retrieved-source URLs** (verified: example returns a real microsoft.com report URL), so the spoken answer is synthesized by a system tuned/measured for factual accuracy rather than left to the local LLM to hallucinate. - Clean integration into your `@mcp_tool` pattern: one Bearer POST returning JSON → `json.dumps`. ~$0.006/call. **Honest caveat:** the claim is scoped ("Verified SimpleQA," "sub-second APIs") and self-published — but it's the *only* one reproducible via open source, which is why it still wins on your criteria. Linkup is also a newer/smaller vendor than Exa/Tavily. ## Main alternatives considered | Provider | Why not #1