@olib-ai/owl-browser-mcp 1.0.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/index.js +490 -36
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Owl Browser MCP Server
|
|
2
2
|
|
|
3
|
-
MCP (Model Context Protocol) server for Owl Browser HTTP API. This server dynamically generates
|
|
3
|
+
MCP (Model Context Protocol) server for Owl Browser HTTP API. This server dynamically generates 157 browser automation tools from the embedded OpenAPI schema.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **
|
|
7
|
+
- **157 Browser Tools**: Full browser automation including navigation, clicks, typing, screenshots, CAPTCHA solving, and more
|
|
8
8
|
- **Multiple Contexts**: Create and manage multiple isolated browser contexts (sessions)
|
|
9
9
|
- **Anti-Detection**: Built-in fingerprint management, proxy support, and stealth features
|
|
10
10
|
- **HTTP API Backend**: Connects to Owl Browser's HTTP server (Docker or standalone)
|
|
@@ -149,7 +149,7 @@ If running from source instead of npm:
|
|
|
149
149
|
|
|
150
150
|
## Available Tools
|
|
151
151
|
|
|
152
|
-
The server exposes
|
|
152
|
+
The server exposes 157 tools organized by category:
|
|
153
153
|
|
|
154
154
|
### Context Management
|
|
155
155
|
- `browser_create_context` - Create isolated browser session
|
|
@@ -213,7 +213,7 @@ npx @modelcontextprotocol/inspector \
|
|
|
213
213
|
```
|
|
214
214
|
|
|
215
215
|
The Inspector will open a web UI (default: http://localhost:6274) where you can:
|
|
216
|
-
- Browse all
|
|
216
|
+
- Browse all 157 browser tools
|
|
217
217
|
- Execute tools with custom parameters
|
|
218
218
|
- View JSON responses in real-time
|
|
219
219
|
|
package/dist/index.js
CHANGED
|
@@ -20369,7 +20369,7 @@ var openapi_default = {
|
|
|
20369
20369
|
info: {
|
|
20370
20370
|
title: "Owl Browser API",
|
|
20371
20371
|
description: "REST API for browser automation with anti-detection capabilities",
|
|
20372
|
-
version: "1.
|
|
20372
|
+
version: "1.0.4"
|
|
20373
20373
|
},
|
|
20374
20374
|
servers: [
|
|
20375
20375
|
{
|
|
@@ -20427,17 +20427,18 @@ var openapi_default = {
|
|
|
20427
20427
|
},
|
|
20428
20428
|
profile_path: {
|
|
20429
20429
|
type: "string",
|
|
20430
|
-
description: "Path to a browser profile JSON file. If the file exists, loads fingerprints, cookies, and settings. If not, creates a new profile and saves it to this path.
|
|
20430
|
+
description: "Path to a browser profile JSON file (or upload file via multipart/form-data). If the file exists, loads fingerprints, cookies, and settings. If not, creates a new profile and saves it to this path. Encrypted profiles (from browser_download_profile) are automatically detected and decrypted."
|
|
20431
20431
|
},
|
|
20432
20432
|
proxy_type: {
|
|
20433
20433
|
type: "string",
|
|
20434
|
-
description: "Type of proxy server to use. Options: 'http', 'https', 'socks4', 'socks5', 'socks5h'. Use 'socks5h' for remote DNS resolution (recommended for privacy)",
|
|
20434
|
+
description: "Type of proxy server to use. Options: 'http', 'https', 'socks4', 'socks5', 'socks5h', 'gae'. Use 'socks5h' for remote DNS resolution (recommended for privacy). Use 'gae' for private app proxy",
|
|
20435
20435
|
enum: [
|
|
20436
20436
|
"http",
|
|
20437
20437
|
"https",
|
|
20438
20438
|
"socks4",
|
|
20439
20439
|
"socks5",
|
|
20440
|
-
"socks5h"
|
|
20440
|
+
"socks5h",
|
|
20441
|
+
"gae"
|
|
20441
20442
|
]
|
|
20442
20443
|
},
|
|
20443
20444
|
proxy_host: {
|
|
@@ -20464,6 +20465,10 @@ var openapi_default = {
|
|
|
20464
20465
|
type: "string",
|
|
20465
20466
|
description: "Path to custom CA certificate file (.pem, .crt, .cer) for SSL interception proxies. Required when using Charles Proxy, mitmproxy, or similar HTTPS inspection tools"
|
|
20466
20467
|
},
|
|
20468
|
+
proxy_ca_key_path: {
|
|
20469
|
+
type: "string",
|
|
20470
|
+
description: "Path to CA private key file for GAE/private app proxy MITM. Required for generating per-domain certificates when using 'gae' proxy type"
|
|
20471
|
+
},
|
|
20467
20472
|
proxy_trust_custom_ca: {
|
|
20468
20473
|
type: "boolean",
|
|
20469
20474
|
description: "Trust the custom CA certificate for SSL interception. Enable when using Charles Proxy, mitmproxy, or similar tools that intercept HTTPS traffic. Default: false"
|
|
@@ -20496,6 +20501,10 @@ var openapi_default = {
|
|
|
20496
20501
|
gpu: {
|
|
20497
20502
|
type: "string",
|
|
20498
20503
|
description: "Filter profiles by GPU vendor/model. If set, only profiles with matching GPU will be used. Examples: 'nvidia', 'amd', 'intel'"
|
|
20504
|
+
},
|
|
20505
|
+
timezone: {
|
|
20506
|
+
type: "string",
|
|
20507
|
+
description: "Override browser timezone. IANA timezone format (e.g., 'America/New_York', 'Europe/London', 'Asia/Tokyo'). If not set, falls back to: 1) proxy-detected timezone (if proxy configured with spoof_timezone), 2) VM profile timezone, 3) system default. This parameter works without proxy configuration."
|
|
20499
20508
|
}
|
|
20500
20509
|
}
|
|
20501
20510
|
}
|
|
@@ -20609,12 +20618,13 @@ var openapi_default = {
|
|
|
20609
20618
|
},
|
|
20610
20619
|
wait_until: {
|
|
20611
20620
|
type: "string",
|
|
20612
|
-
description: "When to consider navigation complete: '' (return immediately, default), 'load' (wait for load event), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle)",
|
|
20621
|
+
description: "When to consider navigation complete: '' (return immediately, default), 'load' (wait for load event), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle), 'fullscroll' (scroll full page to trigger lazy loading, then scroll back to top)",
|
|
20613
20622
|
enum: [
|
|
20614
20623
|
"",
|
|
20615
20624
|
"load",
|
|
20616
20625
|
"domcontentloaded",
|
|
20617
|
-
"networkidle"
|
|
20626
|
+
"networkidle",
|
|
20627
|
+
"fullscroll"
|
|
20618
20628
|
]
|
|
20619
20629
|
},
|
|
20620
20630
|
timeout: {
|
|
@@ -20667,12 +20677,13 @@ var openapi_default = {
|
|
|
20667
20677
|
},
|
|
20668
20678
|
wait_until: {
|
|
20669
20679
|
type: "string",
|
|
20670
|
-
description: "When to consider reload complete: '' (return immediately), 'load' (wait for load event, default), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle)",
|
|
20680
|
+
description: "When to consider reload complete: '' (return immediately), 'load' (wait for load event, default), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle), 'fullscroll' (scroll full page to trigger lazy loading, then scroll back to top)",
|
|
20671
20681
|
enum: [
|
|
20672
20682
|
"",
|
|
20673
20683
|
"load",
|
|
20674
20684
|
"domcontentloaded",
|
|
20675
|
-
"networkidle"
|
|
20685
|
+
"networkidle",
|
|
20686
|
+
"fullscroll"
|
|
20676
20687
|
]
|
|
20677
20688
|
},
|
|
20678
20689
|
timeout: {
|
|
@@ -20720,12 +20731,13 @@ var openapi_default = {
|
|
|
20720
20731
|
},
|
|
20721
20732
|
wait_until: {
|
|
20722
20733
|
type: "string",
|
|
20723
|
-
description: "When to consider navigation complete: '' (return immediately), 'load' (wait for load event, default), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle)",
|
|
20734
|
+
description: "When to consider navigation complete: '' (return immediately), 'load' (wait for load event, default), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle), 'fullscroll' (scroll full page to trigger lazy loading, then scroll back to top)",
|
|
20724
20735
|
enum: [
|
|
20725
20736
|
"",
|
|
20726
20737
|
"load",
|
|
20727
20738
|
"domcontentloaded",
|
|
20728
|
-
"networkidle"
|
|
20739
|
+
"networkidle",
|
|
20740
|
+
"fullscroll"
|
|
20729
20741
|
]
|
|
20730
20742
|
},
|
|
20731
20743
|
timeout: {
|
|
@@ -20773,12 +20785,13 @@ var openapi_default = {
|
|
|
20773
20785
|
},
|
|
20774
20786
|
wait_until: {
|
|
20775
20787
|
type: "string",
|
|
20776
|
-
description: "When to consider navigation complete: '' (return immediately), 'load' (wait for load event, default), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle)",
|
|
20788
|
+
description: "When to consider navigation complete: '' (return immediately), 'load' (wait for load event, default), 'domcontentloaded' (wait for DOMContentLoaded), 'networkidle' (wait for network to be idle), 'fullscroll' (scroll full page to trigger lazy loading, then scroll back to top)",
|
|
20777
20789
|
enum: [
|
|
20778
20790
|
"",
|
|
20779
20791
|
"load",
|
|
20780
20792
|
"domcontentloaded",
|
|
20781
|
-
"networkidle"
|
|
20793
|
+
"networkidle",
|
|
20794
|
+
"fullscroll"
|
|
20782
20795
|
]
|
|
20783
20796
|
},
|
|
20784
20797
|
timeout: {
|
|
@@ -20980,7 +20993,7 @@ var openapi_default = {
|
|
|
20980
20993
|
"/api/execute/browser_pick": {
|
|
20981
20994
|
post: {
|
|
20982
20995
|
summary: "Browser Pick",
|
|
20983
|
-
description: "Select an option from a dropdown or select element. Works with native HTML
|
|
20996
|
+
description: "Select an option from a dropdown or select element. Works with native HTML select elements and dynamic/custom dropdowns (like select2, react-select). Specify the option by its value or visible text. Automatically handles opening the dropdown and selecting the option.",
|
|
20984
20997
|
tags: [
|
|
20985
20998
|
"General"
|
|
20986
20999
|
],
|
|
@@ -21001,7 +21014,7 @@ var openapi_default = {
|
|
|
21001
21014
|
},
|
|
21002
21015
|
value: {
|
|
21003
21016
|
type: "string",
|
|
21004
|
-
description: "The option to select. Can be the option's value attribute OR the visible display text. Works with both native
|
|
21017
|
+
description: "The option to select. Can be the option's value attribute OR the visible display text. Works with both native select elements and dynamic dropdowns (select2, etc.)"
|
|
21005
21018
|
}
|
|
21006
21019
|
},
|
|
21007
21020
|
required: [
|
|
@@ -21165,6 +21178,10 @@ var openapi_default = {
|
|
|
21165
21178
|
end_y: {
|
|
21166
21179
|
type: "number",
|
|
21167
21180
|
description: "Y coordinate (in pixels from top edge) where the drag ends (drop location)"
|
|
21181
|
+
},
|
|
21182
|
+
mid_points: {
|
|
21183
|
+
type: "string",
|
|
21184
|
+
description: "Optional array of intermediate [x, y] coordinates for the drag path. Creates a more realistic drag movement through multiple waypoints. Format: [[x1, y1], [x2, y2], ...]. Example: [[300, 200], [400, 250]]"
|
|
21168
21185
|
}
|
|
21169
21186
|
},
|
|
21170
21187
|
required: [
|
|
@@ -21277,6 +21294,10 @@ var openapi_default = {
|
|
|
21277
21294
|
steps: {
|
|
21278
21295
|
type: "number",
|
|
21279
21296
|
description: "Number of intermediate points along the path. More steps = smoother movement. Default: auto-calculated based on distance. Recommended: 0 for auto, or 10-50 for custom"
|
|
21297
|
+
},
|
|
21298
|
+
stop_points: {
|
|
21299
|
+
type: "string",
|
|
21300
|
+
description: "Optional array of [x, y] coordinates where the cursor pauses briefly (50-150ms). Useful for simulating human hesitation or visual scanning behavior. Format: [[x1, y1], [x2, y2], ...]. Example: [[200, 150], [350, 250]]"
|
|
21280
21301
|
}
|
|
21281
21302
|
},
|
|
21282
21303
|
required: [
|
|
@@ -21679,7 +21700,7 @@ var openapi_default = {
|
|
|
21679
21700
|
},
|
|
21680
21701
|
file_paths: {
|
|
21681
21702
|
type: "string",
|
|
21682
|
-
description:
|
|
21703
|
+
description: "Array of file paths to upload. Can be a JSON array string or actual array. For JSON input use server paths. For multipart upload, files are saved to temp paths automatically."
|
|
21683
21704
|
}
|
|
21684
21705
|
},
|
|
21685
21706
|
required: [
|
|
@@ -22299,8 +22320,8 @@ var openapi_default = {
|
|
|
22299
22320
|
description: "CSS selector or natural language description for the element to capture. Required when mode is 'element'. Examples: 'div.profile', '#submit-btn', 'the login form'"
|
|
22300
22321
|
},
|
|
22301
22322
|
scale: {
|
|
22302
|
-
type: "
|
|
22303
|
-
description: "Scale percentage for the output image (1-100). Default is 100 (no scaling). Example: 50 will return an image at 50
|
|
22323
|
+
type: "string",
|
|
22324
|
+
description: "Scale percentage for the output image (1-100). Default is 100 (no scaling). Example: 50 will return an image at 50%% of the original size (half width and height)."
|
|
22304
22325
|
}
|
|
22305
22326
|
},
|
|
22306
22327
|
required: [
|
|
@@ -22552,11 +22573,11 @@ var openapi_default = {
|
|
|
22552
22573
|
description: "Starting URL to begin extraction from"
|
|
22553
22574
|
},
|
|
22554
22575
|
depth: {
|
|
22555
|
-
type: "
|
|
22576
|
+
type: "string",
|
|
22556
22577
|
description: "How many link levels to follow from the starting page. Default: 2. Higher values extract more pages but take longer"
|
|
22557
22578
|
},
|
|
22558
22579
|
max_pages: {
|
|
22559
|
-
type: "
|
|
22580
|
+
type: "string",
|
|
22560
22581
|
description: "Maximum number of pages to extract. Default: 5. Limits total extraction to prevent runaway crawling"
|
|
22561
22582
|
},
|
|
22562
22583
|
follow_external: {
|
|
@@ -22582,10 +22603,10 @@ var openapi_default = {
|
|
|
22582
22603
|
},
|
|
22583
22604
|
exclude_patterns: {
|
|
22584
22605
|
type: "string",
|
|
22585
|
-
description:
|
|
22606
|
+
description: 'Array of URL patterns to skip (glob patterns). Example: ["*/login*", "*/admin/*"]'
|
|
22586
22607
|
},
|
|
22587
22608
|
timeout_per_page: {
|
|
22588
|
-
type: "
|
|
22609
|
+
type: "string",
|
|
22589
22610
|
description: "Timeout per page in milliseconds. Default: 10000 (10 seconds)"
|
|
22590
22611
|
}
|
|
22591
22612
|
},
|
|
@@ -22930,7 +22951,7 @@ var openapi_default = {
|
|
|
22930
22951
|
"/api/execute/browser_llm_status": {
|
|
22931
22952
|
post: {
|
|
22932
22953
|
summary: "Browser Llm Status",
|
|
22933
|
-
description: "Check if the
|
|
22954
|
+
description: "Check if the LLM is ready to use. When context_id is provided, returns the LLM configuration and status for that specific context (which may use an external LLM provider like OpenAI). When context_id is omitted, returns the global built-in LLM status. Response includes: status ('ready', 'loading', 'unavailable'), type ('builtin', 'external', 'none'), and for external LLMs: endpoint and model name.",
|
|
22934
22955
|
tags: [
|
|
22935
22956
|
"General"
|
|
22936
22957
|
],
|
|
@@ -22940,7 +22961,12 @@ var openapi_default = {
|
|
|
22940
22961
|
"application/json": {
|
|
22941
22962
|
schema: {
|
|
22942
22963
|
type: "object",
|
|
22943
|
-
properties: {
|
|
22964
|
+
properties: {
|
|
22965
|
+
context_id: {
|
|
22966
|
+
type: "string",
|
|
22967
|
+
description: "Optional browser context ID. When provided, returns LLM status for that specific context (which may use an external LLM endpoint). When omitted, returns global built-in LLM status."
|
|
22968
|
+
}
|
|
22969
|
+
}
|
|
22944
22970
|
}
|
|
22945
22971
|
}
|
|
22946
22972
|
}
|
|
@@ -23775,6 +23801,45 @@ var openapi_default = {
|
|
|
23775
23801
|
}
|
|
23776
23802
|
}
|
|
23777
23803
|
},
|
|
23804
|
+
"/api/execute/browser_reset_viewport": {
|
|
23805
|
+
post: {
|
|
23806
|
+
summary: "Browser Reset Viewport",
|
|
23807
|
+
description: "Reset the browser viewport to its original default size (from the VM profile screen dimensions, typically 1920x1080). Use this to undo any viewport changes made by browser_set_viewport.",
|
|
23808
|
+
tags: [
|
|
23809
|
+
"General"
|
|
23810
|
+
],
|
|
23811
|
+
requestBody: {
|
|
23812
|
+
required: true,
|
|
23813
|
+
content: {
|
|
23814
|
+
"application/json": {
|
|
23815
|
+
schema: {
|
|
23816
|
+
type: "object",
|
|
23817
|
+
properties: {
|
|
23818
|
+
context_id: {
|
|
23819
|
+
type: "string",
|
|
23820
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
23821
|
+
}
|
|
23822
|
+
},
|
|
23823
|
+
required: [
|
|
23824
|
+
"context_id"
|
|
23825
|
+
]
|
|
23826
|
+
}
|
|
23827
|
+
}
|
|
23828
|
+
}
|
|
23829
|
+
},
|
|
23830
|
+
responses: {
|
|
23831
|
+
"200": {
|
|
23832
|
+
description: "Successful response"
|
|
23833
|
+
},
|
|
23834
|
+
"400": {
|
|
23835
|
+
description: "Bad request"
|
|
23836
|
+
},
|
|
23837
|
+
"401": {
|
|
23838
|
+
description: "Unauthorized"
|
|
23839
|
+
}
|
|
23840
|
+
}
|
|
23841
|
+
}
|
|
23842
|
+
},
|
|
23778
23843
|
"/api/execute/browser_zoom_in": {
|
|
23779
23844
|
post: {
|
|
23780
23845
|
summary: "Browser Zoom In",
|
|
@@ -24185,6 +24250,45 @@ var openapi_default = {
|
|
|
24185
24250
|
}
|
|
24186
24251
|
}
|
|
24187
24252
|
},
|
|
24253
|
+
"/api/execute/browser_download_video_recording": {
|
|
24254
|
+
post: {
|
|
24255
|
+
summary: "Browser Download Video Recording",
|
|
24256
|
+
description: "Get a download URL for a completed video recording. Returns a temporary URL that can be used to download the recorded MP4 video file. The recording must be stopped first using browser_stop_video_recording.",
|
|
24257
|
+
tags: [
|
|
24258
|
+
"General"
|
|
24259
|
+
],
|
|
24260
|
+
requestBody: {
|
|
24261
|
+
required: true,
|
|
24262
|
+
content: {
|
|
24263
|
+
"application/json": {
|
|
24264
|
+
schema: {
|
|
24265
|
+
type: "object",
|
|
24266
|
+
properties: {
|
|
24267
|
+
context_id: {
|
|
24268
|
+
type: "string",
|
|
24269
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
24270
|
+
}
|
|
24271
|
+
},
|
|
24272
|
+
required: [
|
|
24273
|
+
"context_id"
|
|
24274
|
+
]
|
|
24275
|
+
}
|
|
24276
|
+
}
|
|
24277
|
+
}
|
|
24278
|
+
},
|
|
24279
|
+
responses: {
|
|
24280
|
+
"200": {
|
|
24281
|
+
description: "Successful response"
|
|
24282
|
+
},
|
|
24283
|
+
"400": {
|
|
24284
|
+
description: "Bad request"
|
|
24285
|
+
},
|
|
24286
|
+
"401": {
|
|
24287
|
+
description: "Unauthorized"
|
|
24288
|
+
}
|
|
24289
|
+
}
|
|
24290
|
+
}
|
|
24291
|
+
},
|
|
24188
24292
|
"/api/execute/browser_start_live_stream": {
|
|
24189
24293
|
post: {
|
|
24190
24294
|
summary: "Browser Start Live Stream",
|
|
@@ -24926,13 +25030,14 @@ var openapi_default = {
|
|
|
24926
25030
|
},
|
|
24927
25031
|
type: {
|
|
24928
25032
|
type: "string",
|
|
24929
|
-
description: "Proxy protocol type: 'http' (HTTP proxy), 'https' (HTTPS proxy), 'socks4' (SOCKS4), 'socks5' (SOCKS5 with local DNS), 'socks5h' (SOCKS5 with remote DNS - most private)",
|
|
25033
|
+
description: "Proxy protocol type: 'http' (HTTP proxy), 'https' (HTTPS proxy), 'socks4' (SOCKS4), 'socks5' (SOCKS5 with local DNS), 'socks5h' (SOCKS5 with remote DNS - most private), 'gae' (private app proxy)",
|
|
24930
25034
|
enum: [
|
|
24931
25035
|
"http",
|
|
24932
25036
|
"https",
|
|
24933
25037
|
"socks4",
|
|
24934
25038
|
"socks5",
|
|
24935
|
-
"socks5h"
|
|
25039
|
+
"socks5h",
|
|
25040
|
+
"gae"
|
|
24936
25041
|
]
|
|
24937
25042
|
},
|
|
24938
25043
|
host: {
|
|
@@ -24974,6 +25079,30 @@ var openapi_default = {
|
|
|
24974
25079
|
language_override: {
|
|
24975
25080
|
type: "string",
|
|
24976
25081
|
description: "Manually set browser language instead of auto-detection. BCP47 format like 'en-US', 'de-DE'. Takes precedence over spoof_language"
|
|
25082
|
+
},
|
|
25083
|
+
ca_cert_path: {
|
|
25084
|
+
type: "string",
|
|
25085
|
+
description: "Path to custom CA certificate file (.pem, .crt, .cer) for SSL interception proxies. Required when using Charles Proxy, mitmproxy, or similar HTTPS inspection tools"
|
|
25086
|
+
},
|
|
25087
|
+
ca_key_path: {
|
|
25088
|
+
type: "string",
|
|
25089
|
+
description: "Path to CA private key file for GAE/private app proxy MITM. Required for generating per-domain certificates when using 'gae' proxy type"
|
|
25090
|
+
},
|
|
25091
|
+
trust_custom_ca: {
|
|
25092
|
+
type: "boolean",
|
|
25093
|
+
description: "Trust the custom CA certificate for SSL interception. Enable when using Charles Proxy, mitmproxy, or similar tools that intercept HTTPS traffic. Default: false"
|
|
25094
|
+
},
|
|
25095
|
+
is_tor: {
|
|
25096
|
+
type: "boolean",
|
|
25097
|
+
description: "Explicitly mark this proxy as a Tor connection. Enables circuit isolation so each context gets a unique exit node IP. Auto-detected if proxy is localhost:9050 or localhost:9150 with socks5/socks5h"
|
|
25098
|
+
},
|
|
25099
|
+
tor_control_port: {
|
|
25100
|
+
type: "string",
|
|
25101
|
+
description: "Tor control port for circuit isolation. Used to send SIGNAL NEWNYM to get a new exit node. Default: auto-detect (tries 9051 then 9151). Set to -1 to disable circuit isolation"
|
|
25102
|
+
},
|
|
25103
|
+
tor_control_password: {
|
|
25104
|
+
type: "string",
|
|
25105
|
+
description: "Password for Tor control port authentication. Leave empty to use cookie authentication (default) or no auth"
|
|
24977
25106
|
}
|
|
24978
25107
|
},
|
|
24979
25108
|
required: [
|
|
@@ -25116,6 +25245,50 @@ var openapi_default = {
|
|
|
25116
25245
|
}
|
|
25117
25246
|
}
|
|
25118
25247
|
},
|
|
25248
|
+
"/api/execute/browser_set_timezone": {
|
|
25249
|
+
post: {
|
|
25250
|
+
summary: "Browser Set Timezone",
|
|
25251
|
+
description: "Set or override the timezone for an existing browser context at runtime. Useful for adjusting timezone after detecting proxy exit IP location. The timezone is immediately applied to all frames in the context.",
|
|
25252
|
+
tags: [
|
|
25253
|
+
"General"
|
|
25254
|
+
],
|
|
25255
|
+
requestBody: {
|
|
25256
|
+
required: true,
|
|
25257
|
+
content: {
|
|
25258
|
+
"application/json": {
|
|
25259
|
+
schema: {
|
|
25260
|
+
type: "object",
|
|
25261
|
+
properties: {
|
|
25262
|
+
context_id: {
|
|
25263
|
+
type: "string",
|
|
25264
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25265
|
+
},
|
|
25266
|
+
timezone: {
|
|
25267
|
+
type: "string",
|
|
25268
|
+
description: "IANA timezone format (e.g., 'America/New_York', 'Europe/London', 'Asia/Tokyo'). This overrides any previously set timezone including VM profile defaults. Must contain '/' and be between 5-50 characters."
|
|
25269
|
+
}
|
|
25270
|
+
},
|
|
25271
|
+
required: [
|
|
25272
|
+
"context_id",
|
|
25273
|
+
"timezone"
|
|
25274
|
+
]
|
|
25275
|
+
}
|
|
25276
|
+
}
|
|
25277
|
+
}
|
|
25278
|
+
},
|
|
25279
|
+
responses: {
|
|
25280
|
+
"200": {
|
|
25281
|
+
description: "Successful response"
|
|
25282
|
+
},
|
|
25283
|
+
"400": {
|
|
25284
|
+
description: "Bad request"
|
|
25285
|
+
},
|
|
25286
|
+
"401": {
|
|
25287
|
+
description: "Unauthorized"
|
|
25288
|
+
}
|
|
25289
|
+
}
|
|
25290
|
+
}
|
|
25291
|
+
},
|
|
25119
25292
|
"/api/execute/browser_create_profile": {
|
|
25120
25293
|
post: {
|
|
25121
25294
|
summary: "Browser Create Profile",
|
|
@@ -25130,6 +25303,10 @@ var openapi_default = {
|
|
|
25130
25303
|
schema: {
|
|
25131
25304
|
type: "object",
|
|
25132
25305
|
properties: {
|
|
25306
|
+
context_id: {
|
|
25307
|
+
type: "string",
|
|
25308
|
+
description: "Optional browser context ID. If provided, associates the created profile with this context. If omitted, creates a standalone profile that can be applied to any context later."
|
|
25309
|
+
},
|
|
25133
25310
|
name: {
|
|
25134
25311
|
type: "string",
|
|
25135
25312
|
description: "Human-readable name for the profile to help identify it. Examples: 'Shopping Account', 'Test User 1'. Optional but recommended for managing multiple profiles"
|
|
@@ -25172,7 +25349,7 @@ var openapi_default = {
|
|
|
25172
25349
|
},
|
|
25173
25350
|
profile_path: {
|
|
25174
25351
|
type: "string",
|
|
25175
|
-
description: "
|
|
25352
|
+
description: "Path to the profile .json file to load (or upload file via multipart/form-data). Accepts both raw JSON profiles and encrypted profiles from browser_download_profile. Encrypted content (base64) is automatically detected and decrypted based on content, not extension. Example: '/home/user/profiles/shopping.json'"
|
|
25176
25353
|
}
|
|
25177
25354
|
},
|
|
25178
25355
|
required: [
|
|
@@ -25199,7 +25376,7 @@ var openapi_default = {
|
|
|
25199
25376
|
"/api/execute/browser_save_profile": {
|
|
25200
25377
|
post: {
|
|
25201
25378
|
summary: "Browser Save Profile",
|
|
25202
|
-
description: "Save the current context state (fingerprints, cookies, settings) to a profile
|
|
25379
|
+
description: "Save the current context state (fingerprints, cookies, settings) to a profile file on the server. Takes a profile_name (not path) and returns the filename. Use browser_download_profile to retrieve the file.",
|
|
25203
25380
|
tags: [
|
|
25204
25381
|
"General"
|
|
25205
25382
|
],
|
|
@@ -25214,13 +25391,58 @@ var openapi_default = {
|
|
|
25214
25391
|
type: "string",
|
|
25215
25392
|
description: "The unique identifier of the browser context to save (e.g., 'ctx_000001')"
|
|
25216
25393
|
},
|
|
25217
|
-
|
|
25394
|
+
profile_name: {
|
|
25218
25395
|
type: "string",
|
|
25219
|
-
description: "
|
|
25396
|
+
description: "Name for the saved profile file (without path). Example: 'shopping_account', 'test_user_1'. The .json extension will be added automatically. Returns the filename that can be used with browser_download_profile."
|
|
25220
25397
|
}
|
|
25221
25398
|
},
|
|
25222
25399
|
required: [
|
|
25223
|
-
"context_id"
|
|
25400
|
+
"context_id",
|
|
25401
|
+
"profile_name"
|
|
25402
|
+
]
|
|
25403
|
+
}
|
|
25404
|
+
}
|
|
25405
|
+
}
|
|
25406
|
+
},
|
|
25407
|
+
responses: {
|
|
25408
|
+
"200": {
|
|
25409
|
+
description: "Successful response"
|
|
25410
|
+
},
|
|
25411
|
+
"400": {
|
|
25412
|
+
description: "Bad request"
|
|
25413
|
+
},
|
|
25414
|
+
"401": {
|
|
25415
|
+
description: "Unauthorized"
|
|
25416
|
+
}
|
|
25417
|
+
}
|
|
25418
|
+
}
|
|
25419
|
+
},
|
|
25420
|
+
"/api/execute/browser_download_profile": {
|
|
25421
|
+
post: {
|
|
25422
|
+
summary: "Browser Download Profile",
|
|
25423
|
+
description: "Download a saved profile file from the server. Takes the profile_name returned by browser_save_profile and returns the profile content as base64-encoded JSON. The same profile can be downloaded regardless of which context_id was used to save it.",
|
|
25424
|
+
tags: [
|
|
25425
|
+
"General"
|
|
25426
|
+
],
|
|
25427
|
+
requestBody: {
|
|
25428
|
+
required: true,
|
|
25429
|
+
content: {
|
|
25430
|
+
"application/json": {
|
|
25431
|
+
schema: {
|
|
25432
|
+
type: "object",
|
|
25433
|
+
properties: {
|
|
25434
|
+
context_id: {
|
|
25435
|
+
type: "string",
|
|
25436
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25437
|
+
},
|
|
25438
|
+
profile_name: {
|
|
25439
|
+
type: "string",
|
|
25440
|
+
description: "Name of the profile file to download (as returned by browser_save_profile). Example: 'shopping_account.json'. The .json extension is optional and will be added if missing. Returns base64-encoded profile content."
|
|
25441
|
+
}
|
|
25442
|
+
},
|
|
25443
|
+
required: [
|
|
25444
|
+
"context_id",
|
|
25445
|
+
"profile_name"
|
|
25224
25446
|
]
|
|
25225
25447
|
}
|
|
25226
25448
|
}
|
|
@@ -25445,12 +25667,17 @@ var openapi_default = {
|
|
|
25445
25667
|
schema: {
|
|
25446
25668
|
type: "object",
|
|
25447
25669
|
properties: {
|
|
25670
|
+
context_id: {
|
|
25671
|
+
type: "string",
|
|
25672
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25673
|
+
},
|
|
25448
25674
|
rule_id: {
|
|
25449
25675
|
type: "string",
|
|
25450
25676
|
description: "The unique identifier of the rule to remove, returned by browser_add_network_rule when the rule was created"
|
|
25451
25677
|
}
|
|
25452
25678
|
},
|
|
25453
25679
|
required: [
|
|
25680
|
+
"context_id",
|
|
25454
25681
|
"rule_id"
|
|
25455
25682
|
]
|
|
25456
25683
|
}
|
|
@@ -25553,6 +25780,45 @@ var openapi_default = {
|
|
|
25553
25780
|
}
|
|
25554
25781
|
}
|
|
25555
25782
|
},
|
|
25783
|
+
"/api/execute/browser_get_network_rules": {
|
|
25784
|
+
post: {
|
|
25785
|
+
summary: "Browser Get Network Rules",
|
|
25786
|
+
description: "List all network interception rules for a context. Returns an array of rules with their id, url_pattern, action (block/allow/mock/redirect), is_regex flag, and additional settings like redirect_url or mock_body depending on the action type.",
|
|
25787
|
+
tags: [
|
|
25788
|
+
"General"
|
|
25789
|
+
],
|
|
25790
|
+
requestBody: {
|
|
25791
|
+
required: true,
|
|
25792
|
+
content: {
|
|
25793
|
+
"application/json": {
|
|
25794
|
+
schema: {
|
|
25795
|
+
type: "object",
|
|
25796
|
+
properties: {
|
|
25797
|
+
context_id: {
|
|
25798
|
+
type: "string",
|
|
25799
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25800
|
+
}
|
|
25801
|
+
},
|
|
25802
|
+
required: [
|
|
25803
|
+
"context_id"
|
|
25804
|
+
]
|
|
25805
|
+
}
|
|
25806
|
+
}
|
|
25807
|
+
}
|
|
25808
|
+
},
|
|
25809
|
+
responses: {
|
|
25810
|
+
"200": {
|
|
25811
|
+
description: "Successful response"
|
|
25812
|
+
},
|
|
25813
|
+
"400": {
|
|
25814
|
+
description: "Bad request"
|
|
25815
|
+
},
|
|
25816
|
+
"401": {
|
|
25817
|
+
description: "Unauthorized"
|
|
25818
|
+
}
|
|
25819
|
+
}
|
|
25820
|
+
}
|
|
25821
|
+
},
|
|
25556
25822
|
"/api/execute/browser_clear_network_log": {
|
|
25557
25823
|
post: {
|
|
25558
25824
|
summary: "Browser Clear Network Log",
|
|
@@ -25636,6 +25902,84 @@ var openapi_default = {
|
|
|
25636
25902
|
}
|
|
25637
25903
|
}
|
|
25638
25904
|
},
|
|
25905
|
+
"/api/execute/browser_disable_network_interception": {
|
|
25906
|
+
post: {
|
|
25907
|
+
summary: "Browser Disable Network Interception",
|
|
25908
|
+
description: "Disable network interception for a context. All network rules will be ignored and requests pass through normally. Equivalent to calling browser_enable_network_interception with enable=false.",
|
|
25909
|
+
tags: [
|
|
25910
|
+
"General"
|
|
25911
|
+
],
|
|
25912
|
+
requestBody: {
|
|
25913
|
+
required: true,
|
|
25914
|
+
content: {
|
|
25915
|
+
"application/json": {
|
|
25916
|
+
schema: {
|
|
25917
|
+
type: "object",
|
|
25918
|
+
properties: {
|
|
25919
|
+
context_id: {
|
|
25920
|
+
type: "string",
|
|
25921
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25922
|
+
}
|
|
25923
|
+
},
|
|
25924
|
+
required: [
|
|
25925
|
+
"context_id"
|
|
25926
|
+
]
|
|
25927
|
+
}
|
|
25928
|
+
}
|
|
25929
|
+
}
|
|
25930
|
+
},
|
|
25931
|
+
responses: {
|
|
25932
|
+
"200": {
|
|
25933
|
+
description: "Successful response"
|
|
25934
|
+
},
|
|
25935
|
+
"400": {
|
|
25936
|
+
description: "Bad request"
|
|
25937
|
+
},
|
|
25938
|
+
"401": {
|
|
25939
|
+
description: "Unauthorized"
|
|
25940
|
+
}
|
|
25941
|
+
}
|
|
25942
|
+
}
|
|
25943
|
+
},
|
|
25944
|
+
"/api/execute/browser_disable_network_logging": {
|
|
25945
|
+
post: {
|
|
25946
|
+
summary: "Browser Disable Network Logging",
|
|
25947
|
+
description: "Disable network request/response logging for a context. Network activity will no longer be captured. Equivalent to calling browser_enable_network_logging with enable=false.",
|
|
25948
|
+
tags: [
|
|
25949
|
+
"General"
|
|
25950
|
+
],
|
|
25951
|
+
requestBody: {
|
|
25952
|
+
required: true,
|
|
25953
|
+
content: {
|
|
25954
|
+
"application/json": {
|
|
25955
|
+
schema: {
|
|
25956
|
+
type: "object",
|
|
25957
|
+
properties: {
|
|
25958
|
+
context_id: {
|
|
25959
|
+
type: "string",
|
|
25960
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25961
|
+
}
|
|
25962
|
+
},
|
|
25963
|
+
required: [
|
|
25964
|
+
"context_id"
|
|
25965
|
+
]
|
|
25966
|
+
}
|
|
25967
|
+
}
|
|
25968
|
+
}
|
|
25969
|
+
},
|
|
25970
|
+
responses: {
|
|
25971
|
+
"200": {
|
|
25972
|
+
description: "Successful response"
|
|
25973
|
+
},
|
|
25974
|
+
"400": {
|
|
25975
|
+
description: "Bad request"
|
|
25976
|
+
},
|
|
25977
|
+
"401": {
|
|
25978
|
+
description: "Unauthorized"
|
|
25979
|
+
}
|
|
25980
|
+
}
|
|
25981
|
+
}
|
|
25982
|
+
},
|
|
25639
25983
|
"/api/execute/browser_set_download_path": {
|
|
25640
25984
|
post: {
|
|
25641
25985
|
summary: "Browser Set Download Path",
|
|
@@ -26519,13 +26863,12 @@ var openapi_default = {
|
|
|
26519
26863
|
properties: {
|
|
26520
26864
|
license_path: {
|
|
26521
26865
|
type: "string",
|
|
26522
|
-
description: "Absolute path to the license file (.olic extension).
|
|
26523
|
-
},
|
|
26524
|
-
license_content: {
|
|
26525
|
-
type: "string",
|
|
26526
|
-
description: "Base64-encoded license file content. Alternative to license_path for passing license data directly without writing to disk. Provide either this OR license_path, not both"
|
|
26866
|
+
description: "Absolute path to the license file (.olic extension). Example: '/path/to/license.olic'"
|
|
26527
26867
|
}
|
|
26528
|
-
}
|
|
26868
|
+
},
|
|
26869
|
+
required: [
|
|
26870
|
+
"license_path"
|
|
26871
|
+
]
|
|
26529
26872
|
}
|
|
26530
26873
|
}
|
|
26531
26874
|
}
|
|
@@ -26987,6 +27330,117 @@ var openapi_default = {
|
|
|
26987
27330
|
}
|
|
26988
27331
|
}
|
|
26989
27332
|
}
|
|
27333
|
+
},
|
|
27334
|
+
"/api/execute/server_restart_browser": {
|
|
27335
|
+
post: {
|
|
27336
|
+
summary: "Server Restart Browser",
|
|
27337
|
+
description: "Restart the browser process. This stops the current browser subprocess and starts a new one. Useful after updating configuration, adding/removing licenses, or recovering from browser errors. All active browser contexts will be terminated. Returns success/failure status.",
|
|
27338
|
+
tags: [
|
|
27339
|
+
"General"
|
|
27340
|
+
],
|
|
27341
|
+
requestBody: {
|
|
27342
|
+
required: true,
|
|
27343
|
+
content: {
|
|
27344
|
+
"application/json": {
|
|
27345
|
+
schema: {
|
|
27346
|
+
type: "object",
|
|
27347
|
+
properties: {
|
|
27348
|
+
force: {
|
|
27349
|
+
type: "boolean",
|
|
27350
|
+
description: "Force restart even if browser appears healthy. Default: false"
|
|
27351
|
+
}
|
|
27352
|
+
}
|
|
27353
|
+
}
|
|
27354
|
+
}
|
|
27355
|
+
}
|
|
27356
|
+
},
|
|
27357
|
+
responses: {
|
|
27358
|
+
"200": {
|
|
27359
|
+
description: "Successful response"
|
|
27360
|
+
},
|
|
27361
|
+
"400": {
|
|
27362
|
+
description: "Bad request"
|
|
27363
|
+
},
|
|
27364
|
+
"401": {
|
|
27365
|
+
description: "Unauthorized"
|
|
27366
|
+
}
|
|
27367
|
+
}
|
|
27368
|
+
}
|
|
27369
|
+
},
|
|
27370
|
+
"/api/execute/server_read_logs": {
|
|
27371
|
+
post: {
|
|
27372
|
+
summary: "Server Read Logs",
|
|
27373
|
+
description: "Read log entries from either the browser process or HTTP server. By default reads from browser logs which contain detailed IPC commands, rendering events, and page interactions. Use source='server' for HTTP server logs. Supports head (first N lines), tail (last N lines), or range (specific line range) modes. Can filter logs by level (DEBUG, INFO, WARN, ERROR) and by pattern matching (regex or substring).",
|
|
27374
|
+
tags: [
|
|
27375
|
+
"General"
|
|
27376
|
+
],
|
|
27377
|
+
requestBody: {
|
|
27378
|
+
required: true,
|
|
27379
|
+
content: {
|
|
27380
|
+
"application/json": {
|
|
27381
|
+
schema: {
|
|
27382
|
+
type: "object",
|
|
27383
|
+
properties: {
|
|
27384
|
+
source: {
|
|
27385
|
+
type: "string",
|
|
27386
|
+
description: "Log source to read from: 'browser' (browser process logs with detailed IPC, rendering, and page events) or 'server' (HTTP server logs). Default: 'browser'",
|
|
27387
|
+
enum: [
|
|
27388
|
+
"browser",
|
|
27389
|
+
"server"
|
|
27390
|
+
]
|
|
27391
|
+
},
|
|
27392
|
+
mode: {
|
|
27393
|
+
type: "string",
|
|
27394
|
+
description: "Read mode: 'head' (first N lines), 'tail' (last N lines), 'range' (specific line range). Default: 'tail'",
|
|
27395
|
+
enum: [
|
|
27396
|
+
"head",
|
|
27397
|
+
"tail",
|
|
27398
|
+
"range"
|
|
27399
|
+
]
|
|
27400
|
+
},
|
|
27401
|
+
lines: {
|
|
27402
|
+
type: "string",
|
|
27403
|
+
description: "Number of lines to return for head/tail mode. Default: 100"
|
|
27404
|
+
},
|
|
27405
|
+
start_line: {
|
|
27406
|
+
type: "string",
|
|
27407
|
+
description: "Starting line number for range mode (1-indexed). Default: 1"
|
|
27408
|
+
},
|
|
27409
|
+
end_line: {
|
|
27410
|
+
type: "string",
|
|
27411
|
+
description: "Ending line number for range mode (1-indexed). Default: start_line + 100"
|
|
27412
|
+
},
|
|
27413
|
+
filter: {
|
|
27414
|
+
type: "string",
|
|
27415
|
+
description: "Filter pattern to match log lines. Supports regex or simple substring matching."
|
|
27416
|
+
},
|
|
27417
|
+
level: {
|
|
27418
|
+
type: "string",
|
|
27419
|
+
description: "Filter by log level: 'DEBUG', 'INFO', 'WARN', 'ERROR'. Only lines with this level are returned.",
|
|
27420
|
+
enum: [
|
|
27421
|
+
"DEBUG",
|
|
27422
|
+
"INFO",
|
|
27423
|
+
"WARN",
|
|
27424
|
+
"ERROR"
|
|
27425
|
+
]
|
|
27426
|
+
}
|
|
27427
|
+
}
|
|
27428
|
+
}
|
|
27429
|
+
}
|
|
27430
|
+
}
|
|
27431
|
+
},
|
|
27432
|
+
responses: {
|
|
27433
|
+
"200": {
|
|
27434
|
+
description: "Successful response"
|
|
27435
|
+
},
|
|
27436
|
+
"400": {
|
|
27437
|
+
description: "Bad request"
|
|
27438
|
+
},
|
|
27439
|
+
"401": {
|
|
27440
|
+
description: "Unauthorized"
|
|
27441
|
+
}
|
|
27442
|
+
}
|
|
27443
|
+
}
|
|
26990
27444
|
}
|
|
26991
27445
|
}
|
|
26992
27446
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@olib-ai/owl-browser-mcp",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "MCP server for Owl Browser HTTP API -
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "MCP server for Owl Browser HTTP API - 157 browser automation tools with anti-detection",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|