TATUAT.RO – Tattoo Supplies について
TATUAT.RO – Tattoo Suppliesは、ルーマニアのショップにあるタトゥー、ピアス、PMU用品を検索するMCPサーバーです。購入者やエージェントがRON価格、在庫、送料を確認し、注文や決済を行わずにチェックアウトリンクを作成できます。
主な機能
- 01商品検索とカテゴリ閲覧
- 02商品詳細とバリエーション価格の確認
- 03希望数量に応じたリアルタイム在庫確認
- 04送料と無料配送条件の見積もり
- 05期限付き署名済みチェックアウトリンクの作成
活用シーン
- 01商品名やブランドからタトゥー用品を探す
- 02バリエーションごとの価格と在庫を比較
- 03購入前に配送費用を見積もる
- 04tatuat.roでの決済用カートリンクを作成
MCP 対応
公開Streamable HTTP MCPエンドポイントは、カタログ検索、商品詳細、在庫、送料、チェックアウトリンク作成の6つのツールを提供します。最初の5つは読み取り専用で、決済はtatuat.roで行います。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.tatuat.ro/mcpclaude mcp add --transport http tatuat-ro-tattoo-supplies https://api.tatuat.ro/mcp{"mcpServers":{"tatuat-ro-tattoo-supplies":{"type":"http","url":"https://api.tatuat.ro/mcp"}}}Cursor で開く{"servers":{"tatuat-ro-tattoo-supplies":{"type":"http","url":"https://api.tatuat.ro/mcp"}}}VS Code で開く{"mcpServers":{"tatuat-ro-tattoo-supplies":{"type":"http","url":"https://api.tatuat.ro/mcp"}}}{"mcpServers":{"tatuat-ro-tattoo-supplies":{"serverUrl":"https://api.tatuat.ro/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
6| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 顧客が自分の言葉で指定する検索対象:商品名、ブランド、または商品タイプ(例:「ace 0.30 RL」、「mașină rotativă」、「tuș negru」)。実際に検索するには 2 文字以上が必要です。 |
| limit | integer | いいえ | 返す結果の件数。1~20 の範囲で指定します。デフォルトは 10 です。 |
詳細
TATUAT.RO — MCP サーバー
tatuat.ro のカタログ — タトゥー・ピアス用品 — を、ChatGPT、Claude、あらゆる AI エージェントで利用できます。 会話から直接、商品を検索し、実在庫を確認し、送料を計算して、注文リンクを生成します。
🟢 稼働中: https://api.tatuat.ro/mcp · ストリーム可能な HTTP トランスポート · 認証不要
英語 — TATUAT.RO のカタログ(ルーマニアのタトゥー・ピアス用品)を AI エージェントに公開する MCP サーバーです。
https://api.tatuat.ro/mcpで稼働中。ストリーム可能な HTTP、認証不要。6 つのツールを提供します:商品検索、カテゴリー閲覧、商品詳細、リアルタイム在庫、送料計算、署名付きチェックアウトリンク。価格は RON です。チェックアウトリンクを除き、読み取り専用です。購入は tatuat.ro で完了します。
エージェントができること
| ツール | 説明 |
|---|---|
search_products | 名前、ブランド、商品タイプで検索します。RON 価格、在庫状況、商品ページへの直接リンクを返します。 |
browse_category | カテゴリー(またはカタログ全体)の商品ページを並べ替えて表示します。 |
get_product | 商品の詳細情報を返します。説明、実売価格、割引前価格、ブランド、価格と個別在庫を含むバリエーションを確認できます。 |
get_stock | 指定数量の実際の在庫状況を返します。状態は「全数あり」「一部あり」「取り寄せ」「在庫なし」の 4 種類です。 |
calculate_shipping | 送料、送料無料の条件金額、条件達成時のギフトを計算します。 |
create_checkout | tatuat.ro のカートへの署名付きリンクを生成します。有効期間は 15 分です。 |
最初の 5 つは読み取り専用で、何も書き込みません。6 つ目はリンクを生成するだけで、注文を確定したり、データベースに触れたりしません。
例
— 0.30 RL のカートリッジが 20 個ほど必要です。送料込みでいくらですか?
エージェントは search_products → get_stock → calculate_shipping を呼び出し、実際の価格と送料無料までに必要な金額を回答します。その後、create_checkout がリンクを生成し、顧客は tatuat.ro で注文を完了できます。
接続方法
Claude Code
claude mcp add --transport http tatuat https://api.tatuat.ro/mcp
Claude Desktop — 設定 → コネクター → カスタムコネクターを追加 → https://api.tatuat.ro/mcp
あらゆる MCP クライアント — ストリーム可能な HTTP エンドポイント、プロトコル 2025-06-18、トークン不要。
価格と通貨
契約価格はRONで、各レスポンスに明示的に表示されます。ストアでは固定レートの HUF 価格も設定されていますが、ここでは公開しません。通貨ラベルのない価格をモデルが読み取ると、顧客が別の金額を支払うと思い込む原因になるためです。
バリエーション(サイズ、構成)がある商品の場合、返される価格はバリエーションの最安値で、エージェントが「X RON」ではなく「X RON から」と伝えられるよう、price_from: true が設定されています。
対応していないこと
- データベースには何も書き込みません。 状態を変更するツールはありません。
- サーバー上でカートを保持しません。 カートは tatuat.ro 上にあります。
- ユーザーを認証しません。 OAuth は今後の段階で対応します。
- 支払いを処理しません。 チェックアウトは tatuat.ro で完了します。これはプラグインに関する OpenAI の明示的な要件(「外部チェックアウト」)です。
- チェックアウトリンクに価格は含まれません。 商品、バリエーション、数量の指定だけを渡します。最終価格はサイト上で計算され、確認されます。
開発者向け
ルート
| ルート | メソッド | 説明 |
|---|---|---|
/mcp | POST, GET, DELETE | MCP エンドポイント。405 が Next ではなくプロトコルから返されるよう、3 つのメソッドすべてをパッケージに委譲します。 |
/.well-known/mcp-server-card.json | GET | サーバーのプロフィールカードです。 |
/.well-known/openai-apps-challenge | GET | ドメイン所有権を検証します。OPENAI_APPS_CHALLENGE_TOKEN のトークンのみを返し、値がない場合は 404 を返します。 |
ホストの許可リスト
HTTP エッジは、Host と Origin を MCP_ALLOWED_HOSTS にある静的な許可リスト(デフォルトは api.tatuat.ro)と照合します。リストがリクエスト自体から生成されることはありません。リクエスト自身の Host ヘッダーから作成した許可リストでは、DNS リバインディング攻撃のページを簡単に受け入れてしまいます。
不具合のように見えても、意図した動作である結果:
- Vercel のプレビュー URL には 403 が返されます。許可リストに含まれていないためです。その環境の
MCP_ALLOWED_HOSTSにホストを追加してください。検証を緩めないでください。 Hostがない場合は 403(missing_host)が返されます。フェイルクローズです。MCP クライアントは常にHostを送信します。Originがない場合は通過します。Hostとは逆の扱いです。ブラウザー以外のクライアントはOriginを送信せず、これを拒否すると、このサーバーが必要とされるクライアントをまさに壊してしまいます。別のホストからのOrigin、またはリテラル値nullが指定された場合は、403 が返されます。- 検証ではポートを考慮せず、大文字と小文字を正規化します。
拒否時には、HTML ではなくステータス 403 の JSON-RPC 形式が返されるため、MCP クライアントで解析できます。
環境変数
名前は値を含まない .env.example に記載されています。本番環境では Vercel プロジェクトの環境変数から、ローカルのセットアップでは macOS Keychain から値を取得します。リポジトリから取得することはありません。
| 変数 | 必須 | 備考 |
|---|---|---|
SUPABASE_URL | はい | サーバー間通信用の PostgREST |
SUPABASE_ANON_KEY | はい | service_role ではなく anon キーです。ツールが読み取るデータはすべて RLS によってすでに公開されています |
AGENT_CHECKOUT_SECRET | create_checkout に必要 | サイトのプロジェクトでも同じ値を使用します |
MCP_ALLOWED_HOSTS | いいえ | デフォルトは api.tatuat.ro。カンマ区切りのリスト |
TATUAT_SITE_URL | いいえ | デフォルトは https://tatuat.ro |
OPENAI_APPS_CHALLENGE_TOKEN | 送信時 | OpenAI ポータルから提供されます |
アーキテクチャ
- ロジックは
.mjsに、接着コードは.tsに配置します。app/**/route.tsは純粋な委譲処理で、判断を一切行いません。リポジトリには.tsのテストがないため、誤動作する可能性のある処理を.tsに含めることはできません。何らかの判断を行う処理はすべてsrc/**/*.mjsに置き、node --testでテストします。 @supabase/supabase-jsは使用しません。fetchで PostgREST に直接アクセスします。CORS はブラウザーの制約であり、サーバー間通信には適用されません。- モジュールレベルのシングルトンでレート制限します。
createMcpHandlerはリクエストごとにファクトリーを実行するため、ファクトリー内でバケットを作成すると、毎回リセットされます。上限は関数インスタンスごとに適用されるため、グローバルではなく「ベストエフォート」です。 - 意図的に RO のみに対応しています。
p_langは送信されないため、ハンガリー限定の商品は表示されません。フェイルクローズです。 - ストアとは別のプロジェクトです。 これにより、ツールを変更してもサイトの再デプロイは不要です。
コマンド
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
push 前のチェック
git config core.hooksPath .githooks
.githooks/pre-push を有効にすると、test:critical が実行され、失敗があれば push が停止します。クローンごとに一度だけ設定してください。本当に必要な場合は、git push --no-verify で回避できます。
npm run typecheck は .mjs ファイルも対象とします(checkJs: true と "**/*.mjs" の include 設定)。この2行がないと、チェック対象がゼロになり、常に成功してしまいます。
ストア:tatuat.ro — プロ仕様のタトゥー・ピアス用品。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。