ec-storefront
JPYC (JPY stablecoin) EC platform MCP: product search, x402 gasless checkout, order status.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (4)
- LOWin list_shops
- LOWin get_shop
- LOWin get_product
- LOWin get_order_status
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"ec-storefront": {
"url": "https://ec.jpyc-service.com/mcp"
}
}
}Remote-Endpunkte
https://ec.jpyc-service.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (9)
🟢list_shops
JPYC EC Platform に出店している公開ショップの一覧を返す。減農薬の農産物・地酒・伝統工芸品など、生産者から直接買えるショップが中心。各ショップの name / slug / 説明 / 対応チェーン / 商品点数を含む。商品を探す起点として最初に呼ぶとよい。
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_shop(shop_slug)
1 つのショップ(生産者・職人)の詳細を slug で取得する。ショップのストーリーや説明、対応ブロックチェーン、x402 決済が有効かどうかを返す。
Eingabe-Schema
{
"type": "object",
"properties": {
"shop_slug": {
"type": "string",
"minLength": 1,
"description": "ショップの slug(URL 識別子)"
}
},
"required": [
"shop_slug"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_products_in_shop(shop_slug)
1 つのショップの公開中の商品をすべて返す。価格(JPYC 建て)・在庫・バリエーション・配送要否・対応チェーンを含む。list_shops でショップを見つけたあと、その品揃えを見るのに使う。
Eingabe-Schema
{
"type": "object",
"properties": {
"shop_slug": {
"type": "string",
"minLength": 1,
"description": "ショップの slug"
}
},
"required": [
"shop_slug"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_product(product_id)
1 つの商品の詳細を product_id で取得する。価格(JPYC 建て)・在庫・SKU・バリエーション・配送要否・対応チェーンを返す。購入の前に必ず呼んで、requires_shipping(配送先が必要か)と has_variants(オプション選択が必要か)を確認すること。
Eingabe-Schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"description": "商品 ID"
}
},
"required": [
"product_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_products(text, category, tag, shop_slug, min_price, ...)
JPYC EC Platform 上の公開商品を横断検索する。減農薬米・地酒・伝統工芸品など、生産者から直接 JPYC で購入できる商品が対象。text は自然言語のキーワード(例: 『丹波 米』)で、商品名と説明に部分一致する。category / tag(産地・認証種別など)、価格帯(min_price / max_price、JPYC)、shop_slug で絞り込める。売上順で最大 50 件返す。
Eingabe-Schema
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "自然言語のキーワード(商品名・説明に部分一致)"
},
"category": {
"type": "string",
"description": "商品カテゴリーの完全一致"
},
"tag": {
"type": "string",
"description": "商品タグ(産地・認証種別など)の完全一致"
},
"shop_slug": {
"type": "string",
"description": "特定ショップに絞り込む"
},
"min_price": {
"type": "number",
"minimum": 0,
"description": "最低価格(JPYC)"
},
"max_price": {
"type": "number",
"minimum": 0,
"description": "最高価格(JPYC)"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "最大件数(1-50、既定 20)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡quote_checkout(shop_id, items, customer_email, preferred_chain_id, payer_address, ...)
カートの内容で x402 チェックアウトの 1 回目を実行する。在庫を仮押さえし(有効期限は返り値 expires_at_unix_ms)、小計・割引・送料・合計(JPYC)と reservation_id、および PAYMENT-REQUIRED チャレンジ(base64url、x402 accepts 配列)を返す。accepts の決済方式: 『eip3009』(既定。通常購入の EOA ウォレットはこちらを選び、EIP-712 TransferWithAuthorization に署名する) と『erc20-transfer』(ecrecover 非対応のスマートコントラクトウォレット専用。payer_address を渡した予約にだけ提示される。extra.payerAuthorization.message を personal_sign して authorize_transfer を呼び、その成功後に表示額ぴったりの通常 ERC-20 transfer を実行し、txHash 任意/payerAddress 必須で submit_payment に渡す)。0円デモは demo_signature_version=1 と payer_address を渡すと demo-signature を提示する。送金せず personal_sign だけで完了する。全 item は同一ショップである必要がある。配送が必要な商品があれば shipping を、贈答なら gift_recipient を必ず渡すこと。
Eingabe-Schema
{
"type": "object",
"properties": {
"shop_id": {
"type": "string",
"format": "uuid",
"description": "ショップ ID(全 item 共通)"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string",
"format": "uuid"
},
"quantity": {
"type": "integer",
"minimum": 1
},
"variant_selections": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"product_id",
"quantity"
],
"additionalProperties": false
},
"minItems": 1,
"description": "購入する商品"
},
"customer_email": {
"type": "string",
"format": "email",
"description": "注文確認メールの送信先(必須)"
},
"preferred_chain_id": {
"type": "integer",
"exclusiveMinimum": 0,
"description": "希望チェーン(任意。商品の対応チェーンから選ばれる)"
},
"payer_address": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "支払いに使うウォレットアドレス(任意・推奨)。指定すると settle 時に支払い元と照合され、別ウォレットからの支払いは拒否される。スマートコントラクトウォレットで erc20-transfer 方式を使う場合は必須(指定が無いと accepts に erc20-transfer が提示されない)"
},
"demo_signature_version": {
"type": "string",
"const": "1",
"description": "0円デモのpersonal_signに対応する場合のみ指定"
},
"shipping": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"zip": {
"type": "string",
"minLength": 1
},
"prefecture": {
"type": "string",
"minLength": 1
},
"address1": {
"type": "string",
"minLength": 1
},
"address2": {
"type": "string"
},
"tel": {
"type": "string",
"minLength": 1
}
},
"required": [
"name",
"zip",
"prefecture",
"address1",
"tel"
],
"additionalProperties": false,
"description": "配送先(配送が必要な商品がある場合は必須)"
},
"is_gift": {
"type": "boolean",
"description": "贈答かどうか"
},
"gift_recipient": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"tel": {
"type": "string",
"minLength": 1
},
"zip": {
"type": "string",
"minLength": 1
},
"prefecture": {
"type": "string",
"minLength": 1
},
"address1": {
"type": "string",
"minLength": 1
},
"address2": {
"type": "string"
}
},
"required": [
"name",
"tel",
"zip",
"prefecture",
"address1"
],
"additionalProperties": false,
"description": "贈り先(is_gift が true なら必須)"
},
"customer_note": {
"type": "string",
"maxLength": 2000,
"description": "注文メモ"
},
"coupon_code": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9][A-Za-z0-9_-]*$",
"description": "ショップから受け取ったクーポンコード(任意。NFT割引との併用不可)"
},
"idempotency_key": {
"type": "string",
"minLength": 16,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$",
"description": "同じ見積もりの再試行で必ず再利用する一意キー。クーポン利用時は必須(UUID推奨)。異なる購入内容に同じキーを使わないこと"
}
},
"required": [
"shop_id",
"items",
"customer_email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪authorize_transfer(reservation_id, signature)
erc20-transfer 方式だけで、JPYC を送金する前に必ず呼ぶ。quote_checkout の選択した accept にある extra.payerAuthorization.message をウォレットで personal_sign し、その署名と reservation_id を渡す。サーバは EOA / ERC-1271 / ERC-6492 を検証して予約へ固定する。このツール自体は送金も approve も行わない。成功を確認してから accepted.amount ぴったりを transfer すること。eip3009 方式では呼ばない。
Eingabe-Schema
{
"type": "object",
"properties": {
"reservation_id": {
"type": "string",
"pattern": "^res_[0-9a-f]{32}$",
"description": "quote_checkout が返した reservation_id"
},
"signature": {
"type": "string",
"minLength": 4,
"maxLength": 65538,
"pattern": "^0x(?:[0-9a-fA-F]{2})+$",
"description": "payerAuthorization.message の personal_sign 署名"
}
},
"required": [
"reservation_id",
"signature"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡submit_payment(reservation_id, payment_signature)
quote_checkout で得た reservation_id と、エージェントが用意した x402 PaymentPayload(base64url)を渡して決済を確定する。demo-signatureならextra.payerAuthorization.messageをpersonal_signし、{payerAddress,demoSignature}を渡す。送金やauthorize_transferは呼ばない。quote_checkout の accepts から選んだ方式に応じて payload の中身が変わる: 『eip3009』なら { signature, authorization } (EIP-712 TransferWithAuthorization の署名)、『erc20-transfer』なら { payerAddress, txHash? } (ウォレットが実行した通常の ERC-20 transferの送金元アドレス。txHash は分かれば渡す任意ヒント — 無くてもサーバがon-chain のログを検索して照合する)。erc20-transfer は送金前に必ず authorize_transfer を成功させる。eip3009 はサーバが facilitator 経由で on-chain settle し、erc20-transfer はユーザーが既に送金したものをサーバが検証するだけ。いずれも確定した注文(order_number / tx_hash)を返す。
Eingabe-Schema
{
"type": "object",
"properties": {
"reservation_id": {
"type": "string",
"minLength": 1,
"description": "quote_checkout が返した reservation_id"
},
"payment_signature": {
"type": "string",
"minLength": 1,
"description": "署名済み x402 PaymentPayload(base64url JSON)"
}
},
"required": [
"reservation_id",
"payment_signature"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_order_status(customer_address)
ウォレットアドレスの注文履歴を新しい順で返す。x402 で購入した注文は即時に order_status=3(決済完了)となり tx_hash を持つ。
Eingabe-Schema
{
"type": "object",
"properties": {
"customer_address": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$",
"description": "顧客のウォレットアドレス(0x...)"
}
},
"required": [
"customer_address"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Nachweis