Skip to main content
Glama

nodriver-mcp

A local Codex MCP server for authenticated browser research with nodriver. It keeps a dedicated Chromium/Helium profile between runs and hot-reloads task-specific Python scrapers.

Setup

Requires Python 3.11+, uv, and a Chromium-based browser.

uv sync --locked

Add this to ~/.codex/config.toml, replacing every placeholder with an absolute path:

[mcp_servers.nodriver]
command = "uv"
args = ["--directory", "<path-to-nodriver-mcp>", "run", "--frozen", "nodriver-mcp"]
startup_timeout_sec = 30
tool_timeout_sec = 600

[mcp_servers.nodriver.env]
NODRIVER_MCP_BROWSER_EXECUTABLE = "<path-to-helium-or-chromium>"
NODRIVER_MCP_USER_DATA_DIR = "<path-to-a-dedicated-browser-profile>"
NODRIVER_MCP_SCRIPTS_DIR = "<path-to-nodriver-mcp>/scrapers"
NODRIVER_MCP_ARTIFACTS_DIR = "<path-to-nodriver-mcp>/artifacts"

Restart Codex after changing MCP configuration. The browser starts lazily. It is visible by default so you can sign in to the dedicated profile once; its cookies persist. Codex passes headless=true when a prompt explicitly requests headless browsing and selects visible mode otherwise. Switching modes restarts the managed browser while preserving the profile.

Related MCP server: scout-mcp-server

Use

Ask Codex, for example:

Use my browser session to find matching items on example.com. Inspect the page, create a reusable scraper, run it, and save large results as an artifact. Run headless.

Codex can inspect a page with the browser tools, then save and run a scraper. Each scraper_run reads the file again, so edits apply without restarting the MCP server:

async def scrape(ctx, params):
    if url := params.get("url"):
        await ctx.goto(url)

    items = await ctx.evaluate_json("""
        Array.from(document.querySelectorAll('article')).map(item => ({
            title: (item.querySelector('h2')?.innerText || '').trim(),
            href: item.querySelector('a')?.href || null
        }))
    """)
    return {"items": items}

The entry point must be async def scrape(ctx, params) and return JSON-compatible data. Prefer one bulk ctx.evaluate_json(...) call. Use ctx.write_artifact(...) for large results. Scrapers must use async operations and finish all tasks before returning.

Test

uv run --frozen ruff check src tests
uv run --frozen pytest

Security

Run this server locally over STDIO only. Scrapers are unsandboxed Python with the MCP process's OS access and control of an authenticated browser. Never expose cookies, tokens, passwords, or a DevTools endpoint; treat page content as untrusted; use only data you are authorized to access; and respect site terms and rate limits. Browser profiles, generated scrapers, and artifacts may contain private data and should not be committed.

Available Tools

9 tools
browser_closeClose browser sessionA
DestructiveIdempotent

Close the managed browser, or close MCP-owned tabs and detach in attach mode.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to reiterate that. However, it adds value by specifying the dual behavior: closing the browser entirely or detaching tabs in attach mode. This goes beyond what annotations convey, but the description could mention that open pages or state will be lost if tabs are closed.

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 is concise and front-loaded, clearly stating the action without any filler. Every word earns its place.

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

Completeness4/5

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

Given that the tool has 0 parameters, an output schema exists, and the annotations are rich (readOnlyHint, openWorldHint, idempotentHint, destructiveHint), the description is mostly sufficient. It explains the core behavior but misses minor behavioral details such as error handling or what happens if no session is active.

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 zero parameters, and the schema description coverage is 100%, so the schema provides all necessary information. The description adds no parameter info, but no compensation is needed. With 0 params, the baseline is 4, and the description is adequate.

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 that the tool closes the browser session or detaches tabs in attach mode, using a specific verb ('Close') and resource ('managed browser' or 'MCP-owned tabs'), and it distinguishes itself from sibling tools like browser_open, browser_snapshot, and browser_query, which perform different operations.

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

Usage Guidelines4/5

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

The description implies that the tool should be used when you want to end a browser session or detach tabs, but it does not explicitly state when not to use it or what alternatives (e.g., leaving the browser open) exist. The context of sibling tools is provided but not leveraged in the description.

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

browser_openOpen browser tabA
Destructive

Open or navigate an MCP tab, reusing the active tab unless new_tab is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoHTTP(S) URL without embedded credentials, or exactly about:blankabout:blank
new_tabNoCreate a new MCP-owned tab instead of reusing the active tab
headlessNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The description adds value beyond annotations: it states tab reuse behavior and mentions the new_tab parameter's effect. Annotations already indicate destructiveHint=true and openWorldHint=true, so the agent knows this modifies state. The description doesn't contradict annotations. However, it could clarify that opening a URL may replace the current page in the active tab.

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 that conveys the core behavior efficiently. It could be split for clarity but is not wasteful. No fluff.

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

Completeness4/5

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

Given an output schema exists (so return values are documented), annotations cover mutation and open-world hints, the description is sufficient for a navigation tool. It covers the main behavioral nuance (tab reuse), though could mention the browser may close existing tabs if headless changes mode.

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?

With 67% schema description coverage, the description adds minimal meaning beyond the schema. It explains the new_tab parameter's role but doesn't elaborate on url (already clear from schema) or headless (which has detailed schema descriptions). 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 tool opens or navigates an MCP tab, specifying it reuses the active tab unless new_tab is true. This distinguishes it from siblings like browser_status or browser_close.

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 when to use new_tab (true for a new tab), but does not explicitly guide when to use this tool versus alternatives like scraper tools for page content extraction, or browser_status for checking state. No when-not-to-use guidance is provided.

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

browser_queryQuery page elementsA
Read-only

Return text and safe attributes for elements matching a CSS selector.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matching elements to return
tab_idNo
selectorYesCSS selector to match

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

The description aligns with annotations (readOnlyHint=true, openWorldHint=true) by stating it 'returns' data, implying no mutation. It adds value by specifying that only 'safe attributes' are returned, which is behavioral information beyond the annotations. No contradictions.

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, well-formed sentence that communicates the essential purpose immediately. No wasted words, front-loaded with the action and outcome. Ideal conciseness for a straightforward tool.

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?

The description covers the core functionality adequately. With annotations covering read-only and open-world behavior, and an output schema presumably detailing the return structure, the description does not need to elaborate further. It could briefly mention that results are returned as a list or array, but this is a minor gap.

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 high (67%, all parameters have descriptions in schema). The tool description adds no new parameter-specific semantics beyond what the schema provides. It restates the overall purpose but does not elaborate on how 'limit' or 'tab_id' affect behavior.

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 'Return', the resource 'text and safe attributes', and the condition 'matching a CSS selector'. This differentiates browser_query from siblings like browser_snapshot (which returns the full page) and scraper tools (which are for more targeted scraping).

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 explicit guidance on when to use this tool versus alternatives. It assumes CSS selector knowledge and does not mention when to prefer browser_query over browser_snapshot or scraper_get. Usage context is implied by the tool name but not articulated.

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

browser_snapshotRead page contentA
Read-only

Return bounded visible text or outer HTML, optionally scoped to a CSS selector.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoReturn visible text or outer HTMLtext
tab_idNo
selectorNo
max_charsNoMaximum content characters to return

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint. The description adds useful behavioral context beyond annotations: the tool returns 'bounded' content (implying size limits), supports two formats, and allows CSS scoping. No contradictions with annotations.

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, well-structured sentence that front-loads the action and key options. Every word earns its place with no fluff.

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?

Covers the core functionality well, but omits details about default tab behavior and explicit mention of max_chars. However, given the openWorldHint and output schema presence, the description combined with schema is largely sufficient.

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 input schema provides descriptions for all four parameters, so the description's additional mention of format and CSS selector adds some meaning but does not significantly improve understanding beyond the schema. Baseline of 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 'Return' and the resource 'bounded visible text or outer HTML', with optional scoping via CSS selector. This distinguishes it from siblings like browser_query, browser_status, and scraper_* tools, which serve 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?

No explicit guidance on when to use this tool versus alternatives like browser_query or scraper tools. The description does not provide context about when it is appropriate to use or when to avoid it.

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

browser_statusBrowser statusA
Read-only

Report browser state and metadata for MCP-accessible tabs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, which the description echoes with 'Report'. No additional behavioral traits (e.g., performance, tab requirements, error conditions) are disclosed beyond what annotations provide. The description adds no new transparency value.

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 short sentence with no fluff, but it could be slightly more informative (e.g., mentioning that it returns a snapshot of tab state). Still, it is well-structured and front-loaded with the key action.

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?

With no parameters and an existing output schema (which documents return values), the description is mostly complete. However, it does not clarify what 'MCP-accessible tabs' means or what metadata is included, which could cause minor ambiguity. Overall adequate for a simple read-only tool.

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 zero parameters, and schema description coverage is 100% (vacuously). The description does not need to explain parameters, but it clearly states the tool's purpose, which is sufficient for an agent to understand what data it will receive.

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 uses a specific verb 'Report' and clearly identifies the resource 'browser state and metadata for MCP-accessible tabs'. It distinguishes from sibling tools like browser_snapshot (which captures page content) and browser_query (which queries the DOM).

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 browser_snapshot or browser_query. The description does not mention context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

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

scraper_getRead scraperA
Read-only

Return a saved scraper's source and metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName without a directory or .py suffix

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description's disclosure of returning source and metadata adds modest value. It does not, however, describe error behavior (e.g., if the scraper doesn't exist) or any side effects. Given the tool's simplicity and the annotation coverage, the description meets the minimum bar but does not exceed it.

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 front-loads the verb and resource. Every word is necessary; there is no redundancy or irrelevant information. It is perfectly sized for a simple retrieval tool.

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

Completeness5/5

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

Given the tool's low complexity (one required parameter, existing output schema, and annotations providing safety profile), the description is complete. It states what the tool returns (source and metadata), and the output schema covers the return structure. No additional information is needed.

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% (the only parameter 'name' has a description). The tool description adds no additional meaning about the parameter beyond what the schema already provides. Therefore, it meets the baseline of 3.

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

Purpose5/5

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

The description uses a specific verb 'Return' and identifies the resource as 'a saved scraper's source and metadata.' This clearly distinguishes it from siblings like 'scraper_list' (lists scrapers) and 'scraper_run' (executes a scraper), making the purpose unambiguous.

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?

No explicit guidance on when to use this tool versus alternatives. While it's implied that you would use this to retrieve a specific scraper's details, there is no mention of when to avoid it (e.g., if you only need the name, use scraper_list) or prerequisites. The context is clear enough for a simple tool, but the lack of explicit guidance leaves room for error.

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

scraper_listList scrapersA
Read-only

List metadata for saved scrapers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description's 'List metadata' is consistent but adds no extra behavioral context such as authentication needs, rate limits, or response structure. With annotations covering the safety profile, the description provides minimal additional value.

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?

Single sentence with no extraneous words. Perfectly front-loaded: verb + resource. Every word earns its place.

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 list tool with no parameters and an existing output schema, the description is nearly complete. Minor gap: it could state explicitly that it returns all saved scrapers or confirm no pagination, but the current text is sufficient for understanding.

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 zero parameters, and schema coverage is trivially 100%. The description does not need to add parameter-level meaning; baseline 4 applies per guidelines. The description confirms the action scope without redundant detail.

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 uses specific verb 'List' and resource 'metadata for saved scrapers', clearly distinguishing from sibling tools like scraper_get (which retrieves a specific scraper) and scraper_run (which executes a scraper). The 'metadata' qualifier sets accurate scope.

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 like scraper_get or scraper_save. No context about prerequisites, pagination, or typical use cases is provided, leaving the agent uninformed about decision boundaries.

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

scraper_runRun scraperA
Destructive

Hot-load and run a saved scraper. Use either url or tab_id; new_tab requires url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo
nameYesName without a directory or .py suffix
paramsNo
tab_idNo
new_tabNoOpen url in a new MCP-owned tab; requires url
headlessNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and openWorldHint=true, which the description does not contradict. The phrase 'hot-load' adds some behavioral context, but the description does not elaborate on side effects, state changes, or error conditions beyond what annotations provide.

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 two sentences, front-loaded with the primary action, and contains no fluff. Every word earns its place.

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

Completeness2/5

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

Given the tool's complexity (7 parameters, mutable, destructive, open world, output schema exists), the description is too brief. It does not explain what 'hot-load' means, mention required parameter 'name', describe return values, or address error conditions. An output schema is present but not referenced.

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 description repeats the constraint 'new_tab requires url' which is already in the schema's description for new_tab. It does not add meaning for the other five parameters (name, params, headless, timeout_seconds, tab_id). With schema description coverage at 29% (though the schema itself has descriptions), the tool description fails to compensate for the gap.

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 uses a specific verb ('run') and resource ('saved scraper'), and includes a constraint on parameter usage. It clearly distinguishes from sibling tools like scraper_list, scraper_get, and scraper_save, as well as browser tools.

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 mentions using 'either url or tab_id' and that 'new_tab requires url,' which provides some parameter guidance. However, it does not specify when to use this tool versus alternatives (e.g., browser_open), nor does it mention prerequisites like the scraper must already be saved.

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

scraper_saveSave scraperA
Destructive

Validate and atomically save a scraper for the next run.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName without a directory or .py suffix
sourceYesComplete UTF-8 Python source defining async def scrape(ctx, params)
expected_revisionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already signal destructiveness. The description adds 'validate' and 'atomically', disclosing safety guarantees beyond the annotation. Missing are details on conflict behavior when expected_revision mismatches.

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?

Single sentence of 8 words, front-loading the core action. Every word is meaningful with no fluff.

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

Completeness4/5

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

Given the presence of an output schema and well-documented parameters, the description is mostly complete but could be strengthened by mentioning what happens on validation failure or revision mismatch.

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?

With schema description coverage at 67% (and all parameters having informative schema descriptions), the tool description adds little parameter-specific meaning beyond the atomic/validation context. 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 uses a specific verb 'save' with 'Validate and atomically' adding precise semantics. It clearly distinguishes from sibling scraper tools (list, get, run) which serve 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 Guidelines3/5

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

The description implies usage context (saving scrapers for runs), but does not explicitly state when to use this tool versus alternatives, nor provide when-not or prerequisite conditions.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedbrowser_close
    • First observedbrowser_open
    • First observedbrowser_query
    • First observedbrowser_snapshot
    • First observedbrowser_status
    • First observedscraper_get
    • First observedscraper_list
    • First observedscraper_run
    • First observedscraper_save

TDQS

A4/5.0
Disambiguation4/5

Tools are generally distinct, but browser_open and scraper_run could confuse an agent: both involve navigation, though scraper_run is specifically for executing a saved scraper. Descriptions mitigate this ambiguity largely.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with clear prefixes (browser_ and scraper_), making the purpose predictable and easy to navigate.

Tool Count5/5

Nine tools cover both browser interaction and scraper management without excess or deficiency, well-scoped for a focused MCP server.

Completeness4/5

The set covers core browser operations and CRUD-like scraper management (list, get, save, run), but lacks a delete scraper tool, which is a minor gap for full lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for browser automation with anti-detection. Scout pages, find elements, interact with websites, and monitor network traffic from any AI client that supports the Model Context Protocol.
    21
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for controlling a local camofox-browser instance, enabling LLM agents to perform web automation tasks such as navigation, interaction, snapshotting, and content extraction.
    43
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Local MCP server for persistent Chrome automation with multi-profile support, enabling tab management, page inspection, element interaction, JavaScript evaluation, and screenshots while preserving login sessions across restarts.
    165
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/namecallfilter/nodriver-mcp'

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