Spree Commerce: open-source B2B and marketplace ecommerce
Open-source B2B and marketplace ecommerce; new stores include an MCP server for AI agents.
作者による説明(英語の原文)
Tattoo and piercing supply catalog (Romania): search, live stock, shipping cost, checkout link.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
https://api.tatuat.ro/mcpターミナルでこれを実行します
claude mcp add --transport http tatuat https://api.tatuat.ro/mcpプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"tatuat": {
"url": "https://api.tatuat.ro/mcp"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"tatuat": {
"type": "http",
"url": "https://api.tatuat.ro/mcp"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
https://api.tatuat.ro/mcpメニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
ツールの名前と説明は、サーバーが2026年11月8日に返したそのままの内容です。書いたのは作者で、私たちではありません。プレーンテキストとして表示しています。
search_productsCaută în catalogul tatuat.ro după nume, brand sau tip de produs și întoarce produse cu preț în RON, disponibilitate și link direct la fișa de produs. Folosește acest tool când clientul întreabă dacă un produs există, cât costă sau ce opțiuni sunt disponibile. Pentru detaliile unu
calculate_shippingCalculează costul de transport, pragul pentru transport gratuit și cadourile atinse la prag pentru un coș tatuat.ro. Dă fie 'lines' (produsele coșului, ca tool-ul să citească prețul real din catalog), fie un 'subtotal' deja cunoscut. Pentru variante cu prețuri diferite, trimite v
get_stockVerifică disponibilitatea reală a unui produs (sau al unei variante a lui, ex. o mărime) pentru o cantitate cerută de client, folosind slug-ul întors de search_products. Întoarce una din patru stări — disponibil integral acum, parțial disponibil cu rest pe precomandă, precomandă
browse_categoryÎntoarce o pagină de produse dintr-o categorie tatuat.ro (sau din tot catalogul, dacă nu se dă un ID de categorie), cu preț în RON, disponibilitate și link direct la fișa de produs. Folosește acest tool când clientul vrea să vadă ce e disponibil într-o categorie sau vrea produsel
get_productÎntoarce fișa completă a unui produs de pe tatuat.ro după slug: nume, descriere, preț efectiv în RON (cu prețul dinainte de reducere dacă e cazul), disponibilitate, link direct la fișă, brand și variantele cu preț și stoc propriu. Folosește slug-ul întors de search_products. Dacă
create_checkoutGenerează un link semnat către checkout-ul tatuat.ro pentru coșul dat (produse, variante, cantități, opțiuni). Linkul e valabil un timp limitat și NU conține prețuri — prețul final se confirmă pe site. Folosește acest tool când clientul e decis să cumpere; pentru a găsi produse s
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月9日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント estartoken で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
340ミリ秒で応答(HTTP 200)
サインイン不要
6件のツールの説明を読み、AIへの隠れた指示は見つかりませんでした
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
作者のクラウドで動きます。インストール不要でインターネット経由でつながりますが、送った内容は作者のサーバーを通ります。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは40 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spree Commerce: open-source B2B and marketplace ecommerce, Stripe MCP, MCP Cn Commerce
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Open-source B2B and marketplace ecommerce; new stores include an MCP server for AI agents.
MCP server integrating with Stripe - tools for customers, products, payments, and more.
8 read-only MCP platform entries; support is operation-specific; merchant live acceptance pending
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Catalogul [tatuat.ro](https://tatuat.ro) — echipament de tatuaj și piercing — disponibil pentru ChatGPT, Claude și orice agent AI. Caută produse, verifică stocul real, calculează transportul și generează un link de comandă, direct din conversație.
Documentație publică: api.tatuat.ro · llms.txt
🟢 Live: https://api.tatuat.ro/mcp · transport streamable HTTP · fără autentificare
English — MCP server exposing the TATUAT.RO catalog (tattoo &
piercing supplies, Romania) to AI agents. Live at
https://api.tatuat.ro/mcp, streamable
HTTP, no auth required. Six tools: product search, category browsing, product detail,
real-time stock, shipping calculator, and a signed checkout link. Prices in RON.
Read-only except the checkout link — the purchase is completed on tatuat.ro.
| Tool | Ce face |
|---|---|
search_products | Caută după nume, brand sau tip de produs. Întoarce preț în RON, disponibilitate și link direct la fișă. |
browse_category | O pagină de produse dintr-o categorie (sau din tot catalogul), cu sortare. |
get_product | Fișa completă: descriere, preț efectiv, preț dinainte de reducere, brand, variante cu preț și stoc propriu. |
get_stock | Disponibilitatea reală pentru o cantitate cerută. Patru stări: integral, parțial, precomandă și cantitate la plafonul maxim pe linie. |
calculate_shipping | Cost de transport, pragul de transport gratuit și cadourile atinse la prag. |
create_checkout | Link semnat către coșul de pe tatuat.ro. Valabil 15 minute. |
Primele cinci sunt read-only — nu scriu nimic. Al șaselea generează doar un link; nu plasează comanda și nu atinge baza de date.
— *Am nevoie de cartușe 0.30 RL, vreo 20 de bucăți. Cât mă costă cu transport?*
Agentul apelează search_products → get_product (alege varianta) → get_stock → calculate_shipping, răspunde cu prețul real și cu cât mai trebuie până la transport gratuit, apoi create_checkout dă linkul pe care clientul finalizează comanda pe tatuat.ro.
Claude Code
claude mcp add --transport http tatuat https://api.tatuat.ro/mcp
Claude Desktop — Settings → Connectors → Add custom connector → https://api.tatuat.ro/mcp
Orice client MCP — endpoint streamable HTTP, protocol 2025-06-18, fără token.
Prețul contractual e RON, etichetat explicit în fiecare răspuns. Magazinul are și prețuri în HUF (rată fixă), dar nu se expun aici: un preț fără etichetă de monedă, citit de un model, e exact felul în care un client ajunge să creadă că plătește altă sumă.
La produsele cu variante (mărimi, configurații) prețul întors e minimul dintre variante, marcat price_from: true când variantele au prețuri diferite, ca agentul să spună „de la X RON", nu „X RON".
Pentru calculate_shipping, fiecare linie acceptă variant_id din get_product. Când variantele au prețuri diferite, ID-ul este necesar pentru un total exact. Fără el, serverul cere selecția. Un produs/variantă neconfirmată sau un preț lipsă oprește calculul cu isError, fără un subtotal parțial. Produsele cu variante la același preț pot fi calculate fără selecție. subtotal direct nu poate verifica produse sau tarife de colet greu.
| Rută | Metode | Ce face |
|---|---|---|
/ | GET | Documentație publică indexabilă, fără JavaScript sau autentificare. |
/robots.txt | GET | Permite documentația și exclude transportul MCP și verificarea domeniului. |
/llms.txt | GET | Rezumat compact al conectării, uneltelor și regulilor de utilizare. |
/mcp | POST, GET, DELETE | Endpointul MCP. Toate trei delegate pachetului, ca 405-ul să vină de la protocol, nu de la Next. |
/.well-known/mcp-server-card.json | GET | Cartea de vizită a serverului. |
/.well-known/openai-apps-challenge | GET | Verificarea proprietății domeniului. Întoarce doar tokenul din OPENAI_APPS_CHALLENGE_TOKEN; 404 dacă lipsește. |
Marginea HTTP validează Host și Origin împotriva unei allowlist statice din MCP_ALLOWED_HOSTS (implicit api.tatuat.ro). Lista nu se derivă niciodată din cererea însăși — o allowlist construită din propriul header Host ar accepta trivial o pagină de DNS rebinding.
Consecințe care arată ca defecțiuni, dar sunt intenționate:
MCP_ALLOWED_HOSTS pentru acel environment; nu relaxa validarea.Host absent → 403 (missing_host), fail-closed: clienții MCP trimit mereu Host.Origin absent → trece. Polaritate opusă față de Host: clienții non-browser nu trimit Origin, iar a-i respinge ar rupe exact clientul pentru care există serverul. Un Origin prezent dar de pe alt host, sau literalul null, primește 403.Refuzul are formă JSON-RPC cu status 403, nu HTML — un client MCP îl poate parsa.
Numele sunt în .env.example, fără valori. Valorile vin din env-ul proiectului Vercel în producție și din macOS Keychain la setup local — niciodată din repo.
| Variabilă | Obligatorie | Notă |
|---|---|---|
SUPABASE_URL | da | PostgREST, server-to-server |
SUPABASE_ANON_KEY | da | Cheia anon, nu service_role: tot ce citesc tool-urile e deja public prin RLS |
AGENT_CHECKOUT_SECRET | pentru create_checkout | Aceeași valoare și în proiectul site-ului |
MCP_ALLOWED_HOSTS | nu | Implicit api.tatuat.ro. Listă separată prin virgulă |
TATUAT_SITE_URL | nu | Implicit https://tatuat.ro |
OPENAI_APPS_CHALLENGE_TOKEN | la submission | Dat de portalul OpenAI |
app/**/route.ts sunt delegări pure, fără nicio decizie: repo-ul nu are teste pe .ts, deci un .ts nu are voie să conțină ceva care poate greși. Tot ce decide ceva e în src/**/*.mjs, acoperit de node --test.fetch — CORS e o restricție de browser, nu se aplică server-to-server.createMcpHandler rulează factory-ul pe fiecare cerere; o găleată creată în factory s-ar reseta de fiecare dată. Plafonul e per-instanță de funcție, deci „best effort", nu global.p_lang nu se trimite în căutare/listare. Fișele accesate direct pot întoarce produse cu livrare limitată la Ungaria; get_product, get_stock și calculate_shipping declară atunci order_restriction: "hu_only". Fail-closed.npm run test # node --test pe src/mcp, src/mcp/tools, src/well-known
npm run typecheck # tsc --noEmit — vede și .mjs (checkJs + include) npm run test:critical # ambele npm run dev # Next dev pe :3000 npm run build # next build
git config core.hooksPath .githooks
Activează .githooks/pre-push, care rulează test:critical și oprește push-ul dacă pică ceva. O singură dată pe clonă. Ocolire, când chiar trebuie: git push --no-verify.
npm run typecheck acoperă și fișierele .mjs (checkJs: true plus "**/*.mjs" în include). Fără acele două linii, gate-ul privea zero fișiere și trecea mereu.
Magazinul: [tatuat.ro](https://tatuat.ro) — echipament profesional de tatuaj și piercing.