Blog
 / 
September 25, 2026

How to Add Better Web Search to Your Personal AI Assistant

How to Add Better Web Search to Your Personal AI Assistant

TLDR: Every personal AI assistant searches with whatever its harness ships. OpenClaw falls back to the first provider key it finds, Hermes Agent rotates keyless free tiers until you choose a backend, Claude Code is fixed to Anthropic's search, and Meta Muse browses with its own browser. To add a better provider, connect it as an MCP server or a Muse custom connector, then test it on questions only this week's web can answer.

What Does Each Personal AI Assistant Search With by Default?

Each assistant makes a different default choice, and each choice fails differently. This table reflects each project's own documentation as of September 2026.

AssistantDefault search pathCan you change it?Where another provider plugs in
OpenClawThe web_search tool uses the provider you set. With none set, it takes the first provider whose key it finds, in a fixed order that starts with Brave. Key-free providers such as DuckDuckGo are never picked automatically.Yes, with a provider settingMCP servers, or the You.com plugin clawhub:you
Hermes Agentweb_search and web_extract, with Firecrawl as the default backend. A fresh install with no web keys rotates requests across the free tiers of Exa, Parallel, Firecrawl, and Keenable.Yes, in hermes tools or config.yamlAn MCP server entry in ~/.hermes/config.yaml
Claude CodeBuilt-in WebSearch on Anthropic's backend, returning titles and URLs onlyThe backend, no. The toolset, yes.An MCP server
Meta MuseA browser inside its Muse Secure VM that you and Muse can both control. Meta does not say which search engine it uses.No provider settingA custom connector built from a service's API

The sources are OpenClaw's web search docs, Hermes Agent's Web Search and Extract docs, Anthropic's Claude Code tools reference, which says the search backend "is not configurable" and points to MCP for a different provider, and Meta's Help Center pages on how Muse browses the web and how Muse works with connectors.

The practical consequences differ. An OpenClaw install with no provider key or SearXNG URL has no managed search (models on OpenAI's Responses API are the exception and use OpenAI's native search). A keyless Hermes install searches out of the box, but consecutive questions can be answered by different engines, which makes quality hard to judge. Claude Code's built-in tool gives the model a list of links, so every page it wants to read costs a second fetch. Muse drives a real browser, which suits forms and bookings, and Meta's docs do not describe a search API underneath it.

What Should Better Search Mean for a Personal Assistant?

A personal assistant asks narrow, time-sensitive questions: today's opening hours, this week's release notes, the current price of a flight. That shifts what matters in a provider.

  • The same engine on every call. You cannot tune or evaluate a search layer that changes underneath you. Pin one provider before you judge anything.
  • Enough text per result. Titles and URLs force extra fetches. The You.com Web Search API returns snippets by default and, on POST requests, query-relevant highlights or the full page through the extraction parameter.
  • Controls that stick. On the You.com search tool, the model can set a freshness window (day, week, month, year, or a date range). Domain allowlists and boosts of up to 500 domains are host-only: you set them with X-Search-* headers on the MCP connection, and they override whatever the model asks for.
  • The provider's full response. OpenClaw's web_search normalizes every provider to title, URL, snippet, and published date and drops provider-specific fields, according to its docs. A provider connected as MCP tools keeps its own response shape.
  • Predictable cost and limits, covered in the cost section below.

If you need the underlying concepts first, What Is a Web Search API? covers result types and how to call one.

How Do You Plug You.com Search Into Each Assistant?

The common piece is the You.com MCP server at https://api.you.com/mcp. The enabled tools are the intersection of the profile you pick and any allowlist you send, and authentication is resolved separately.

OptionURLAuthTools
Free trialhttps://api.you.com/mcp?profile=freeNoneyou-search, you-discover, 100 queries per day
Defaulthttps://api.you.com/mcpBearer API key or OAuth 2.1you-search, you-contents, you-balance, you-discover
Research or finance/mcp/research, /mcp/finance, or ?tools= on /mcpBearer API key or OAuth 2.1you-research, you-finance

OpenClaw

You.com is not one of OpenClaw's bundled web_search providers, so it arrives as MCP tools next to web_search. The You.com Agent Skills docs list openclaw plugins install clawhub:you. The plugin's manifest (version 1.6.1) bundles five skills and declares MCP servers for /mcp, /mcp/research, and /mcp/finance with no credentials attached. Per OpenClaw's plugin manifest docs, your own mcp.servers entry with the same name overrides the plugin's, so that entry is where your key or OAuth sign-in goes. Then run openclaw mcp probe, which connects and lists tools. OpenClaw's MCP registry docs cover the full command set.

If your OpenClaw assistant lives in a chat server, the Discord bot walkthrough covers channel setup and custom research skills. The OpenClaw skill launch post explains why the integration needed no OpenClaw-specific adapter.

Hermes Agent

Hermes reads MCP servers from mcp_servers in its config file and resolves ${VAR} placeholders in headers from your environment, including ~/.hermes/.env, when it connects (Hermes MCP docs):

# ~/.hermes/config.yaml
mcp_servers:
  you:
    url: "https://api.you.com/mcp"
    headers:
      Authorization: "Bearer ${YDC_API_KEY}"

For a keyless trial, use https://api.you.com/mcp?profile=free and drop the headers block. Hermes prefixes MCP tools with the server name, so you-search shows up in traces as mcp_you_you_search. Start a new session or run /reload-mcp after editing. You.com packages its skills for Hermes in the same agent-skills repo, and the Hermes Agent skills post shows how Hermes rewrites those skills as it uses them.

Meta Muse

Muse has no search-provider setting, and the Muse help pages we checked do not mention MCP. They do describe custom connectors: "If you want to connect to a service not yet available in the Connector list, you can ask Muse to create a Custom Connector." Meta's engineering post on Muse adds that Muse can write connectors for services "if they have their own APIs or CLIs." The Web Search API is a plain REST endpoint, so a request like this hands Muse the endpoint, auth, and response shape up front:

Create a custom connector for the You.com Web Search API.
Endpoint: POST https://ydc-index.io/v1/search
Auth: X-API-Key header. Ask me for the key when you need it.
Body: JSON with "query" and "count". Add "freshness" ("day", "week",
"month", or "year") for time-sensitive questions.
Results: read results.web and results.news. Cite the url of every
result you rely on.

Two cautions. Meta says it does not review custom connectors, and we have not tested this connector inside Muse, so treat it as a path to try. The built-in browser also stays available, so tell Muse which kinds of lookup should go through the connector.

Claude Code and Coding Agents

If your assistant is really a coding agent, the host-specific guides cover it: adding a web search tool to Claude Code and adding web search to Cursor.

How Do You Stop the Built-In Search From Winning?

Adding a provider does not remove the old one. With two search tools available, the model can keep reaching for the built-in one, and you get the old results through the new setup. Each host has its own switch.

  • OpenClaw: tools.web.search.enabled: false turns off managed web_search and native model search. MCP servers are configured separately. The minimal tool profile hides MCP tools, so use the normal coding or messaging profiles.
  • Hermes Agent: hermes tools enables or disables toolsets per platform. web_search belongs to both the web and search toolsets (toolsets reference), so turn off both to leave the mcp-you toolset as the only search path. That also removes web_extract, so keep you-contents available for reading pages.
  • Claude Code: add a bare WebSearch entry to the deny list in your permission rules.
  • Cursor: You.com's docs recommend turning off Cursor's built-in web search under Settings, Agents.
  • Muse: say in your instructions when to use the connector instead of the browser.

If you would rather keep both, name the tool in the request ("search with you-search") and confirm in the trace which one ran.

How Do You Judge Whether the New Search Is Better?

A fluent answer is not evidence. Build a small test set from your own week: 15 to 20 questions, split between time-sensitive ones (a release, a schedule change, a price) and stable facts that a recency filter should not hide. For each, write down the domain a good answer should cite. Run the set through the assistant with the old search, then with the new one, and record whether the search tool fired, whether each citation supports its claim, how old the newest source is, and how long the answer took.

Turn off local caches while you test, or the second run replays the first. OpenClaw caches web_search results for 15 minutes unless you set cacheTtlMinutes to 0, and Hermes caches repeat searches and extracts unless you set web.cache_enabled: false.

Then run the same questions straight against the API. This separates two failures that look identical in chat: the provider returned poor sources, or the provider returned good sources and the assistant did not use them. The script uses only the standard library and the documented REST contract (POST https://ydc-index.io/v1/search with an X-API-Key header).

import json
import os
import urllib.request
from datetime import datetime, timezone
from urllib.parse import urlparse

API_URL = "https://ydc-index.io/v1/search"


def search(query, count=5, freshness=None):
    body = {"query": query, "count": count}
    if freshness:
        body["freshness"] = freshness  # day, week, month, year, or a date range
    request = urllib.request.Request(
        API_URL,
        data=json.dumps(body).encode("utf-8"),
        headers={"X-API-Key": os.environ["YDC_API_KEY"],
                 "Content-Type": "application/json"},
        method="POST",
    )
    with urllib.request.urlopen(request, timeout=30) as response:
        return json.load(response)


def domain(url):
    host = urlparse(url).netloc.lower()
    return host[4:] if host.startswith("www.") else host


def parse_utc(stamp):
    parsed = datetime.fromisoformat(stamp.replace("Z", "+00:00"))
    return parsed if parsed.tzinfo else parsed.replace(tzinfo=timezone.utc)


def summarize(payload, now=None):
    now = now or datetime.now(timezone.utc)
    results = payload.get("results") or {}
    web = results.get("web") or []
    news = results.get("news") or []
    # News page_age is the UTC publication time. Web page_age is only
    # "the age of the search result", so it is not treated as a date.
    ages = []
    for item in news:
        try:
            ages.append((now - parse_utc(item["page_age"])).days)
        except (KeyError, ValueError):
            continue
    return {
        "domains": [domain(r["url"]) for r in web + news if r.get("url")],
        "newest_news_days": min(ages) if ages else None,
    }


def score(summary, expected_domains, cited_urls):
    found = set(summary["domains"])
    cited = {domain(u) for u in cited_urls}
    return {
        "expected_found": any(d in found for d in expected_domains),
        "cited_in_results": sorted(cited & found),
        "cited_elsewhere": sorted(cited - found),
    }


if __name__ == "__main__":
    checks = [
        # (question, domains a good answer cites, URLs your assistant cited)
        ("OpenClaw web search provider auto-detection order",
         ["docs.openclaw.ai"], ["https://docs.openclaw.ai/tools/web"]),
    ]
    for question, expected, cited in checks:
        summary = summarize(search(question))
        print(question, summary["newest_news_days"], score(summary, expected, cited))

Read the output in pairs. If expected_found is true but the assistant's citations land in cited_elsewhere, the index is fine and the problem is tool choice or instructions. If expected_found is false, try a freshness window or domain filters before blaming the assistant. Do not score freshness from web results: the API reference defines news page_age as the article's UTC publication timestamp, but web page_age only as "the age of the search result." For a fuller method, How to Evaluate AI Search for the Agentic Era covers query sets and grading.

What Breaks on First Install?

Each of these first-day problems has a recognizable signature.

  • The server connects but lists zero tools. The profile and the allowlist do not overlap. ?profile=free&tools=you-research returns no tools by design, and the server reports no error.
  • Tools are listed but calls fail. Tool visibility and authentication are separate on the You.com server, so a missing or rotated key can surface only when a tool is called. Check the key before you debug anything else.
  • The install worked but nothing changed. The session was not reloaded, the OpenClaw tool profile is minimal, or a Hermes plugin was installed without being enabled. Hermes asks whether to enable a plugin after hermes plugins install, and the default answer is no.
  • The model never calls the new tool. The built-in search is still winning. See the section above.
  • A web page steers the assistant. A personal assistant can send email and spend money, so a prompt injection hidden in a search result costs more here than in a coding agent. Keep approvals on for actions with side effects. OpenClaw marks web_search results as untrusted external content, and Meta says nothing Muse does reaches the internet unless a separate Sentinel agent approves it. Prompt injection and intent hijacking in AI agents covers the attack patterns.

What Does Better Search Cost for One Person?

For one person, the math takes a minute. As of September 2026, the You.com Web Search API costs $5.00 per 1,000 calls with up to 100 results per call, and full-page extraction adds $1.00 per 1,000 pages crawled live (You.com billing docs). New accounts get $100 in credits, and self-serve keys default to 10 requests per second (rate limits).

Usage patternCalls per monthSearch cost
Free profile, keylessUp to 100 per day$0, search and discover tools only
Light assistant use, 30 searches a dayAbout 900About $4.50
Heavy research, 150 searches a dayAbout 4,500About $22.50

Extraction is the variable to watch. You.com's quickstart notes that with the default count of 10, a full-page call can crawl up to 20 pages (web plus news) and add up to $0.02 to the $0.005 base cost. Highlights are included in the base price, so highlights or a lower count keep a personal assistant's bill close to the search-only line.

Which Setup Should You Choose?

  • You use Muse for daily life: keep the browser for errands, and try a custom connector for lookups that need several current sources. Keep approvals on.
  • You run OpenClaw: install the You.com plugin, add your own mcp.servers entry with a key or OAuth, and decide whether web_search stays on.
  • You run Hermes Agent: add the mcp_servers entry above and pin a single engine for the length of your test by turning off the built-in web and search toolsets.
  • You are only trying it out: use the free profile on any MCP host. It needs no account and covers search, though not page extraction.

Next action: write down ten questions from this week that your assistant got wrong or answered vaguely, connect the new provider, and rerun them with caches off. If the citations change to dated, relevant sources, keep the switch. If they do not, the script above will tell you whether to fix the provider settings or the assistant's instructions.

    Share Article:

  1. LI Test

  2. LI Test

Related resources.

No items found.
No items found.