Puppeteer Swarm MCP
Provides browser automation capabilities with tab pool management, enabling navigation, content extraction, screenshots, element interaction (clicking, typing), JavaScript evaluation, and selector waiting across multiple concurrent browser tabs.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Puppeteer Swarm MCPtake a screenshot of the homepage of example.com and save it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Puppeteer Swarm MCP
MCP server for browser automation with tab pool support using Puppeteer.
Features
Explicit Browser Control: Launch and close browser on demand via
launch/closetoolsTab Pool: Manage multiple browser tabs concurrently
Auto-release: Automatically release tabs after idle timeout (default: 5 minutes)
Auto-recovery: Automatically recover crashed tabs
Configurable: Set tab count and headless mode via CLI arguments
Related MCP server: Puppeteer MCP Server
Installation
Option 1: Install from npm
npm install -g puppeteer-swarm-mcpOr run directly using npx:
npx puppeteer-swarm-mcpOption 2: Install from source
git clone https://github.com/greatSumini/puppeteer-swarm-mcp.git
cd puppeteer-swarm-mcp
npm install
npm run buildUsage
# Default: 5 tabs, headless=false
puppeteer-swarm-mcp
# Custom tab count
puppeteer-swarm-mcp --tabs=10
# Headless mode
puppeteer-swarm-mcp --headless
# Combined options
puppeteer-swarm-mcp --tabs=10 --headlessEnvironment Variables
TAB_COUNT=10 HEADLESS=true puppeteer-swarm-mcpMCP Client Integration
Puppeteer Swarm MCP can be integrated with various AI coding assistants and IDEs that support the Model Context Protocol (MCP).
Requirements
Node.js >= v18.0.0
An MCP-compatible client (Claude Code, Cursor, VS Code, Windsurf, etc.)
Run this command:
claude mcp add puppeteer-swarm -- npx -y puppeteer-swarm-mcp --tabs=5 --headlessOr with custom options:
claude mcp add puppeteer-swarm -- npx -y puppeteer-swarm-mcp --tabs=10Go to: Settings -> Cursor Settings -> MCP -> Add new global MCP server
Add the following configuration to your ~/.cursor/mcp.json file:
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Add the following to your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Add this to your VS Code MCP config file. See VS Code MCP docs for more info.
"mcp": {
"servers": {
"puppeteer-swarm": {
"type": "stdio",
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Add this to your Windsurf MCP config file:
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Open Cline
Click the hamburger menu icon (☰) to enter the MCP Servers section
Choose Remote Servers tab
Click the Edit Configuration button
Add puppeteer-swarm to
mcpServers:
{
"mcpServers": {
"puppeteer-swarm": {
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Add this to your Zed settings.json:
{
"context_servers": {
"puppeteer-swarm": {
"source": "custom",
"command": "npx",
"args": ["-y", "puppeteer-swarm-mcp", "--tabs=5", "--headless"]
}
}
}Available Tools
launch
Initialize the browser and tab pool. Must be called before using any other browser tools.
Parameters: None
Returns:
{
"message": "브라우저가 성공적으로 시작되었습니다.",
"config": {
"tabCount": 5,
"headless": false,
"idleTimeout": 300000
}
}close
Close the browser and all tabs.
Parameters: None
Returns:
{
"message": "브라우저가 종료되었습니다."
}get_pool_status
Get the current status of the tab pool. Can be called before launch to check initialization status.
Parameters: None
Returns (after launch):
{
"initialized": true,
"total": 5,
"idle": 3,
"busy": 2
}Returns (before launch):
{
"initialized": false,
"message": "브라우저가 초기화되지 않았습니다. 먼저 'launch' 도구를 호출하세요."
}navigate
Allocate an idle tab and navigate to a URL.
Parameters:
Name | Type | Required | Description |
| string | Yes | URL to navigate to |
| string | No | Wait condition ( |
Returns:
{
"tabId": "tab-1",
"url": "https://example.com",
"title": "Example Domain"
}get_content
Extract HTML or text content from a page.
Parameters:
Name | Type | Required | Description |
| string | Yes | Target tab ID |
| string | No | Extract format ( |
Returns:
{
"content": "..."
}screenshot
Capture a page screenshot.
Parameters:
Name | Type | Required | Description |
| string | Yes | Target tab ID |
| boolean | No | Capture full page. Default: |
Returns: Image content (base64 PNG)
click
Click an element by CSS selector.
Parameters:
Name | Type | Required | Description |
| string | Yes | Target tab ID |
| string | Yes | CSS selector |
Returns:
{
"success": true
}type
Type text into an input field.
Parameters:
Name | Type | Required | Description |
| string | Yes | Target tab ID |
| string | Yes | CSS selector |
| string | Yes | Text to type |
Returns:
{
"success": true
}evaluate
Execute JavaScript in the page context.
Parameters:
Name | Type | Required | Description |
| string | Yes | Target tab ID |
| string | Yes | JavaScript code to execute |
Returns:
{
"result": "..."
}wait_for_selector
Wait for an element to appear in the DOM.
Parameters:
Name | Type | Required | Description |
| string | Yes | Target tab ID |
| string | Yes | CSS selector |
| number | No | Timeout in ms. Default: |
Returns:
{
"success": true
}release_tab
Release a tab back to idle state.
Parameters:
Name | Type | Required | Description |
| string | Yes | Tab ID to release |
Returns:
{
"success": true
}Workflow Example
1. launch()
-> Initialize browser and tab pool
2. navigate({ url: "https://example.com" })
-> Returns { tabId: "tab-1", ... }
3. get_content({ tabId: "tab-1", type: "text" })
-> Returns page content
4. click({ tabId: "tab-1", selector: "button.submit" })
-> Click a button
5. release_tab({ tabId: "tab-1" })
-> Release the tab for reuse
6. close()
-> Close browser when done (optional)Note: The browser does not start automatically. You must call
launchbefore using any browser tools.
Logging
Logs are stored in the logs/ directory:
File Pattern:
mcp-puppeteer-YYYY-MM-DD.logDaily rotation, max 20MB per file
14 days retention with auto-compression
License
MIT License - see the LICENSE file for details.
Author
Choi Sumin - GitHub
Available Tools
11 toolsclickC
지정된 셀렉터의 요소를 클릭합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 대상 탭 ID | |
| selector | Yes | CSS 셀렉터 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It states the basic action (clicking) but doesn't describe what happens on failure (e.g., if selector doesn't exist), whether it waits for element visibility, error conditions, or any side effects. This leaves significant behavioral gaps for an interactive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without any unnecessary words. It's perfectly front-loaded and wastes no space, making it an excellent example of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a browser automation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what happens after clicking (e.g., page navigation, JavaScript execution), error handling, or return values. Given the interactive nature and potential complexity, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with both parameters ('tabId' and 'selector') clearly documented in the schema. The description doesn't add any meaningful parameter semantics beyond what the schema already provides, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('클릭합니다' - clicks) and target ('지정된 셀렉터의 요소' - element of specified selector), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'wait_for_selector' or 'type' that also interact with page elements, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites (e.g., needing an open tab), comparison to similar sibling tools like 'type' or 'wait_for_selector', or scenarios where this tool is appropriate versus inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
closeA
브라우저를 종료하고 모든 탭을 닫습니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the destructive action ('종료하고' - terminate/close) which implies this is not a read-only operation, but doesn't specify whether this action is reversible, what happens to unsaved data, or whether it requires specific permissions. For a destructive tool with zero annotation coverage, this is a significant gap in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately front-loaded with the core action ('브라우저를 종료하고') followed by the scope ('모든 탭을 닫습니다'). Every word earns its place in communicating the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, zero-parameter tool with no annotations and no output schema, the description provides the minimum viable information about what the tool does. However, it lacks important context about the consequences of browser closure, what happens to session data, or whether there are any side effects. The description is complete enough to understand the basic action but insufficient for safe, informed use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters (schema coverage 100%), so there are no parameters to document. The description appropriately doesn't discuss parameters, and the baseline for zero-parameter tools is 4. No additional parameter semantics are needed or expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('브라우저를 종료하고' - close browser) and the resource affected ('모든 탭을 닫습니다' - close all tabs). It distinguishes itself from sibling tools like 'release_tab' (which releases a single tab) and 'navigate' (which changes page content). The description provides a complete, unambiguous statement of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether a browser must be open first), when it's appropriate versus using 'release_tab' for individual tabs, or what happens after browser closure. The agent must infer usage context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluateA
페이지 컨텍스트에서 JavaScript를 실행합니다. 단일 표현식(예: 'document.title', '1 + 1')은 자동으로 결과가 반환됩니다. 복잡한 스크립트는 'return' 문을 명시적으로 사용하세요.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 대상 탭 ID | |
| script | Yes | 실행할 JavaScript 코드. 단일 표현식은 자동 반환, 복잡한 로직은 return 문 필요 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it executes JavaScript in page context, explains the auto-return behavior for single expressions, and requires explicit return statements for complex scripts. However, it doesn't mention error handling, execution time limits, or security implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with just two sentences that each earn their place. The first states the core purpose, the second provides crucial behavioral guidance about return values. No wasted words, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a JavaScript execution tool with no annotations and no output schema, the description is adequate but has clear gaps. It explains the execution behavior well but doesn't cover error cases, return value formats, execution context limitations, or security considerations that would be important for this type of tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds some value by elaborating on the script parameter's behavior (single expressions auto-return vs complex scripts needing return statements), but doesn't provide additional context about tabId or parameter interactions beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '페이지 컨텍스트에서 JavaScript를 실행합니다' (executes JavaScript in page context). It specifies the verb ('실행합니다' - executes) and resource (JavaScript), and distinguishes it from sibling tools like click, navigate, or type which perform different browser automation functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides implicit usage guidance by explaining when to use return statements versus when expressions auto-return, but doesn't explicitly state when to choose this tool over alternatives like get_content or when not to use it. No sibling tool comparisons or explicit context boundaries are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contentB
페이지의 HTML 또는 텍스트 콘텐츠를 추출합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 대상 탭 ID | |
| type | No | 추출 형식 (기본: text) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the extraction action but lacks details on permissions needed, rate limits, error conditions, or what happens if the tab is closed. For a tool that interacts with browser tabs, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence in Korean that directly states the tool's function. It's front-loaded with the core purpose and has zero wasted words, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (extracting content from a tab) and lack of annotations or output schema, the description is minimally adequate. It covers the basic purpose but misses behavioral details and usage context. It's complete enough for a simple read operation but could be improved with more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema already documents both parameters (tabId and type with enum). The description adds no additional meaning beyond what's in the schema, such as examples or edge cases. Baseline 3 is appropriate when the schema handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '페이지의 HTML 또는 텍스트 콘텐츠를 추출합니다' (extracts HTML or text content from a page). It specifies the verb (extract) and resource (page content), though it doesn't explicitly differentiate from sibling tools like 'screenshot' or 'evaluate' which might also retrieve page information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an open tab), exclusions, or comparisons to siblings like 'evaluate' (which might execute scripts) or 'screenshot' (which captures visual content). Usage is implied but not explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pool_statusB
탭 풀의 현재 상태를 조회합니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a retrieval/checking operation ('조회합니다'), which implies read-only behavior, but doesn't specify what 'status' includes (e.g., available tabs, memory usage, performance metrics), whether it requires specific permissions, or what format the response takes. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any wasted words. It's appropriately sized for a simple status-checking tool and front-loads the essential information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no annotations, and no output schema, the description provides the minimum viable information about what the tool does. However, for a status-checking tool, it should ideally specify what aspects of status are returned (e.g., tab count, health metrics, resource usage) since there's no output schema to document this. The description is adequate but has clear gaps in explaining the return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so the schema already fully documents the parameter situation. The description doesn't need to add parameter information, and it correctly doesn't mention any parameters. With zero parameters, the baseline score is 4 since there's nothing to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('조회합니다' - retrieves/checks) and resource ('탭 풀의 현재 상태' - current status of tab pool). It distinguishes itself from siblings like 'get_content' or 'screenshot' by focusing on status rather than content or visual capture. However, it doesn't explicitly differentiate from all siblings in a detailed manner.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites, timing considerations, or what situations warrant checking tab pool status versus using other tools like 'get_content' or 'navigate'. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launchA
브라우저와 탭 풀을 초기화합니다. 다른 브라우저 도구 사용 전에 반드시 호출해야 합니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions initialization but doesn't disclose behavioral traits like whether this is a one-time setup, if it closes existing browsers, what happens on failure, or if it requires specific permissions. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that are front-loaded with the purpose followed by usage guidance. Every sentence earns its place by providing essential information without redundancy or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (initialization with no parameters) and lack of annotations/output schema, the description is minimally adequate. It states the purpose and prerequisite usage but lacks details on what initialization entails, potential side effects, or error conditions. For a tool that likely has significant behavioral implications, this is a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter semantics, and it appropriately doesn't mention any parameters. A baseline of 4 is appropriate for zero-parameter tools when the schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '브라우저와 탭 풀을 초기화합니다' (initializes browser and tab pool). It specifies the verb (초기화/initialize) and resources (browser and tab pool). However, it doesn't explicitly differentiate from sibling tools like 'get_pool_status' or 'release_tab' that also interact with the tab pool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: '다른 브라우저 도구 사용 전에 반드시 호출해야 합니다' (must be called before using other browser tools). This clearly states when to use it (as a prerequisite for other tools) and implies when not to use it (after initialization or for operations not requiring browser tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_tabC
사용 완료된 탭을 idle 상태로 반환합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 반환할 탭 ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions transitioning to 'idle 상태' but doesn't explain what this means operationally - whether the tab remains open, what resources are freed, whether the action is reversible, or what happens if the tab isn't actually 'completed'. The description doesn't address permissions, side effects, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence in Korean that gets straight to the point. There's no wasted verbiage or unnecessary elaboration. However, the brevity comes at the cost of completeness, making it somewhat under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that presumably changes tab state (with no annotations and no output schema), the description is insufficient. It doesn't explain what 'idle 상태' means, what happens after the operation, whether there are side effects, or what constitutes a '사용 완료된 탭' (completed tab). The agent would need to guess about the tool's behavior and appropriate usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage and only one parameter, the schema already documents 'tabId' adequately. The description doesn't add parameter-specific information beyond what's in the schema, but with zero parameters requiring additional explanation, a baseline of 4 is appropriate as the description doesn't need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action ('반환합니다' - returns) and target resource ('사용 완료된 탭' - completed tab), but is somewhat vague about what 'idle 상태' (idle state) means in practice. It distinguishes from obvious siblings like 'close' (which would terminate) and 'launch' (which would create), but doesn't clearly differentiate from other tab management operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'close' or when tabs should be considered '사용 완료된' (completed). There's no mention of prerequisites, error conditions, or typical workflow context for releasing tabs to idle state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotC
페이지 스크린샷을 캡처합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 대상 탭 ID | |
| fullPage | No | 전체 페이지 캡처 여부 (기본: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action (captures a screenshot) but doesn't describe what happens (e.g., returns an image file, requires specific permissions, might fail if the tab is not visible, or has rate limits). This leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence in Korean that directly states the tool's purpose without any waste. It is appropriately sized and front-loaded, making it easy to understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a screenshot tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., image data, file path, or error handling), behavioral traits like permissions or side effects, or usage context. This makes it inadequate for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with clear descriptions for both parameters ('tabId' as target tab ID and 'fullPage' as full-page capture flag). The description doesn't add any meaning beyond what the schema provides, such as explaining how 'fullPage' affects the output or providing examples. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '페이지 스크린샷을 캡처합니다' (captures a page screenshot). It specifies the verb (captures) and resource (page screenshot), making the intent unambiguous. However, it doesn't differentiate from potential sibling tools like 'get_content', which might also retrieve page content but not necessarily as a screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an open tab), exclusions, or compare it to siblings like 'get_content' for text extraction. Usage is implied from the purpose but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
typeC
지정된 셀렉터의 입력 필드에 텍스트를 입력합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 대상 탭 ID | |
| selector | Yes | CSS 셀렉터 | |
| text | Yes | 입력할 텍스트 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the action (text input) but doesn't disclose critical traits like whether it waits for the element, handles errors if selector doesn't exist, requires the element to be visible/enabled, or what happens on failure. For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a straightforward tool and front-loads the core action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects (success/failure conditions, side effects), provide usage context, or explain what happens after text input. The 100% schema coverage helps with parameters, but overall context is lacking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (tabId, selector, text). The description adds no additional meaning beyond what the schema provides - it doesn't explain parameter relationships, constraints, or usage examples. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('입력합니다' - inputs/enters) and the target ('지정된 셀렉터의 입력 필드' - specified selector's input field). It distinguishes from siblings like 'click' or 'navigate' by focusing specifically on text input. However, it doesn't explicitly differentiate from all siblings (e.g., 'evaluate' could potentially also input text).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an open tab with the selector present), when not to use it (e.g., for non-input elements), or suggest sibling tools for related actions like 'click' for buttons or 'wait_for_selector' for element availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_selectorC
지정된 셀렉터가 DOM에 나타날 때까지 대기합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| tabId | Yes | 대상 탭 ID | |
| selector | Yes | CSS 셀렉터 | |
| timeout | No | 타임아웃 (ms, 기본: 30000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions waiting behavior but lacks critical details: whether it blocks execution, what happens on timeout (error or return), if it polls continuously, or any side effects. For a wait operation with zero annotation coverage, this is insufficient behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence in Korean that directly states the tool's function. It's front-loaded with the core purpose and has zero wasted words, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (interactive waiting with timeout), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like blocking nature, timeout handling, or return values, leaving significant gaps for an AI agent to understand how to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (tabId, selector, timeout) with descriptions. The description adds no additional meaning beyond the schema, such as selector format examples or timeout implications. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: '지정된 셀렉터가 DOM에 나타날 때까지 대기합니다' (waits until a specified selector appears in the DOM). It specifies the verb (wait) and resource (selector in DOM), but doesn't explicitly differentiate from sibling tools like 'get_content' or 'evaluate' which might also involve DOM interaction. The purpose is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., requires a launched browser/tab), when-not scenarios (e.g., avoid if selector already exists), or explicit alternatives among siblings. Usage is implied from context but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose with no overlap: click, type, and wait_for_selector handle user interactions; navigate, get_content, and screenshot manage page navigation and content; launch, close, get_pool_status, and release_tab control browser and tab lifecycle; evaluate executes JavaScript. The descriptions reinforce these distinctions, making misselection unlikely.
All tool names follow a consistent verb-based snake_case pattern (e.g., click, navigate, get_content, wait_for_selector). There are no deviations in style or convention, making the set predictable and easy to understand at a glance.
With 11 tools, the count is well-scoped for a Puppeteer automation server. It covers essential browser operations (launch, close), tab management (navigate, release_tab, get_pool_status), user interactions (click, type, wait_for_selector), content extraction (get_content, screenshot), and scripting (evaluate), with each tool earning its place.
The tool set provides complete coverage for browser automation: it includes lifecycle management (launch, close), navigation (navigate), user interactions (click, type, wait_for_selector), content handling (get_content, screenshot, evaluate), and tab pooling (get_pool_status, release_tab). No obvious gaps exist for typical Puppeteer workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Provides cloud browser automation capabilities using Stagehand and Browserbase, enabling LLMs to i…
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables LLMs to perform web browsing tasks, take screenshots, and execute JavaScript using Puppeteer for browser automation.428,3661MIT
- AlicenseAqualityBmaintenanceEnables browser automation with Puppeteer, supporting navigation, form interactions, and connection to active Chrome instances for comprehensive web page interaction.82,359482MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser through DevTools for automated testing, performance analysis, debugging, and web scraping. Provides reliable browser automation using Puppeteer with comprehensive DevTools access.3,288,1653Apache 2.0
- AlicenseBqualityDmaintenanceEnables AI agents to automate browser interactions including navigation, content extraction, form filling, screenshots, and JavaScript execution across multiple tabs using Puppeteer.27481MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/greatSumini/puppeteer-swarm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server