@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.
Files changed (3) hide show
  1. package/README.md +4 -4
  2. package/dist/index.js +474 -26
  3. 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 144 browser automation tools from the embedded OpenAPI schema.
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
- - **144 Browser Tools**: Full browser automation including navigation, clicks, typing, screenshots, CAPTCHA solving, and more
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 144 tools organized by category:
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 144 browser tools
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.1.0"
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. Useful for persistent browser sessions"
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 <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.",
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 <select> elements and dynamic dropdowns (select2, etc.)"
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: `Array of absolute file paths to upload, as JSON array string (e.g., '["/path/to/file1.pdf", "/path/to/file2.jpg"]')`
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 on-device LLM is ready to use. Returns status: 'ready', 'loading', or 'unavailable'. Call this before using LLM-powered features to ensure the model is loaded.",
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: "Absolute path to the profile JSON file to load. The file must exist and contain valid profile data. Example: '/home/user/profiles/shopping.json'"
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 JSON file. Useful for persisting login sessions and browser identity for reuse.",
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
- profile_path: {
25394
+ profile_name: {
25224
25395
  type: "string",
25225
- description: "Absolute path where the profile JSON file will be saved. If the context was loaded from a profile, this can be omitted to save to the original path. Example: '/home/user/profiles/new_profile.json'"
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). Provide either this OR license_content, not both. Example: '/path/to/license.olic'"
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": "1.0.5",
4
- "description": "MCP server for Owl Browser HTTP API - 144 browser automation tools with anti-detection",
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": {