chrome-devtools-mcp-fork
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., "@chrome-devtools-mcp-forkIdentify slow network requests on my site"
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.
⚠️ 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
Option 1A: Claude Code CLI (Recommended)
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-forkOption 1B: Claude Desktop Manual Setup
Install from PyPI:
pip install chrome-devtools-mcp-forkAdd to Claude Desktop config: Edit your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%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=9222Configure 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 sessionFor Claude Desktop:
Restart Claude Desktop completely
Look for MCP tools in the conversation
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.pyQuick 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 trafficget_console_error_summary()- Analyse JavaScript errorsinspect_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-connectionstart_chrome_and_connect(url, port?, headless?, chrome_path?)- Start Chrome, connect, and navigate in one stepconnect_to_browser(port?)- Connect to existing Chrome instancenavigate_to_url(url)- Navigate to a specific URLdisconnect_from_browser()- Disconnect from browserget_connection_status()- Check connection status
Network Monitoring
get_network_requests(filter_domain?, filter_status?, limit?)- Get network requests with filteringget_network_response(request_id)- Get detailed response data including body
Console Tools
get_console_logs(level?, limit?)- Get browser console logsget_console_error_summary()- Get organized summary of errors and warningsexecute_javascript(code)- Execute JavaScript in browser contextclear_console()- Clear the browser consoleinspect_console_object(expression)- Deep inspect any JavaScript objectmonitor_console_live(duration_seconds)- Monitor console output in real-time
Page Analysis
get_page_info()- Get comprehensive page metrics and performance dataevaluate_in_all_frames(code)- Execute JavaScript in all frames/iframesget_performance_metrics()- Get detailed performance metrics and resource timing
Storage & Data
get_storage_usage_and_quota(origin)- Get storage usage and quota informationclear_storage_for_origin(origin, storage_types?)- Clear storage by type and originget_all_cookies()- Get all browser cookiesclear_all_cookies()- Clear all browser cookiesset_cookie(name, value, domain, path?, expires?, http_only?, secure?, same_site?)- Set a cookieget_cookies(domain?)- Get browser cookies with optional domain filteringget_storage_key_for_frame(frame_id)- Get storage key for a specific frametrack_cache_storage(origin, enable?)- Enable/disable cache storage trackingtrack_indexeddb(origin, enable?)- Enable/disable IndexedDB trackingoverride_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):
Start Chrome: Use
start_chrome()Navigate to your app: Use
navigate_to_url("localhost:3000")Connect: Use
connect_to_browser()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:
Navigate to your application in the connected Chrome instance
Check for console errors: Use
get_console_error_summary()to see all errorsMonitor live errors: Use
monitor_console_live(10)to watch for new errors as you interactInspect 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:
Load your application in the connected browser
Check page metrics: Use
get_page_info()to see load times and resource countsAnalyse performance: Use
get_performance_metrics()to see detailed timing dataMonitor 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:
Navigate to your login page
Check cookies: Use
get_cookies()to see authentication cookiesMonitor network during login: Use
monitor_console_live()andget_network_requests()during the login processExamine 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 structurequery_selector(node_id, selector)- Find single element by CSS selectorquery_selector_all(node_id, selector)- Find multiple elements by CSS selectorget_element_attributes(node_id)- Get all attributes of an elementget_element_outer_html(node_id)- Get outer HTML of an elementget_element_box_model(node_id)- Get layout informationdescribe_element(node_id, depth?)- Get detailed element descriptionget_element_at_position(x, y)- Get element at screen positionsearch_elements(query)- Search DOM elements by text/attributesfocus_element(node_id)- Focus a DOM element
CSS Style Analysis
get_computed_styles(node_id)- Get computed CSS stylesget_inline_styles(node_id)- Get inline stylesget_matched_styles(node_id)- Get all CSS rules matching an elementget_stylesheet_text(stylesheet_id)- Get stylesheet contentget_background_colors(node_id)- Get background colors and fontsget_platform_fonts(node_id)- Get platform font informationget_media_queries()- Get all media queriescollect_css_class_names(stylesheet_id)- Collect CSS class namesstart_css_coverage_tracking()- Start CSS coverage trackingstop_css_coverage_tracking()- Stop and get CSS coverage results
Common Commands
Task | Command |
Start Chrome and connect to app |
|
Start Chrome (manual setup) |
|
Navigate to page |
|
Connect to browser |
|
See all network requests |
|
Find failed API calls |
|
Check for JavaScript errors |
|
Watch console in real-time |
|
Check page load performance |
|
Examine a variable |
|
View cookies |
|
Run JavaScript |
|
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
Connect to your application via Claude Desktop:
start_chrome_and_connect("localhost:3000")Replace with your application's URL
Debug your application using the MCP tools:
Monitor network requests
Check console errors
Inspect JavaScript objects
Analyse performance
Make changes to your code in your editor
Refresh or interact with your application
Continue debugging with real-time data
Manual Connection (Alternative)
If you prefer step-by-step control:
start_chrome()- Launch Chrome with debuggingnavigate_to_url("your-app-url")- Navigate to your applicationconnect_to_browser()- Connect the MCP serverUse 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:
Check Claude Desktop logs:
macOS:
~/Library/Logs/Claude/mcp*.logWindows:
%APPDATA%/Claude/logs/mcp*.log
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.pyCheck dependencies:
# Ensure all dependencies are available pip install mcp websockets aiohttp # Test imports python3 -c "from server import mcp; print('OK')"Restart Claude Desktop completely (quit and reopen)
Installation Issues
MCP CLI not found: Install MCP CLI with
pip install mcpornpm install -g @modelcontextprotocol/cliServer not appearing in Claude:
For MCP CLI: Run
mcp listto verify the server is installedFor manual setup: Check Claude Desktop configuration file path and JSON syntax
Import errors:
For MCP CLI: Use
--with-editable .to install local dependenciesFor manual setup: Run
pip install -r requirements.txt
Permission errors: Use absolute paths in configuration
Environment variables not working: Verify
.envfile format or-vflag syntaxModule 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 --helpStep 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 completelyFor 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=9222Common Error Messages
Error | Solution |
"Module not found" | Use |
"No server object found" | Server should export |
"Import error" | Check |
"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-desktopConnection 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 connectionTools not working: Ensure you've called
connect_to_browser()or usedstart_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 syncWith 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/dxtBuild the extension:
# Quick build
make package
# Or manually
npx @anthropic-ai/dxt packUsing 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 buildPre-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 toolsclear_consoleB
Clear console (placeholder implementation).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| node_id | Yes |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| headless | No | ||
| chrome_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| port | No | ||
| headless | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
Most tools have distinct purposes, but start_chrome, connect_to_browser, and start_chrome_and_connect overlap in domain, though descriptions clarify their roles.
All tools use consistent snake_case verb_noun pattern (e.g., clear_console, navigate_to_url), with no mixing of conventions.
12 tools is well-scoped for Chrome DevTools operations, covering essential actions without being overly numerous.
Many tools are placeholder implementations, and the set lacks fundamental interactions like executing JavaScript, modifying cookies, or element manipulation, leaving significant gaps.
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
Live browser debugging for AI assistants — DOM, console, network via MCP.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Claude Code / MCP skills for the dev pipeline: discover, spec, design, build, ship, operate.
Monitoring + status pages set up by talking to Claude. Auto-detects 30+ SDKs and your URLs.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceBridges 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
- AlicenseNot gradedqualityCmaintenanceLets AI coding agents control and inspect a live Chrome browser via MCP, providing Chrome DevTools capabilities for automation, debugging, and performance analysis.17Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables Claude Code to control a real browser using AI for web scraping, competitive intelligence, and UX auditing through the MCP protocol.
- AlicenseNot gradedqualityDmaintenanceEnables browser automation through the Claude Chrome Extension, allowing agents to navigate websites, fill forms, take screenshots, and debug web apps via standard MCP protocols.1MIT
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/withLinda/chrome-devtools-mcp-fork'
If you have feedback or need assistance with the MCP directory API, please join our Discord server