> ## Documentation Index
> Fetch the complete documentation index at: https://braintrust.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrations

> Connect Braintrust with your AI providers and frameworks

export const IntegrationsGrid = () => {
  const [searchTerm, setSearchTerm] = React.useState("");
  const searchInputRef = React.useRef(null);
  React.useEffect(() => {
    const handleKeyDown = e => {
      if ((e.metaKey || e.ctrlKey) && e.key === "f") {
        e.preventDefault();
        e.stopPropagation();
        searchInputRef.current?.focus();
        searchInputRef.current?.select();
      } else if (e.key === "Escape" && document.activeElement === searchInputRef.current) {
        setSearchTerm("");
        searchInputRef.current?.blur();
      }
    };
    window.addEventListener("keydown", handleKeyDown, true);
    return () => window.removeEventListener("keydown", handleKeyDown, true);
  }, []);
  const recommendedOrder = ["Anthropic", "OpenAI", "OpenRouter", "Gemini", "Custom provider", "OpenTelemetry", "Vercel AI SDK", "Claude Agent SDK", "OpenAI Agents SDK", "LlamaIndex", "CrewAI", "AgentScope", "LangChain", "LangSmith", "LangGraph"];
  const integrations = [{
    title: "Agno",
    href: "/integrations/sdk-integrations/agno",
    icon: "https://img.logo.dev/agno.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "AgentScope",
    href: "/integrations/agent-frameworks/agentscope",
    icon: "https://img.logo.dev/modelscope.cn?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Anthropic",
    href: "/integrations/ai-providers/anthropic",
    icon: "https://img.logo.dev/anthropic.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Apollo GraphQL",
    href: "/integrations/sdk-integrations/apollo-graphql",
    icon: "https://img.logo.dev/apollographql.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Autogen",
    href: "/integrations/agent-frameworks/autogen",
    icon: "https://img.logo.dev/autogenai.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "AWS Bedrock",
    href: "/integrations/ai-providers/bedrock",
    icon: "https://img.logo.dev/aws.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Azure AI Foundry",
    href: "/integrations/ai-providers/azure",
    icon: "https://img.logo.dev/azure.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Baseten",
    href: "/integrations/ai-providers/baseten",
    icon: "https://img.logo.dev/baseten.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Braintrust MCP",
    href: "/integrations/developer-tools/mcp",
    icon: "/images/favicon.ico"
  }, {
    title: "Cerebras",
    href: "/integrations/ai-providers/cerebras",
    icon: "https://img.logo.dev/cerebras.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Cohere",
    href: "/integrations/ai-providers/cohere",
    icon: "https://img.logo.dev/cohere.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Claude Agent SDK",
    href: "/integrations/agent-frameworks/claude-agent-sdk",
    icon: "https://img.logo.dev/claude.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Claude Code",
    href: "/integrations/developer-tools/claude-code",
    icon: "https://img.logo.dev/claude.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Claude Desktop",
    href: "/integrations/developer-tools/claude-desktop",
    icon: "https://img.logo.dev/claude.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Cloudflare Workers AI",
    href: "/integrations/sdk-integrations/cloudflare",
    icon: "https://img.logo.dev/cloudflare.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "CloudWeGo Eino",
    href: "/integrations/sdk-integrations/cloudwego-eino",
    icon: "https://img.logo.dev/cloudwego.io?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Codex",
    href: "/integrations/developer-tools/codex",
    icon: "https://img.logo.dev/openai.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "CrewAI",
    href: "/integrations/agent-frameworks/crew-ai",
    icon: "https://img.logo.dev/crewai.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Cursor",
    href: "/integrations/developer-tools/cursor",
    icon: "https://img.logo.dev/cursor.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Cursor SDK",
    href: "/integrations/agent-frameworks/cursor-sdk",
    icon: "https://img.logo.dev/cursor.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Custom provider",
    href: "/integrations/ai-providers/custom",
    icon: "box"
  }, {
    title: "Databricks",
    href: "/integrations/ai-providers/databricks",
    icon: "https://img.logo.dev/databricks.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "DSPy",
    href: "/integrations/sdk-integrations/dspy",
    icon: "https://img.logo.dev/dspy.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Firebase Genkit",
    href: "/integrations/sdk-integrations/firebase-genkit",
    icon: "https://img.logo.dev/firebase.google.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Flue",
    href: "/integrations/agent-frameworks/flue",
    icon: "https://img.logo.dev/flueframework.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Fireworks",
    href: "/integrations/ai-providers/fireworks",
    icon: "https://img.logo.dev/fireworks.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Gemini",
    href: "/integrations/ai-providers/gemini",
    icon: "https://img.logo.dev/google.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Google ADK",
    href: "/integrations/agent-frameworks/google",
    icon: "https://img.logo.dev/google.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Groq",
    href: "/integrations/ai-providers/groq",
    icon: "https://img.logo.dev/groq.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Hugging Face",
    href: "/integrations/ai-providers/huggingface",
    icon: "https://img.logo.dev/huggingface.co?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Instructor",
    href: "/integrations/sdk-integrations/instructor",
    icon: "circle-dashed"
  }, {
    title: "LangChain",
    href: "/integrations/sdk-integrations/langchain",
    icon: "https://img.logo.dev/langchain.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "LangGraph",
    href: "/integrations/agent-frameworks/langgraph",
    icon: "https://img.logo.dev/langchain.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "LangSmith",
    href: "/integrations/sdk-integrations/langsmith",
    icon: "https://img.logo.dev/langchain.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Lepton",
    href: "/integrations/ai-providers/lepton",
    icon: "https://img.logo.dev/lepton.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "LiteLLM",
    href: "/integrations/sdk-integrations/litellm",
    icon: "https://img.logo.dev/litellm.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "LiveKit Agents",
    href: "/integrations/agent-frameworks/livekit-agents",
    icon: "https://img.logo.dev/livekit.io?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "LlamaIndex",
    href: "/integrations/sdk-integrations/llamaindex",
    icon: "https://img.logo.dev/llamaindex.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Mastra",
    href: "/integrations/agent-frameworks/mastra",
    icon: "https://img.logo.dev/mastra.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Microsoft Agent Framework",
    href: "/integrations/agent-frameworks/microsoft-agent-framework",
    icon: "https://img.logo.dev/microsoft.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Mistral",
    href: "/integrations/ai-providers/mistral",
    icon: "https://img.logo.dev/mistral.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Node.js test runner",
    href: "/integrations/sdk-integrations/node-test-runner",
    icon: "https://img.logo.dev/nodejs.org?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenAI",
    href: "/integrations/ai-providers/openai",
    icon: "https://img.logo.dev/openai.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenRouter",
    href: "/integrations/ai-providers/openrouter",
    icon: "https://img.logo.dev/openrouter.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenRouter Agent",
    href: "/integrations/agent-frameworks/openrouter-agent",
    icon: "https://img.logo.dev/openrouter.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Pytest",
    href: "/integrations/sdk-integrations/pytest",
    icon: "https://img.logo.dev/pytest.org?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenAI Agents SDK",
    href: "/integrations/agent-frameworks/openai-agents-sdk",
    icon: "https://img.logo.dev/openai.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenAI Codex SDK",
    href: "/integrations/agent-frameworks/openai-codex-sdk",
    icon: "https://img.logo.dev/openai.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenCode",
    href: "/integrations/developer-tools/opencode",
    icon: "https://img.logo.dev/opencode.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "pi",
    href: "/integrations/developer-tools/pi",
    icon: "https://img.logo.dev/pi.dev?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Pi Coding Agent SDK",
    href: "/integrations/agent-frameworks/pi-coding-agent",
    icon: "https://img.logo.dev/pi.dev?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "OpenTelemetry",
    href: "/integrations/sdk-integrations/opentelemetry",
    icon: "https://img.logo.dev/opentelemetry.io?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Perplexity",
    href: "/integrations/ai-providers/perplexity",
    icon: "https://img.logo.dev/perplexity.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Pydantic AI",
    href: "/integrations/agent-frameworks/pydantic-ai",
    icon: "https://img.logo.dev/pydantic.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Replicate",
    href: "/integrations/ai-providers/replicate",
    icon: "https://img.logo.dev/replicate.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Ruby LLM",
    href: "/integrations/sdk-integrations/ruby-llm",
    icon: "https://img.logo.dev/rubyllm.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Strands Agent SDK",
    href: "/integrations/agent-frameworks/strands-agent",
    icon: "https://img.logo.dev/strandsagents.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Temporal",
    href: "/integrations/sdk-integrations/temporal",
    icon: "https://img.logo.dev/temporal.io?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Together",
    href: "/integrations/ai-providers/together",
    icon: "https://img.logo.dev/together.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Traceloop",
    href: "/integrations/sdk-integrations/traceloop",
    icon: "https://img.logo.dev/traceloop.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "TrueFoundry",
    href: "/integrations/sdk-integrations/truefoundry",
    icon: "https://img.logo.dev/truefoundry.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Vercel AI SDK",
    href: "/integrations/sdk-integrations/vercel",
    icon: "https://img.logo.dev/vercel.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Vitest",
    href: "/integrations/sdk-integrations/vitest",
    icon: "https://img.logo.dev/vitest.dev?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Google Vertex AI",
    href: "/integrations/ai-providers/google",
    icon: "https://img.logo.dev/google.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "VS Code",
    href: "/integrations/developer-tools/vscode",
    icon: "https://img.logo.dev/vscode.dev?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "Windsurf",
    href: "/integrations/developer-tools/windsurf",
    icon: "https://img.logo.dev/codeium.com?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }, {
    title: "xAI",
    href: "/integrations/ai-providers/xai",
    icon: "https://img.logo.dev/x.ai?token=pk_BdcHD9e5SCW3j1rnJkNyMQ"
  }];
  const getCategory = href => {
    if (href.includes("/ai-providers/")) return "ai-providers";
    if (href.includes("/sdk-integrations/")) return "sdk-integrations";
    if (href.includes("/agent-frameworks/")) return "sdk-integrations";
    if (href.includes("/developer-tools/")) return "developer-tools";
    return "all";
  };
  const categories = [{
    id: "all",
    label: "All"
  }, {
    id: "ai-providers",
    label: "AI providers"
  }, {
    id: "sdk-integrations",
    label: "SDK integrations"
  }, {
    id: "developer-tools",
    label: "Developer tools"
  }];
  const categoryCounts = React.useMemo(() => {
    const counts = {
      all: integrations.length
    };
    integrations.forEach(integration => {
      const category = getCategory(integration.href);
      counts[category] = (counts[category] || 0) + 1;
    });
    return counts;
  }, []);
  const getFilteredIntegrations = categoryId => {
    const filtered = integrations.filter(integration => {
      const matchesCategory = categoryId === "all" || getCategory(integration.href) === categoryId;
      const matchesSearch = !searchTerm || integration.title.toLowerCase().includes(searchTerm.toLowerCase());
      return matchesCategory && matchesSearch;
    });
    return filtered.sort((a, b) => {
      const aIndex = recommendedOrder.indexOf(a.title);
      const bIndex = recommendedOrder.indexOf(b.title);
      const aOrder = aIndex === -1 ? Infinity : aIndex;
      const bOrder = bIndex === -1 ? Infinity : bIndex;
      if (aOrder !== bOrder) {
        return aOrder - bOrder;
      }
      return a.title.localeCompare(b.title);
    });
  };
  return <>
      <div style={{
    marginBottom: "1.5rem"
  }}>
        <div style={{
    position: "relative",
    width: "100%"
  }}>
          <div style={{
    position: "absolute",
    left: "0.875rem",
    top: "50%",
    transform: "translateY(-50%)",
    pointerEvents: "none",
    display: "flex",
    alignItems: "center",
    zIndex: 1
  }}>
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="integrations-search-icon">
              <circle cx="11" cy="11" r="8"></circle>
              <path d="m21 21-4.3-4.3"></path>
            </svg>
          </div>
          <input ref={searchInputRef} type="text" placeholder="Search integrations..." value={searchTerm} onChange={e => setSearchTerm(e.target.value)} className="integrations-search-input" />
          <div className="integrations-search-kbd" style={{
    position: "absolute",
    right: "0.75rem",
    top: "50%",
    transform: "translateY(-50%)",
    pointerEvents: "none",
    fontSize: "0.75rem",
    fontWeight: "600"
  }}>
            {typeof navigator !== "undefined" && "⌘F"}
          </div>
        </div>
      </div>
      {!searchTerm ? <Tabs>
          {categories.map(category => <Tab key={category.id} title={`${category.label} (${categoryCounts[category.id] || 0})`}>
              <CardGroup cols={3}>
                {getFilteredIntegrations(category.id).map(integration => <Card key={integration.href} horizontal title={integration.title} href={integration.href} icon={integration.icon} arrow />)}
              </CardGroup>
            </Tab>)}
        </Tabs> : <CardGroup cols={3}>
          {getFilteredIntegrations("all").map(integration => <Card key={integration.href} horizontal title={integration.title} href={integration.href} icon={integration.icon} arrow />)}
        </CardGroup>}
    </>;
};

If you are a coding agent, prefer the Braintrust [`bt` CLI](/reference/cli/quickstart) for repeatable, scriptable work: running evals, instrumenting code, querying logs, syncing data, managing functions, and configuring coding agents. Use the MCP server for reasoning over Braintrust data in conversation, such as ad-hoc lookups and exploration from your IDE.

<IntegrationsGrid />

Don't see your provider or framework? Use the [AI Proxy](/deploy/ai-proxy) to add any provider or [contact us](https://braintrust.dev/contact) to request an integration.
