关于 TATUAT.RO – Tattoo Supplies
TATUAT.RO – Tattoo Supplies 是用于搜索罗马尼亚商店纹身、穿孔和 PMU 商品的 MCP 服务,帮助购物者和 Agent 比较 RON 价格、查看库存与运费并生成结账链接;它不会下单或处理付款。
主要功能
- 01搜索商品并浏览分类
- 02查看商品详情及不同款式价格
- 03按所需数量查询实时库存
- 04估算运费及优惠门槛
- 05创建临时签名结账链接
适用场景
- 01按商品或品牌查找纹身用品
- 02比较不同款式的价格和库存
- 03结账前估算配送费用
- 04生成前往 tatuat.ro 结账的购物车链接
MCP 相关
公开的 Streamable HTTP MCP 端点提供六种工具,用于搜索目录、查询商品详情、库存和运费,以及创建结账链接。前五种工具为只读;结账在 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")。至少需要两个字符才会实际执行搜索。 |
| limit | integer | 否 | 返回多少条结果,范围为 1 到 20。默认值为 10。 |
详细介绍
TATUAT.RO — MCP 服务
tatuat.ro 目录——纹身和穿孔设备——可供 ChatGPT、Claude 和任何 AI Agent 使用。 在对话中直接搜索产品、查看实时库存、计算运费并生成订单链接。
🟢 已上线: https://api.tatuat.ro/mcp · 可流式传输的 HTTP · 无需身份验证
英文 — 将 TATUAT.RO 目录(罗马尼亚的纹身和穿孔用品)提供给 AI Agent 使用的 MCP 服务。已在
https://api.tatuat.ro/mcp上线,支持可流式传输的 HTTP,无需身份验证。提供六种工具:产品搜索、浏览分类、产品详情、实时库存、运费计算器和签名结账链接。价格以 RON 计。除结账链接外均为只读操作——购买在 tatuat.ro 上完成。
Agent 可以做什么
| 工具 | 功能 |
|---|---|
search_products | 按名称、品牌或产品类型搜索。返回 RON 价格、库存情况和产品详情页的直接链接。 |
browse_category | 浏览某个分类(或整个目录)中的一页产品,并可排序。 |
get_product | 完整产品信息:描述、实际价格、折前价格、品牌,以及带有各自价格和库存的款式。 |
get_stock | 查询所需数量的实时库存情况。共四种状态:有足量库存、部分有货、可订购、无货。 |
calculate_shipping | 运费、免运费门槛,以及达到门槛可获赠的礼品。 |
create_checkout | 生成指向 tatuat.ro 购物车的签名链接。有效期为 15 分钟。 |
前五种工具均为只读——不会写入任何数据。第六种工具只生成链接;不会下单,也不会访问数据库。
示例
— 我需要 20 个左右的 0.30 RL 针筒。加上运费要多少钱?
Agent 调用 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 价格(固定汇率),但这里不会显示:模型读到未标注货币的价格,正是导致客户误以为自己要支付另一笔金额的原因。
对于带有款式(尺寸、配置)的产品,返回的价格是各款式中的最低价,并标记为 price_from: true,这样 Agent 就会说“X RON 起”,而不是“X RON”。
不支持的功能
- 不会写入数据库。没有任何工具会改变状态。
- **不会在服务器上保存购物车。**购物车保存在 tatuat.ro 上。
- **不会验证用户身份。**OAuth 将在后续阶段推出。
- **不会处理付款。**结账在 tatuat.ro 上完成——这是 OpenAI 对插件的明确要求(“外部结账”)。
- **结账链接不包含价格。**它仅传递购买意向(产品、款式、数量);最终价格会在网站上计算并确认。
开发者指南
路由
| 路由 | 方法 | 功能 |
|---|---|---|
/mcp | POST, GET, DELETE | MCP 端点。三种方法均委托给该软件包,使 405 错误由协议返回,而不是由 Next 返回。 |
/.well-known/mcp-server-card.json | GET | 服务的名片。 |
/.well-known/openai-apps-challenge | GET | 验证域名所有权。仅返回 OPENAI_APPS_CHALLENGE_TOKEN 中的令牌;若令牌不存在,则返回 404。 |
主机允许列表
HTTP 边缘会根据 MCP_ALLOWED_HOSTS 中的静态允许列表验证 Host 和 Origin(默认值为 api.tatuat.ro)。列表绝不会从请求本身推导——根据请求自己的 Host 标头构建允许列表,会轻易接受 DNS 重绑定页面。
以下情况看起来像故障,但其实是有意为之:
- Vercel 预览 URL 会收到 403——它不在允许列表中。将主机添加到该环境的
MCP_ALLOWED_HOSTS中;不要放宽验证。 - 缺少
Host→ 403(missing_host),默认拒绝:MCP 客户端始终会发送Host。 - 缺少
Origin→ 通过。与Host的处理方式相反:非浏览器客户端不会发送Origin,拒绝它们就会恰好破坏这个服务存在的目的。存在但来自其他主机的Origin,或字面值null,会收到 403。 - 验证不区分端口,并会规范化大小写。
拒绝响应采用 JSON-RPC 格式,状态码为 403,而不是 HTML——MCP 客户端可以解析它。
环境变量
变量名列于 .env.example 中,不含值。生产环境中的值来自 Vercel 项目环境变量;本地设置时则来自 macOS Keychain——绝不存入代码仓库。
| 变量 | 必需 | 备注 |
|---|---|---|
SUPABASE_URL | 是 | PostgREST,服务端到服务端 |
SUPABASE_ANON_KEY | 是 | anon 密钥,而非 service_role:工具读取的所有内容都已通过 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会针对每个请求运行工厂函数;如果在工厂函数中创建令牌桶,它就会在每次请求时重置。上限按函数实例计算,因此只是“尽力而为”,而非全局限制。 - 刻意仅支持罗马尼亚语。 不会发送
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
推送前检查
git config core.hooksPath .githooks
启用 .githooks/pre-push,它会运行 test:critical,若有测试失败就阻止推送。每个克隆只需执行一次。确有需要时可绕过:git push --no-verify。
npm run typecheck 也会检查 .mjs 文件(checkJs: true,并在 include 中包含 "**/*.mjs")。缺少这两行时,检查关卡不会检查任何文件,因此总是通过。
商店:tatuat.ro — 专业纹身和穿孔设备。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。