Context Providers solve three problems that appear when agents integrate with multiple external systems: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.
- Tool sprawl. Slack alone is 8-12 tools. Add Drive, GitHub, your CRM, and you’re at 50 tools before adding anything custom. Past 20, models start hallucinating tools or picking the wrong one.
-
Name collisions.
searchin one toolkit collides withsearchin another.send_messagecould be Slack, email, or your CRM. No naming convention fixes it. -
System-prompt bloat. Using Slack well requires Slack-specific guidance: look up user IDs before DMing, resolve channel names, prefer
conversations.historyfor channels. Multiply by every API. The system prompt becomes the union of every source’s quirks.
ContextProvider wraps an external system and exposes it as one or two tools:
query_<id> (for reads) and update_<id> (for writes). Behind the tool is a sub-agent scoped to that one source.
query_slack, update_slack, query_gdrive, query_database, update_database. Each provider exposes one read tool plus an optional write tool.
How it Works
Sub-agent Architecture
Each provider runs its own sub-agent. Use a cheap model for source-specific work and a stronger model for synthesis:Read/Write Separation
Writable providers run two sub-agents with minimum privilege:| Provider | Read sub-agent | Write sub-agent |
|---|---|---|
| Database | Uses readonly_engine | Uses sql_engine |
| Slack | Search and history tools | send_message + lookups |
Mode
- default
- agent
- tools
Provider’s recommended exposure. For read/write providers, this means When to use: Most cases. You get clean read/write separation with privilege isolation. The read sub-agent cannot call write tools.How it works: Two sub-agents handle the underlying toolkit. Reads go through the read sub-agent (search, history). Writes go through the write sub-agent (send_message + lookups for channel resolution).
query_<id> + update_<id> with separate sub-agents.Multi-Provider Composition
Three providers on one agent compose cleanly because each has its own namespace:query_fs, query_web, query_database, update_database and picks the right one per question.
Guides
Using Providers
Attach providers to agents and configure them.
Custom Providers
Create your own provider for any data source.
Provider Catalog
Browse all built-in providers.
Resources
Cookbook Examples
Working examples for every provider
Runtime Guide
Production patterns: Knowledge, Dependencies, and Context Providers together