We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/codeiva4u/Brave-Real-Browser-Mcp-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
import { PuppeteerBlocker, fullLists } from '@cliqz/adblocker-puppeteer';
import fetch from 'cross-fetch';
import type { Page } from 'brave-real-puppeteer-core';
import { injectStealth } from './stealth';
import { injectScriptlets } from './scriptlets';
import { injectCosmeticFiltering } from './cosmetic';
import { injectRedirectBlocking } from './redirects';
import { injectVideoAdBlocking } from './video-ads';
import { injectNativeAdBlocking } from './native-ads';
import { FilterUpdater, getFilterUpdater, FilterUpdaterOptions } from './filter-updater';
import * as fs from 'fs';
import * as path from 'path';
// Get directory of this module (works in both ESM and CJS)
function getCurrentDir(): string {
// Try CommonJS __dirname first
if (typeof __dirname !== 'undefined') {
return __dirname;
}
// For ESM, use import.meta.url if available
try {
const { fileURLToPath } = require('url');
const url = new URL('.', (globalThis as any).import?.meta?.url || 'file://' + process.cwd());
return fileURLToPath(url);
} catch {
return process.cwd();
}
}
const currentDir = getCurrentDir();
export interface BraveBlockerOptions {
/** Enable standard network request blocking (Ads/Trackers) */
enableAdBlocking?: boolean;
/** Enable stealth evasions (Navigator, WebGL, etc.) */
enableStealth?: boolean;
/** Enable cosmetic filtering (Element hiding) */
enableCosmeticFiltering?: boolean;
/** Enable advanced redirect and popup blocking */
enableRedirectBlocking?: boolean;
/** Enable scriptlet injection for anti-adblock evasion */
enableScriptlets?: boolean;
/** Enable video ad blocking (VAST/VPAID, pre-roll, mid-roll) */
enableVideoAdBlocking?: boolean;
/** Enable native/content ad blocking (Taboola, Outbrain, sponsored content) */
enableNativeAdBlocking?: boolean;
/** Path to custom filter list file */
customFiltersPath?: string;
/** Enable auto-update of uBlock Origin filters */
enableFilterAutoUpdate?: boolean;
/** Filter updater options */
filterUpdaterOptions?: FilterUpdaterOptions;
}
// Additional filter lists for aggressive blocking
const EXTRA_FILTER_LISTS = [
// ==========================================
// Anti-Adblock & Anti-Detection
// ==========================================
'https://raw.githubusercontent.com/nicholast/nicholast-adblock-list/main/nicholast-adblock-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-annoyance-list/main/nicholast-annoyance-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-script-list/main/nicholast-anti-script-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-popup-list/main/nicholast-anti-popup-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-redirect-list/main/nicholast-anti-redirect-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-adblock-list/main/nicholast-anti-adblock-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-overlay-list/main/nicholast-anti-overlay-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-cookie-list/main/nicholast-anti-cookie-list.txt',
'https://raw.githubusercontent.com/nicholast/nicholast-anti-tracking-list/main/nicholast-anti-tracking-list.txt',
// ==========================================
// Aggressive Ad Blocking
// ==========================================
'https://filters.adtidy.org/extension/ublock/filters/19.txt',
'https://filters.adtidy.org/extension/ublock/filters/14.txt',
'https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt',
// ==========================================
// File Hosting / Streaming Specific
// ==========================================
'https://secure.fanboy.co.nz/fanboy-annoyance.txt',
'https://easylist.to/easylist/fanboy-social.txt',
'https://easylist-downloads.adblockplus.org/antiadblockfilters.txt',
// ==========================================
// Cookie/GDPR Banners
// ==========================================
'https://www.i-dont-care-about-cookies.eu/abp/',
'https://secure.fanboy.co.nz/fanboy-cookiemonster.txt',
// ==========================================
// Tracking & Analytics Blocking
// ==========================================
'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=adblockplus&mimetype=plaintext',
'https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt',
'https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt',
// ==========================================
// Malware & Phishing
// ==========================================
'https://malware-filter.gitlab.io/malware-filter/urlhaus-filter.txt',
'https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt',
];
// Built-in custom filters for aggressive blocking
const BUILTIN_CUSTOM_FILTERS = `
! ==========================================
! Brave Real Browser - Built-in Filter Rules
! Comprehensive Anti-Ad/Popup/Tracking Rules
! ==========================================
! ==========================================
! SECTION 1: Popup/Popunder Ad Networks
! ==========================================
||profitableratecpm.com^$all
||engridfanlike.com^$all
||pubfuture.com^$all
||highcpmrevenuegate.com^$all
||clickadu.com^$all
||propellerads.com^$all
||popads.net^$all
||popcash.net^$all
||adcash.com^$all
||exoclick.com^$all
||trafficjunky.net^$all
||juicyads.com^$all
||hilltopads.net^$all
||adsterra.com^$all
||mgid.com^$all
||revcontent.com^$all
||outbrain.com^$all
||taboola.com^$all
! ==========================================
! SECTION 2: Cryptocurrency Miners
! ==========================================
||coin-hive.com^$all
||coinhive.com^$all
||crypto-loot.com^$all
||authedmine.com^$all
! ==========================================
! SECTION 3: Block All Third-Party Popups
! ==========================================
*$popup,third-party
! ==========================================
! SECTION 4: File Hosting Site Specific
! ==========================================
*$script,third-party,domain=oxxfile.info|hubcloud.club|filepress.top|hubcloud.lol|hubcloud.art|gdtot.cfd|mixdrop.co|streamtape.com|upstream.to|dood.watch|doodstream.com
! ==========================================
! SECTION 5: Cookie Consent/GDPR Overlays
! ==========================================
##div[id*="cookie-consent"]
##div[id*="cookie-banner"]
##div[class*="cookie-consent"]
##div[class*="cookie-banner"]
##div[id*="gdpr"]
##div[class*="gdpr"]
##div[class*="onetrust"]
##div[id*="onetrust"]
! ==========================================
! SECTION 6: Generic Ad Element Hiding
! ==========================================
##div[id^="div-gpt-ad"]
##div[class*="adsbygoogle"]
##ins.adsbygoogle
##div[id*="taboola"]
##div[id*="outbrain"]
##iframe[src*="ads"]
##div[class*="popup-ad"]
##div[class*="overlay-ad"]
##div[class*="interstitial"]
! ==========================================
! SECTION 7: Anti-Adblock Detection Bypass
! ==========================================
##div[class*="adblock-notice"]
##div[class*="adblock-warning"]
##div[class*="adblocker-detected"]
##div[id*="adblock-notice"]
`;
export class BraveBlocker {
private blocker: PuppeteerBlocker | null = null;
private options: BraveBlockerOptions;
private initialized: boolean = false;
private filterUpdater: FilterUpdater | null = null;
constructor(options: BraveBlockerOptions = {}) {
this.options = options;
// Initialize filter updater if auto-update is enabled (default: true)
if (this.options.enableFilterAutoUpdate !== false) {
this.filterUpdater = getFilterUpdater({
customFiltersPath: this.options.customFiltersPath,
...this.options.filterUpdaterOptions
});
}
}
/**
* Initialize the blocker engine by downloading lists
*/
async init() {
if (this.initialized) return;
try {
// Start with prebuilt lists as base
this.blocker = await PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch);
// Collect additional filter strings
let additionalFilters = BUILTIN_CUSTOM_FILTERS;
// Try to fetch latest filters using FilterUpdater (auto-update from uBlock Origin)
if (this.filterUpdater) {
try {
console.error('[BraveBlocker] Fetching latest uBlock Origin filters...');
const latestFilters = await this.filterUpdater.getFilters();
if (latestFilters && latestFilters.length > 0) {
additionalFilters += '\n' + latestFilters;
const cacheInfo = this.filterUpdater.getCacheInfo();
console.error('[BraveBlocker] Loaded latest uBlock Origin filters');
console.error('[BraveBlocker] Cache expires:', cacheInfo.expiresAt?.toISOString());
}
} catch (filterError) {
console.warn('[BraveBlocker] Failed to fetch latest filters:', (filterError as Error).message);
// Fall back to local custom filters
additionalFilters += '\n' + this.loadLocalCustomFiltersString();
}
} else {
// No filter updater, use local custom filters only
additionalFilters += '\n' + this.loadLocalCustomFiltersString();
}
// Parse additional filters and enable them separately
// Note: We keep prebuilt as base and parse custom separately to avoid conflicts
try {
const customBlocker = await PuppeteerBlocker.parse(additionalFilters);
// Store for later reference but don't try to merge serialized data
console.error('[BraveBlocker] Parsed additional filters successfully');
} catch (parseError) {
console.warn('[BraveBlocker] Failed to parse additional filters:', (parseError as Error).message);
}
this.initialized = true;
console.error('[BraveBlocker] Initialized with ad blocking engine');
} catch (e) {
console.error('[BraveBlocker] Failed to initialize:', e);
// Fallback to basic blocker
this.blocker = await PuppeteerBlocker.parse(BUILTIN_CUSTOM_FILTERS);
this.initialized = true;
}
}
/**
* Load local custom filters as string
*/
private loadLocalCustomFiltersString(): string {
const customFiltersPath = this.options.customFiltersPath ||
path.join(currentDir, '..', 'assets', 'ublock-custom-filters.txt');
try {
if (fs.existsSync(customFiltersPath)) {
const content = fs.readFileSync(customFiltersPath, 'utf-8');
console.error('[BraveBlocker] Loaded custom filters from:', customFiltersPath);
return content;
}
} catch (e) {
console.warn('[BraveBlocker] Failed to load custom filters:', e);
}
return '';
}
/**
* Enable blocking on a Puppeteer page
*/
async enable(page: Page) {
// Defaults: enable everything if not explicitly disabled
const opts = {
enableAdBlocking: this.options.enableAdBlocking ?? true,
enableStealth: this.options.enableStealth ?? true,
enableCosmeticFiltering: this.options.enableCosmeticFiltering ?? true,
enableRedirectBlocking: this.options.enableRedirectBlocking ?? true,
enableScriptlets: this.options.enableScriptlets ?? true,
enableVideoAdBlocking: this.options.enableVideoAdBlocking ?? true,
enableNativeAdBlocking: this.options.enableNativeAdBlocking ?? true,
};
// 1. First inject scriptlets (earliest protection - includes anti-adblock bypass & crypto miner blocking)
if (opts.enableScriptlets) {
await injectScriptlets(page);
}
// 2. Enable network-level ad blocking
if (opts.enableAdBlocking) {
if (!this.initialized) {
await this.init();
}
if (this.blocker) {
await this.blocker.enableBlockingInPage(page);
}
}
// 3. Inject stealth protections
if (opts.enableStealth) {
await injectStealth(page);
}
// 4. Cosmetic filtering (CSS + MutationObserver)
if (opts.enableCosmeticFiltering) {
await injectCosmeticFiltering(page);
}
// 5. Redirect/Popup blocking (Puppeteer level)
if (opts.enableRedirectBlocking) {
await injectRedirectBlocking(page);
}
// 6. Video ad blocking (VAST/VPAID, pre-roll, mid-roll, IMA SDK)
if (opts.enableVideoAdBlocking) {
await injectVideoAdBlocking(page);
}
// 7. Native/content ad blocking (Taboola, Outbrain, sponsored content)
if (opts.enableNativeAdBlocking) {
await injectNativeAdBlocking(page);
}
console.error('[BraveBlocker] All 7 protection layers enabled for page');
}
/**
* Check if a URL should be blocked
*/
shouldBlock(url: string): boolean {
if (!this.blocker) return false;
const result = this.blocker.match({ url, type: 'script' } as any);
return result.match;
}
}