@parallel-web/ai-sdk-tools
Purpose: Perform web searches and return results in an LLM-friendly format. Use the web search tool to search the web and access information from the web. The tool returns ranked, extended web excerpts optimized for LLMs.
by Parallel Web
Test @parallel-web/ai-sdk-tools (searchTool) with AI-powered execution
0/2000 characters
Install this tool and use it with the AI SDK
npm install @parallel-web/ai-sdk-toolspnpm add @parallel-web/ai-sdk-toolsyarn add @parallel-web/ai-sdk-toolsbun add @parallel-web/ai-sdk-toolsdeno add npm:@parallel-web/ai-sdk-toolsimport { searchTool } from '@parallel-web/ai-sdk-tools';import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
import { searchTool } from '@parallel-web/ai-sdk-tools';
const result = await generateText({
model: openai('gpt-4o'),
tools: { searchTool },
prompt: 'Your prompt here...',
});
console.log(result.text);How AI agents can use this tool
Use when you need web search with minimal token usage
(mode: string, objective: string, search_queries?: string[]) => Promise<unknown>Available configuration options
objectivestringNatural-language description of what the web search is trying to find. Try to make the search objective atomic, looking for a specific piece of information. May include guidance about preferred sources or freshness.
search_queriesarray(optional) List of keyword search queries of 1-6 words, which may include search operators. The search queries should be related to the objective. Limited to 5 entries of 200 characters each.
modestringPresets default values for different use cases. "one-shot" returns more comprehensive results and longer excerpts to answer questions from a single response, while "agentic" returns more concise, token-efficient results for use in an agentic loop. Defaults to "agentic".
Schema extracted: 3/1/2026, 1:19:29 AM
AI SDK tools for Parallel Web, built for Vercel's AI SDK v5.
npm install ai @parallel-web/ai-sdk-tools # or pnpm add ai @parallel-web/ai-sdk-tools # or yarn add ai @parallel-web/ai-sdk-tools
Note: This package requires AI SDK v5. For AI SDK v4, use
parametersinstead ofinputSchemawhen defining tools manually with theparallel-webSDK.
Add PARALLEL_API_KEY obtained from Parallel Platform to your environment variables.
searchTool uses Parallel's Search API to perform web searches and return LLM-optimized results.
Input schema:
objective (required): Natural-language description of what the web search is trying to findsearch_queries (optional): List of keyword search queries (1-6 words each)mode (optional): 'agentic' (default) for concise results in agentic loops, or 'one-shot' for comprehensive single-response resultsextractTool uses Parallel's Extract API to fetch and extract relevant content from specific URLs.
Input schema:
urls (required): List of URLs to extract content from (max 10)objective (optional): Natural-language description of what information you're looking forimport { openai } from '@ai-sdk/openai'; import { streamText } from 'ai'; import { searchTool, extractTool } from '@parallel-web/ai-sdk-tools'; const result = streamText({ model: openai('gpt-4o'), messages: [ { role: 'user', content: 'What are the latest developments in AI?' }, ], tools: { 'web-search': searchTool, 'web-extract': extractTool, }, toolChoice: 'auto', }); // Stream the response return result.toUIMessageStreamResponse();
For more control over the tool configuration, use the factory functions to create tools with custom defaults.
Note: Both factory functions accept an optional
apiKeyparameter. If not provided, they fall back to thePARALLEL_API_KEYenvironment variable.
Create a search tool with custom defaults for mode, max_results, excerpts, source_policy, or fetch_policy.
import { createSearchTool } from '@parallel-web/ai-sdk-tools'; const myCustomSearchTool = createSearchTool({ mode: 'one-shot', // 'one-shot' returns more comprehensive results and longer excerpts to answer questions from a single response. max_results: 5, // Limit to 5 results apiKey: 'your-api-key', // Optional: pass an API key, falls back to PARALLEL_API_KEY env variable });
Create an extract tool with custom defaults for excerpts, full_content, or fetch_policy.
import { createExtractTool } from '@parallel-web/ai-sdk-tools'; const myExtractTool = createExtractTool({ full_content: true, // Include full page content excerpts: { max_chars_per_result: 10000, }, apiKey: 'your-api-key', // Optional: pass an API key, falls back to PARALLEL_API_KEY env variable });
You can also use the parallel-web SDK directly for maximum flexibility:
import { tool } from 'ai'; import { z } from 'zod'; import { Parallel } from 'parallel-web'; const parallel = new Parallel({ apiKey: process.env.PARALLEL_API_KEY, }); const webSearch = tool({ description: 'Search the web for information.', inputSchema: z.object({ query: z.string().describe("The user's question"), }), execute: async ({ query }) => { const result = await parallel.beta.search({ objective: query, mode: 'agentic', max_results: 5, }); return result; }, });
Both tools return the raw API response from Parallel:
{ search_id: string; results: Array<{ url: string; title?: string; publish_date?: string; excerpts: string[]; }>; usage?: Array<{ name: string; count: number }>; warnings?: Array<{ code: string; message: string }>; }
{ extract_id: string; results: Array<{ url: string; title?: string; excerpts?: string[]; full_content?: string; publish_date?: string; }>; errors: Array<{ url: string; error_type: string; http_status_code?: number; content?: string; }>; usage?: Array<{ name: string; count: number }>; warnings?: Array<{ code: string; message: string }>; }
Version 0.2.0 introduces an updated API that conforms with Parallel's Search and Extract MCP tools:
search_type and include_domains. Added mode parameter.{ search_id, results, ... }) instead of { searchParams, answer }.Before (v0.1.x):
const result = await searchTool.execute({ objective: 'Find TypeScript info', search_type: 'list', search_queries: ['TypeScript'], include_domains: ['typescriptlang.org'], }); console.log(result.answer.results);
After (v0.2.0):
const result = await searchTool.execute({ objective: 'Find TypeScript info', search_queries: ['TypeScript'], mode: 'agentic', // optional, defaults to 'agentic' }); console.log(result.results);
urls is now first, objective is optional.{ extract_id, results, errors, ... }) instead of { searchParams, answer }.Before (v0.1.x):
const result = await extractTool.execute({ objective: 'Extract content', urls: ['https://example.com'], search_queries: ['keyword'], }); console.log(result.answer.results);
After (v0.2.0):
const result = await extractTool.execute({ urls: ['https://example.com'], objective: 'Extract content', // optional }); console.log(result.results);
Downloads/month
29,693
GitHub Stars
0
Quality Score