プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

TATUAT.RO — Tattoo & Piercing Supplies

作者:estartokenバージョン 0.1.0i★ –iクラウドで動く
レジストリ名io.github.estartoken/tatuat-mcp

インストール

概要

作者による説明(英語の原文)

Tattoo and piercing supply catalog (Romania): search, live stock, shipping cost, checkout link.

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: クラウドで動く
  • トランスポート: Streamable HTTP
  • カテゴリ: ネットショップ・決済

インストール

使っているAIアプリを選んで、設定をコピーしてください。

インストールの前に

必要なもの

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

ウェブ、デスクトップ、モバイルのClaudeで使えます:

  1. Settings → Connectors を開く
  2. Add custom connector を押す
  3. 下のアドレスを貼り付けて Add を押す
  4. サインインを求められたら、作者のサービスにサインインする
SettingsConnectors1+ Add2https://…3
https://api.tatuat.ro/mcp

ターミナルでこれを実行します

claude mcp add --transport http tatuat https://api.tatuat.ro/mcp

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

{
  "mcpServers": {
    "tatuat": {
      "url": "https://api.tatuat.ro/mcp"
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

{
  "servers": {
    "tatuat": {
      "type": "http",
      "url": "https://api.tatuat.ro/mcp"
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

ChatGPTがつなげるのは、インターネット上のサーバーだけです:

  1. ウェブ版のChatGPTを開き → Settings → Connectors (Apps)
  2. Create または Add を押す(プランによっては、先に Advanced で Developer mode をオンにする必要があります)
  3. 下のアドレスを貼り付け、名前を付けて保存する
  4. サインインを求められたら、作者のサービスにサインインする
SettingsConnectors1+ Create2https://…3
https://api.tatuat.ro/mcp

メニューの名前は、プランや時期によって少し違うことがあります。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

できること

ツールの名前と説明は、サーバーが2026年11月8日に返したそのままの内容です。書いたのは作者で、私たちではありません。プレーンテキストとして表示しています。

  • search_products

    Caută î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_shipping

    Calculează 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_stock

    Verifică 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_checkout

    Generează 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

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月9日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント estartoken で確認済みです

  • … 未チェック

    今もメンテナンスされている

    このリポジトリはまだGitHubから読み取っていません

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • ✓ 合格

    エンドポイントが応答する

    340ミリ秒で応答(HTTP 200)

  • – 対象外

    OAuthでサインイン

    サインイン不要

  • ✓ 合格

    ツールの説明に隠れた指示がない

    6件のツールの説明を読み、AIへの隠れた指示は見つかりませんでした

ネットショップ・決済のほかのサーバーとの比較i

  • このカテゴリのほかの2575件のうち0%よりスターが多い
  • このカテゴリのほかの2575件のうち43%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの2575件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

TATUAT.RO — Tattoo & Piercing Suppliesは安全ですか?

当てはまる基本チェック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

Stripe MCP

MCP server integrating with Stripe - tools for customers, products, payments, and more.

作者:stripe広く使われている★ 204313 か月前更新

クラウドで動く✓ stripe.com

MCP Cn Commerce

8 read-only MCP platform entries; support is operation-specific; merchant live acceptance pending

作者:TonyWang-hub初期↓ 73/週★ 9630 日前更新

パソコンで動く

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

TATUAT.RO — server MCP

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.


Ce poate face un agent

ToolCe face
search_productsCaută după nume, brand sau tip de produs. Întoarce preț în RON, disponibilitate și link direct la fișă.
browse_categoryO pagină de produse dintr-o categorie (sau din tot catalogul), cu sortare.
get_productFișa completă: descriere, preț efectiv, preț dinainte de reducere, brand, variante cu preț și stoc propriu.
get_stockDisponibilitatea reală pentru o cantitate cerută. Patru stări: integral, parțial, precomandă și cantitate la plafonul maxim pe linie.
calculate_shippingCost de transport, pragul de transport gratuit și cadourile atinse la prag.
create_checkoutLink 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.

Exemplu

— *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.

Cum îl conectezi

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țuri și monedă

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.

Ce NU face

  • Nu scrie nimic în baza de date. Niciun tool nu mutează stare.
  • Nu ține coș pe server. Coșul trăiește pe tatuat.ro.
  • Nu autentifică utilizatori. OAuth e fază ulterioară.
  • Nu procesează plăți. Checkout-ul se finalizează pe tatuat.ro — cerință explicită OpenAI pentru plugin-uri („external checkout").
  • Linkul de checkout nu conține prețuri. Transportă doar intenția (produs, variantă, cantitate); prețul final se calculează și se confirmă pe site.

Pentru dezvoltatori

Rute

RutăMetodeCe face
/GETDocumentație publică indexabilă, fără JavaScript sau autentificare.
/robots.txtGETPermite documentația și exclude transportul MCP și verificarea domeniului.
/llms.txtGETRezumat compact al conectării, uneltelor și regulilor de utilizare.
/mcpPOST, GET, DELETEEndpointul MCP. Toate trei delegate pachetului, ca 405-ul să vină de la protocol, nu de la Next.
/.well-known/mcp-server-card.jsonGETCartea de vizită a serverului.
/.well-known/openai-apps-challengeGETVerificarea proprietății domeniului. Întoarce doar tokenul din OPENAI_APPS_CHALLENGE_TOKEN; 404 dacă lipsește.

Allowlist de gazde

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:

  • Un URL de preview Vercel primește 403 — nu e în allowlist. Adaugă hostul în 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.
  • Validarea e port-agnostică și normalizează majusculele.

Refuzul are formă JSON-RPC cu status 403, nu HTML — un client MCP îl poate parsa.

Variabile de mediu

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ăObligatorieNotă
SUPABASE_URLdaPostgREST, server-to-server
SUPABASE_ANON_KEYdaCheia anon, nu service_role: tot ce citesc tool-urile e deja public prin RLS
AGENT_CHECKOUT_SECRETpentru create_checkoutAceeași valoare și în proiectul site-ului
MCP_ALLOWED_HOSTSnuImplicit api.tatuat.ro. Listă separată prin virgulă
TATUAT_SITE_URLnuImplicit https://tatuat.ro
OPENAI_APPS_CHALLENGE_TOKENla submissionDat de portalul OpenAI

Arhitectură

  • Logica în `.mjs`, glue-ul în `.ts`. 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.
  • Fără `@supabase/supabase-js`. Acces direct pe PostgREST cu fetch — CORS e o restricție de browser, nu se aplică server-to-server.
  • Rate limiting singleton la nivel de modul. 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.
  • Căutare în catalogul RO. 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.
  • Proiect separat de magazin, ca un tool schimbat să nu ceară redeploy al site-ului.

Comenzi

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

Gardă înainte de push
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.

PopNxに聞く