coupang-browser-mcp

coupang-browser-mcp

Personal-use MCP server that searches Coupang through your own Chrome browser, enabling product search, detail, reviews, orders, cart, and checkout preview without API keys.

Category
访问服务器

README

coupang-browser-mcp

npm license: MIT Node >= 18 personal use

English · 한국어

Personal-use MCP server that searches Coupang through your own Chrome browser (CDP). No API key, no Partners account — and it can see what the official API can't: ratings, review text, your orders, your cart.

⚠️ Read this first

  • This is a personal tool, not a service. It remote-controls the Chrome you launched, logged in as you, on your IP. Nothing is hosted, collected, or redistributed.
  • It does not bypass bot protection — it drives a real browser session you own.
  • Coupang's ToS may restrict automation tools; use at your own responsibility. Do not use for bulk or commercial data collection.
  • Coupang markup changes can break extraction — use the built-in debug_page_structure tool to diagnose and update.
  • Payment is never automated. proceed_to_checkout stops at the order sheet; the final pay click is always yours.
  • Unofficial project — not affiliated with Coupang.

Quick Start

1. Launch Chrome with remote debugging (quit Chrome completely first):

# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

Log into coupang.com in that Chrome if you want order/cart tools.

Don't want a browser window in your face? (macOS) Use the bundled wrapper instead of step 1 — it starts a separate Chrome on its own profile (port 9223), hides its window, and keeps it hidden. Point your MCP client at run-mcp-hidden.sh instead of npx coupang-browser-mcp:

claude mcp add coupang-browser -- \
  "$(npm root -g)/coupang-browser-mcp/scripts/run-mcp-hidden.sh"

Headless Chrome is not used: Coupang serves "Access Denied" to it, and this project does not evade bot detection. The window is real, just hidden. Run scripts/show-chrome.sh to bring it back for login or checkout (rm ~/.coupang-chrome/keep-visible re-hides it).

2. Add the server to your MCP client:

<details open> <summary><b>Claude Code</b></summary>

claude mcp add coupang-browser -- npx -y coupang-browser-mcp

</details>

<details> <summary><b>Claude Desktop</b></summary>

Add to claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "coupang-browser": { "command": "npx", "args": ["-y", "coupang-browser-mcp"] }
  }
}

</details>

<details> <summary><b>Codex CLI</b></summary>

Add to ~/.codex/config.toml:

[mcp_servers.coupang-browser]
command = "npx"
args = ["-y", "coupang-browser-mcp"]

</details>

<details> <summary><b>OpenCode</b></summary>

Add to opencode.json (project) or ~/.config/opencode/opencode.json (global):

{
  "mcp": {
    "coupang-browser": {
      "type": "local",
      "command": ["npx", "-y", "coupang-browser-mcp"],
      "enabled": true
    }
  }
}

</details>

<details> <summary><b>Cursor</b></summary>

Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global), or via Settings → MCP → Add new global MCP server:

{
  "mcpServers": {
    "coupang-browser": { "command": "npx", "args": ["-y", "coupang-browser-mcp"] }
  }
}

</details>

Architecture

┌─────────────────┐  stdio (JSON-RPC)  ┌──────────────────────┐
│   MCP client    │◄──────────────────►│  coupang-browser-mcp │
│  (Claude Code,  │                    │                      │
│   Cursor, ...)  │                    │  index.ts   9 tools  │
└─────────────────┘                    │  throttle.ts ≥5s gap │
                                       │  extract.ts  parsers │
                                       └──────────┬───────────┘
                                                  │ CDP (playwright-core)
                                                  │ localhost:9222
                                                  ▼
                                       ┌──────────────────────┐
                                       │   YOUR own Chrome    │
                                       │  (your session, your │
                                       │   login, your IP)    │
                                       └──────────┬───────────┘
                                                  │ real browser traffic
                                                  ▼
                                       ┌──────────────────────┐
                                       │     coupang.com      │
                                       │  search / product /  │
                                       │  reviews / orders /  │
                                       │        cart          │
                                       └──────────────────────┘

Per tool call:  navigate the shared tab → extract (embedded JSON ▸ DOM fallback) → reset to about:blank
Calls are serialized over ONE reused tab: opening a tab makes macOS un-hide Chrome,
which would pop a window on every call.

Example Prompts

You say Tool used
"쿠팡에서 에어팟 검색해줘" search_products
"이 상품 평점이랑 리뷰 수 알려줘" get_product_detail
"이 상품 리뷰 좀 읽어줘" get_product_reviews
"내 주문 배송 어디까지 왔어?" get_my_orders
"장바구니에 뭐 들어있지?" get_cart
"이거 장바구니에 담아줘" add_to_cart (preview → confirm)
"주문할게, 결제 페이지 열어줘" proceed_to_checkout (stops before payment)

Tools

Tool Parameters Description
search_products keyword*, limit (≤36), rocketOnly, sortBy Extract products from the search page (embedded JSON first, DOM fallback)
get_product_detail url* Price, rating, review count from a product page — data the official API can't provide
get_product_reviews url*, limit (≤10), maxTextLength Individual reviews (author, date, rating, purchased option, text) — scrolls the lazy-loaded review section into view
debug_page_structure url* Skeleton of embedded JSON blobs on a page — self-diagnosis when markup drifts
get_my_orders Order history + delivery status (read-only, needs login)
get_cart Cart contents (read-only, needs login)
add_to_cart url*, quantity, confirm Two-step: preview first, executes only with confirm=true
remove_from_cart productName*, confirm Two-step; removes only when exactly one item matches
proceed_to_checkout confirm Two-step; on confirm=true opens the order sheet and stops — clicks only on the cart page, never a pay button, tab left open

Safety model

  1. Reads are free, writes confirm. Cart mutations and checkout return a preview and require an explicit confirm=true second call.
  2. Money never moves automatically — and this is enforced, not just promised. openCheckout() clicks only while the URL is still cart.coupang.com, refuses any button whose label reads like payment (결제, 바로구매, pay), and once the order sheet is open it stops touching the page. No code path clicks a pay button.
  3. Polite self-throttle: ≥5s between page loads, ≤60 loads/hour (configurable). There's no contractual limit here, so we impose our own.

Configuration

Env var Default Description
COUPANG_CDP_URL http://localhost:9222 Chrome DevTools endpoint
COUPANG_MIN_GAP_MS 5000 Minimum gap between page loads
COUPANG_HOURLY_CEILING 60 Max page loads per hour

Troubleshooting

Symptom Fix
"Chrome CDP에 연결할 수 없습니다" Chrome isn't running with --remote-debugging-port=9222, or an older non-debug Chrome instance is holding the profile — quit Chrome fully and relaunch with the flag
Browser context management is not supported Stale debug instance — kill it and relaunch Chrome cleanly
Empty results / "추출 실패" Coupang markup changed — run debug_page_structure on the same URL and file an issue with its output
"쿠팡 로그인이 필요합니다" Log into coupang.com in the debug Chrome (order/cart tools only)
A Chrome window pops up on every call You're on an older version — 0.2.1 and earlier opened a new tab per call. Upgrade, and use run-mcp-hidden.sh if you want the window hidden entirely

Development

npm install
npm run lint                      # eslint (type-checked)
npm test                          # extraction unit tests (no browser needed)
npm run build                     # tsc → dist/
npx tsx scripts/tool-output.ts    # live check → test-output/*.txt (uses your Chrome if running)

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选