SDK · Async Rust
Kova SDK
Async-first agents, written in Rust.
Kova is an async-first Rust crate for building LLM-powered agents. A trait-based core gives you pluggable providers, tool calling, memory and streaming, plus MCP, multi-agent orchestration, thinking-model support and OpenTelemetry tracing when you need them. Every provider sits behind one trait, so you stay model-agnostic. You own the conversation history; the agent owns the turn.
kova-sdk — zsh
# add it to your project
$cargo add kova-sdk
# or with OpenTelemetry tracing
$cargo add kova-sdk --features telemetry
✓ compiled · provider ready · agent loop running
// features
What you get
Pluggable providers
OpenAI-compatible, Bedrock, Gemini and Ollama behind one LlmProvider trait. Switch models without touching your agent.
Tool calling
Implement the Tool trait and register it. A thread-safe registry, schemas and the model round-trip are handled for you.
MCP integration
Connect MCP servers over stdio or HTTP+SSE and use them as native tools, with no glue code to write.
Streaming, pull-based
Async streams of text deltas, tool events and turn completion. Prefer callbacks? Register a StreamingHandler instead.
Memory, your way
Own the conversation history yourself with Agent::run, or let chat persist it transactionally per turn via a MemoryStore.
Multi-agent orchestration
Compose sequential, parallel and router patterns to coordinate specialised agents, with automatic retries underneath.
// how it works
A few lines to a running agent
No framework ceremony, no config sprawl. Build a provider, hand it to the agent, and run. Reach for the docs when you want streaming, tools or a fleet.
main.rs
use std::sync::Arc;
use kova_sdk::prelude::*;
use kova_sdk::provider::openai::{OpenAiCompatibleProvider, OpenAiProviderConfig};
#[tokio::main]
async fn main() -> Result<(), KovaError> {
let config = OpenAiProviderConfig::new("http://127.0.0.1:1234", "my-model");
let provider = Arc::new(OpenAiCompatibleProvider::new(config)?);
let agent = AgentBuilder::new().provider(provider).build()?;
let reply = agent.chat("conv-1", "Hello!").await?;
println!("{reply}");
Ok(())
}Building with Kova SDK?
We can help you design, ship and scale it. Tell us what you're working on.