MCPcopy Index your code
hub / github.com/exa-labs/ai-sdk

github.com/exa-labs/ai-sdk @v2.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.1.0 ↗ · + Follow
9 symbols 12 edges 3 files 0 documented · 0% 4 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Exa AI SDK

Exa is a Websearch API. Add Exa websearch tool to your LLMs in just a few lines of code. Giving your AI apps websearch capabilites. Works with AI SDK by Vercel.

Table of Contents

Installation

npm install @exalabs/ai-sdk

Quick Start

import { generateText, stepCountIs } from "ai";
import { webSearch } from "@exalabs/ai-sdk";
import { openai } from "@ai-sdk/openai";

const { text } = await generateText({
  model: openai('gpt-5-nano'),
  prompt: 'Tell me the latest developments in AI',
  system: "Only use web search once per turn. Answer based on the information you have.",
  tools: {
    webSearch: webSearch(),
  },
  stopWhen: stepCountIs(3),
});

console.log(text);

Get your API key from the Exa Dashboard.

Defaults when you use webSearch(): - Type: auto (best search) - Results: 10 - Text: 3000 characters per result - Livecrawl: fallback (fresh content when needed)

Setup

  1. Get your API key from the Exa Dashboard
  2. Add it to your .env file:
EXA_API_KEY=your-api-key-here

That's it! The package reads it automatically.

Example

Here's a full-featured example combining the most useful search settings:

const { text } = await generateText({
  model: openai('gpt-5-nano'),
  prompt: 'Find the top AI companies in Europe founded after 2018',
  tools: {
    webSearch: webSearch({
      type: "auto",                           // intelligent hybrid search
      numResults: 6,                          // return up to 6 results
      category: "company",                    // focus on companies
      contents: {
        text: { maxCharacters: 1000 },        // get up to 1000 chars per result
        livecrawl: "preferred",               // always get fresh content if possible
        summary: true,                        // return an AI-generated summary for each result
      },
    }),
  },
  stopWhen: stepCountIs(5),
});

console.log(text);

All Options

webSearch({
  // Search settings
  type: "auto",           // "auto", "keyword", "neural", "fast", "deep"
  category: "news",       // "company", "research paper", "news", "pdf", 
                          // "github", "personal site", "linkedin profile", "financial report"
  numResults: 10,

  // Filter by domain
  includeDomains: ["linkedin.com", "github.com"],
  excludeDomains: ["wikipedia.com"],

  // Filter by date (ISO 8601)
  startPublishedDate: "2025-01-01T00:00:00.000Z",
  endPublishedDate: "2025-12-31T23:59:59.999Z",
  startCrawlDate: "2025-01-01T00:00:00.000Z",
  endCrawlDate: "2025-12-31T23:59:59.999Z",

  // Filter by text
  includeText: ["AI"],    // Must contain
  excludeText: ["spam"],  // Must not contain

  // Location
  userLocation: "US",     // Two-letter country code

  // Content options
  contents: {
    text: {
      maxCharacters: 1000,
      includeHtmlTags: false,
    },
    summary: {
      query: "Main points",
    },
    livecrawl: "fallback",     // "never", "fallback", "always", "preferred"
    livecrawlTimeout: 10000,
    subpages: 5,
    subpageTarget: "about",
    extras: {
      links: 5,
      imageLinks: 3,
    },
  },
})

TypeScript Support

Full TypeScript types included:

import { webSearch, ExaSearchConfig, ExaSearchResult } from "@exalabs/ai-sdk";

const config: ExaSearchConfig = {
  numResults: 10,
  type: "auto",
};

const search = webSearch(config);

Links

License

MIT

Extension points exported contracts — how you extend this code

TextOptions (Interface)
(no doc)
src/types.ts
SummaryOptions (Interface)
(no doc)
src/types.ts
HighlightsOptions (Interface)
(no doc)
src/types.ts
ExtrasOptions (Interface)
(no doc)
src/types.ts
ContentsOptions (Interface)
(no doc)
src/types.ts

Core symbols most depended-on inside this repo

webSearch
called by 0
src/index.ts

Shape

Interface 8
Function 1

Languages

TypeScript100%

Modules by API surface

src/types.ts8 symbols
src/index.ts1 symbols

For agents

$ claude mcp add ai-sdk \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page