Skip to content

feat(convo): support MCP servers under MLLM - #16

Merged
guohai merged 3 commits into
mainfrom
feat/mllm-mcp-servers
Sep 1, 2026
Merged

feat(convo): support MCP servers under MLLM#16
guohai merged 3 commits into
mainfrom
feat/mllm-mcp-servers

Conversation

@guohai

@guohai guohai commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Summary

atem serv convo can now forward MCP servers under MLLM — Agora's newer MLLM schema attaches MCP to the mllm block (properties.mllm.mcp_servers[]) since MLLM replaces the LLM. atem previously only handled MCP under the cascaded LLM (properties.llm.mcp_servers[]).

Enables configs like:

[agent.mllm]
vendor  = "openai"
url     = "wss://api.openai.com/v1/realtime?model=gpt-realtime-2.1"
api_key = "<key>"

[[agent.mllm.mcp_servers]]
name          = "kb"
endpoint      = "https://mcp-kb.example/mcp"
transport     = "streamable_http"
allowed_tools = ["search_knowledge_base"]

properties.mllm.mcp_servers[] + advanced_features.enable_tools: true.

Changes

  • ServiceConfig gains mcp_servers: Vec<McpServer> (reuses the existing McpServer type + mcp_server_to_json), so [[agent.mllm.mcp_servers]] parses.
  • service_to_json emits mcp_servers when present → properties.mllm.mcp_servers[].
  • The enable_tools auto-set convenience now fires for the MLLM pipeline too (previously cascaded-only) when the mllm block declares MCP servers — unless pinned in [advanced_features].
  • convo.example.toml: documents [[agent.mllm.mcp_servers]] and updates the stale LLM-section note ("MLLM mode ignores MCP" → now supported).

Compatibility

  • Cascaded-LLM MCP behavior unchanged.
  • mcp_servers_not_emitted_in_mllm_mode still passes — llm-parked MCP does not leak into MLLM mode; only the mllm block's own MCP is emitted.

Tests

New join_payload_emits_mcp_servers_under_mllm_and_auto_enables_tools. Full suite: 701 passed / 0 failed.

Generated with SMT smt@agora.build

Agora's newer MLLM schema attaches MCP to the mllm block
(properties.mllm.mcp_servers[]) since MLLM replaces the LLM. atem
previously only handled MCP under the cascaded LLM.

- ServiceConfig gains `mcp_servers: Vec<McpServer>`, so
  [[agent.mllm.mcp_servers]] parses (reuses the existing McpServer type).
- service_to_json emits mcp_servers → properties.mllm.mcp_servers[].
- enable_tools auto-set now fires for the MLLM pipeline too when the
  mllm block declares MCP servers (unless pinned in [advanced_features]).
- convo.example.toml documents [[agent.mllm.mcp_servers]] and updates the
  LLM-section note (MLLM no longer "ignores" MCP).

Cascaded-LLM MCP behavior is unchanged; llm-parked mcp_servers still
don't leak into MLLM mode. New unit test covers the MLLM path.

🤖 Built with SMT <smt@agora.build>
Add three scenario tests for MCP-under-MLLM:
- full real-world /join body shape (auto-injected enable/modalities
  alongside mcp_servers + top-level advanced_features.enable_tools; no
  llm block)
- multiple MCP servers preserve order + per-server headers/timeout_ms
- explicit advanced_features.enable_tools = false overrides the auto-set
  (parity with cascaded-LLM behavior)

🤖 Built with SMT <smt@agora.build>
- convo_config.rs: fix the LlmConfig.mcp_servers doc (no longer "MLLM
  ignores this" — point to ServiceConfig.mcp_servers) and broaden the
  McpServer doc to cover both llm + mllm.
- AGENTS.md: remove the stale "MCP is LLM-pipeline only — ignored in
  MLLM mode" line; document [[agent.mllm.mcp_servers]].

🤖 Built with SMT <smt@agora.build>
@guohai
guohai merged commit 6fc15bf into main Sep 1, 2026
3 checks passed
@guohai
guohai deleted the feat/mllm-mcp-servers branch September 1, 2026 03:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant