Skip to main content
Glama
iclaudiumihaila

MCP Safari Server

MCP Safari Server

License: MIT MCP Protocol

A Model Context Protocol (MCP) server that provides programmatic control of Safari browser on macOS. Perfect for web automation, testing, and debugging with AI assistants like Claude.

Overview

The Safari MCP Server enables AI assistants to interact with Safari browser through a standardized protocol. It provides tools for navigation, element interaction, JavaScript execution, and page monitoring, making it ideal for:

  • ๐Ÿค– AI-assisted web development and debugging

  • ๐Ÿงช Automated testing and QA

  • ๐Ÿ“Š Web scraping and data extraction

  • ๐Ÿ” Real-time error monitoring

  • ๐Ÿ“ธ Visual regression testing

Related MCP server: MCP Safari Server

Features

  • Navigate: Open URLs in Safari

  • Execute JavaScript: Run JS code in the current page context

  • Get Page Info: Retrieve current URL and page title

  • Take Screenshots: Capture the current Safari window

  • Console Logs: Capture and retrieve console.log, console.error, and console.warn messages

  • Page Navigation: Refresh, go back, or go forward in browser history

  • Automatic Error Monitoring: Monitor JavaScript errors and send them to Claude Code for immediate fixing

  • Click Elements: Click on page elements using CSS selectors

  • Type Text: Fill in forms and input fields

  • Scroll: Scroll to specific elements or positions

  • Select Options: Choose options from dropdown menus

  • Get Element Text: Extract text content from page elements

  • Wait for Elements: Wait for elements to appear before interacting

Installation

  1. Install dependencies:

cd mcp-safari-server
npm install
  1. Build the server:

npm run build

Configuration

Add this server to your Claude configuration file (.mcp.json or claude-code-config.json):

{
  "mcpServers": {
    "safari": {
      "command": "node",
      "args": ["/path/to/mcp-safari-server/dist/index.js"],
      "env": {}
    }
  }
}

Or for development:

{
  "mcpServers": {
    "safari": {
      "command": "npx",
      "args": ["tsx", "/path/to/mcp-safari-server/src/index.ts"],
      "env": {}
    }
  }
}

Usage

Once configured, Claude can use the following tools:

navigate

Navigate Safari to a URL:

Use the safari navigate tool to open https://example.com

execute_script

Execute JavaScript in the current page:

Use the safari execute_script tool to run: document.querySelector('h1').textContent

get_page_info

Get information about the current page:

Use the safari get_page_info tool to see the current URL and title

take_screenshot

Take a screenshot of the current Safari window:

Use the safari take_screenshot tool to capture the current page

get_console_logs

Retrieve console logs from the page:

Use the safari get_console_logs tool to see any console messages

refresh_page

Refresh the current page:

Use the safari refresh_page tool

go_back / go_forward

Navigate through browser history:

Use the safari go_back tool to go to the previous page

start_error_monitoring

Start monitoring JavaScript errors and automatically send them to Claude Code:

Use the safari start_error_monitoring tool

Options:

  • interval: Check interval in milliseconds (default: 2000)

  • autoSendToClaude: Automatically send errors to Claude Code (default: true)

stop_error_monitoring

Stop error monitoring:

Use the safari stop_error_monitoring tool

click_element

Click on an element in the page:

Use the safari click_element tool with selector "#submit-button"
Use the safari click_element tool with selector "a.nav-link" and waitForNavigation true

type_text

Type text into an input field:

Use the safari type_text tool with selector "#email" and text "user@example.com"
Use the safari type_text tool with selector "#password" and text "mypassword" and clearFirst false

scroll_to

Scroll to an element or position:

Use the safari scroll_to tool with selector "#footer"
Use the safari scroll_to tool with y 500 and behavior "smooth"

select_option

Select an option from a dropdown:

Use the safari select_option tool with selector "#country" and value "US"
Use the safari select_option tool with selector "#size" and text "Large"
Use the safari select_option tool with selector "#priority" and index 2

get_element_text

Get the text content of an element:

Use the safari get_element_text tool with selector "h1"
Use the safari get_element_text tool with selector ".error-message"

wait_for_element

Wait for an element to appear:

Use the safari wait_for_element tool with selector "#loading-complete"
Use the safari wait_for_element tool with selector ".modal" and timeout 5000

## Error Monitoring Feature

The Safari MCP server can automatically monitor JavaScript errors in your web application and send them to Claude Code for immediate fixing. This creates a powerful development workflow where:

1. You develop your web app
2. Safari MCP monitors for JavaScript errors
3. When errors occur, they're automatically sent to Claude Code
4. Claude can analyze the errors and suggest or implement fixes

### How Error Monitoring Works

When you start error monitoring, the server:

1. Injects JavaScript into the Safari page to capture:
   - Unhandled errors (window.onerror)
   - Unhandled promise rejections
   - Console.error calls

2. Checks for new errors at the specified interval (default: every 2 seconds)

3. If errors are found and Claude Code is active, sends a notification containing:
   - Error type and message
   - File location and line/column numbers
   - Stack traces
   - Current page URL
   - Timestamp

4. Claude Code receives the notification and can prompt you to fix the errors

### Example Workflow

1. Start your development server
2. Navigate to your app in Safari using the `navigate` tool
3. Start error monitoring with `start_error_monitoring`
4. As you interact with your app, any JavaScript errors will be captured
5. Claude Code will receive notifications about errors and can help fix them
6. Stop monitoring with `stop_error_monitoring` when done

## Requirements

- macOS (uses AppleScript to control Safari)
- Safari browser
- Node.js 16+

## Security Note

This server executes AppleScript commands to control Safari. Only use it in trusted environments and be careful with the JavaScript code you execute.

## Troubleshooting

1. **Safari automation permission**: You may need to grant Terminal/your IDE permission to control Safari in System Preferences > Security & Privacy > Privacy > Automation.

2. **Script execution errors**: Check that Safari is installed and not blocked by any security software.

3. **Console log capture**: The console log capture feature injects a script into the page. Some pages with strict Content Security Policies might block this.

Available Tools

16 tools
click_elementC

Click on an element in the page using CSS selector

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesCSS selector for the element to click
waitForNavigationNoWait for page navigation after click

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, description carries full burden but only states the basic action. No disclosure of waiting behavior, error handling, or side effects. waitForNavigation parameter's effect is implied but not explained.

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?

Single sentence is efficient, but might be too terse for an agent to fully understand the tool's behavior without relying on the schema.

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 sibling tools list, the description does not provide sufficient context about return values, error states, or when to prefer this tool over others (e.g., select_option for dropdowns).

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?

Schema provides complete parameter descriptions (100% coverage). The tool description adds no additional semantics beyond the schema, so baseline 3 is appropriate.

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?

Description clearly states the tool clicks an element using a CSS selector, but does not differentiate from sibling tools like select_option or type_text which also target elements.

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 click_element vs alternatives. Missing context about prerequisites or scenarios.

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

execute_scriptB

Execute JavaScript in the current Safari page

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesJavaScript code to execute

TDQS

B3/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 disclose behavior. It only states execution but does not mention whether results are returned, if the script has side effects, if it's destructive, or any other behavioral traits. This is a significant gap for a script execution tool.

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 one sentence, but it may be under-specified. While it is front-loaded, it lacks necessary details for effective use. It is not bloated, but conciseness should not come at the cost of completeness.

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?

With no output schema and no behavioral details, the description leaves the agent uncertain about what happens after execution (e.g., return value, side effects). For a tool that executes arbitrary code, this is insufficient for safe and effective invocation.

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?

Schema description coverage is 100% for the single parameter 'script', describing it as 'JavaScript code to execute'. The description adds no additional meaning beyond what the schema already provides. Baseline 3 is appropriate.

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 verb 'Execute' and the resource 'JavaScript in the current Safari page', making the purpose immediately obvious. It distinguishes from sibling tools like click_element or navigate, which perform different actions.

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?

The description provides no guidance on when to use this tool versus alternatives. No mention of prerequisites, when to avoid, or comparison to other tools. The agent has no context for appropriate usage.

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 from the current page

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/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 convey behavioral traits. It only states 'Get console logs from the current page' with no details about read-only nature, side effects, permission requirements, or return format.

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, front-loaded with the action and resource. It is concise, though it could include more detail without being verbose.

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 simple description, the tool lacks context. It does not describe the format of logs, whether logs are cleared, or if there are any side effects, making it incomplete for reliable use.

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 baseline is 4. The description adds meaning by specifying the resource ('console logs') and scope ('current page') beyond the empty schema.

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 verb 'Get' and the resource 'console logs' from 'the current page'. It is specific and distinguishes from sibling tools like click_element or navigate, which have different purposes.

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?

The description provides no guidance on when to use this tool versus alternatives, nor any context about prerequisites or typical scenarios. It simply states what it does.

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

get_element_textB

Get the text content of an element

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesCSS selector for the element

TDQS

B3.2/5.0
Behavior2/5

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

Without annotations, the description does not disclose behavioral traits like whether the tool reads only, what happens if the element is not found, or if there are any side effects. It leaves the agent without critical operational details.

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, front-loaded sentence of 8 words, which is efficient. However, it may be too terse for agents to fully understand behavior without additional context.

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's simplicity (one parameter, no output schema, no annotations), the description provides minimal but adequate information. It lacks details on return format, error handling, or the scope of 'text content', making it marginally complete.

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?

The schema already provides 100% coverage for the single parameter 'selector' with a clear description. The tool description adds no additional semantic value beyond what the schema offers.

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 tool's action (get) and resource (text content of an element). It effectively distinguishes from sibling tools like 'click_element' and 'type_text' by specifying the return of text content.

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 such as 'execute_script' or 'get_page_info'. There is no mention of context, 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_page_infoA

Get information about the current page (URL, title, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 disclose behavioral traits. It only states 'Get information', implying read-only but does not confirm safety, side effects, or whether it might block.

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

Conciseness5/5

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

A single sentence that is front-loaded with the verb and resource, no unnecessary words.

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?

No output schema exists, so the description must explain return values. It mentions URL and title but uses 'etc.' which is vague. Lacks explicit format or keys.

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 schema coverage is 100%. The description adds value by explaining the kind of information returned (URL, title, etc.), exceeding the empty schema.

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 verb 'Get' and the resource 'information about the current page', with explicit examples like URL and title. It distinguishes from sibling tools such as get_element_text or take_screenshot.

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

Usage Guidelines3/5

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

The description implies usage for retrieving page metadata but does not explicitly state when to use vs. alternatives or provide any exclusions.

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

go_backA

Navigate back in Safari history

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided. The description only states the basic action without disclosing behavioral traits such as behavior at the beginning of history, error conditions, or return values.

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

Conciseness5/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 information. No unnecessary words or details.

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's simplicity (no parameters, no output schema, no annotations), the description is minimally adequate. However, it could be improved by adding context like 'Returns to the previous page' or 'Has no effect if already at the beginning of history.'

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 no parameters, and schema coverage is 100%. The description adds no parameter information because none is needed. For a parameterless tool, this is sufficient.

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 'Navigate back in Safari history' clearly states the action (navigate back) and the resource (Safari history). It effectively distinguishes from the sibling tool 'go_forward'.

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

Usage Guidelines3/5

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

The description implies usage for going back in Safari history but provides no explicit guidance on when or when not to use it, nor mentions alternatives like 'navigate'.

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

go_forwardA

Navigate forward in Safari history

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations provided. Description only states action, omitting behavior like failure if no forward history or that it performs a page load. Burden is on description fully, so minimal disclosure.

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

Conciseness5/5

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

Extremely concise (1 sentence, 5 words) and front-loaded. No wasted words.

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?

Adequate for a parameterless, simple action. Could mention relationship to 'go_back' or history state, but not essential given sibling list.

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?

No parameters (schema coverage 100%). Description correctly adds no param info; baseline for 0 params is 4.

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?

Clear verb+resource: 'Navigate forward in Safari history'. Distinct from sibling 'go_back', which goes backward.

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

Usage Guidelines3/5

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

Implies usage for forward navigation but lacks explicit guidance on when to use vs alternatives, or prerequisites like forward history existence.

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

refresh_pageA

Refresh the current Safari page

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/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 convey behavioral traits. It only states the action, omitting potential side effects like discarding unsaved data or resetting page state. This is a notable gap.

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

Conciseness5/5

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

The description is a single clear sentence with no extraneous words. It is efficiently structured and front-loaded.

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?

For a simple, parameterless action, the description is sufficient for an agent to understand what the tool does. However, it could be enhanced with a note about the effect on the page state.

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 no parameters, and the schema is empty (100% coverage). The description does not need to add parameter details, so it meets the baseline for zero-parameter tools.

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 ('Refresh') and the specific resource ('the current Safari page'), distinguishing it from sibling navigation tools like navigate, go_back, or go_forward.

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

Usage Guidelines3/5

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

The description does not provide any guidance on when to use this tool versus alternatives. However, the tool's purpose is straightforward and needs no explicit comparison; a minimum viable score is appropriate.

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

scroll_toC

Scroll to a specific element or position

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoX coordinate to scroll to
yNoY coordinate to scroll to
behaviorNoScroll behavior
selectorNoCSS selector to scroll to

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description bears full burden. It only states the basic action, omitting behavioral details like scroll behavior, relative vs absolute scrolling, or behavior when both coordinates and selector are provided. Minimal disclosure beyond the name.

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?

Single sentence is concise but lacks structure. For 4 parameters with optional use cases, more detailed information would be warranted without being verbose. Current phrasing is minimal but not wasteful.

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?

Having 4 optional parameters with no output schema, the description is incomplete. It doesn't explain parameter interactions, default behavior, or scenarios for use. Leaves ambiguities for the agent.

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?

Schema coverage is 100% so each parameter has a description, giving a baseline of 3. The tool description adds no additional meaning to parameters; it doesn't clarify when to use coordinates versus selector or how to combine them.

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?

Description clearly states the tool scrolls to an element or position using verb+resource. It distinguishes from sibling tools like click_element or navigate, as scrolling is a distinct action. However, it could be more specific about what 'element or position' means.

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 on prerequisites or when not to use it. The description is a single sentence with no usage instructions.

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

select_optionC

Select an option from a dropdown

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoOption text to select
indexNoOption index to select
valueNoOption value to select
selectorYesCSS selector for the select element

TDQS

C2.9/5.0
Behavior2/5

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

Description provides no information on side effects (e.g., triggering change events), error conditions, or whether it waits for options to load. No annotations to compensate.

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?

Single sentence is concise and front-loaded, but could include additional context without becoming verbose.

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?

Lacks details on output (e.g., whether it returns success/failure), error handling, and typical use cases; no output schema to compensate.

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

Parameters2/5

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

Schema descriptions already cover each parameter, but the tool description adds no guidance on how to choose among text, index, and value parameters or their precedence.

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?

Description clearly states 'Select an option from a dropdown', which is a specific verb-resource pair that distinguishes it from sibling tools like click_element or type_text.

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, no mention of prerequisites or limitations such as that it works only on <select> elements.

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

start_error_monitoringC

Start monitoring Safari for JavaScript errors and optionally send them to Claude Code

ParametersJSON Schema
NameRequiredDescriptionDefault
intervalNoCheck interval in milliseconds (default: 2000)
autoSendToClaudeNoAutomatically send errors to Claude Code (default: true)

TDQS

C2.9/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. It only mentions monitoring and optional sending, but omits details like whether monitoring is continuous, side effects, permissions needed, or how to stop. This is insufficient for a tool that starts a persistent process.

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

Conciseness5/5

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

The description is a single sentence that conveys the core purpose without any redundant words. It is front-loaded and efficient.

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 what the tool returns (e.g., a monitoring ID, status) and how it integrates with stop_error_monitoring. It does not, leaving the lifecycle unclear.

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?

Both parameters have 100% schema coverage with clear descriptions. The tool description does not add semantic value beyond the schema, so the baseline score of 3 is appropriate.

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 monitoring) and the subject (Safari JavaScript errors), and adds the optional auto-send functionality. It is not a tautology and distinguishes from sibling tools like stop_error_monitoring, but does not explicitly differentiate.

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 given on when to use this tool versus alternatives like get_console_logs or stop_error_monitoring. The description implies use for starting monitoring but lacks context on prerequisites or exclusions.

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

stop_error_monitoringB

Stop monitoring Safari for JavaScript errors

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It fails to mention that the tool is effective only if monitoring is active, and does not describe any side effects or state changes.

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

Conciseness5/5

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

The description is a single sentence that directly conveys the tool's purpose. It is front-loaded and wastes no words.

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 parameters and output schema, the description should provide more context about the lifecycle of error monitoring, prerequisites, and relationship with sibling tools (e.g., start_error_monitoring). It is insufficient for an agent to use reliably.

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 no parameters, and schema coverage is 100%. The description adds no parameter info because none is needed. The absence of parameters is handled well by the concise statement of purpose.

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 ('Stop') and the resource ('monitoring Safari for JavaScript errors'). It effectively distinguishes from the sibling tool 'start_error_monitoring' which performs the opposite action.

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?

The description provides no guidance on when to use this tool versus alternatives. It is implicit that it should follow a prior call to start_error_monitoring, but no explicit context or conditions are given.

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

take_screenshotB

Take a screenshot of the current Safari window

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoFilename for the screenshot (optional)

TDQS

B3.3/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 fully disclose behavioral traits. It only states the action but omits details such as whether the screenshot is saved, returned, or how it behaves (e.g., full page vs. viewport). Minimal transparency.

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

Conciseness5/5

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

A single, concise sentence that efficiently conveys the tool's purpose with no fluff or redundancy.

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 simplicity (1 optional param, no output schema, no annotations), the description is adequate but lacks details about the output or side effects (e.g., what happens to the screenshot). Could be more complete.

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?

Schema coverage is 100% for the single optional parameter (filename). The description does not add any meaning beyond the schema, so baseline score of 3 applies.

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 ('Take a screenshot') and the target ('current Safari window'), using a specific verb-resource combination that distinguishes it from sibling tools like click_element or navigate.

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 when-not-to-use or context provided. The description simply states what it does without any usage context.

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

type_textB

Type text into an input element

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type into the element
selectorYesCSS selector for the input element
clearFirstNoClear the input before typing (default: true)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description is the sole source for behavioral disclosure. It fails to mention key behaviors such as whether the element is cleared before typing (clearFirst parameter exists in schema but not described here), whether it triggers input events, or if it requires the element to be focused or visible.

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. While efficient, it could benefit from mentioning the default behavior of clearFirst or a brief usage note. However, it is not verbose.

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?

As a simple action tool with 3 parameters and no output schema, the description covers the basic purpose. However, it omits details about return values, error conditions, and behavior with non-input elements. With 15 sibling tools, it is adequately but not thoroughly contextualized.

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?

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter meaning beyond what the schema already provides (text, selector, clearFirst). It simply restates the tool's purpose.

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 'Type text into an input element' clearly states the action (type), the resource (input element), and what is typed (text). It is specific and distinguishes the tool from siblings like click_element (click) and get_element_text (get text).

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?

The description provides no guidance on when to use this tool versus alternatives (e.g., execute_script for programmatic input, or navigate for URL changes). No usage conditions or exclusions are mentioned.

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

wait_for_elementC

Wait for an element to appear on the page

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoMaximum time to wait in milliseconds
visibleNoWait for element to be visible
selectorYesCSS selector to wait for

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description fails to disclose key behaviors like what happens on timeout (error vs boolean), whether it blocks, or if it modifies state. The bare description leaves significant gaps.

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 primary action. However, it could be slightly more informative without losing 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 has three parameters and no output schema, the description is incomplete. It does not explain return values, error handling, preconditions, or the effect of the timeout and visible parameters on behavior.

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?

Schema coverage is 100%, so the schema already describes the three parameters. The description adds no additional meaning or context about how the parameters interact or defaults, so baseline 3 is appropriate.

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 waits for an element on the page, distinguishing it from sibling tools like click_element or get_element_text. However, 'appear' is slightly ambiguous between existing in DOM and being visible, though the visible parameter clarifies.

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?

The description provides no guidance on when to use this tool versus alternatives, such as other wait mechanisms or handling timeouts. No mention of prerequisites or context.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv1.0.0
    • First observedclick_element
    • First observedexecute_script
    • First observedget_console_logs
    • First observedget_element_text
    • First observedget_page_info
    • First observedgo_back
    • First observedgo_forward
    • First observednavigate
    • First observedrefresh_page
    • First observedscroll_to
    • First observedselect_option
    • First observedstart_error_monitoring
    • First observedstop_error_monitoring
    • First observedtake_screenshot
    • First observedtype_text
    • First observedwait_for_element

TDQS

A3.6/5.0

Scored across 16 tools

Disambiguation5/5

Each tool targets a distinct action (navigation, interaction, inspection, monitoring). There is no overlap; for example, click_element, type_text, and select_option are clearly different operations.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., click_element, get_page_info, start_error_monitoring). Even directional commands like go_back adhere to the convention.

Tool Count5/5

16 tools is well-scoped for a Safari browser automation server. It provides sufficient functionality without being overwhelming.

Completeness4/5

The tool set covers essential browser operations: navigation, element interaction, page information, screenshots, script execution, console logs, and error monitoring. Minor gaps exist (e.g., no alert handling or window resizing), but core workflows are well-supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Provides AI assistants with Safari browser automation and developer tools access, enabling LLMs to control Safari, access console logs, monitor network activity, and perform browser automation tasks.
    13
    9 npm
    33
    MIT
  • -
    license
    A
    quality
    Not graded
    maintenance
    A server that provides AI assistants programmatic control of Safari browser on macOS for web automation, testing, and debugging.
    16
    1
    -