LLMProvider abstraction. Two implementations ship today:
MetabindAgentProvider— calls Metabind’s hosted Agent proxy atagent.metabind.ai. The proxy holds the LLM key, runs the tool loop server-side, and streams responses back as SSE. Recommended for production.AnthropicProvider— bring-your-own-key (BYOK). The SDK calls Anthropic directly from the client. Useful for development, internal tools, or apps where the key reaches the SDK from an authenticated user-managed source.
LLMProvider protocol to plug in something else.
When to pick which
On iOS, the two modes are interchangeable from the rest of the SDK’s perspective — the same assistant setup and conversation state. Only the provider object changes. Android supports only the Agent proxy: its
MetabindAssistant takes apiKey, orgId, and projectId and has no provider parameter. See the Android SDK.
Mode 1: Agent proxy (recommended)
The Agent proxy is a Metabind-managed service athttps://agent.metabind.ai. SDKs call POST https://agent.metabind.ai/{orgId}/{projectId}/chat with a Bearer-authenticated streaming request. The proxy authenticates the caller with a Metabind project token, runs the LLM call and the tool loop on the server side, and returns the result as a Server-Sent Events stream. orgId and projectId must be IDs, not slugs; see Find your organization and project IDs.
apiKey argument (on MetabindAgentProvider on iOS, on MetabindAssistant on Android) is the Metabind project token, not an LLM provider key. The proxy uses it to authenticate the project; the LLM key is held server-side.
What the proxy does
- Authenticates the request with the project token (Bearer header).
- Routes to the LLM provider configured for the project.
- Runs the tool-call loop server-side: when the LLM emits a tool call, the proxy invokes the project’s MCP tool, returns the result to the LLM, and continues until the LLM produces a final answer.
- Streams events back to the client over SSE —
message_start(includesconversationId),text_delta,tool_use,tool_result,provider_switch,message_stop.
Server-side provider selection
The proxy is multi-provider. Each project picks one of the supported providers in Metabind Studio: Anthropic, OpenAI, or Google. The provider, model, and key are all configured server-side; the client just sees an SSE stream. To switch providers for an entire project, change the setting in Metabind Studio — no client release needed.
Conversation IDs
The first event of every response (message_start) includes a conversationId. The proxy keeps each conversation’s model context server-side for one hour after its last turn. A chat request that echoes the conversationId within that hour continues from that context; after it, the proxy has no earlier context for that ID. The proxy has no endpoint for reading a conversation’s history.
- iOS:
MetabindAgentProviderechoes the ID on each turn while the assistant is alive. To resume after a relaunch, savecurrentConversationIdand pass it toMetabindAgentProvider(conversationId:)when you create the next assistant. This restores the model’s context, not the on-screen transcript:assistant.conversation.messagesstarts empty. - Android: the SDK has no API to read or set the conversation ID. Each
MetabindAssistantstarts a new conversation, andreset()starts another.
Mode 2: BYOK direct (Anthropic)
BYOK direct mode bypasses the Agent proxy entirely. The client calls Anthropic with a key you provide and runs the tool loop locally. Use this for development, internal tools, or apps where the key reaches the SDK from a trusted source.Custom providers
Conform to the publicLLMProvider protocol if you need to integrate something else — an internal LLM endpoint, a fine-tuned model, a different vendor. The protocol is small: a streaming method that takes messages and tool definitions and emits chunks in the SDK’s chunk format.
Keys at a glance
For production, mint Metabind project tokens server-side and refresh as needed. On iOS and Android, an assistant keeps the key it was created with:
apiKey is a constant on MetabindAgentProvider and AnthropicProvider on iOS, and on MetabindAssistant on Android. To switch to a new key, create a new assistant with it. On Android, call close() on the old MetabindAssistant. On iOS, to keep the model’s context, pass the old provider’s currentConversationId to the new MetabindAgentProvider(conversationId:). On the web, agent.apiKey can be a function, which the SDK calls for each request; see the Web SDK.
Choosing a model
The Agent proxy decides the model server-side, configured per project in Metabind Studio. For BYOK, pass the model string explicitly toAnthropicProvider. A few rough heuristics for either mode:
- Default to mid-tier. Sonnet 4.6 is well-priced and capable enough for most assistant workloads.
- Scale up for hard reasoning. When tool selection requires multi-step thinking or your tool set is large (50+ tools), upgrade to Opus 4.7.
- Scale down for simple flows. If your assistant calls one of three tools and replies in a sentence, a smaller model saves cost without quality loss.
Per-user metering
Once requests go through the Agent proxy, Metabind’s usage tracking captures tokens per project token. If you mint per-user project tokens, the audit trail naturally segments by user. For BYOK direct mode, you’re metering against your own LLM key — use the provider’s dashboard or a backend proxy you control.Troubleshooting
Related
iOS SDK
Where the LLM provider plugs in for iOS.
Android SDK
Where the LLM provider plugs in for Android.
Assistant SDK overview
What the Assistant SDK is and which surface to pick.
Custom host UI
Replace the default chat UI with your own.