shoptet-admin-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shoptet-admin-mcp show me my product price list with current stock levels"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
shoptet-admin-mcp
Claude in your Shoptet admin. With guardrails.
An unofficial Model Context Protocol server and a Claude skill. They let an AI assistant read and carefully change things in a Shoptet e-shop admin by driving it in a real browser with Playwright. Nothing is hosted: it runs on your computer.
Experimental (alpha). Verified on one Czech-language shop, on macOS. Expect breakage when Shoptet changes its admin. Read Status before you put a password into it.
Not affiliated with, endorsed by, or supported by Shoptet. "Shoptet" is a trademark of its owner.
11 | 5 | 0 | 27 |
read tools | guarded writes | deletes, by design | offline tests |
Every number above is a count of what is in this repository. Nothing here is a benchmark or a customer claim.
Why this exists
Shoptet has no public API for much of what an operator does in the admin: coupons, redirects, banners, HTML codes, price lists. I automate e-shop admins for Czech companies, and the same traps cost me hours every time: a firewall that blocks your whole IP, tables that render in batches, forms that silently drop typed text. This repository is those lessons, rewritten from scratch as a small tool with the safety rules built in, plus the notes in a form Claude can use.
Related MCP server: Playwright Vision MCP Server
What it does
Read, always on: shop info, products, product detail, price list (variants, prices, stock), coupons and coupon templates, URL redirects, banners, HTML codes, orders without personal data.
Write, off by default: create a coupon, add a redirect, change price or stock of one variant, replace an HTML code field, replace a banner.
A write is never one shot:
propose → you read the summary and say yes → apply → verify → revert if needed
(nothing changes) (re-check, write, re-read)Nothing is deleted. Reverting a coupon ends its validity. Reverting a redirect removes only the rule this tool added.
Status
Verified on macOS, on a Czech-language admin, on a staging clone shop, October 2026: every read tool, and each write kind through propose, apply, independent re-read and revert.
Not tested: Windows, Linux, Slovak or English admin, accounts with two-factor login, other plans.
Automating the admin may not be allowed on every Shoptet plan. Checking Shoptet's terms for your plan is your responsibility.
Shoptet changes its admin without notice. Writes verify the result and fail loudly instead of guessing, but selectors will need updates over time.
Offline unit tests cover config, input validation, the draft lifecycle and storage. The browser parts were verified by hand against a live admin, not in CI.
Install
Node.js 20.6 or newer.
git clone https://github.com/egornefedovcz/shoptet-admin-mcp.git
cd shoptet-admin-mcp
git checkout <release-tag> # pin a tagged release instead of tracking main, and read the code first (it is small)
npm install
npx playwright install chromium
cp .env.example .env # fill in SHOPTET_URL, SHOPTET_EMAIL, SHOPTET_PASSWORD
chmod 600 .envUse a dedicated admin user with only the permissions you need. Try it on a staging or clone shop first.
Claude Code
claude mcp add shoptet -- node --env-file=/absolute/path/to/shoptet-admin-mcp/.env /absolute/path/to/shoptet-admin-mcp/src/server.js--env-file keeps the password out of your shell history and out of Claude's config.
Claude Desktop and other clients
{
"mcpServers": {
"shoptet": {
"command": "node",
"args": ["--env-file=/absolute/path/to/shoptet-admin-mcp/.env", "/absolute/path/to/shoptet-admin-mcp/src/server.js"]
}
}
}Enable writes (optional)
Add SHOPTET_ALLOW_WRITE=1 to .env and restart the client. Without it the write tools are not registered at all, so the model cannot even see them. When you enable writes, do not auto-approve shoptet_apply_change and shoptet_revert_change. Your own confirmation on those two calls is the real safety gate (why).
The skill
cp -r skills/shoptet-admin ~/.claude/skills/It works with or without the server. It tells Claude how to use the tools, and how to write safe Playwright scripts for what the tools do not cover.
Tools
Tool | Writes | Purpose |
| no | Log in, show which shop is connected and whether writes are on |
| no | Product list (id, name, price), optional name filter |
| no | Name, visibility, descriptions (truncated) |
| no | Variants: id, name, code, price, stock |
| no | Coupons and the templates they can use |
| no | URL redirects, optional source filter |
| no | Banners and their HTML |
| no | header, footer, orderFinale, robots, llms fields |
| no | Recent orders without names, e-mails or addresses |
| draft only | New coupon, 3 to 16 characters, mandatory end date |
| draft only | New redirect, refuses |
| draft only | Price and/or stock of one variant (product id and exact code) |
| draft only | Replace |
| draft only | Replace one banner's HTML |
| yes | Apply a draft: re-check, write, verify |
| yes | Undo an applied draft |
| no | Local list of drafts and their status |
Where your data goes
Nothing is hosted by the author. The server and its browser run on your computer and talk only to your shop. There is no telemetry and no account. But whatever the tools return (product texts, banners, coupons, order lists without personal data) is sent to the AI model you use, for example Claude. Treat it like pasting that data into a chat.
How it stays out of trouble
Slow and serial. One browser, one request at a time, at least 2.5 s apart. Shoptet's firewall blocks a whole IP, storefront and admin, for bursts. A 403 or 429 opens a 30 minute circuit breaker.
Verify everything. A write refuses if the value changed since the proposal, then re-reads the target and the neighbouring fields and compares.
The browser only goes where the server sends it. It visits admin pages built from ids, codes and paths. No tool navigates to a URL the model supplies. The shop origin is fixed by
SHOPTET_URL.Secrets stay in the environment. The password is never logged or returned, and is scrubbed from error text.
Shop content is labelled untrusted in every read result.
More: how it works, safety model, skill references.
Limitations
One shop per server instance. Run several instances for several shops.
The product list reads what the admin shows on one page. No pagination yet.
Product text editing, file upload, order changes and label printing are deliberately left out.
The browser is discarded after every write, so the next call logs in again, a few extra seconds. See "Session state" in quirks.
Development
npm test # offline unit tests, no shop neededTo try a change against a real admin, use a staging shop and SHOPTET_HEADED=1. Do not commit shop data, screenshots of admin pages or HTML copied from a real shop. Security problems go through private reporting, not public issues.
About
I am Egor Nefedov, Prague. I build automations and internal apps that take retyping, spreadsheets and repeated questions off people's hands in Czech companies. More at nefedov.cz.
MIT licence, see LICENSE. Czech version: README.cs.md.
Available Tools
11 toolsshoptet_get_bannerGet bannerBRead-onlyIdempotent
HTML content and settings of one banner.
Inputs: id (required).
shoptet_get_html_codesGet HTML codesARead-onlyIdempotent
Custom HTML code fields from Appearance → Editor → HTML code (header, footer, orderFinale, robotsFile, llmsFile). Omit field to get all.
Inputs: field.
shoptet_get_price_listProduct price list (variants)BRead-onlyIdempotent
All variants of a product from its price list tab: variant id, name, code, price and stock.
Inputs: product_id (required).
shoptet_get_productGet productARead-onlyIdempotent
Name, visibility, short description and description of one product. Long texts are truncated to max_chars.
Inputs: id (required), max_chars.
shoptet_list_bannersList bannersCRead-onlyIdempotent
Banners (id like "banner2", name, position).
Inputs: no named parameters.
shoptet_list_couponsList discount couponsCRead-onlyIdempotent
Discount coupons (code, discount, template, validity, usage). Optionally filter by code.
Inputs: code.
shoptet_list_coupon_templatesList coupon templatesARead-onlyIdempotent
Coupon templates you can pass as template_id when proposing a coupon.
Inputs: no named parameters.
shoptet_list_ordersList orders (no personal data)ARead-onlyIdempotent
Recent orders: id, code, date, status, total, shipping, payment, sales channel. Customer names, e-mails and addresses are never returned.
Inputs: limit.
shoptet_list_productsList productsARead-onlyIdempotent
List products from the admin product list (id, name, price text). Optional case-insensitive name filter.
Inputs: limit, query.
shoptet_list_redirectsList URL redirectsCRead-onlyIdempotent
URL redirect rules (from, to). Optionally filter by source path.
Inputs: from.
shoptet_shop_infoShop infoARead-onlyIdempotent
Log in and confirm which shop this server is connected to, and whether write tools are enabled.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Most tools target clearly distinct resources or actions: product listing, product detail, price-list variants, coupons, coupon templates, redirects, banners, HTML codes, orders, and shop info. The only mild overlap is between product detail and price-list retrieval, but the descriptions make the distinction reasonably clear.
All tools use the same shoptet_ prefix and snake_case, and nearly all follow a predictable verb_noun pattern such as get_product, list_coupons, and get_banner. shoptet_shop_info is the main exception, but it is still readable and unambiguous.
Eleven tools is a well-scoped size for an admin inspection surface covering products, coupons, redirects, banners, HTML fields, orders, and shop identity. Each tool appears to earn its place without excessive fragmentation.
The surface is almost entirely read-only: it lists and gets products, coupons, redirects, banners, HTML codes, and orders, but there are no create, update, or delete operations for these resources. For an admin MCP, that is a significant lifecycle gap, especially since coupon templates are exposed but coupon creation is not.
Maintenance
Related MCP Connectors
Read-only web QA agent: scans a site in a real browser and returns evidence-backed findings
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Playwright browser automation — navigate, click, fill forms, extract, screenshot — 17 agent tools.
Let AI agents use your real, signed-in Chrome: tabs, clicks, forms, screenshots and video.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control web browsers through Playwright automation, providing 50+ tools for navigation, interaction, testing, accessibility audits, and visual testing across Chromium, Firefox, and WebKit.24 npmMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to perform browser automation using Playwright, including navigation, content extraction, screenshot analysis, and custom script execution.520 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control a browser through Playwright tools, allowing web automation tasks such as navigation, clicking, typing, and screenshots.8,154 npmApache 2.0
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to control a browser through Playwright tools for web automation tasks like navigation, typing, clicking, and taking screenshots.Apache 2.0