Skip to main content
Glama

ochi · очі

Eyes on the web for your AI assistant. A tiny MCP server that reads pages through your own Chrome (so Cloudflare & co. see a normal person) and turns them into clean data with small per-site extractor scripts: Greasemonkey-style .js files.

Claude ──MCP/stdio──▶ ochi (Python) ──Playwright/CDP──▶ your Chrome ──HTTPS──▶ site

No Docker, no global Node: Python and dependencies are handled by uv. Works on macOS, Windows and Linux.

Setup (once)

  1. uv: see installation.

  2. Config folder:

    uvx --from git+https://github.com/jennywassweet/ochi ochi init

    This creates ochi.toml, .env and an extractors/ folder for your own extractors in ~/Library/Application Support/ochi (macOS), %APPDATA%\ochi (Windows) or ~/.config/ochi (Linux), and shows which browser it found.

  3. Browser: ochi starts its own Chrome window (separate profile ~/.ochi-profile, debugging port 9222) the first time a tool needs it. It finds Chrome, Chromium, Brave or Edge in the usual places; path, profile, port and autostart can be changed in ochi.toml. Log in there only to sites ochi needs (Discogs, Reddit…). No mail, no banking.

  4. Discogs token (optional, for the discogs_* API tools): put it into .env as DISCOGS_TOKEN (get one here).

  5. Hook into Claude Desktop: add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

    "ochi": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/jennywassweet/ochi", "ochi"]
    }

    (inside "mcpServers": { … }, then restart Claude Desktop; if uvx isn't found, use its absolute path from which uvx / where uvx). Other MCP clients take the same command.

  6. Try it without MCP (put any Discogs seller name instead of SELLER):

    uvx --from git+https://github.com/jennywassweet/ochi ochi-try "https://www.discogs.com/seller/SELLER/profile?format=Vinyl&ochi_max=20"

From a clone (to hack on ochi): git clone https://github.com/jennywassweet/ochi && cd ochi, then uv run ochi-try <url>, and in the Claude config use "command": "uv", "args": ["--directory", "/absolute/path/to/ochi", "run", "ochi"]. Run from a clone, ochi keeps ochi.toml, .env, snapshots/ and reads extractors/ right in the repo folder.

Related MCP server: Chrome MCP Server

Tools

tool

what

fetch(url)

open url in a new tab, run matching extractor, close the tab, return compact text/JSON lines

look(tab?)

read a tab that is already open (default: the visible one) without navigating

tabs()

list open tabs in the ochi browser

show(url)

open a page in a new tab and leave it open for you to see

list_extractors()

known sites and URL patterns

snapshot(url)

save rendered HTML to snapshots/ — for writing/fixing extractors

browser_start() / browser_status()

start / check the ochi Chrome

discogs_search, discogs_release, discogs_master_versions, discogs_listing

the bits of the Discogs API we use (structured, no browser)

Configuration

ochi's home folder (see Setup; OCHI_HOME moves it) holds:

  • ochi.toml (optional, see ochi.example.toml): [chrome] path, profile, port, autostart, args;

  • .env: secrets (DISCOGS_TOKEN);

  • extractors/: your own extractors, loaded next to the built-in ones (same @name replaces a built-in one);

  • snapshots/: output of snapshot.

Environment variables override the file: OCHI_CONFIG (path to the toml), OCHI_CHROME, OCHI_PROFILE, OCHI_PORT, OCHI_EXTRACTORS (your extractors folder).

Writing an extractor

// ==Extractor==
// @name        my-site
// @match       https://example.com/articles/*
// @wait        article            (optional CSS selector to wait for)
// @description one line for list_extractors
// ==/Extractor==

async function extract() {
  // runs INSIDE the page: document, fetch() with the page's cookies, etc.
  return { items: [...] };   // or a string
}

A result {..., items: [...]} is rendered one item per line (cheap for the model). @match is a glob where * matches anything (including /); the longest matching pattern wins, and an extractor matching * is the fallback.

Extractor-specific URL params

  • discogs-market: ochi_max=20 keeps items up to that price; ochi_pages=10 caps pagination (250 per page).

Development

uv sync                                  # dev tools included
uv run ruff check .
uv run playwright install chromium       # once; browser tests otherwise use an installed Chrome
uv run pytest

Tests never touch the network: extractors run in headless Chromium against saved pages and JSON in tests/fixtures/. When a site changes its layout, save a new snapshot there (strip anything tied to your account), fix the extractor, adjust the test. CI runs the suite on Linux, macOS and Windows.

Security

ochi gives the model a real, logged-in browser. Keep that in mind:

  • Use the separate ochi profile and log in only where you need to.

  • fetch/show open whatever URL the model asks for, and look reads the visible tab.

  • Page content is untrusted text and can contain instructions aimed at the model (prompt injection).

  • While the browser runs, its debugging port (9222 on 127.0.0.1) lets any local program control it.

Etiquette

Personal use, a handful of pages per session, pauses between pages. No paywall bypassing, no captcha solving — if a site asks for a human, the human clicks.

License

MIT

Available Tools

12 tools
browser_startA

Start the ochi Chrome (separate profile) if it isn't running; report its version.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses idempotence ('if it isn't running') and that a version is returned, but says nothing about whether the call blocks until the browser is ready, resource cost, failure modes, or what happens on concurrent starts.

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 front-loaded sentence with the action first and the conditional qualifier second; 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?

An output schema exists, so the return value need not be explained, and the description still flags that a version is reported. For a zero-parameter startup tool this is nearly sufficient; only the blocking/timing behavior is left unstated.

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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies.

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?

States a specific verb and resource: 'Start the ochi Chrome (separate profile)', plus the side effect of reporting its version. It does not explicitly contrast with the sibling browser_status, so an agent must infer the division of labor between starting and checking status.

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 clause 'if it isn't running' implies idempotent startup and hints at when the call is appropriate, but no alternative (e.g. browser_status) is named and no explicit when-not guidance is given. Usage is implied rather than stated.

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

browser_statusA

Is the ochi Chrome running? (does not start it)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it usefully discloses the key side-effect boundary: this is a passive check that will not launch Chrome. It says nothing about cost, blocking behavior, or what a negative result means, but for a zero-arg status probe with an output schema those gaps are small.

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?

Two fragments, the core question front-loaded, and the disambiguating caveat immediately after it. Nothing is wasted and nothing is buried.

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?

Return values are covered by the existing output schema and the tool is trivially simple, so the description is nearly complete. It could add one clause on when to reach for this versus browser_start, but nothing required to call it correctly is missing.

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 takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The absence of arguments is consistent with a pure status probe.

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 gives a specific check ('Is the ochi Chrome running?') against a named resource, and the parenthetical 'does not start it' directly separates it from the sibling browser_start. An agent can pick this tool without opening any schema.

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 exclusion 'does not start it' effectively routes the agent to browser_start when launching is needed, so the when-not case is explicit. However, browser_start is not named directly and no other usage context (e.g., call before fetch/snapshot) is given.

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

discogs_listingC

One marketplace listing: price, shipping to the logged-in user, seller rating, comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
listing_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, yet it discloses nothing about authentication (Discogs marketplace data typically needs a token), rate limits, or whether the lookup is a safe read. The mention of 'shipping to the logged-in user' hints at auth context but stops short of stating requirements.

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?

A single tight sentence fragment with zero filler, and the most discriminating detail (it is one listing, not a collection) comes first. It is terse to the point of under-specification, but nothing is redundant.

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?

An output schema exists, so return values need not be explained, yet the description still fails to state the operation or document the id argument. For even a simple one-parameter tool, the agent lacks the verb and the parameter meaning needed to invoke it confidently.

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 description coverage is 0%, and the description never mentions listing_id, its format, or where to obtain it. For the single required parameter it must compensate for the schema gap and does not.

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 names a specific resource ('One marketplace listing') and enumerates its contents, so the agent can tell it apart from discogs_search (which searches) and discogs_release (a different resource). However, it is a noun fragment with no verb, so it never actually states the operation (fetch/retrieve by id), leaving the purpose inferable rather than explicit.

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?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as discogs_search or discogs_release despite four Discogs siblings in the tool set. The agent must guess when this single-listing lookup is appropriate.

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

discogs_master_versionsC

All pressings of a master release (filter by format).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoVinyl
master_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral-disclosure burden. It does not state that this is a read-only operation, whether authentication or rate limits apply, or how results are paginated or ordered.

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 front-loaded sentence with no filler. It immediately states what is returned and the optional filter, and nothing needs trimming.

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?

For a simple two-parameter lookup with an output schema, the description covers the core purpose adequately. However, with no annotations and 0% schema description coverage, it remains thin on parameter semantics and behavioral details such as pagination or read-only status.

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 description coverage is 0%, so the description must compensate. It gestures at a master release and a format filter, but does not name the parameters, explain acceptable format values, or mention the default of 'Vinyl'. It adds only marginal meaning beyond the schema titles.

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 resource and scope: all pressings of a master release, with a format filter. It is specific enough to distinguish from siblings like discogs_release or discogs_search, though it does not explicitly name alternatives.

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?

It implies the tool is used to retrieve pressings and optionally filter by format, but offers no guidance on when to choose it over sibling tools such as discogs_release or discogs_search. There are no when-to-use or when-not-to-use statements.

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

discogs_releaseC

Release details: labels, formats, styles, tracklist, master_id, lowest price (EUR), have/want.

ParametersJSON Schema
NameRequiredDescriptionDefault
release_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the whole behavioral burden and discloses almost nothing: read-only status is only implied by 'details', and there is no mention of authentication (Discogs token), rate limits, or error behavior for invalid IDs. Listing return fields is mild context but largely duplicated by the output schema.

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?

A single compact sentence, front-loaded with the resource and followed by the most relevant returned fields. Nothing wasteful, though the fragment style leaves it terse to the point of under-specification.

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?

The output schema means return values need not be explained, and the price/have/want notes add a little value. But for a tool with no annotations and an undocumented required parameter, the description should do more to explain input expectations and read-only semantics.

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 0% for the single required release_id, and the description never names or formats it. It does implicitly distinguish a release from a master by calling out master_id as a returned field, which is useful disambiguation, but ID type/format remains undocumented.

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

Purpose3/5

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

The phrase 'Release details' identifies the resource and that it returns a full record, but there is no verb and no differentiation from siblings like discogs_listing or discogs_master_versions. The enumerated fields hint at a detail-fetch, yet an agent cannot tell from the text alone how this differs from the other discogs_* lookups.

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 when-to-use guidance, no prerequisites, and no mention of any alternative tool. The agent must infer from the name alone that this is the per-release lookup rather than search, master versions, or marketplace listings.

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

fetchA

Read a web page through the user's own Chrome (started automatically if needed).

A site-specific extractor (if one matches the URL) returns clean structured data; otherwise a generic extractor returns the readable text of the page. Use for sites that block normal fetching (Discogs marketplace, Reddit, news). Discogs marketplace URLs accept ochi_max= to keep only cheaper items.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses the side effect that Chrome is launched automatically if needed, and explains the conditional result (site-specific extractor returns structured data, otherwise generic readable text). It omits failure modes, timeouts, and whether logged-in sessions are used, but the auto-launch disclosure is valuable context.

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?

Four short sentences, each earning its place, with the primary behavior front-loaded before usage hints and the Discogs caveat. Only minor friction from the parenthetical interrupting the opening sentence.

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?

An output schema exists, so return-shape documentation is not required, and the description nonetheless explains the two result modes. It covers mechanism, usage, and a site-specific quirk; the main remaining gap is what max_chars controls and how failures surface.

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 0%, so the description must compensate. It adds real meaning to the URL (extractor-matching behavior and the ochi_max=<price> URL convention) but says nothing about max_chars beyond its self-explanatory name, leaving one of two parameters undocumented.

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?

States a specific verb and resource ('Read a web page') plus the mechanism ('through the user's own Chrome'), and explains the two extraction paths. This clearly separates it from siblings like browser_start (starts the browser) and snapshot/tabs (state inspection), so an agent can pick it without reading the schema.

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?

Explicitly routes usage: 'Use for sites that block normal fetching (Discogs marketplace, Reddit, news)', and notes the Discogs-specific ochi_max=<price> refinement. It gives a clear positive condition but no explicit when-not-to-use or named alternative for ordinary pages, so it stops short of a 5.

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

list_extractorsA

List the site extractors ochi knows, with their URL patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden. 'List' implies a safe read operation and it discloses that URL patterns are included, but it does not explicitly confirm read-only/non-destructive behavior or mention pagination or result limits.

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

Conciseness4/5

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

A single front-loaded sentence that earns its place. Minor deduction because the term 'ochi' is undefined in the description and could confuse an agent unfamiliar with the server name.

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?

An output schema exists, so the description need not explain return values. For a zero-parameter listing tool the description is nearly sufficient, with only the safety profile left implicit.

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 takes zero parameters, so the baseline is 4. There is nothing for the description to clarify beyond what the empty schema already conveys.

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?

States a specific verb ('List') and resource ('site extractors') and adds what the listing contains ('their URL patterns'). It is distinguishable from siblings like fetch/look/snapshot, though it does not explicitly contrast itself with any of them.

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 when/when-not guidance or named alternatives. The usage is only implied: an agent would reasonably infer this is how you discover which sites are supported before calling fetch, but that routing logic is never stated.

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

lookA

Read the page the user is looking at right now in the ochi browser (the visible tab), or tab number tab from tabs(). Does not navigate or close anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
tabNo
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

No annotations exist, so the description must carry behavioral load. It states 'Does not navigate or close anything,' which clarifies the side-effect profile (read-only interaction). The max_chars parameter is not explained in the description.

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?

Two short sentences, front-loaded, with no filler. Does not waste space but could mention return-value characteristics.

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, the description need not explain return values. With two parameters and no annotations, the description covers the essential behavior and tab selection, though max_chars is unaddressed.

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 0%, so the description should compensate. It explains the tab parameter by saying 'tab number `tab` from tabs()', but gives no explanation for max_chars.

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?

States a specific verb and resource: read the page in the ochi browser, the visible tab or a tab selected by number. It also clearly distinguishes this from a navigation action and from the browser-level tools.

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?

Explains that this is used for the page the user is looking at right now or a tab from tabs(), giving context for use. No explicit exclusions or alternatives like snapshot/fetch are named, so it is clear but not a full 5.

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

showA

Open a page for the user in a new visible tab of the ochi browser and leave it open ("look what I found"). Use sparingly: only when they'd want to see it themselves.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful side effects: a new tab is created, it is visible, and it is left open rather than closed. That persistence detail is exactly the kind of behavior an agent cannot infer from the schema. It omits prerequisites such as whether the browser must already be running (browser_start/browser_status siblings) and any auth or rate considerations.

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?

Two tight sentences, front-loaded with the action and followed by the usage constraint; nothing is redundant. The parenthetical 'look what I found' is informal flavor, but it does reinforce intent, so it costs little.

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?

An output schema exists, so return values need no explanation, and for a one-parameter side-effect tool the description covers what happens, how visible it is, and when to invoke it. The remaining gap is lifecycle context — what happens if no browser session is active — which the browser_start/browser_status siblings imply is relevant.

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

Parameters3/5

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

There is a single required 'url' parameter with 0% schema description coverage, and the description only alludes to it as 'a page' — no format, absolute-vs-relative, or scheme guidance. The parameter's intent is self-evident, so the gap is small, but the description adds nothing beyond the schema field name.

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 gives a concrete verb and target: open a page in a new visible tab of the ochi browser. That is far more specific than the bare name 'show' and clarifies the tool is user-facing rather than a silent fetch. It does not, however, explicitly contrast itself with siblings like fetch, look, or snapshot, so the agent must infer the distinction from 'visible tab'.

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?

'Use sparingly: only when they'd want to see it themselves' is an explicit use condition plus a restraint cue, which is stronger than most definitions. It stops short of naming a concrete alternative (e.g., use fetch for silent retrieval), so a 5 is not warranted.

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

snapshotA

Save the rendered HTML of a page into snapshots/ (to write or debug an extractor).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It reveals the side effect (writes to snapshots/) and that it saves rendered rather than raw HTML, but says nothing about overwrite behavior, permissions, or what happens on failure.

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?

One sentence, front-loaded with the action and destination; every clause, including the parenthetical, earns its place.

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?

An output schema exists, so return values need no explanation, and this is a simple one-parameter tool. Still, with zero annotations the description should say more about the write side effect and parameter expectations to fully cover the tool.

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 description coverage is 0% for the single 'url' parameter. The description implies the input is a page to snapshot but adds no format, scheme, or constraint details beyond the schema's bare string type.

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?

States a specific verb ('Save') and resource ('rendered HTML of a page') plus destination ('snapshots/'), and adds the intent (write or debug an extractor), distinguishing it from siblings like fetch or look.

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?

Parenthetical names the use case – building or debugging an extractor – which implicitly tells when to prefer this over fetch/look, but it states no explicit exclusion or alternative comparison.

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

tabsB

List open tabs in the ochi browser (index, title, url, which one is visible).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full disclosure burden, and it does indicate this is a read of existing tab state by enumerating index/title/url/visibility. It does not state whether the list is ordered, whether it is scoped to a single window, or whether hidden/background tabs are included, which are the behavioral details that matter here.

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 front-loaded sentence with no filler; the resource and the returned fields are both stated without redundancy or padding.

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?

An output schema exists, so return values need not be explained, and with zero parameters there is little that must be documented. The remaining gap is disambiguation from snapshot/browser_status, which an agent selecting among the browser-inspection siblings would need.

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 takes zero parameters, so there are no semantics to explain and the baseline of 4 applies. Schema coverage is 100% and the description adds nothing that is needed beyond that.

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 states a specific verb and resource ('List open tabs in the ochi browser') and even enumerates the returned fields (index, title, url, visible), so the agent knows exactly what it gets. It does not, however, distinguish itself from siblings such as snapshot, browser_status, or list_extractors, which also describe browser state.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus browser_status, snapshot, or look when the agent needs to inspect the browser. Usage is only inferable from the name and the listed fields, not from any explicit guidance or exclusions.

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. 12 tool updatesv0.1.0
    • First observedbrowser_start
    • First observedbrowser_status
    • First observeddiscogs_listing
    • First observeddiscogs_master_versions
    • First observeddiscogs_release
    • First observeddiscogs_search
    • First observedfetch
    • First observedlist_extractors
    • First observedlook
    • First observedshow
    • First observedsnapshot
    • First observedtabs

TDQS

B3.4/5.0

Scored across 12 tools

Disambiguation4/5

The browser tools are mostly distinct: fetch (read a URL), look (read the current visible tab), and show (open a page) each target a different action, and browser_start vs browser_status are clearly separated. The one mild overlap is fetch vs look, both read pages, but the descriptions draw a clear line (fetch navigates/fetches, look does not navigate).

Naming Consistency3/5

There is a consistent discogs_ prefix for the four Discogs tools and a browser_ prefix for start/status, but the remaining tools use bare single-word verbs (fetch, look, show, tabs, snapshot) and a lone list_extractors, so no single predictable verb_noun convention spans the set. It stays readable but mixes conventions.

Tool Count5/5

Twelve tools is well-scoped for a browser-automation-plus-Discogs server, with each tool covering a distinct capability (fetching, viewing, tab management, lifecycle start/status, extractor inspection, and four Discogs lookups). No tool feels redundant or padded.

Completeness4/5

The surface covers the core browsing lifecycle (start, status, tabs, fetch, look, show, snapshot, extractors) and Discogs search/release/master/listing flows. Minor gaps exist (e.g., no close_tab or general navigation/back operation), but the primary workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Transforms Chrome browser into an AI-controlled automation tool that allows AI assistants like Claude to access browser functionality, enabling complex automation, content analysis, and semantic search while preserving your existing browser environment.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to control and automate your Chrome browser directly, leveraging existing login states and configurations for tasks like content analysis, semantic search across tabs, screenshots, network monitoring, and interactive operations.
    12
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Lets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.
    143
    MIT