Skip to main content
Glama
withLinda

chrome-devtools-mcp-fork

by withLinda

⚠️ UNDER MAINTENANCE - This project is still being actively developed. Some features may be incomplete or change without notice.

Chrome DevTools MCP Fork

A Model Context Protocol (MCP) server that provides Chrome DevTools Protocol integration through MCP. This allows you to debug web applications by connecting to Chrome's developer tools.

Now available on PyPI for easy installation! Just run pip install chrome-devtools-mcp-fork

What This Does

This MCP server acts as a bridge between Claude and Chrome's debugging capabilities. Once installed in Claude Desktop, you can:

  • Connect Claude to any web application running in Chrome

  • Debug network requests, console errors, and performance issues

  • Inspect JavaScript objects and execute code in the browser context

  • Monitor your application in real-time through natural conversation with Claude

Note: This is an MCP server that runs within Claude Desktop - you don't need to run any separate servers or processes.

Related MCP server: @nimbus21.ai/chrome-devtools-mcp

Features

  • Network Monitoring: Capture and analyse HTTP requests/responses with filtering options

  • Console Integration: Read browser console logs, analyse errors, and execute JavaScript

  • Performance Metrics: Timing data, resource loading, and memory utilisation

  • Page Inspection: DOM information, page metrics, and multi-frame support

  • Storage Access: Read cookies, localStorage, and sessionStorage

  • Real-time Monitoring: Live console output tracking

  • Object Inspection: Inspect JavaScript objects and variables

Installation

Install from PyPI and add to Claude Code:

# Install the package
pip install chrome-devtools-mcp-fork

# Add to Claude Code CLI
claude mcp add chrome-devtools -s user chrome-devtools-mcp-fork

Option 1B: Claude Desktop Manual Setup

Install from PyPI:

pip install chrome-devtools-mcp-fork

Add to Claude Desktop config: Edit your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "chrome-devtools": {
      "command": "chrome-devtools-mcp-fork",
      "env": {
        "CHROME_DEBUG_PORT": "9222"
      }
    }
  }
}

Option 2: Development Installation (Advanced)

Clone and install for development:

git clone https://github.com/withLinda/chrome-devtools-mcp-fork.git
cd chrome-devtools-mcp-fork

# Install dependencies
uv sync  # recommended
# OR: pip install -e .

Configure with Claude Code CLI:

# Using local development setup
claude mcp add chrome-devtools python server.py -s user -e CHROME_DEBUG_PORT=9222

Configure with Claude Desktop:

{
  "mcpServers": {
    "chrome-devtools": {
      "command": "python",
      "args": ["/absolute/path/to/chrome-devtools-mcp-fork/server.py"],
      "env": {
        "CHROME_DEBUG_PORT": "9222"
      }
    }
  }
}

Verify Installation

For Claude Code CLI:

# Check if server is configured
claude mcp list

# Test server functionality
# Use any MCP tool in your next Claude Code session

For Claude Desktop:

  1. Restart Claude Desktop completely

  2. Look for MCP tools in the conversation

  3. Try a simple command: get_connection_status()

Alternative MCP Clients

For other MCP clients, you can run the server directly:

# If installed via PyPI
chrome-devtools-mcp-fork

# Or run from source
python server.py

Quick Start

Once installed in Claude Desktop, you can start debugging any web application:

Debug Your Web Application

One-step setup (recommended):

start_chrome_and_connect("localhost:3000")

Replace localhost:3000 with your application's URL

If Chrome isn't found automatically:

start_chrome_and_connect("localhost:3000", chrome_path="/path/to/chrome")

Use the chrome_path parameter to specify a custom Chrome location

This command will:

  • Start Chrome with debugging enabled

  • Navigate to your application

  • Connect the MCP server to Chrome

Manual setup (if you prefer step-by-step):

start_chrome()
navigate_to_url("localhost:3000")
connect_to_browser()

Start Debugging

Once connected, use these commands:

  • get_network_requests() - View HTTP traffic

  • get_console_error_summary() - Analyse JavaScript errors

  • inspect_console_object("window") - Inspect any JavaScript object

Available MCP Tools

Chrome Management

  • start_chrome(port?, url?, headless?, chrome_path?, auto_connect?) - Start Chrome with remote debugging and optional auto-connection

  • start_chrome_and_connect(url, port?, headless?, chrome_path?) - Start Chrome, connect, and navigate in one step

  • connect_to_browser(port?) - Connect to existing Chrome instance

  • navigate_to_url(url) - Navigate to a specific URL

  • disconnect_from_browser() - Disconnect from browser

  • get_connection_status() - Check connection status

Network Monitoring

  • get_network_requests(filter_domain?, filter_status?, limit?) - Get network requests with filtering

  • get_network_response(request_id) - Get detailed response data including body

Console Tools

  • get_console_logs(level?, limit?) - Get browser console logs

  • get_console_error_summary() - Get organized summary of errors and warnings

  • execute_javascript(code) - Execute JavaScript in browser context

  • clear_console() - Clear the browser console

  • inspect_console_object(expression) - Deep inspect any JavaScript object

  • monitor_console_live(duration_seconds) - Monitor console output in real-time

Page Analysis

  • get_page_info() - Get comprehensive page metrics and performance data

  • evaluate_in_all_frames(code) - Execute JavaScript in all frames/iframes

  • get_performance_metrics() - Get detailed performance metrics and resource timing

Storage & Data

  • get_storage_usage_and_quota(origin) - Get storage usage and quota information

  • clear_storage_for_origin(origin, storage_types?) - Clear storage by type and origin

  • get_all_cookies() - Get all browser cookies

  • clear_all_cookies() - Clear all browser cookies

  • set_cookie(name, value, domain, path?, expires?, http_only?, secure?, same_site?) - Set a cookie

  • get_cookies(domain?) - Get browser cookies with optional domain filtering

  • get_storage_key_for_frame(frame_id) - Get storage key for a specific frame

  • track_cache_storage(origin, enable?) - Enable/disable cache storage tracking

  • track_indexeddb(origin, enable?) - Enable/disable IndexedDB tracking

  • override_storage_quota(origin, quota_size_mb?) - Override storage quota

Use Cases

Debugging API Calls in Your Web Application

When your web application makes API calls that fail or return unexpected data:

Easy setup: Use the one-step command to start Chrome and navigate to your app:

Example workflow:

You: "I need to debug my React app at localhost:3000"
Claude: I'll start Chrome with debugging enabled and navigate to your app.

start_chrome_and_connect("localhost:3000")

Perfect! Chrome is now running with debugging enabled and connected to your app. Let me check for any failed network requests:

get_network_requests(filter_status=500)

I can see there are 3 failed requests to your API. Let me get the details of the first one:

get_network_response("request-123")

Manual setup (if you prefer):

  1. Start Chrome: Use start_chrome()

  2. Navigate to your app: Use navigate_to_url("localhost:3000")

  3. Connect: Use connect_to_browser()

  4. Monitor network traffic: Use get_network_requests() to see all API calls

Checking JavaScript Console Errors

When your web application has JavaScript errors or unexpected behaviour:

  1. Navigate to your application in the connected Chrome instance

  2. Check for console errors: Use get_console_error_summary() to see all errors

  3. Monitor live errors: Use monitor_console_live(10) to watch for new errors as you interact

  4. Inspect variables: Use inspect_console_object("myVariable") to examine application state

Example workflow:

You: "My React component isn't updating properly"
Claude: Let me check the JavaScript console for any errors.

get_console_error_summary()

I can see there are 2 JavaScript errors. Let me also monitor the console while you interact with the component:

monitor_console_live(15)

Now try clicking the component that isn't working. I'll watch for any new errors or warnings.

Performance Debugging

When your web application loads slowly or uses too much memory:

  1. Load your application in the connected browser

  2. Check page metrics: Use get_page_info() to see load times and resource counts

  3. Analyse performance: Use get_performance_metrics() to see detailed timing data

  4. Monitor memory usage: Check the memory information in the performance metrics

Example workflow:

You: "My application takes too long to load"
Claude: Let me analyse the performance of your application.

get_page_info()

I can see your page has 47 scripts and took 3.2 seconds to load. Let me get more detailed performance data:

get_performance_metrics()

The main bottleneck is the initial JavaScript bundle which is 2.1MB. The DOM processing also takes 800ms.

Debugging Authentication Issues

When login or session management isn't working:

  1. Navigate to your login page

  2. Check cookies: Use get_cookies() to see authentication cookies

  3. Monitor network during login: Use monitor_console_live() and get_network_requests() during the login process

  4. Examine stored data: Use JavaScript execution to check localStorage/sessionStorage

Example workflow:

You: "Users can't stay logged in"
Claude: Let me check the authentication setup.

get_cookies()

I can see the auth cookie is present. Let me check what happens during login by monitoring the network:

get_network_requests(filter_domain="your-api.com")

I notice the login request returns a 200 but no Set-Cookie header. Let me also check localStorage:

execute_javascript("Object.keys(localStorage)")

DOM Element Inspection

  • get_document(depth?, pierce?) - Retrieve DOM document structure

  • query_selector(node_id, selector) - Find single element by CSS selector

  • query_selector_all(node_id, selector) - Find multiple elements by CSS selector

  • get_element_attributes(node_id) - Get all attributes of an element

  • get_element_outer_html(node_id) - Get outer HTML of an element

  • get_element_box_model(node_id) - Get layout information

  • describe_element(node_id, depth?) - Get detailed element description

  • get_element_at_position(x, y) - Get element at screen position

  • search_elements(query) - Search DOM elements by text/attributes

  • focus_element(node_id) - Focus a DOM element

CSS Style Analysis

  • get_computed_styles(node_id) - Get computed CSS styles

  • get_inline_styles(node_id) - Get inline styles

  • get_matched_styles(node_id) - Get all CSS rules matching an element

  • get_stylesheet_text(stylesheet_id) - Get stylesheet content

  • get_background_colors(node_id) - Get background colors and fonts

  • get_platform_fonts(node_id) - Get platform font information

  • get_media_queries() - Get all media queries

  • collect_css_class_names(stylesheet_id) - Collect CSS class names

  • start_css_coverage_tracking() - Start CSS coverage tracking

  • stop_css_coverage_tracking() - Stop and get CSS coverage results

Common Commands

Task

Command

Start Chrome and connect to app

start_chrome_and_connect("localhost:3000")

Start Chrome (manual setup)

start_chrome()

Navigate to page

navigate_to_url("localhost:3000")

Connect to browser

connect_to_browser()

See all network requests

get_network_requests()

Find failed API calls

get_network_requests(filter_status=404)

Check for JavaScript errors

get_console_error_summary()

Watch console in real-time

monitor_console_live(10)

Check page load performance

get_page_info()

Examine a variable

inspect_console_object("window.myApp")

View cookies

get_cookies()

Run JavaScript

execute_javascript("document.title")

Configuration

Environment Variables

  • CHROME_DEBUG_PORT - Chrome remote debugging port (default: 9222)

MCP Compatibility

  • MCP Protocol Version: 2024-11-05

  • Minimum Python Version: 3.10+

  • Supported MCP Clients: Claude Desktop, any MCP-compatible client

  • Package Manager: uv (recommended) or pip

Usage Workflow

Prerequisites (Your Development Environment)

  • Have your web application running (e.g., npm run dev, python -m http.server, etc.)

  • Note the URL where your application is accessible

Debugging Session

  1. Connect to your application via Claude Desktop:

    start_chrome_and_connect("localhost:3000")

    Replace with your application's URL

  2. Debug your application using the MCP tools:

    • Monitor network requests

    • Check console errors

    • Inspect JavaScript objects

    • Analyse performance

  3. Make changes to your code in your editor

  4. Refresh or interact with your application

  5. Continue debugging with real-time data

Manual Connection (Alternative)

If you prefer step-by-step control:

  1. start_chrome() - Launch Chrome with debugging

  2. navigate_to_url("your-app-url") - Navigate to your application

  3. connect_to_browser() - Connect the MCP server

  4. Use debugging tools as needed

Security Notes

  • Only use with development environments

  • Never connect to production Chrome instances

  • The server is designed for localhost debugging only

  • No data is stored permanently - all data is session-based

Troubleshooting

Server Shows as "Disabled" in Claude Desktop

If the server appears in Claude but shows as "disabled", try these steps:

  1. Check Claude Desktop logs:

    • macOS: ~/Library/Logs/Claude/mcp*.log

    • Windows: %APPDATA%/Claude/logs/mcp*.log

  2. Common fixes:

    # Reinstall with verbose output
    mcp remove "Chrome DevTools MCP"
    mcp install server.py -n "Chrome DevTools MCP" --with-editable . -v CHROME_DEBUG_PORT=9222
    
    # Check installation status
    mcp list
    
    # Test the server manually
    python3 server.py
  3. Check dependencies:

    # Ensure all dependencies are available
    pip install mcp websockets aiohttp
    
    # Test imports
    python3 -c "from server import mcp; print('OK')"
  4. Restart Claude Desktop completely (quit and reopen)

Installation Issues

  • MCP CLI not found: Install MCP CLI with pip install mcp or npm install -g @modelcontextprotocol/cli

  • Server not appearing in Claude:

    • For MCP CLI: Run mcp list to verify the server is installed

    • For manual setup: Check Claude Desktop configuration file path and JSON syntax

  • Import errors:

    • For MCP CLI: Use --with-editable . to install local dependencies

    • For manual setup: Run pip install -r requirements.txt

  • Permission errors: Use absolute paths in configuration

  • Environment variables not working: Verify .env file format or -v flag syntax

  • Module not found: Ensure you're using --with-editable . flag for local package installation

Debugging Steps

Step 1: Check MCP CLI Status

# List all installed servers
mcp list

# Check specific server status
mcp status "Chrome DevTools MCP"

Step 2: Test Server Manually

# Test if server starts without errors
python3 server.py

# Test imports
python3 -c "from server import mcp; print(f'Server: {mcp.name}')"

Step 3: Check Configuration

For Claude Desktop:

# View current configuration (macOS)
cat "~/Library/Application Support/Claude/claude_desktop_config.json"

# View current configuration (Windows)
type "%APPDATA%/Claude/claude_desktop_config.json"

For Claude Code:

# List configured MCP servers
claude mcp list

# Get details about a specific server
claude mcp get chrome-devtools

# Check if server is working
claude mcp serve --help

Step 4: Reinstall if Needed

For MCP CLI:

# Clean reinstall
mcp remove "Chrome DevTools MCP"
mcp install server.py -n "Chrome DevTools MCP" --with-editable .

# Restart Claude Desktop completely

For Claude Code:

# Remove and re-add the server
claude mcp remove chrome-devtools
claude mcp add chrome-devtools python server.py -e CHROME_DEBUG_PORT=9222

# Or update with different scope
claude mcp add chrome-devtools python server.py -s user -e CHROME_DEBUG_PORT=9222

Common Error Messages

Error

Solution

"Module not found"

Use --with-editable . flag

"No server object found"

Server should export mcp object (already fixed)

"Import error"

Check pip install mcp websockets aiohttp

"Permission denied"

Use absolute paths in config

"Server disabled"

Check Claude Desktop logs, restart Claude

Manual Configuration Fallback

For Claude Desktop: If MCP CLI isn't working, add this to Claude Desktop config manually:

{
  "mcpServers": {
    "chrome-devtools": {
      "command": "python3",
      "args": ["/absolute/path/to/chrome-devtools-mcp/server.py"],
      "env": {
        "CHROME_DEBUG_PORT": "9222"
      }
    }
  }
}

For Claude Code: If the claude mcp add command isn't working, you can use the JSON format:

# Add server using JSON configuration
claude mcp add-json chrome-devtools '{
  "command": "python3",
  "args": ["'$(pwd)'/server.py"],
  "env": {
    "CHROME_DEBUG_PORT": "9222"
  }
}'

# Or import from Claude Desktop if you have it configured there
claude mcp add-from-claude-desktop

Connection Issues

  • Chrome won't start: The MCP server will start Chrome automatically when you use start_chrome()

  • Can't connect: Try get_connection_status() to check the connection

  • Tools not working: Ensure you've called connect_to_browser() or used start_chrome_and_connect()

Common Misconceptions

  • This is not a web server: The MCP server runs inside Claude Desktop, not as a separate web service

  • No separate installation needed: Once configured in Claude Desktop, the server starts automatically

  • Your app runs separately: This tool connects to your existing web application, it doesn't run it

Development & Testing

This section is for developers who want to test or modify the MCP server itself.

Development Setup

With uv (recommended):

git clone https://github.com/withLinda/chrome-devtools-mcp-fork.git
cd chrome-devtools-mcp-fork
uv sync

With pip:

git clone https://github.com/withLinda/chrome-devtools-mcp-fork.git
cd chrome-devtools-mcp-fork
pip install -e ".[dev]"

Code Quality Tools

# Format code
uv run ruff format .

# Lint code  
uv run ruff check .

# Type checking
uv run mypy src/

Building the Extension

Install DXT packaging tools:

npm install -g @anthropic-ai/dxt

Build the extension:

# Quick build
make package

# Or manually
npx @anthropic-ai/dxt pack

Using Makefile for development:

make help           # Show all commands
make install        # Install dependencies
make dev            # Setup development environment + pre-commit
make check          # Run all checks (lint + type + test)
make pre-commit     # Run pre-commit hooks manually
make package        # Build .dxt extension
make release        # Full release build

Pre-commit Hooks

This project uses pre-commit hooks to ensure code quality:

  • ruff: Linting and formatting

  • mypy: Type checking

  • pytest: Test validation

  • MCP validation: Server registration check

Pre-commit hooks run automatically on git commit and can be run manually with make pre-commit.

License

MIT License

Available Tools

12 tools
clear_consoleB

Clear console (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses it is a placeholder implementation, which suggests limited or incomplete functionality. With no annotations, the description carries the behavioral disclosure burden; it partially addresses it but lacks specifics on what happens when called (e.g., whether it truly clears logs or does nothing).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the key action. However, it omits usage guidance and behavioral details, which would improve value without adding much length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 output schema, and a straightforward action, the description is minimally complete. The placeholder note adds necessary context about reliability, but it does not explain the impact (e.g., logs are lost) or whether the tool is functional. Sibling tools like get_console_logs provide related context but description could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and the schema coverage is 100% (trivially). The description adds no parameter information, but baseline for zero parameters is 4. The action is simple with no inputs, so no additional semantics needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Clear console' and includes the verb 'clear' with resource 'console'. It is distinct from sibling tools like get_console_logs. However, the note '(placeholder implementation)' may reduce confidence and clarity about actual functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, or any prerequisites. The description does not mention context or exclusions, leaving the agent without direction beyond the basic action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connect_to_browserC

Connect to a running Chrome instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must carry the full burden. It only says 'Connect' with no details on side effects, permissions, state changes, or failure modes. The behavioral impact is entirely opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, but it is under-specified. It earns its place by stating the purpose, but misses essential details that could be added without much verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema exists), the description is incomplete. It does not explain return values, prerequisites, or how it differs from similar tools. The output schema could fill gaps, but the description itself is lacking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'port' has a default but no description in the schema or tool description. Schema description coverage is 0%, and the description adds no meaning—it doesn't explain that port is the debugging port or how it should be set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Connect') and the resource ('a running Chrome instance'). It distinguishes from sibling tools like 'start_chrome' and 'start_chrome_and_connect' which deal with starting the browser, not connecting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. It does not mention prerequisites (e.g., Chrome must already be running) or scenarios where connecting is preferred over starting a new instance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_cookiesC

Get all cookies (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description must fully explain behavior. It only says 'placeholder implementation', suggesting incompleteness, but fails to disclose what the tool actually does or its limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very short, but the 'placeholder implementation' note adds necessary caveat while being somewhat vague. Could be more informative without adding length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a bare description, the tool is incomplete. It does not explain return values, behavior, or reliability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema is empty with 0 parameters, and schema description coverage is 100%. Baseline for such cases is 3. The description adds no parameter-specific meaning but the schema is trivial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Get all cookies' which is a clear verb+resource, but the 'placeholder implementation' qualifier reduces confidence and clarity. It distinguishes from sibling tools which do not mention cookies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. No context provided about prerequisites or appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_computed_stylesD

Get computed styles (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault
node_idYes

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only says 'placeholder implementation', failing to describe what 'computed styles' entails, whether the call is destructive, or any side effects. This is severely lacking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise, but it sacrifices necessary information for brevity. Every word should earn its place; here, '(placeholder implementation)' is not helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter, no output schema, and no annotations, the description is required to be complete. It is not; it omits what computed styles are, what the output looks like, and any usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema shows one required parameter 'node_id' with no description. The tool's description adds no meaning beyond the schema, and with 0% schema description coverage, the description should compensate but does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('get computed styles'), but qualifies it as '(placeholder implementation)', which undermines clarity. It differentiates from siblings like 'get_document', but the placeholder status may confuse the agent about actual functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or when not to use it. The description does not mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connection_statusB

Get current connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states only 'Get current connection status', implying a read-only operation but offers no details on response behavior (e.g., what happens if disconnected), error handling, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with four words forming a complete sentence. It is front-loaded and wastes no words. However, it is so brief that it might be considered under-specified rather than efficiently concise, missing opportunities to add value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, no nested objects) and the presence of an output schema, the description is essentially complete. It does not need to explain return values, but it could clarify what 'connection status' means. Overall adequate for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and the empty input schema is fully covered by the description. The description adds contextual meaning by specifying 'current connection status', but does not elaborate on the nature of the status value. Baseline for zero parameters is 4, but the lack of semantic depth reduces it to 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get current connection status' uses a specific verb 'Get' and clearly identifies the resource 'connection status'. It differentiates itself from siblings like 'connect_to_browser' which establish connections, making its purpose distinct and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or when to avoid it, leaving the agent without direction for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_console_logsB

Get console logs (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the tool is a 'placeholder implementation', signaling it may not be fully functional. However, it does not specify what happens when called (e.g., returns logs, errors, or empty output).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence) but includes the necessary purpose and a caveat. Could be more informative without being verbose, but it avoids waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has zero parameters, no output schema, and no annotations, the description should provide more context about what 'console logs' means, the return format, and whether it requires a browser connection. Acknowledging it as a placeholder indicates incompleteness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters, so description need not add param info. Baseline is 4, and the description does not add anything beyond that, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'console logs', indicating the tool retrieves console logs. However, the qualifier 'placeholder implementation' adds uncertainty about functionality. It distinguishes from sibling 'clear_console' which clears logs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'clear_console' or when to avoid it. The description does not mention prerequisites, contexts, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_documentC

Get DOM document (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden of behavioral disclosure. 'Placeholder implementation' suggests incomplete functionality but does not specify what actually happens (e.g., returns null, throws error, partial result). The behavior is opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at 5 words, but it sacrifices necessary detail. It is not efficiently informative; it earns its place only to state the resource and placeholder nature. A 3 is appropriate for minimalism without substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of output schema and annotations, the description should provide more context about return values, error states, and side effects. The 'placeholder' note partially addresses completeness but leaves major gaps for a tool with one parameter and no other structured documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'depth' has a default of 1 and no description in the schema (schema coverage 0%). The description adds no explanation of what depth means or how it affects the result. This leaves the agent without critical information to correctly invoke the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it gets a DOM document, which is specific. However, 'placeholder implementation' implies it may not be fully functional, creating ambiguity about what the tool actually does. It distinguishes from siblings like 'get_computed_styles' but lacks clarity on its current state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as 'get_computed_styles' or 'get_console_logs'. There is no mention of prerequisites or scenarios where it should be avoided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_network_requestsC

Get network requests (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The 'placeholder implementation' note discloses incomplete behavior, which is useful. However, without annotations or further detail, the description does not reveal return format, side effects, or reliability beyond the placeholder hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and front-loaded. No unnecessary words, though it could be more informative without losing brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and annotations, the description should explain return values and behavior. 'Placeholder implementation' gives a hint but is insufficient; the agent cannot determine how to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema fully covers parameter semantics. The description does not need to add meaning beyond what the schema provides, meeting the baseline for 0 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Get network requests' which is a clear verb+noun pair, but the parenthetical 'placeholder implementation' introduces ambiguity about whether the tool actually works, reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus sibling tools like get_console_logs or get_performance_metrics. The description fails to specify context or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_performance_metricsC

Get performance metrics (placeholder implementation).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the burden falls on the description. The phrase 'placeholder implementation' indicates incomplete or non-functional behavior, but no side effects, safety, or return expectations are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise, but it is too brief to be fully effective. It does not waste words but lacks sufficient detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and a placeholder implementation, the description is insufficient. An agent cannot determine what this tool returns or if it is usable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and schema description coverage is 100%. The description adds no parameter info, but with no parameters, baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Get performance metrics' which is a specific verb and resource, but the qualifier '(placeholder implementation)' undermines clarity about actual functionality. It does not distinguish from sibling tools like get_all_cookies or get_computed_styles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool or when to avoid it. The placeholder status is mentioned but not explained in terms of limitations or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_chromeC

Start Chrome with remote debugging enabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo
headlessNo
chrome_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions remote debugging but lacks detail on practical effects: e.g., does it open a visible window? Is it blocking? What happens if Chrome is already running? With no annotations, the description carries full burden and is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (a single sentence), which is efficient but misses essential details. It is not structured with bullet points or sections to aid readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of three parameters and an output schema (likely returning connection details), the description is too sparse. It does not explain return values, parameter effects, or any usage context beyond the basic action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides zero information about the three parameters (port, headless, chrome_path). Since schema_description_coverage is 0%, the description must compensate, but it adds no meaning beyond the schema's names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Start Chrome) and the key feature (remote debugging enabled). However, it does not differentiate from sibling tools like 'start_chrome_and_connect', which likely performs a similar initial step but includes an immediate connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. For instance, it does not indicate that 'start_chrome_and_connect' might be preferred for a combined start-and-connect workflow, or that this tool is standalone for manual connection later.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_chrome_and_connectC

Start Chrome and connect in one operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
portNo
headlessNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but fails to disclose key behaviors: what happens if Chrome is already running, whether it modifies existing instances, or what the return value contains. The existence of an output schema is not leveraged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (one short sentence), which is efficient, but it lacks structure or any breakdown of the operation. It borders on under-specification rather than true conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool combines two distinct operations (start and connect), the description is incomplete. It does not cover error scenarios, prerequisites (e.g., Chrome installation), or the nature of the connection. The output schema exists but is not referenced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, yet the description does not explain any parameter (url, port, headless). Default values and required fields are not clarified, leaving the agent to guess their meaning and usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool combines starting Chrome and connecting in one operation. It distinguishes itself from sibling tools like 'start_chrome' and 'connect_to_browser' by implying combined functionality, but lacks specificity about what 'start' and 'connect' entail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus the separate siblings. There is no mention of prerequisites, when not to use it, or scenarios better suited for individual tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

C2.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but start_chrome, connect_to_browser, and start_chrome_and_connect overlap in domain, though descriptions clarify their roles.

Naming Consistency5/5

All tools use consistent snake_case verb_noun pattern (e.g., clear_console, navigate_to_url), with no mixing of conventions.

Tool Count5/5

12 tools is well-scoped for Chrome DevTools operations, covering essential actions without being overly numerous.

Completeness2/5

Many tools are placeholder implementations, and the set lacks fundamental interactions like executing JavaScript, modifying cookies, or element manipulation, leaving significant gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Bridges browser content, developer tools data, and web page interactions with Claude through MCP. Enables page inspection, DOM analysis, JavaScript execution, console monitoring, network activity tracking, and screenshot capture across multiple browser tabs.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude Code to control a real browser using AI for web scraping, competitive intelligence, and UX auditing through the MCP protocol.
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables browser automation through the Claude Chrome Extension, allowing agents to navigate websites, fill forms, take screenshots, and debug web apps via standard MCP protocols.
    1
    MIT

Latest Blog Posts

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/withLinda/chrome-devtools-mcp-fork'

If you have feedback or need assistance with the MCP directory API, please join our Discord server