Skip to main content
Glama
k-l-lambda

chrome-cookies-mcp

by k-l-lambda

chrome-cookies-mcp

An MCP (Model Context Protocol) server that reads cookies for a specified domain from a running Chrome instance, via the Chrome DevTools Protocol (CDP).

It returns cookies already decrypted by Chrome (no SQLite decryption, no App-Bound-Encryption handling), in cookies.txt (Netscape), JSON, or Cookie:-header format.

How it relates to the "Get cookies.txt LOCALLY" extension

That extension uses the privileged chrome.cookies.getAll({ domain }) API, which only works inside an extension. A standalone MCP server can't call it, so this project gets the same decrypted cookies a different way: it attaches to Chrome over CDP and calls Storage.getCookies, then applies the same domain-matching and the same Netscape/JSON/header serialization the extension used.

Related MCP server: chrome-devtools-mcp

Requirement: launch Chrome with a debug port

CDP only works against a Chrome started with --remote-debugging-port. Chrome allows just one process per profile directory, so if your normal Chrome is already running you must close it first, then relaunch with the flag (still your real profile, same logins/cookies):

chrome.exe --remote-debugging-port=9222 \
  --user-data-dir="C:\Users\<you>\AppData\Local\Google\Chrome\User Data" \
  --profile-directory=Default \
  --remote-allow-origins=*

Helper:

npm run launch-chrome      # close your main Chrome first

Verify the port is live: open http://127.0.0.1:9222/json/version.

Install

npm install
cp .env.example .env.local   # then edit .env.local for your machine

Local configuration (.env.local)

Machine-specific settings (paths, port, profile) live in .env.local, which is gitignored and never committed. Copy .env.example to .env.local and edit. Values already set in the real environment — or in an MCP client's env block — override the file, so the same code runs unchanged on any machine.

Environment variables:

Var

Default

Meaning

CHROME_CDP_HOST

127.0.0.1

CDP host

CHROME_CDP_PORT

9222

CDP remote-debugging port

CHROME_PATH

auto-detected

chrome.exe path (launcher only)

CHROME_USER_DATA_DIR

OS default profile dir

profile dir (launcher only)

CHROME_PROFILE

Default

profile name (launcher only)

Run

npm start

Tools

get_cookies

Get cookies for a domain.

  • domain (required): "example.com", ".github.com", or a full URL like "https://example.com/path".

  • format: netscape | json | header (default json).

  • name (optional): only the cookie with this exact name.

  • path (optional): only cookies with this exact path.

Domain matching follows chrome.cookies.getAll: the query matches a cookie whose host equals the domain or is a sub/parent-domain of it.

list_domains

List all distinct cookie domains in the running Chrome with counts.

  • filter (optional): case-insensitive substring of the domain name.

Register with an MCP client

Example (claude / Claude Code .mcp.json style):

{
  "mcpServers": {
    "chrome-cookies": {
      "command": "node",
      "args": ["/absolute/path/to/chrome-cookies-mcp/src/index.mjs"],
      "env": { "CHROME_CDP_PORT": "9222" }
    }
  }
}

Test

npm run launch-chrome           # or launch any Chrome with --remote-debugging-port=9333
CHROME_CDP_PORT=9333 node test/smoke.mjs

Security note

This server exposes your browser's cookies — including session tokens — to any MCP client connected to it. Cookies are sensitive credentials. Run it only locally and only with clients you trust. The CDP debug port itself is also a powerful local interface; do not expose it beyond 127.0.0.1.

Available Tools

2 tools
get_cookiesA

Get cookies for a given domain from the running Chrome (via DevTools Protocol). Returns cookies whose domain equals or is a sub/parent-domain of the query, in the requested format. Chrome must be launched with --remote-debugging-port.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional: only return the cookie with this exact name.
pathNoOptional: only return cookies with this exact path.
domainYesDomain or URL to fetch cookies for, e.g. "example.com", ".github.com", or "https://example.com/path".
formatNoOutput format: "netscape" (cookies.txt), "json" (full cookie objects), or "header" (Cookie: header value). Default "json".json

TDQS

A4/5.0
Behavior4/5

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

No annotations provided, so the description must disclose behavioral traits. It explains the domain matching logic (sub/parent-domain), format options, and the requirement for a specific Chrome launch mode. This provides sufficient behavioral context for a read operation.

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 concise sentences, front-loaded with the core action and resource. No fluff, every sentence adds information.

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?

No output schema exists, so the description should detail return values. It mentions returning cookies in a format but does not describe the structure of each format (e.g., what properties in JSON, how netscape format looks). This is a significant gap for a tool with multiple output formats.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the domain matching behavior (sub/parent-domain) beyond the schema's simple description. It also clarifies the format options, enhancing understanding.

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 ('Get cookies'), the resource ('cookies from Chrome via DevTools Protocol'), and the domain constraint. It distinguishes from sibling tool 'list_domains' by focusing on cookie retrieval for a specific domain.

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 explicitly state when to use this tool versus alternatives. It mentions a prerequisite (Chrome with --remote-debugging-port) but lacks guidance on when not to use it or comparisons with sibling tools.

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

list_domainsA

List all distinct cookie domains currently present in the running Chrome, with cookie counts. Useful to discover which domains have cookies before calling get_cookies.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOptional substring to filter domain names (case-insensitive).

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, but the description accurately describes a read operation on the current Chrome session. Minor omission of explicit read-only status, but transparent overall.

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, well-structured sentence that front-loads purpose and key details without waste.

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 one optional parameter, no output schema, and no annotations, the description fully covers tool purpose, usage, and parameter 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 coverage is 100% with a clear description for the filter parameter. The tool description adds no additional meaning beyond the 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 tool lists all distinct cookie domains with counts, which is specific and distinguishes it from the sibling get_cookies.

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

Usage Guidelines5/5

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

Explicitly states it's useful before calling get_cookies, providing clear guidance on when to use this tool.

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. 2 tool updatesv0.1.0
    • First observedget_cookies
    • First observedlist_domains

TDQS

A4.4/5.0
Disambiguation5/5

The two tools have completely distinct purposes: get_cookies retrieves cookies for a given domain, while list_domains enumerates available domains. There is no ambiguity or overlap.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern in snake_case (get_cookies, list_domains), making the naming predictable and clear.

Tool Count5/5

With only two tools, the set is perfectly scoped for the narrow domain of reading Chrome cookies. Each tool serves a distinct, necessary function without excess or deficiency.

Completeness5/5

For a read-only cookie retrieval tool, the combination of listing domains and fetching cookies covers the essential workflow completely. No gaps are apparent for the stated purpose.

Maintenance

ActivityStale
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

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/k-l-lambda/chrome-cookies-mcp'

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