mcp-brave-search
Version:
Brave Search MCP Server - Web and News Search via stdio
62 lines • 2 kB
JavaScript
/**
* 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