@solvvn/mcp-simple-browser 1.0.5 → 1.0.7

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 CHANGED
@@ -63,7 +63,6 @@ Add to your Claude Desktop config:
63
63
  | Tool | Description |
64
64
  |------|-------------|
65
65
  | `browser_navigate` | Navigate to a URL and wait for it to load |
66
- | `browser_screenshot` | Take a screenshot (returns base64) |
67
66
  | `browser_save_screenshot` | Take a screenshot and save to file |
68
67
  | `browser_click` | Click an element by CSS selector |
69
68
  | `browser_type` | Type text into an input field |
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8LzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBrD"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0LzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBrD"}
package/dist/tools.js CHANGED
@@ -15,12 +15,13 @@ const SearchEngines = {
15
15
  const tools = [
16
16
  createTool({
17
17
  name: "browser_navigate",
18
- description: "Navigate to a URL and wait for it to load.",
18
+ description: "Go to a URL. Use this first to load a webpage before taking actions. Supports any HTTP/HTTPS URL.",
19
19
  schema: {
20
- url: z.string().describe("The URL to navigate to"),
20
+ url: z.string().describe("Full URL including https:// (e.g., https://example.com)"),
21
21
  waitUntil: z
22
22
  .enum(["load", "domcontentloaded", "networkidle", "commit"])
23
- .default("networkidle"),
23
+ .default("networkidle")
24
+ .describe("When to consider navigation complete: networkidle (recommended) waits for all requests to finish"),
24
25
  },
25
26
  handler: async ({ url, waitUntil }) => {
26
27
  const page = await getPage();
@@ -29,20 +30,11 @@ const tools = [
29
30
  },
30
31
  }),
31
32
  createTool({
32
- name: "browser_screenshot",
33
- description: "Take a screenshot of the current page.",
33
+ name: "browser_click",
34
+ description: "Click a button, link, or any element. Use after navigating to a page. Requires knowing the element's CSS selector.",
34
35
  schema: {
35
- fullPage: z.boolean().default(false).describe("Capture full scrollable page"),
36
- },
37
- handler: async ({ fullPage }) => {
38
- const buffer = await (await getPage()).screenshot({ fullPage });
39
- return success({ format: "png", data: buffer.toString("base64") });
36
+ selector: z.string().describe("CSS selector of the element to click (e.g., button, a, #id, .class)"),
40
37
  },
41
- }),
42
- createTool({
43
- name: "browser_click",
44
- description: "Click an element by CSS selector.",
45
- schema: { selector: z.string().describe("CSS selector") },
46
38
  handler: async ({ selector }) => {
47
39
  await (await getPage()).click(selector);
48
40
  return success({});
@@ -50,11 +42,11 @@ const tools = [
50
42
  }),
51
43
  createTool({
52
44
  name: "browser_type",
53
- description: "Type text into an input field.",
45
+ description: "Type text into an input field or text area. Use for filling forms, search boxes, or any text input.",
54
46
  schema: {
55
- selector: z.string(),
56
- text: z.string(),
57
- delay: z.number().default(50).describe("Delay between keystrokes (ms)"),
47
+ selector: z.string().describe("CSS selector of the input field (e.g., input, textarea, #search)"),
48
+ text: z.string().describe("Text to type"),
49
+ delay: z.number().default(50).describe("Delay between keystrokes in milliseconds (default: 50)"),
58
50
  },
59
51
  handler: async ({ selector, text, delay }) => {
60
52
  await (await getPage()).type(selector, text, { delay });
@@ -63,15 +55,15 @@ const tools = [
63
55
  }),
64
56
  createTool({
65
57
  name: "browser_get_content",
66
- description: "Get the HTML content of the page.",
58
+ description: "Get the raw HTML source of the current page. Use when you need the full HTML structure for scraping or analysis.",
67
59
  schema: {},
68
60
  handler: async () => ({ html: await (await getPage()).content() }),
69
61
  }),
70
62
  createTool({
71
63
  name: "browser_get_text",
72
- description: "Get text content from the page or a specific element.",
64
+ description: "Extract visible text from the page or a specific element. Use for reading content like article text, prices, or descriptions.",
73
65
  schema: {
74
- selector: z.string().optional().describe("CSS selector (defaults to body)"),
66
+ selector: z.string().optional().describe("CSS selector to extract text from specific element. Defaults to entire page."),
75
67
  },
76
68
  handler: async ({ selector }) => {
77
69
  const el = selector || "body";
@@ -81,16 +73,18 @@ const tools = [
81
73
  }),
82
74
  createTool({
83
75
  name: "browser_evaluate",
84
- description: "Execute JavaScript in the page context.",
85
- schema: { script: z.string().describe("JavaScript code to execute") },
76
+ description: "Run custom JavaScript in the page context. Use for complex interactions, data extraction, or DOM manipulation that other tools can't handle.",
77
+ schema: {
78
+ script: z.string().describe("JavaScript code to execute. Can return values. Runs in browser context (window, document available)."),
79
+ },
86
80
  handler: async ({ script }) => ({ result: await (await getPage()).evaluate(script) }),
87
81
  }),
88
82
  createTool({
89
83
  name: "browser_search",
90
- description: "Search the web using a search engine.",
84
+ description: "Search the web and get ranked results with titles, URLs, and snippets. Good for research, finding pages, or checking information.",
91
85
  schema: {
92
- query: z.string(),
93
- engine: z.enum(["google", "duckduckgo", "bing"]).default("duckduckgo"),
86
+ query: z.string().describe("Search query/keywords"),
87
+ engine: z.enum(["google", "duckduckgo", "bing"]).default("duckduckgo").describe("Search engine to use: duckduckgo (default, no tracking), google (more results), bing (alternative)"),
94
88
  },
95
89
  handler: async ({ query, engine }) => {
96
90
  const page = await getPage();
@@ -120,8 +114,10 @@ const tools = [
120
114
  }),
121
115
  createTool({
122
116
  name: "browser_wait",
123
- description: "Wait for a specified time.",
124
- schema: { milliseconds: z.number().describe("Time to wait in ms") },
117
+ description: "Pause execution for a specified time. Use when you need to wait for page animations, lazy loading, or after clicking something that triggers async updates.",
118
+ schema: {
119
+ milliseconds: z.number().describe("Time to wait in milliseconds (e.g., 1000 = 1 second)"),
120
+ },
125
121
  handler: async ({ milliseconds }) => {
126
122
  await new Promise((resolve) => setTimeout(resolve, milliseconds));
127
123
  return success({ waited: milliseconds });
@@ -129,7 +125,7 @@ const tools = [
129
125
  }),
130
126
  createTool({
131
127
  name: "browser_close",
132
- description: "Close the browser and clean up resources.",
128
+ description: "Close the browser and free up resources. Call this when you're done with browser operations to clean up.",
133
129
  schema: {},
134
130
  handler: async () => {
135
131
  await closeBrowser();
@@ -138,10 +134,10 @@ const tools = [
138
134
  }),
139
135
  createTool({
140
136
  name: "browser_save_screenshot",
141
- description: "Take a screenshot and save it to a file.",
137
+ description: "Take a screenshot of the current page and save to a file. Use to capture visual state, verify page content, or create records.",
142
138
  schema: {
143
- filepath: z.string().describe("Path where to save the screenshot"),
144
- fullPage: z.boolean().default(false).describe("Capture full scrollable page"),
139
+ filepath: z.string().describe("Full path where to save the image (e.g., /tmp/screenshot.png)"),
140
+ fullPage: z.boolean().default(false).describe("true = capture entire scrollable page, false = only visible viewport"),
145
141
  },
146
142
  handler: async ({ filepath, fullPage }) => {
147
143
  const buffer = await (await getPage()).screenshot({ fullPage });
@@ -151,11 +147,11 @@ const tools = [
151
147
  }),
152
148
  createTool({
153
149
  name: "browser_print_to_pdf",
154
- description: "Print the current page to PDF and save to a file.",
150
+ description: "Save the current page as a PDF document. Useful for archiving pages, generating reports, or preserving content in printable format.",
155
151
  schema: {
156
- filepath: z.string().describe("Path where to save the PDF"),
157
- landscape: z.boolean().default(false).describe("Use landscape orientation"),
158
- printBackground: z.boolean().default(true).describe("Print background graphics"),
152
+ filepath: z.string().describe("Full path where to save the PDF (e.g., /tmp/page.pdf)"),
153
+ landscape: z.boolean().default(false).describe("true = landscape orientation, false = portrait"),
154
+ printBackground: z.boolean().default(true).describe("true = include background colors/images, false = white background only"),
159
155
  },
160
156
  handler: async ({ filepath, landscape, printBackground }) => {
161
157
  const pdf = await (await getPage()).pdf({
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAWrD,SAAS,UAAU,CAA0B,GAAsB;IACjE,OAAO,GAA+C,CAAC;AACzD,CAAC;AAED,SAAS,OAAO,CAAoC,KAAQ;IAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,mCAAmC,CAAC,EAAE;IAC7D,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,6BAA6B,CAAC,EAAE;IAC3D,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,iCAAiC,CAAC,EAAE;CACjD,CAAC;AAEX,MAAM,KAAK,GAAG;IACZ,UAAU,CAAC;QACT,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,mGAAmG;QAChH,MAAM,EAAE;YACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;YACnF,SAAS,EAAE,CAAC;iBACT,IAAI,CAAC,CAAC,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;iBAC3D,OAAO,CAAC,aAAa,CAAC;iBACtB,QAAQ,CAAC,kGAAkG,CAAC;SAChH;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACpC,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oHAAoH;QACjI,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;SACrG;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9B,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxC,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,qGAAqG;QAClH,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;YACjG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;YACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC;SACjG;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,kHAAkH;QAC/H,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;KACnE,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,+HAA+H;QAC5I,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;SACzH;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9B,MAAM,EAAE,GAAG,QAAQ,IAAI,MAAM,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAe,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YACpF,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;QAC9B,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,8IAA8I;QAC3J,MAAM,EAAE;YACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sGAAsG,CAAC;SACpI;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;KACtF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,mIAAmI;QAChJ,MAAM,EAAE;YACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,oGAAoG,CAAC;SACtL;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAEzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gBACvC,MAAM,GAAG,GAA2D,EAAE,CAAC;gBACvE,MAAM,SAAS,GAAG,CAAC,uBAAuB,EAAE,+BAA+B,EAAE,yBAAyB,CAAC,CAAC;gBAExG,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC5B,QAAQ,CAAC,gBAAgB,CAAoB,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;wBAC9D,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;4BAAE,OAAO;wBAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3C,GAAG,CAAC,IAAI,CAAC;4BACP,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;4BACxC,GAAG,EAAE,CAAC,CAAC,IAAI;4BACX,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;yBACrC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;oBACH,IAAI,GAAG,CAAC,MAAM;wBAAE,MAAM;gBACxB,CAAC;gBACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,6JAA6J;QAC1K,MAAM,EAAE;YACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;SAC1F;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE;YAClC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;YAClE,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,0GAA0G;QACvH,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,gIAAgI;QAC7I,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;YAC9F,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sEAAsE,CAAC;SACtH;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChE,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClC,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;KACF,CAAC;IACF,UAAU,CAAC;QACT,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,qIAAqI;QAClJ,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACtF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YAChG,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,wEAAwE,CAAC;SAC9H;QACD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,EAAE;YAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;gBACtC,SAAS;gBACT,eAAe;gBACf,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;YACH,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAC/B,OAAO,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;KACF,CAAC;CACH,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc,EAAE,OAAO,GAAG,KAAK;IAC/C,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EAC3D,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC;gBACH,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAa,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,QAAQ,CACb,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAC3D,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solvvn/mcp-simple-browser",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -24,6 +24,7 @@
24
24
  "@modelcontextprotocol/sdk": "^1.29.0",
25
25
  "cloakbrowser": "^0.3.30",
26
26
  "dotenv": "^17.4.2",
27
+ "playwright-core": "^1.53.2",
27
28
  "zod": "^4.4.3"
28
29
  },
29
30
  "devDependencies": {
Binary file
package/src/tools.ts CHANGED
@@ -30,12 +30,13 @@ const SearchEngines = {
30
30
  const tools = [
31
31
  createTool({
32
32
  name: "browser_navigate",
33
- description: "Navigate to a URL and wait for it to load.",
33
+ description: "Go to a URL. Use this first to load a webpage before taking actions. Supports any HTTP/HTTPS URL.",
34
34
  schema: {
35
- url: z.string().describe("The URL to navigate to"),
35
+ url: z.string().describe("Full URL including https:// (e.g., https://example.com)"),
36
36
  waitUntil: z
37
37
  .enum(["load", "domcontentloaded", "networkidle", "commit"])
38
- .default("networkidle"),
38
+ .default("networkidle")
39
+ .describe("When to consider navigation complete: networkidle (recommended) waits for all requests to finish"),
39
40
  },
40
41
  handler: async ({ url, waitUntil }) => {
41
42
  const page = await getPage();
@@ -44,20 +45,11 @@ const tools = [
44
45
  },
45
46
  }),
46
47
  createTool({
47
- name: "browser_screenshot",
48
- description: "Take a screenshot of the current page.",
48
+ name: "browser_click",
49
+ description: "Click a button, link, or any element. Use after navigating to a page. Requires knowing the element's CSS selector.",
49
50
  schema: {
50
- fullPage: z.boolean().default(false).describe("Capture full scrollable page"),
51
- },
52
- handler: async ({ fullPage }) => {
53
- const buffer = await (await getPage()).screenshot({ fullPage });
54
- return success({ format: "png", data: buffer.toString("base64") });
51
+ selector: z.string().describe("CSS selector of the element to click (e.g., button, a, #id, .class)"),
55
52
  },
56
- }),
57
- createTool({
58
- name: "browser_click",
59
- description: "Click an element by CSS selector.",
60
- schema: { selector: z.string().describe("CSS selector") },
61
53
  handler: async ({ selector }) => {
62
54
  await (await getPage()).click(selector);
63
55
  return success({});
@@ -65,11 +57,11 @@ const tools = [
65
57
  }),
66
58
  createTool({
67
59
  name: "browser_type",
68
- description: "Type text into an input field.",
60
+ description: "Type text into an input field or text area. Use for filling forms, search boxes, or any text input.",
69
61
  schema: {
70
- selector: z.string(),
71
- text: z.string(),
72
- delay: z.number().default(50).describe("Delay between keystrokes (ms)"),
62
+ selector: z.string().describe("CSS selector of the input field (e.g., input, textarea, #search)"),
63
+ text: z.string().describe("Text to type"),
64
+ delay: z.number().default(50).describe("Delay between keystrokes in milliseconds (default: 50)"),
73
65
  },
74
66
  handler: async ({ selector, text, delay }) => {
75
67
  await (await getPage()).type(selector, text, { delay });
@@ -78,15 +70,15 @@ const tools = [
78
70
  }),
79
71
  createTool({
80
72
  name: "browser_get_content",
81
- description: "Get the HTML content of the page.",
73
+ description: "Get the raw HTML source of the current page. Use when you need the full HTML structure for scraping or analysis.",
82
74
  schema: {},
83
75
  handler: async () => ({ html: await (await getPage()).content() }),
84
76
  }),
85
77
  createTool({
86
78
  name: "browser_get_text",
87
- description: "Get text content from the page or a specific element.",
79
+ description: "Extract visible text from the page or a specific element. Use for reading content like article text, prices, or descriptions.",
88
80
  schema: {
89
- selector: z.string().optional().describe("CSS selector (defaults to body)"),
81
+ selector: z.string().optional().describe("CSS selector to extract text from specific element. Defaults to entire page."),
90
82
  },
91
83
  handler: async ({ selector }) => {
92
84
  const el = selector || "body";
@@ -96,16 +88,18 @@ const tools = [
96
88
  }),
97
89
  createTool({
98
90
  name: "browser_evaluate",
99
- description: "Execute JavaScript in the page context.",
100
- schema: { script: z.string().describe("JavaScript code to execute") },
91
+ description: "Run custom JavaScript in the page context. Use for complex interactions, data extraction, or DOM manipulation that other tools can't handle.",
92
+ schema: {
93
+ script: z.string().describe("JavaScript code to execute. Can return values. Runs in browser context (window, document available)."),
94
+ },
101
95
  handler: async ({ script }) => ({ result: await (await getPage()).evaluate(script) }),
102
96
  }),
103
97
  createTool({
104
98
  name: "browser_search",
105
- description: "Search the web using a search engine.",
99
+ description: "Search the web and get ranked results with titles, URLs, and snippets. Good for research, finding pages, or checking information.",
106
100
  schema: {
107
- query: z.string(),
108
- engine: z.enum(["google", "duckduckgo", "bing"]).default("duckduckgo"),
101
+ query: z.string().describe("Search query/keywords"),
102
+ engine: z.enum(["google", "duckduckgo", "bing"]).default("duckduckgo").describe("Search engine to use: duckduckgo (default, no tracking), google (more results), bing (alternative)"),
109
103
  },
110
104
  handler: async ({ query, engine }) => {
111
105
  const page = await getPage();
@@ -136,8 +130,10 @@ const tools = [
136
130
  }),
137
131
  createTool({
138
132
  name: "browser_wait",
139
- description: "Wait for a specified time.",
140
- schema: { milliseconds: z.number().describe("Time to wait in ms") },
133
+ description: "Pause execution for a specified time. Use when you need to wait for page animations, lazy loading, or after clicking something that triggers async updates.",
134
+ schema: {
135
+ milliseconds: z.number().describe("Time to wait in milliseconds (e.g., 1000 = 1 second)"),
136
+ },
141
137
  handler: async ({ milliseconds }) => {
142
138
  await new Promise((resolve) => setTimeout(resolve, milliseconds));
143
139
  return success({ waited: milliseconds });
@@ -145,7 +141,7 @@ const tools = [
145
141
  }),
146
142
  createTool({
147
143
  name: "browser_close",
148
- description: "Close the browser and clean up resources.",
144
+ description: "Close the browser and free up resources. Call this when you're done with browser operations to clean up.",
149
145
  schema: {},
150
146
  handler: async () => {
151
147
  await closeBrowser();
@@ -154,10 +150,10 @@ const tools = [
154
150
  }),
155
151
  createTool({
156
152
  name: "browser_save_screenshot",
157
- description: "Take a screenshot and save it to a file.",
153
+ description: "Take a screenshot of the current page and save to a file. Use to capture visual state, verify page content, or create records.",
158
154
  schema: {
159
- filepath: z.string().describe("Path where to save the screenshot"),
160
- fullPage: z.boolean().default(false).describe("Capture full scrollable page"),
155
+ filepath: z.string().describe("Full path where to save the image (e.g., /tmp/screenshot.png)"),
156
+ fullPage: z.boolean().default(false).describe("true = capture entire scrollable page, false = only visible viewport"),
161
157
  },
162
158
  handler: async ({ filepath, fullPage }) => {
163
159
  const buffer = await (await getPage()).screenshot({ fullPage });
@@ -167,11 +163,11 @@ const tools = [
167
163
  }),
168
164
  createTool({
169
165
  name: "browser_print_to_pdf",
170
- description: "Print the current page to PDF and save to a file.",
166
+ description: "Save the current page as a PDF document. Useful for archiving pages, generating reports, or preserving content in printable format.",
171
167
  schema: {
172
- filepath: z.string().describe("Path where to save the PDF"),
173
- landscape: z.boolean().default(false).describe("Use landscape orientation"),
174
- printBackground: z.boolean().default(true).describe("Print background graphics"),
168
+ filepath: z.string().describe("Full path where to save the PDF (e.g., /tmp/page.pdf)"),
169
+ landscape: z.boolean().default(false).describe("true = landscape orientation, false = portrait"),
170
+ printBackground: z.boolean().default(true).describe("true = include background colors/images, false = white background only"),
175
171
  },
176
172
  handler: async ({ filepath, landscape, printBackground }) => {
177
173
  const pdf = await (await getPage()).pdf({