Skip to content

Commit ea0344d

Browse files
ycjcl868ulivz
authored andcommitted
feat(mcp): add browser adblock feature (#229)
1 parent 1c6c18b commit ea0344d

File tree

6 files changed

+210
-45
lines changed

6 files changed

+210
-45
lines changed

apps/agent-tars/src/renderer/index.html

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,37 @@
77
http-equiv="Content-Security-Policy"
88
content="default-src 'self' 'unsafe-inline' file: data: blob:; img-src 'self' file: data: blob:; style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://fonts.googleapis.com; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net/npm/ https://cdn.jsdelivr.net https://cdnjs.cloudflare.com; font-src 'self' https://cdnjs.cloudflare.com https://fonts.googleapis.com; worker-src 'self' blob:; connect-src 'self' https://cdn.jsdelivr.net/npm/ blob:"
99
/>
10+
<style>
11+
@keyframes spin {
12+
0% { transform: rotate(0deg); }
13+
100% { transform: rotate(360deg); }
14+
}
15+
16+
.loading-spinner {
17+
display: inline-block;
18+
width: 30px;
19+
height: 30px;
20+
border: 3px solid rgba(0, 0, 0, 0.1);
21+
border-radius: 50%;
22+
border-top-color: #767676;
23+
animation: spin 1s ease-in-out infinite;
24+
margin: 20px;
25+
}
26+
27+
.loading-container {
28+
display: flex;
29+
justify-content: center;
30+
align-items: center;
31+
height: 100vh;
32+
}
33+
</style>
1034
</head>
1135
<body>
12-
<div id="root"></div>
36+
<div id="root">
37+
<div class="loading-container">
38+
<div class="loading-spinner"></div>
39+
</div>
40+
</div>
1341
<script type="module" src="/src/main.tsx"></script>
1442
<!-- DATA -->
1543
</body>

packages/agent-infra/browser/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@
3838
"@vitest/coverage-v8": "3.0.7",
3939
"@rslib/core": "0.5.3"
4040
}
41-
}
41+
}

packages/agent-infra/mcp-servers/browser/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
"@modelcontextprotocol/sdk": "^1.6.1"
2626
},
2727
"devDependencies": {
28+
"@ghostery/adblocker-puppeteer": "2.5.0",
29+
"cross-fetch": "4.1.0",
2830
"@rslib/core": "0.5.3",
2931
"turndown": "^7.2.0",
3032
"turndown-plugin-gfm": "^1.0.2",

packages/agent-infra/mcp-servers/browser/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ declare global {
3737

3838
setConfig({
3939
launchOptions: {
40-
headless: true,
40+
headless: false,
4141
},
4242
logger: {
4343
info: (...args: any[]) => {

packages/agent-infra/mcp-servers/browser/src/server.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import { z } from 'zod';
1515
import { ToolSchema } from '@modelcontextprotocol/sdk/types.js';
1616
import { zodToJsonSchema } from 'zod-to-json-schema';
1717
import { LaunchOptions, LocalBrowser, Page } from '@agent-infra/browser';
18+
import { PuppeteerBlocker } from '@ghostery/adblocker-puppeteer';
19+
import fetch from 'cross-fetch';
1820
import {
1921
getBuildDomTreeScript,
2022
parseNode,
@@ -461,6 +463,14 @@ const handleToolCall: Client['callTool'] = async ({
461463
},
462464
browser_navigate: async (args) => {
463465
try {
466+
try {
467+
const blocker =
468+
await PuppeteerBlocker.fromPrebuiltAdsAndTracking(fetch);
469+
await blocker.enableBlockingInPage(page as any);
470+
} catch (e) {
471+
logger.error('Error enabling adblocker:', e);
472+
}
473+
464474
await Promise.all([
465475
waitForPageAndFramesLoad(page),
466476
page.goto(args.url),

0 commit comments

Comments
 (0)