Documentation Index
Fetch the complete documentation index at: https://docs.agno.com/llms.txt
Use this file to discover all available pages before exploring further.
An agent is only as good as the context it has access to. Context providers give the agent live access to a source through two natural-language tools: query_<source> for reads and update_<source> for writes. A sub-agent behind each provider owns the source’s quirks, so the main agent’s context stays clean.
from agno.agent import Agent
from agno.context.web import ExaBackend, WebContextProvider
from agno.models.openai import OpenAIResponses
web = WebContextProvider(backend=ExaBackend(), model=OpenAIResponses(id="gpt-5.5"))
agent = Agent(
model=OpenAIResponses(id="gpt-5.5"),
tools=web.get_tools(),
instructions=web.instructions() + "\nAlways cite URLs inline.",
)
agent.run("What's the latest pricing for Anthropic's models?")
Navigation over search
Context providers navigate the source at query time, the way a coding agent runs ls, grep, and cat. The state is always live and every citation is a path the user can open.
The common “company brain” approach ingests everything into a vector database for top-k retrieval. That works for static corpora. For live product data, the index goes stale and citations point at fragments.
| Win | Why it matters for your product |
|---|
| Live state | The Slack message sent thirty seconds ago is queryable now |
| Real citations | Every reference is a path the user can open |
| Permissions stay put | The source enforces who can read what; the agent sees what its credentials see |
Attaching a source’s twelve raw tools to the agent pollutes context and degrades routing. A provider collapses the source to one tool the agent reasons about.
| Problem with raw tools | What a context provider does |
|---|
| Too many tools crowd the prompt | The agent sees one tool: query_slack |
| Overlapping scopes confuse routing | One sub-agent owns one scope; routing is one tool call |
| Intermediate results bury the task | Pagination and lookups stay inside the sub-agent |
Sources
| Source | Tools | Backed by |
|---|
| Web | query_web | Exa, Parallel, or an MCP search backend |
| Workspace | query_workspace | A filesystem path or repo, read-only |
| Database | query_<db>, update_<db> | Postgres, with a read engine and a schema-guarded write engine |
| Knowledge wiki | query_knowledge, update_knowledge | Filesystem or a Git repo for durable prose memory |
| Slack | query_slack | Slack API, read-only |
| Google Drive | query_gdrive | A service account, scoped to shared folders |
| MCP servers | query_mcp_<slug> | Any MCP server: Linear, GitHub, Notion |
Read-only providers
Providers that can write take write=False, which removes the update tool so the agent cannot mutate the source under any prompt. A read-only source like the web has no write tool to begin with. This is how a style guide or a reference corpus stays immutable while still being queryable.
Next steps
| Task | Guide |
|---|
| Reach users where they work | Interfaces |
| Persist what the agent learns | Sessions and memory |
Developer Resources