@olib-ai/owl-browser-mcp 1.0.5 → 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 +474 -26
- 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,7 +20427,7 @@ 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",
|
|
@@ -20501,6 +20501,10 @@ var openapi_default = {
|
|
|
20501
20501
|
gpu: {
|
|
20502
20502
|
type: "string",
|
|
20503
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."
|
|
20504
20508
|
}
|
|
20505
20509
|
}
|
|
20506
20510
|
}
|
|
@@ -20614,12 +20618,13 @@ var openapi_default = {
|
|
|
20614
20618
|
},
|
|
20615
20619
|
wait_until: {
|
|
20616
20620
|
type: "string",
|
|
20617
|
-
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)",
|
|
20618
20622
|
enum: [
|
|
20619
20623
|
"",
|
|
20620
20624
|
"load",
|
|
20621
20625
|
"domcontentloaded",
|
|
20622
|
-
"networkidle"
|
|
20626
|
+
"networkidle",
|
|
20627
|
+
"fullscroll"
|
|
20623
20628
|
]
|
|
20624
20629
|
},
|
|
20625
20630
|
timeout: {
|
|
@@ -20672,12 +20677,13 @@ var openapi_default = {
|
|
|
20672
20677
|
},
|
|
20673
20678
|
wait_until: {
|
|
20674
20679
|
type: "string",
|
|
20675
|
-
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)",
|
|
20676
20681
|
enum: [
|
|
20677
20682
|
"",
|
|
20678
20683
|
"load",
|
|
20679
20684
|
"domcontentloaded",
|
|
20680
|
-
"networkidle"
|
|
20685
|
+
"networkidle",
|
|
20686
|
+
"fullscroll"
|
|
20681
20687
|
]
|
|
20682
20688
|
},
|
|
20683
20689
|
timeout: {
|
|
@@ -20725,12 +20731,13 @@ var openapi_default = {
|
|
|
20725
20731
|
},
|
|
20726
20732
|
wait_until: {
|
|
20727
20733
|
type: "string",
|
|
20728
|
-
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)",
|
|
20729
20735
|
enum: [
|
|
20730
20736
|
"",
|
|
20731
20737
|
"load",
|
|
20732
20738
|
"domcontentloaded",
|
|
20733
|
-
"networkidle"
|
|
20739
|
+
"networkidle",
|
|
20740
|
+
"fullscroll"
|
|
20734
20741
|
]
|
|
20735
20742
|
},
|
|
20736
20743
|
timeout: {
|
|
@@ -20778,12 +20785,13 @@ var openapi_default = {
|
|
|
20778
20785
|
},
|
|
20779
20786
|
wait_until: {
|
|
20780
20787
|
type: "string",
|
|
20781
|
-
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)",
|
|
20782
20789
|
enum: [
|
|
20783
20790
|
"",
|
|
20784
20791
|
"load",
|
|
20785
20792
|
"domcontentloaded",
|
|
20786
|
-
"networkidle"
|
|
20793
|
+
"networkidle",
|
|
20794
|
+
"fullscroll"
|
|
20787
20795
|
]
|
|
20788
20796
|
},
|
|
20789
20797
|
timeout: {
|
|
@@ -20985,7 +20993,7 @@ var openapi_default = {
|
|
|
20985
20993
|
"/api/execute/browser_pick": {
|
|
20986
20994
|
post: {
|
|
20987
20995
|
summary: "Browser Pick",
|
|
20988
|
-
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.",
|
|
20989
20997
|
tags: [
|
|
20990
20998
|
"General"
|
|
20991
20999
|
],
|
|
@@ -21006,7 +21014,7 @@ var openapi_default = {
|
|
|
21006
21014
|
},
|
|
21007
21015
|
value: {
|
|
21008
21016
|
type: "string",
|
|
21009
|
-
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.)"
|
|
21010
21018
|
}
|
|
21011
21019
|
},
|
|
21012
21020
|
required: [
|
|
@@ -21170,6 +21178,10 @@ var openapi_default = {
|
|
|
21170
21178
|
end_y: {
|
|
21171
21179
|
type: "number",
|
|
21172
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]]"
|
|
21173
21185
|
}
|
|
21174
21186
|
},
|
|
21175
21187
|
required: [
|
|
@@ -21282,6 +21294,10 @@ var openapi_default = {
|
|
|
21282
21294
|
steps: {
|
|
21283
21295
|
type: "number",
|
|
21284
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]]"
|
|
21285
21301
|
}
|
|
21286
21302
|
},
|
|
21287
21303
|
required: [
|
|
@@ -21684,7 +21700,7 @@ var openapi_default = {
|
|
|
21684
21700
|
},
|
|
21685
21701
|
file_paths: {
|
|
21686
21702
|
type: "string",
|
|
21687
|
-
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."
|
|
21688
21704
|
}
|
|
21689
21705
|
},
|
|
21690
21706
|
required: [
|
|
@@ -22935,7 +22951,7 @@ var openapi_default = {
|
|
|
22935
22951
|
"/api/execute/browser_llm_status": {
|
|
22936
22952
|
post: {
|
|
22937
22953
|
summary: "Browser Llm Status",
|
|
22938
|
-
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.",
|
|
22939
22955
|
tags: [
|
|
22940
22956
|
"General"
|
|
22941
22957
|
],
|
|
@@ -22945,7 +22961,12 @@ var openapi_default = {
|
|
|
22945
22961
|
"application/json": {
|
|
22946
22962
|
schema: {
|
|
22947
22963
|
type: "object",
|
|
22948
|
-
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
|
+
}
|
|
22949
22970
|
}
|
|
22950
22971
|
}
|
|
22951
22972
|
}
|
|
@@ -23780,6 +23801,45 @@ var openapi_default = {
|
|
|
23780
23801
|
}
|
|
23781
23802
|
}
|
|
23782
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
|
+
},
|
|
23783
23843
|
"/api/execute/browser_zoom_in": {
|
|
23784
23844
|
post: {
|
|
23785
23845
|
summary: "Browser Zoom In",
|
|
@@ -24190,6 +24250,45 @@ var openapi_default = {
|
|
|
24190
24250
|
}
|
|
24191
24251
|
}
|
|
24192
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
|
+
},
|
|
24193
24292
|
"/api/execute/browser_start_live_stream": {
|
|
24194
24293
|
post: {
|
|
24195
24294
|
summary: "Browser Start Live Stream",
|
|
@@ -24980,6 +25079,30 @@ var openapi_default = {
|
|
|
24980
25079
|
language_override: {
|
|
24981
25080
|
type: "string",
|
|
24982
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"
|
|
24983
25106
|
}
|
|
24984
25107
|
},
|
|
24985
25108
|
required: [
|
|
@@ -25122,6 +25245,50 @@ var openapi_default = {
|
|
|
25122
25245
|
}
|
|
25123
25246
|
}
|
|
25124
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
|
+
},
|
|
25125
25292
|
"/api/execute/browser_create_profile": {
|
|
25126
25293
|
post: {
|
|
25127
25294
|
summary: "Browser Create Profile",
|
|
@@ -25136,6 +25303,10 @@ var openapi_default = {
|
|
|
25136
25303
|
schema: {
|
|
25137
25304
|
type: "object",
|
|
25138
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
|
+
},
|
|
25139
25310
|
name: {
|
|
25140
25311
|
type: "string",
|
|
25141
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"
|
|
@@ -25178,7 +25349,7 @@ var openapi_default = {
|
|
|
25178
25349
|
},
|
|
25179
25350
|
profile_path: {
|
|
25180
25351
|
type: "string",
|
|
25181
|
-
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'"
|
|
25182
25353
|
}
|
|
25183
25354
|
},
|
|
25184
25355
|
required: [
|
|
@@ -25205,7 +25376,7 @@ var openapi_default = {
|
|
|
25205
25376
|
"/api/execute/browser_save_profile": {
|
|
25206
25377
|
post: {
|
|
25207
25378
|
summary: "Browser Save Profile",
|
|
25208
|
-
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.",
|
|
25209
25380
|
tags: [
|
|
25210
25381
|
"General"
|
|
25211
25382
|
],
|
|
@@ -25220,13 +25391,58 @@ var openapi_default = {
|
|
|
25220
25391
|
type: "string",
|
|
25221
25392
|
description: "The unique identifier of the browser context to save (e.g., 'ctx_000001')"
|
|
25222
25393
|
},
|
|
25223
|
-
|
|
25394
|
+
profile_name: {
|
|
25224
25395
|
type: "string",
|
|
25225
|
-
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."
|
|
25226
25397
|
}
|
|
25227
25398
|
},
|
|
25228
25399
|
required: [
|
|
25229
|
-
"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"
|
|
25230
25446
|
]
|
|
25231
25447
|
}
|
|
25232
25448
|
}
|
|
@@ -25451,12 +25667,17 @@ var openapi_default = {
|
|
|
25451
25667
|
schema: {
|
|
25452
25668
|
type: "object",
|
|
25453
25669
|
properties: {
|
|
25670
|
+
context_id: {
|
|
25671
|
+
type: "string",
|
|
25672
|
+
description: "The unique identifier of the browser context (e.g., 'ctx_000001')"
|
|
25673
|
+
},
|
|
25454
25674
|
rule_id: {
|
|
25455
25675
|
type: "string",
|
|
25456
25676
|
description: "The unique identifier of the rule to remove, returned by browser_add_network_rule when the rule was created"
|
|
25457
25677
|
}
|
|
25458
25678
|
},
|
|
25459
25679
|
required: [
|
|
25680
|
+
"context_id",
|
|
25460
25681
|
"rule_id"
|
|
25461
25682
|
]
|
|
25462
25683
|
}
|
|
@@ -25559,6 +25780,45 @@ var openapi_default = {
|
|
|
25559
25780
|
}
|
|
25560
25781
|
}
|
|
25561
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
|
+
},
|
|
25562
25822
|
"/api/execute/browser_clear_network_log": {
|
|
25563
25823
|
post: {
|
|
25564
25824
|
summary: "Browser Clear Network Log",
|
|
@@ -25642,6 +25902,84 @@ var openapi_default = {
|
|
|
25642
25902
|
}
|
|
25643
25903
|
}
|
|
25644
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
|
+
},
|
|
25645
25983
|
"/api/execute/browser_set_download_path": {
|
|
25646
25984
|
post: {
|
|
25647
25985
|
summary: "Browser Set Download Path",
|
|
@@ -26525,13 +26863,12 @@ var openapi_default = {
|
|
|
26525
26863
|
properties: {
|
|
26526
26864
|
license_path: {
|
|
26527
26865
|
type: "string",
|
|
26528
|
-
description: "Absolute path to the license file (.olic extension).
|
|
26529
|
-
},
|
|
26530
|
-
license_content: {
|
|
26531
|
-
type: "string",
|
|
26532
|
-
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'"
|
|
26533
26867
|
}
|
|
26534
|
-
}
|
|
26868
|
+
},
|
|
26869
|
+
required: [
|
|
26870
|
+
"license_path"
|
|
26871
|
+
]
|
|
26535
26872
|
}
|
|
26536
26873
|
}
|
|
26537
26874
|
}
|
|
@@ -26993,6 +27330,117 @@ var openapi_default = {
|
|
|
26993
27330
|
}
|
|
26994
27331
|
}
|
|
26995
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
|
+
}
|
|
26996
27444
|
}
|
|
26997
27445
|
}
|
|
26998
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": {
|