Skip to content
Changelog

Browser clients reach the AgentOS MCP server through CORS

October 22, 20261 min read

Agno AgentOS now runs a browser Origin on /mcp and /mcp/server-card through the same CORS policy as its REST routes, which by default includes the Agno domains. A default local AgentOS already answered GET /config from https://os.agno.com, yet refused the MCP routes from that same page:

# Earlier releases, default local AgentOS
GET  /mcp/server-card  Origin: https://os.agno.com   400 {"error":"invalid_origin","detail":"Origin not allowed."}
POST /mcp initialize   Origin: https://os.agno.com   400 {"error":"invalid_origin","detail":"Origin not allowed."}
 
# This release
GET  /mcp/server-card  Origin: https://os.agno.com   200
POST /mcp initialize   Origin: https://os.agno.com   200
GET  /mcp/server-card  Origin: https://evil.example  400 {"error":"invalid_origin","detail":"Origin not allowed."}

An origin outside the policy is still refused, and allowed_hosts works as before. /info also reports the MCP path you configured, so MCPConfig(path="/ai/mcp") now shows "path": "/ai/mcp" where earlier releases always said /mcp. Both captures come from FastAPI's TestClient on each release.

Learn more about transport security on the AgentOS MCP server in the documentation.

Frequently asked questions

Earlier releases checked a browser Origin on the MCP routes against MCPConfig.allowed_origins and the host list only, so a page such as os.agno.com got HTTP 400 invalid_origin. This release accepts any origin the AgentOS CORS policy allows.

The origins in your AgentOS CORS policy, which by default include the Agno domains such as https://os.agno.com, plus anything in MCPConfig.allowed_origins. Other origins still get 400 invalid_origin.

The transport path you configured. With MCPConfig(path="/ai/mcp"), /info returns "path": "/ai/mcp".

Shipped around the same time