May 31, 2026
Probe-detected vision and outbound MCP client
Vision capability is now a provider-level flag verified by a synchronous content probe
Vision capability is now a provider-level flag verified by a synchronous content probe. When saving a provider, a static image with three shapes and text is sent with an exact JSON prompt; a weighted score ≥0.80 sets supports_vision. A new vision_provider_id setting resolves explicitly, then auto‑detects, or disables vision. The multimodal send‑path adds an image branch in all four LLM converters, routed through a thin vision_service; image‑free messages convert byte‑for‑byte identically. The Brain UI shows a vision badge on providers and a new Vision settings page. The document pipeline now uses vision instead of OCR in image_context_service.analyze() when a vision provider is configured, falling back to OCR with a no‑vision note. Image upload is hidden in chat when no vision provider is available. Legacy image‑attachment code is removed.
Chalie gained an outbound MCP client. A new mcp_client_servers table backs McpClientService with CRUD, ping/sync, tool dispatch, and a 15‑minute heartbeat. The mcp_manager ability (SYSTEM+DISCOVERABLE) searches across both abilities.sqlite and data/mcp_tools.sqlite. Tools are dispatched as mcp
A critic/arbiter rework tightened the MCP integration. McpClientService.get_tool_schema() retrieves the remote tool’s inputSchema from mcp_tools.sqlite, and message_processor.find_tools now injects it into the prompt for mcp* names — so the model sees real parameters instead of brute‑forcing arguments. The duplicate ~70‑line _enforce_mcp_policy was deleted; mcp* dispatch now routes through the unified _enforce_policy with a relaxed guard, and the dispatch‑time policy call is wrapped in try/except. To prevent MCP tools from evicting ability matches, the BM25 score for _query_mcp is capped at min(0.12, abs(bm25)). New tests cover schema round‑trips and _DATA_DIR‑monkeypatch isolation, and phase‑4 invariants now exercise mcp_manager.
-
Vision capability is a probe‑verified provider flag (3‑shapes+text PNG, ≥0.80 score) instead of a tool.
-
Outbound MCP client with CRUD, ping/sync, dispatch, and 15‑min heartbeat; dual‑DB tool search.
-
Tool schemas from mcp_tools.sqlite are injected into LLM prompts for mcp* tools, giving the model real parameters.
-
Redundant ~70‑line MCP policy enforcement removed; now routed through unified policy with try/except.
-
BM25 score for MCP tools capped at min(0.12, abs(bm25)) to prevent them from pushing abilities out of top results.
-
Image upload hidden in UI when no vision provider is configured; OCR used as fallback.