All products
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.