In Agno, MCPConfig(tools=[...]) mounts an AgentOS MCP server whose tools/list returns the tools you passed and nothing else, because default_tools and lifecycle_tools now both default to False. Earlier releases added the eight built-in tools, including continue_run and cancel_run, to every config that listed its own.
from agno.db.sqlite import SqliteDb
from agno.os import AgentOS, MCPConfig
def get_order_status(order_id: str) -> str:
"""Look up the shipping status of an order."""
return f"Order {order_id} shipped."
db = SqliteDb(db_file="tmp/agentos.db")
agent_os = AgentOS(db=db, mcp=MCPConfig(tools=[get_order_status]))We served this config from both releases and called tools/list on /mcp.
![Before and now comparison of tools/list for MCPConfig(tools=[get_order_status]), real output from the AgentOS /mcp endpoint. Before, the server listed 9 tools: get_agentos_config, run_agent, run_team, run_workflow, continue_run, cancel_run, get_sessions, get_session_runs and get_order_status. Now it lists 1 tool, get_order_status.](/images/v3-1-0-mcp-opt-in-tools.png)
Keep the old tool surface
This change breaks clients that call a built-in tool on a server configured with tools=[...]. Pick the flag that matches what they use:
# All eight built-in tools next to yours, as before
MCPConfig(tools=[get_order_status], default_tools=True)
# Only continue_run and cancel_run, for published agents, teams and workflows
MCPConfig(tools=[support_agent], lifecycle_tools=True)lifecycle_tools=True matters when a published component can pause on a tool that needs confirmation. Without it, the paused result tells the client how to resume the run over REST. AgentOS(mcp=True) keeps all eight built-ins, and a bare MCPConfig() now raises "MCPConfig would register zero tools" at construction. An include_tags filter only scopes default tools, so it logs a warning unless default_tools=True is set.
Auth on the MCP endpoint
The built-in tools on /mcp now run through the same authorization provider and audit log as the matching REST routes. With mcp_auth set, an AgentOS JWT from an issuer outside the Authorization issuer pin fails on /mcp as it does on REST, and a user disabled in the user directory gets a 403 with User is disabled.
See the cookbook, and learn more about publishing selected components in the documentation.
Frequently asked questions
Agno's MCPConfig no longer adds the built-in tools to a tools=[...] list. Add default_tools=True to the config and the server lists all eight built-ins next to your own tools.
Set lifecycle_tools=True on an MCPConfig that publishes agents, teams or workflows. The server then adds continue_run and cancel_run for those components.
Yes. mcp=True still serves all eight built-in tools. The new defaults apply when you pass an MCPConfig object.
An MCPConfig with no tools and default_tools left at False would mount an MCP server with nothing to call, so Agno refuses it at construction. Pass tools=[...] or default_tools=True.





