개발자

AI 어시스턴트(MCP)

Claude, ChatGPT, Cursor를 NinjaBuy 계정에 연결하고 평소 말투로 물어보세요: 주문이 어디 있는지, 선반에 무엇이 있는지, 상품이 팔 만한지, 그리고 스토어에 올려 달라고요.
이 페이지의 내용
  1. 1연결
  2. 2로그인과 접근
  3. 3여기서는 돈이 나가지 않아요
  4. 4도구
  5. 5물어볼 것

연결

모든 어시스턴트에 서버 주소 하나. NinjaBuy 계정으로 로그인하며 붙여넣을 키는 없어요.

https://www.ninjabuy.com/mcp

Claude

  1. 설정 › 커넥터를 열고 사용자 지정 커넥터 추가를 선택하세요.
  2. 위 주소를 붙여넣고 추가하세요.
  3. NinjaBuy 전화번호로 로그인한 뒤 접근 허용을 선택하세요.

ChatGPT

  1. 설정에서 개발자 모드를 켠 뒤 사용자 지정 MCP 서버를 추가하세요.
  2. 위 주소를 붙여넣고 로그인 방식으로 OAuth를 선택하세요.
  3. NinjaBuy 전화번호로 로그인한 뒤 접근 허용을 선택하세요.

Cursor

Cursor Settings › MCP 또는 ~/.cursor/mcp.json에 서버를 추가하세요. 처음에는 Cursor가 브라우저에서 NinjaBuy 로그인을 열어요.

~/.cursor/mcp.json
{
  "mcpServers": {
    "ninjabuy": {
      "url": "https://www.ninjabuy.com/mcp"
    }
  }
}

Claude Code 및 기타 명령줄 어시스턴트

터미널
claude mcp add --transport http ninjabuy https://www.ninjabuy.com/mcp

메뉴 이름은 어시스턴트 업데이트에 따라 바뀌어요. “사용자 지정 커넥터”나 “사용자 지정 MCP 서버”를 찾으세요.

로그인과 접근

어시스턴트는 OAuth 2.1로 로그인해요: 스스로 등록하고, 나를 ninjabuy.com으로 보내며, 나는 앱 이름과 돌아갈 곳이 표시된 저희 화면에서 승인해요. 방금 연결을 요청한 앱만 허용하세요. 앱마다 한 번만 승인하면 돼요.

  • 내 계정으로 작동해요. 도구는 계정 ID를 받지 않으며 내 주문, 선반, 상품만 봐요.
  • 접근 권한은 1시간 동안 유효하고 7일간 갱신돼요. 그 후에는 어시스턴트가 다시 로그인하도록 요청해요.
  • 연결을 끊으려면 어시스턴트에서 커넥터를 삭제하세요.
  • 마켓플레이스를 읽는 도구(product, analyze_product, import_product, push_to_shopify)는 API의 분당 30회 한도를 공유해요: 요청 한도.

여기서는 돈이 나가지 않아요

결제하거나, 배송을 접수하거나, 잔액을 쓰는 도구는 없어요. 결제가 필요하면 그것을 하는 페이지를 응답에서 알려 줘요: 장바구니에서 결제, 창고 페이지에서 배송. push_to_shopify는 상품을 초안으로 등록하므로 게시하기 전까지는 판매되지 않아요.

도구

모든 응답에는 requestId(문의할 때 알려 주세요)와 warnings(호출을 막지는 않았지만 알아 둘 만한 것)가 있어요. 긴 응답은 약 6,000토큰에서 truncated: true로 잘리며, 그러면 목록에 더 작은 limit을 쓰세요.

도구하는 일
list_orders내 NinjaBuy 주문 목록
orderNinjaBuy 주문 1건
warehouse내 NinjaBuy 창고
product상품의 옵션 읽기
add_to_cart내 NinjaBuy 장바구니에 추가
search_products상품 검색
analyze_product상품 분석
import_product상품 가져오기
push_to_shopifyShopify로 보내기
list_synced_products동기화 중인 상품 목록
set_sync_rule동기화 규칙 설정

list_orders읽기 전용

계정의 주문, 최신순: 상태, 결제 상태, 미결제 금액, 상품, 각 주문 페이지. has_more가 true인 동안 cursor를 따라가세요.

cursorstring?
이전 응답에서. 첫 페이지에서는 생략하세요.
limitnumber?
1~25. 생략하면 25.
list_orders 응답
{
  "orders": [
    {
      "id": "j57a9x2b",
      "number": 1012,
      "kind": "procurement",
      "total": "¥57.00",
      "orderStatus": { "status": "ordered" },
      "paymentStatus": { "status": "paid" },
      "amountDue": null,
      "itemCount": 1,
      "items": [
        {
          "id": "P1012-1",
          "title": "Heavyweight washed hoodie",
          "quantity": 1,
          "options": ["Black", "M"],
          "status": "ordered"
        }
      ],
      "url": "https://www.ninjabuy.com/me/orders/j57a9x2b"
    }
  ],
  "cursor": "eyJvIjoyNX0",
  "has_more": true,
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

order읽기 전용

ID로 조회한 주문 1건: 항목과 가격, 각 상품의 상태와 도착 수량, 송장 정보가 있는 배송. 이 계정의 것이 아닌 ID면 order는 null이에요.

idstring필수
list_orders에서 받은 ID.
order 응답
{
  "order": {
    "id": "j57c4k1m",
    "number": 1019,
    "kind": "shipout",
    "orderStatus": { "status": "ready" },
    "paymentStatus": { "status": "paid" },
    "shipment": {
      "state": "shipped",
      "destinationCountry": "US",
      "weightGrams": 176,
      "trackingNumbers": ["YT2630812345678"],
      "shippedAt": 1793685600000
    },
    "url": "https://www.ninjabuy.com/me/orders/j57c4k1m"
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

warehouse읽기 전용

저희 창고에 도착한 모든 것: 사진, 도착 수량, 배송 가능 수량 또는 배송 중인 수량, 무게, 신고 가격, 결제 여부, 무료 보관 종료일.

입력 없음.

warehouse 응답
{
  "items": [
    {
      "id": "P1012-1",
      "order": 1012,
      "title": "Heavyweight washed hoodie",
      "photos": [
        {
          "type": "image",
          "url": "https://media.ninjabuy.com/qc/P1012-1/1.webp"
        }
      ],
      "received": 1,
      "availableToShip": 1,
      "inShipment": 0,
      "unitWeightGrams": 176,
      "declaredUnitValue": "¥38.00",
      "paid": true,
      "freeStorageUntil": "2026-12-02T03:20:11.000Z"
    }
  ],
  "warehouseUrl": "https://www.ninjabuy.com/me/warehouse",
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

product읽기 전용

모든 상품 링크(Taobao, Tmall, Weidian, 1688, 다른 구매 대행 서비스의 링크나 단축 링크, NinjaBuy 상품 페이지)에서 상품을 읽어요: 상품명, 이미지, 판매자, 그리고 skuId, 라벨, CN¥ 가격, 재고가 있는 모든 옵션.

linkstring필수
상품 링크, 최대 2,048자.
product 응답
{
  "product": {
    "handle": "weidian-7750970856",
    "title": "重磅水洗连帽卫衣",
    "seller": "Ruoyi Studio",
    "variants": [
      {
        "skuId": "5187209554",
        "label": "Black / M",
        "priceMinor": 3800,
        "price": "¥38.00",
        "inStock": true
      },
      {
        "skuId": "5187209555",
        "label": "Black / L",
        "priceMinor": 3800,
        "price": "¥38.00",
        "inStock": false
      }
    ],
    "url": "https://www.ninjabuy.com/products/weidian-7750970856"
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

add_to_cart쓰기

한 상품의 옵션을 장바구니에 담아 미리 사서 선반에 둘 수 있게 해요. 아무것도 구매되지 않아요. 응답은 결제할 수 있는 장바구니 페이지예요.

handlestring필수
product에서.
lines{ skuId, quantity }[]필수
1~100개 항목, 수량 1~9,999. 이미 장바구니에 있는 옵션은 수량이 더해져요.
add_to_cart 응답
{
  "added": 1,
  "cartUrl": "https://www.ninjabuy.com/cart",
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

search_products읽기 전용

Taobao 또는 1688 키워드 검색, ninjabuy.com과 같은 검색이에요. 링크를 붙여넣으면 그 상품을 반환해요.

querystring필수
2~120자 또는 링크.
providerstring?
taobao 또는 1688. 생략하면 taobao.
pagenumber?
0~20.
search_products 응답
{
  "kind": "products",
  "products": [
    {
      "handle": "taobao-781204556120",
      "title": "Heavyweight cotton hoodie, washed",
      "price": { "amount": "45.00", "currency": "CNY" },
      "marketplace": "taobao",
      "url": "https://www.ninjabuy.com/products/taobao-781204556120"
    }
  ],
  "page": 0,
  "totalCount": 1840,
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

analyze_product읽기 전용

각 옵션의 판매 1건이 구매자 문 앞까지 드는 비용과, 마켓플레이스에서 마진을 지키는 가격. 아무것도 저장되지 않아요. 가져오기 분석과 같은 수치예요.

linkstring필수
상품 링크.
weight_gnumber필수
1개의 포장 후 무게(그램).
ship_tostring?
두 글자 국가. 생략하면 US.
lanestring?
saver 또는 fast.
marketplacestring?
ebay, shopify, amazon 또는 tiktok.
margin_percentnumber?
목표 마진. 생략하면 30.
analyze_product 응답
{
  "title": "重磅水洗连帽卫衣",
  "shipTo": "US",
  "marketplace": "ebay",
  "brandHint": null,
  "variants": [
    {
      "sku": "5187209554",
      "label": "Black / M",
      "inStock": true,
      "procurement": "57.00",
      "parcel": "134.52",
      "landedUsd": "27.71",
      "suggestedPrice": "49.99",
      "marginPercent": "30.16"
    }
  ],
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

import_product쓰기

Imports API처럼 분석과 함께 상품을 가져와요. 무료. 보내거나 다시 가격을 계산할 가져오기를 반환해요.

linkstring필수
상품 링크 또는 추천 상품 시트.
weight_gnumber필수
1개의 포장 후 무게(그램).
ship_tostring?
두 글자 국가. 생략하면 US.
lanestring?
saver 또는 fast.
marketplacestring?
ebay, shopify, amazon 또는 tiktok.
margin_percentnumber?
목표 마진. 생략하면 30.
import_product 응답
{
  "import": {
    "id": "imp_2c9d",
    "status": "ready",
    "title": "重磅水洗连帽卫衣",
    "variants": 6,
    "inStock": 5
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

push_to_shopify쓰기

가져오기를 상품으로 저장하고, Fulfilled by NinjaBuy 위치에 재고를 둔 초안으로 Shopify 스토어에 등록해요. 다시 보내면 업데이트돼요. 규칙은 Shopify로 보내기와 같아요.

import_idstring필수
import_product에서.
variants{ sku, price }[]?
남길 것과 그 US$ 가격. 생략하면 재고 있는 것을 추천 가격으로.
titlestring?
내 상품명.
shopstring?
여러 스토어가 연결된 경우 필요해요.
push_to_shopify 응답
{
  "product": "prd_8f2k",
  "shopify": {
    "status": "draft",
    "variants": 5,
    "adminUrl": "https://admin.shopify.com/store/acme-goods/products/8812042"
  },
  "skipped": [{ "sku": "5187209555", "reason": "sold_out" }],
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

list_synced_products읽기 전용

마지막 확인, 비용 변화, 재고가 있는 내 상품. 무엇이 움직였는지 볼 수 있어요.

statusstring?
active 또는 paused.
changed_sincestring?
날짜: 그 이후 비용이나 재고가 바뀐 상품만.
cursorstring?
이전 응답에서. 첫 페이지에서는 생략하세요.
limitnumber?
1~25. 생략하면 25.
list_synced_products 응답
{
  "products": [
    {
      "id": "prd_1x0a",
      "title": "Canvas Tote",
      "status": "active",
      "lastCheckedAt": "2026-11-04T02:10:00Z",
      "costChange": {
        "from": "¥42.00",
        "to": "¥48.00",
        "action": "repriced",
        "price": { "from": "$18.99", "to": "$20.99" }
      }
    }
  ],
  "cursor": null,
  "has_more": false,
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

set_sync_rule쓰기

판매자가 가격을 올릴 때의 대응: 마진을 지키도록 가격 변경, 일시 중지, 또는 알림만. 모든 상품 또는 하나에. 필드는 동기화 규칙과 같아요.

applies_tostring필수
all 또는 상품 ID.
on_cost_increasestring필수
가격 변경, 일시 중지 또는 알림.
keep_margin_percentnumber?
reprice일 때.
max_increase_percentnumber?
reprice일 때: 이를 넘으면 일시 중지.
set_sync_rule 응답
{
  "rule": {
    "id": "rule_default",
    "appliesTo": "all",
    "onCostIncrease": {
      "action": "reprice",
      "keepMarginPercent": 40,
      "maxIncreasePercent": 15
    }
  },
  "requestId": "5f7c2a1e-3b8d-4c61-9a0f-2e4d6b8c1a37",
  "warnings": []
}

물어볼 것

아직 판매자를 기다리는 내 주문은 어떤 거야?

list_orders

두 건이에요: #1012(워싱 후드티, 11월 1일 구매)와 #1015(캔버스 토트백 2개). 둘 다 결제하고 판매자에게 주문했으며, 아직 둘 다 창고에 도착하지 않았어요.

이 후드티 eBay에서 팔 만해? weidian.com/item.html?itemID=7750970856, 포장 후 약 180 g.

analyze_product

미국 판매 1건의 총비용은 CN¥191.52, 약 $27.71예요. $49.99에 팔면 eBay가 약 $7.20을 가져가고 내게 $15.08이 남아 마진은 30%예요. Black / L은 품절이에요. 상품명에 브랜드 단어는 없어요.

좋아. Black / M을 내 Shopify에 $49.99로 올려 줘. 상품명은 “Heavyweight Washed Hoodie”.

import_productpush_to_shopify

완료: acme-goods.myshopify.com에 초안으로 만들었어요. 옵션 1개, 재고는 Fulfilled by NinjaBuy에 있어요. 사진을 확인한 뒤 Shopify에서 게시하세요.

모든 상품에 40% 마진을 유지하되, 한 번에 15% 넘게 가격을 올리지 마.

set_sync_rule

모든 상품에 설정했어요. 15% 넘게 오르면 대신 상품을 일시 중지하고, list_synced_products에서 확인할 수 있어요.