UNPKG

mcp-brave-search

Version:

Brave Search MCP Server - Web and News Search via stdio

62 lines 2 kB
/** * Brave Search API Client */ export class BraveSearchAPI { apiKey; baseUrl; constructor(config) { this.apiKey = config.apiKey; this.baseUrl = config.baseUrl || 'https://api.search.brave.com/res/v1'; } /** * Perform a web search */ async webSearch(params) { const url = new URL(`${this.baseUrl}/web/search`); // Add query parameters Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { url.searchParams.append(key, String(value)); } }); const response = await fetch(url.toString(), { method: 'GET', headers: { 'Accept': 'application/json', 'Accept-Encoding': 'gzip', 'X-Subscription-Token': this.apiKey, }, }); if (!response.ok) { const errorText = await response.text(); throw new Error(`Brave API error (${response.status}): ${errorText}`); } return await response.json(); } /** * Perform a news search */ async newsSearch(params) { const url = new URL(`${this.baseUrl}/news/search`); // Add query parameters Object.entries(params).forEach(([key, value]) => { if (value !== undefined && value !== null) { url.searchParams.append(key, String(value)); } }); const response = await fetch(url.toString(), { method: 'GET', headers: { 'Accept': 'application/json', 'Accept-Encoding': 'gzip', 'X-Subscription-Token': this.apiKey, }, }); if (!response.ok) { const errorText = await response.text(); throw new Error(`Brave API error (${response.status}): ${errorText}`); } return await response.json(); } } //# sourceMappingURL=brave-api.js.map