Changelog
New Features:
- Azure OpenAI Responses: Added
AzureOpenAIResponsesto use the Responses API with Azure OpenAI deployments. See cookbook. - Elasticsearch: Added
Elasticsearchvector database with vector, keyword and hybrid search. See cookbook. - DocumentationMarkdown: Added a
transformforKnowledge.sync_pagesthat converts Mintlify and Fumadocs components into plain Markdown. See cookbook.
Improvements:
- MCPConfig: Added
root_host,pathandpath_aliasesto serve MCP on a dedicated hostname or a custom endpoint path. - MCP Server Card:
/mcp/server-cardnow returns pretty-printed JSON.
Bug Fixes:
- MCP Tools: Preserve
AudioContentfrom MCP tool results as audio artifacts. - Slack: Deduplicate event retries by
event_idinstead of dropping them. - Remote Agents:
RemoteAgent.roleandRemoteTeam.roleare now properties that return the role instead of a bound method; use.role, not.role(). - Readers:
TextReader,MarkdownReaderandFieldLabeledCSVReadernow accept text streams. - PPTXReader: Read text inside grouped shapes.
- JSONReader:
async_read()now uses the chunking strategy's asyncachunk(). - Chunking: Preserve newlines and tabs when cleaning text before chunking.
- CSVReader:
async_read()keeps every data row across pages withRowChunking(skip_header=True). - SitemapReader: Keep filenames like
myindex.htmlintact and continue discovery past an invalid.xml.gzsitemap. - Tools & Workflows: Keep falsy values like
0,Falseand[]in sync tool results andParallelworkflow step outputs. - agnoctl:
agno connectnow reads and writes client configs as UTF-8 (agnoctl 0.2.1). - DynamoDB: Serialize booleans as native
BOOLvalues.
Breaking Changes:
- CodingTools:
run_shellis now opt-in (enable_run_shell=True), and restricted mode runs commands without a shell. - PublicSurface: With
authorization=TrueandPublicSurface(mcp=True), MCP now accepts only localhost by default; add your domain toMCPConfig(allowed_hosts=[...]).
What's Changed
- fix: read text from grouped shapes in PPTXReader by @devYRPauli in #10037
- feat: add support for Elasticsearch vector database by @sannya-singal in #10018
- [feat] Add Azure OpenAI Responses model by @rastagan-git in #9841
- [fix] Accept text streams in FieldLabeledCSVReader by @n1uz1 in #10020
- [fix] Preserve MCP AudioContent as audio artifacts by @devansh173 in #10036
- fix: serialize booleans as BOOL instead of {"N": "True"} in DynamoDB storage by @Anai-Guo in #9978
- [fix] Use UTF-8 for infra file helpers by @Ghraven in #10113
- docs: fix broken external links in cookbook by @Shxiao101 in #9980
- fix: pretty-print MCP server-card JSON by @ashpreetbedi in #10084
- fix: detect public MCP access alongside JWT REST auth by @ashpreetbedi in #10083
- feat: add optional documentation Markdown source transform by @ashpreetbedi in #10094
- feat: configure MCP hostname and endpoint routing by @ashpreetbedi in #10090
- fix: add missing @Property to RemoteAgent.role and RemoteTeam.role by @kausmeows in #10172
- cookbook: export DocumentationMarkdown and make its example run end to end by @sannya-singal in #10178
- fix: accept text streams in MarkdownReader by @Minouccc in #10168
- [fix] Await async chunking in JSONReader by @Kyousuk1e in #10167
- [fix] Preserve non-index filenames during sitemap URL canonicalization by @yyydddkkk in #10189
- fix: repair cookbook import, dead links and typo by @Shxiao101 in #10134
- fix: dedupe Slack event retries by event_id instead of dropping them by @Himanshu040604 in #10073
- fix: docs correct the Perplexity and v0 base_url defaults in their docstrings by @xizhuomengcontin in #10192
- [fix] Accept text streams in TextReader by @RaycarlLei in #10203
- fix: dependency bump urllib3 to 2.7.0 and requests to 2.33.0 in mcp_toolbox_demo by @katsugtgz in #10184
- test: fix flaky test_tool_hook_receives_messages by @harshsinha03 in #10212
- [fix] keep falsy tool results (0, False, []) on the sync tool execution path by @BlueX888 in #9948
- fix: CONTRIBUTING paths, agno_infra license note, and docstring accuracy by @simpleqt in #9722
- fix: retain falsy values in previous workflow content by @guanzhuohe273-hub in #10208
- fix: Preserve CSV data rows when skipping headers across pages by @baba9811 in #9995
- fix: document PythonTools has no code sandbox by @ysolanky in #10218
- fix: harden CodingTools run_shell against interpreter RCE by @ysolanky in #10210
- [fix] Continue sitemap discovery after invalid gzip data by @RaycarlLei in #10213
- fix: use UTF-8 for agnoctl client config text by @Ghraven in #10038
- fix: run CodingTools restricted shell without a shell to neutralize operator injection by @ysolanky in #10220
- fix: Preserve newlines and tabs in clean_text by @icn5381 in #9985
New Contributors
- @rastagan-git made their first contribution in #9841
- @n1uz1 made their first contribution in #10020
- @devansh173 made their first contribution in #10036
- @Shxiao101 made their first contribution in #9980
- @Minouccc made their first contribution in #10168
- @Kyousuk1e made their first contribution in #10167
- @yyydddkkk made their first contribution in #10189
- @xizhuomengcontin made their first contribution in #10192
- @RaycarlLei made their first contribution in #10203
- @katsugtgz made their first contribution in #10184
- @simpleqt made their first contribution in #9722
- @guanzhuohe273-hub made their first contribution in #10208
- @baba9811 made their first contribution in #9995
- @icn5381 made their first contribution in #9985
Full Changelog: v3.0.9...v3.0.10