Overview
KeenableWebSearch exposes web search and page reading capabilities to your Pipecat agents through a hosted MCP server powered by Keenable AI. It provides two tools that can be registered directly with your LLM context:
search_web_pages: Search the web for current events, news, or facts with optional site and date-range filtersfetch_page_content: Read the text content of a specific web page
await search.tools() to your LLMContext and the LLM auto-registers the tool handlers, allowing your agent to answer questions about current events and information beyond the model’s training data.
Keenable AI
Learn more about Keenable’s web search and MCP services
Example
Complete voice agent example with web search
Installation
Prerequisites
API Key (Optional)
No API key is required to use Keenable web search — it works keyless by default using the free tier withpro mode. However, you can optionally provide an API key for:
- Higher rate limits
- Access to
realtimemode (lower latency, ideal for voice agents)
KEENABLE_API_KEY environment variable or pass it directly to the constructor.
Configuration
str | None
default:"None"
API key for higher rate limits and access to
realtime mode. When unset, the
keyless free tier is used.'pro' | 'realtime'
default:"'realtime' if keyed, else 'pro'"
Search mode: -
"pro": Higher quality results - "realtime": Lower latency,
optimized for voice (requires an account with realtime mode enabled) When
unset, defaults to "realtime" if an API key is provided, otherwise "pro".Available Tools
When you callawait search.tools(), the following tools are registered:
search_web_pages
Search the web with optional filters:- site: Limit results to a specific domain
- date_range: Filter by date range
- mode: Automatically set to the configured mode (
proorrealtime)
fetch_page_content
Read the full text content of a specific web page by URL.Usage
Basic Setup
Complete Voice Agent
Manual Connection Management
The connection to Keenable’s server is managed automatically, but you can control it explicitly if needed:Notes
- The connection to Keenable’s server is opened on the first call to
tools()and closed automatically at pipeline teardown - The configured
mode(proorrealtime) is pinned per request and hidden from the model realtimemode requires an account with realtime mode enabled; keyless access defaults topromode- The
start()method is idempotent and called automatically bytools() - The
close()method is safe to call multiple times and from any task