Agno
Connect an Agno agent to Civic using MCPTools with Streamable HTTP transport. Agno's MCPTools context manager handles connection lifecycle and exposes all discovered tools to your agent.
Prerequisites
- Python 3.11+
- A Civic account at app.civic.com with a configured toolkit
- A Civic token and an Anthropic API key
Installation
pip install agno anthropic python-dotenv
Environment Variables
CIVIC_URL=https://app.civic.com/hub/mcp?profile=your-toolkit
CIVIC_TOKEN=your-civic-token
ANTHROPIC_API_KEY=your-anthropic-key
Get Your Credentials
How to generate a Civic token and configure toolkit URL parameters
Connecting to Civic
Use MCPTools as an async context manager to connect to the Civic Hub and pass the tools to your agent:
import os
import asyncio
from dotenv import load_dotenv
from agno.agent import Agent
from agno.tools.mcp import MCPTools
from agno.tools.mcp.params import StreamableHTTPClientParams
from agno.models.anthropic import Claude
load_dotenv()
async def main():
async with MCPTools(
server_params=StreamableHTTPClientParams(
url=os.environ["CIVIC_URL"],
headers={"Authorization": f"Bearer {os.environ['CIVIC_TOKEN']}"},
),
transport="streamable-http",
) as mcp_tools:
agent = Agent(
model=Claude(id="claude-sonnet-4-6"),
tools=[mcp_tools],
instructions="You are a helpful assistant with access to Civic tools.",
)
response = await agent.arun(
"What events do I have today?",
stream=False,
)
print(response.content)
asyncio.run(main())
note
Use server_params=StreamableHTTPClientParams(...) — not params=. Also set transport="streamable-http" explicitly.
Production Configuration
For production agents, lock to a specific toolkit using the profile URL parameter:
CIVIC_URL=https://app.civic.com/hub/mcp?profile=your-production-toolkit
Reference Implementation
agno-reference-implementation-civic
Complete implementation with FastAPI chat UI and deployment guide