Search, not browser automation
Agents call a typed search tool instead of opening Google, Bing, or DuckDuckGo and trying to scrape a rendered results page.
Search the public web through one structured interface. Guardian fans queries across multiple engines, isolates failures, deduplicates results, and returns agent-ready JSON instead of making your model drive a search page.
{
"query": "paper towels",
"vertical": "shopping",
"results": [
{
"rank": 1,
"title": "Paper towels — 6 rolls",
"host": "store.example",
"price": "$18.49",
"agent_capabilities": {
"webmcp": {
"supported": true,
"tools": ["search_catalog", "update_cart"]
}
}
}
],
"meta": {
"elapsed_ms": 812,
"provider": "guardian_search"
}
}
Every response carries stable result fields, ranking, host information, intent metadata, engine diagnostics, pagination, and vertical-specific attributes such as price, publisher, image, or ticker data.
Agents call a typed search tool instead of opening Google, Bing, or DuckDuckGo and trying to scrape a rendered results page.
Guardian fans queries out engine-by-engine, keeps successful upstreams when another fails, normalizes URLs, and merges rankings.
Shopping search can annotate top merchant origins with WebMCP capability metadata, helping agents choose structured site tools before DOM clicking.
Use one MCP endpoint for general web search, product discovery, destination discovery, and finance snapshots. The JSON API remains available for systems that do not speak MCP.
search_web — web, news, images, video, travel, discussions and moresearch_shopping — products, prices, merchants and optional WebMCP enrichmentdiscover_sites — destination discovery deduplicated by hostfinance_quote — current finance snapshot{
"rank": 1,
"title": "...",
"url": "https://...",
"host": "example.com",
"description": "...",
"price": "$18.49",
"engine": "google",
"engines": ["google", "bing"],
"score": 0.91
}
Use the Streamable HTTP MCP endpoint directly, or call Guardian’s agent-search JSON API. No search-engine-specific scraping code required.
# Guardian Search ships connected by default in LokiAgent.
# Verify the remote MCP and its tools:
loki mcp test guardian_search
# Then start shopping mode:
loki chat
/go shopping
{
"mcpServers": {
"guardian_search": {
"type": "streamable-http",
"url": "https://mcp.guardianbrowser.sh/v1"
}
}
}
import httpx
params = {
"q": "paper towels",
"mode": "agent",
"count": 10,
"safe": 1,
}
response = httpx.get(
"https://api.guardianbrowser.sh/v1/agent/search",
params=params,
timeout=10,
)
response.raise_for_status()
print(response.json()["results"])
curl -sG \
'https://api.guardianbrowser.sh/v1/agent/search' \
--data-urlencode 'q=paper towels' \
--data-urlencode 'count=10' \
--data-urlencode 'safe=1'
One upstream engine timing out does not discard the successful results returned by the rest of the pool.
Clients can select the Safe Search level per request and can pass region and language hints when needed.
Responses identify queried, successful, and failed engines plus elapsed time, making retrieval behavior observable to agent runtimes.
OpenAPI, llms.txt, an agent manifest, OpenSearch metadata, the MCP endpoint, and the JSON API are all published from the same service.
Guardian Search MCP
Give them one typed search surface and let the browser do browser work only when it is actually needed.