A thin layer over the LLM SDKs
A thin PT-BR layer over the LLM SDKs, with native observability in 1 line in your .env. Swap provider/model/api_key without changing the rest of your code. Templates {{ }}, structured output, vision, audio, tools, MCP, RAG, async, retry + fallback and cost in the response.
π€ Feed it to Claude Code, Cursor, Codex & other AIs to integrate faster: llms.txt Β· llms-full.txt
from jangada_ai import LLM
# swap the provider in one line β the rest of your code stays the same
llm = LLM("anthropic", model="claude-sonnet-4-5", api_key=...)
llm = LLM("openai", model="gpt-5", api_key=...)
resp = llm.complete("Summarize {{ topic }} in one sentence.", topic="rafts")
print(resp.text, resp.cost)Same API, any provider
Everything you need, normalized
Each SDK's complexity stays isolated in an adapter. Outside it, only normalized types flow.
Straight to the point
Structured output with Pydantic and multi-provider fallback β no boilerplate.
Structured output (Pydantic)
from pydantic import BaseModel
from jangada_ai import LLM
class Invoice(BaseModel):
supplier: str
total: float
llm = LLM("openai", model="gpt-5")
resp = llm.parse("Extract the data.", schema=Invoice, files=["invoice.pdf"])
invoice = resp.parsed # parse() returns a Completion; the Pydantic object lives in .parsed
print(invoice.supplier, invoice.total)Multi-provider fallback
from jangada_ai import LLM
# primary + error-based fallback chain (rate limit, timeout, 5xx, 404)
llm = LLM("anthropic", model="claude-sonnet-4-5").with_fallback(
LLM("openai", model="gpt-5"),
LLM("groq", model="llama-4-scout"),
)
# primary failed? automatic failover, no change to the call
resp = llm.complete("Explain rafts in 1 sentence.")Observability: see every trace
Set 2 variables in your .env and jangada sends every call on its own β no code instrumentation. Track traces, latency, tokens, cost and which capabilities (tools, MCP, A2A, RAG, visionβ¦) each call used, with filters, export and analytics. Login and token; your data doesn't live in the client's cloud.
Open the dashboardJangada's docs right inside your editor
A hosted MCP server hands your AI assistant the ENTIRE Jangada documentation β so it writes code with the current, correct API, without inventing functions, signatures or parameters. It's Jangada itself acting as an MCP server.
https://mcp.jangada.dev.br/mcp/How to connect
Claude Code (in the terminal)
claude mcp add jangada-mcp \
--transport http https://mcp.jangada.dev.br/mcp/Cursor β in ~/.cursor/mcp.json
{
"mcpServers": {
"jangada-mcp": {
"url": "https://mcp.jangada.dev.br/mcp/"
}
}
}Claude Desktop and others β in the MCP config
{
"mcpServers": {
"jangada-mcp": {
"url": "https://mcp.jangada.dev.br/mcp/"
}
}
}Works with any client that supports MCP over HTTP β Claude Code, Claude Desktop, Cursor, Windsurf, Zed and more.
What the assistant gains
Four tools: docs index, list pages, read a page (PT/EN) and keyword search across the whole documentation.
Then just ask: "check the jangada docs and implement β¦" β the assistant reads the official documentation before writing the code.
Install only what you'll use
The core is lightweight (just Pydantic). Each SDK and capability is an optional extra β pick a provider, combine what you need or grab everything.
Claude
GPT
Groq
Gemini
Mistral
AWS Bedrock
Documents (pdf/docx/csv/xlsx)
RAG (pgvector/mongo/BM25)
MCP client
A2A server (Starlette)
All providers + files
Combine extras with a comma
Everything, for real
Note: the [all] extra brings all providers + files, but does not include rag nor mcp β those are installed separately, e.g.: pip install "jangada-ai[all,rag,mcp]".
Frequently asked questions
The essentials about Jangada AI in direct answers.
What is Jangada AI?
Jangada AI is an open source Python library that acts as a thin layer over LLM SDKs (Anthropic, OpenAI, Groq, Gemini and OpenRouter). It normalizes their APIs so you can swap provider, model or api_key in a single line, without rewriting the rest of your code.
Which LLM providers does Jangada AI support?
Anthropic, OpenAI, Groq, Google Gemini and OpenRouter, plus the cloud gateways AWS Bedrock, Azure OpenAI and Vertex AI β all through the same API. Each SDK's complexity stays isolated in an adapter; outside it only normalized types flow, so the same call works with any provider.
How do I install Jangada AI?
Install it via pip with the extra for the provider you'll use, for example: pip install "jangada-ai[anthropic]". The core is lightweight (just Pydantic) and each SDK or capability is an optional extra β use [all] for every provider or combine extras with a comma, like [all,rag,mcp].
Is Jangada AI free?
Yes. Jangada AI is open source under the MIT license and free for commercial and personal use. The package is published on PyPI as jangada-ai.
What is structured output in Jangada AI?
It is the ability to get LLM responses already validated into Pydantic models, identically across every provider. You define the schema and Jangada AI guarantees the response comes back typed and validated.
Does Jangada AI support async calls?
Yes. There is full sync/async parity: every method has its async version prefixed with a* (for example complete and acomplete), so you use the same code in synchronous or async contexts.
How does retry with fallback work?
When a call fails with a recoverable error, Jangada AI retries and, if needed, automatically falls back to another configured provider. That way a momentary outage of one provider doesn't take your application down.
Start paddling with Jangada AI πΆ
Install, pick a provider and switch whenever you want β without rewriting anything.