npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

daiso

v1.0.4

Published

Daiso MCP Server for mobile access via Cloudflare Workers

Readme

Daiso MCP Server

다이소(제품/매장/재고), 올리브영(매장/재고), 메가박스(지점/영화/시간표/좌석), CGV(극장/영화/시간표) 조회 기능을 AI에 연결합니다.

License: MIT Cloudflare Workers MCP Coverage

  


AI 앱에서 MCP 연결하기

MCP 서버 URL:

https://mcp.aka.page

CLI (npx):

npx daiso help
npx daiso help products
npx daiso url
npx daiso health
npx daiso claude

# AI 없이 직접 조회
npx daiso products 수납박스
npx daiso product 1034604
npx daiso stores 강남역
npx daiso inventory 1034604 --keyword 강남역
npx daiso get /api/cgv/movies --playDate 20260307 --theaterCode 0056

# 원본 JSON 필요 시
npx daiso products 수납박스 --json

ChatGPT

MCP 연동이 어렵다는 피드백이 있어 바로 사용 가능한 GPT 앱을 추가했습니다. 아래 링크로 모바일에서도 간편하게 이용 가능합니다!

Daiso MCP GPT 앱 바로가기

빠른 사용 예시:

다이소 mcp로 수납박스 검색해줘
올리브영 mcp로 명동 근처 매장 찾아줘
메가박스 mcp로 강남점 영화와 잔여 좌석 알려줘
CGV mcp로 강남 상영 영화와 시간표 알려줘

Claude

Pro / Max / Team / Enterprise 플랜 필요 · 웹에서 설정 시 모바일 앱에서도 사용 가능

  1. claude.ai에서 SettingsConnectors 이동
  2. Add custom connector 클릭
  3. 원격 MCP 서버 URL 입력: https://mcp.aka.page
  4. Add 클릭하여 완료
  5. 대화창에서 + 버튼 → Connectors → 토글로 활성화

사용 예시:

다이소 mcp를 사용해서 수납박스 검색해줘
다이소 mcp를 사용해서 강남역 근처 매장 찾아줘
올리브영 mcp를 사용해서 명동 근처 매장 찾아줘
올리브영 mcp를 사용해서 선크림 재고 확인해줘
메가박스 mcp를 사용해서 강남역 근처 지점 찾아줘
메가박스 mcp를 사용해서 강남점 영화 목록이랑 잔여 좌석 확인해줘
CGV mcp를 사용해서 서울 지역 극장 목록 찾아줘
CGV mcp를 사용해서 강남 CGV 영화랑 시간표 확인해줘

참고: Claude Remote MCP 가이드

Claude Code

Claude Code CLI에서 MCP 서버 추가

claude mcp add daiso-mcp https://mcp.aka.page --transport sse

Grok

웹 및 모바일 앱 모두 지원

프롬프트 페이지 URL:

https://mcp.aka.page/prompt

사용 방법:

  1. Grok 모바일 앱에서 https://mcp.aka.page/prompt 페이지를 읽어달라고 요청
  2. 에이전트가 API 사용법을 이해하고 GET 요청으로 기능 실행

예시 대화:

사용자: https://mcp.aka.page/prompt 를 읽어줘
AI: (페이지를 읽고 API 사용법 이해)

사용자: 수납박스 검색해줘
AI: (https://mcp.aka.page/api/daiso/products?q=수납박스 호출 후 결과 제공)

사용자: 강남역 근처 메가박스 지점 찾아줘
AI: (https://mcp.aka.page/api/megabox/theaters?lat=37.4982&lng=127.0264 호출 후 결과 제공)

사용자: 강남 CGV 시간표 알려줘
AI: (https://mcp.aka.page/api/cgv/timetable?playDate=20260304&theaterCode=0056 호출 후 결과 제공)

미지원 서비스

| 서비스 | 상태 | | :---------------------------------------------------------------------------------------------------- | :-------- | | Gemini Google Gemini | ❌ 미지원 | | Copilot GitHub Copilot | ❌ 미지원 |


기능

daiso_search_products

다이소 제품을 검색합니다.

| 파라미터 | 필수 | 설명 | | :--------- | :--: | :---------------------------- | | query | O | 검색할 제품명 또는 키워드 | | page | | 페이지 번호 (기본값: 1) | | pageSize | | 페이지당 결과 수 (기본값: 30) |

daiso_find_stores

다이소 매장을 검색합니다.

| 파라미터 | 필수 | 설명 | | :-------- | :--: | :------------------------ | | keyword | | 매장명 또는 주소 키워드 | | sido | | 시/도 (예: 서울, 경기) | | gugun | | 구/군 (예: 강남구) | | dong | | 동 (예: 역삼동) | | limit | | 최대 매장 수 (기본값: 50) |

daiso_check_inventory

특정 제품의 매장별 재고를 확인합니다.

| 파라미터 | 필수 | 설명 | | :----------- | :--: | :---------------------------- | | productId | O | 제품 ID | | storeQuery | | 매장 검색어 (예: 안산 중앙역) | | latitude | | 위도 (기본값: 서울 시청) | | longitude | | 경도 (기본값: 서울 시청) | | page | | 페이지 번호 (기본값: 1) | | pageSize | | 페이지당 결과 수 (기본값: 30) |

daiso_get_price_info

제품의 가격 정보를 조회합니다.

| 파라미터 | 필수 | 설명 | | :------------ | :--: | :---------------------------------- | | productId | | 제품 ID | | productName | | 제품명 (productId가 없을 경우 사용) |

oliveyoung_find_nearby_stores

Zyte API 기반으로 내 주변 올리브영 매장을 조회합니다.

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :---------------------------------- | | latitude | | 위도 (기본값: 서울 시청) | | longitude | | 경도 (기본값: 서울 시청) | | keyword | | 매장명/지역 키워드 (예: 명동, 강남) | | pageIdx | | 페이지 번호 (기본값: 1) | | limit | | 최대 결과 수 (기본값: 20) |

oliveyoung_check_inventory

Zyte API 기반으로 올리브영 상품 재고를 조회하고 주변 매장 정보를 함께 반환합니다.

| 파라미터 | 필수 | 설명 | | :--------------- | :--: | :----------------------------- | | keyword | O | 재고를 확인할 상품 키워드 | | latitude | | 위도 (기본값: 서울 시청) | | longitude | | 경도 (기본값: 서울 시청) | | storeKeyword | | 주변 매장 검색 키워드 | | page | | 페이지 번호 (기본값: 1) | | size | | 페이지당 상품 수 (기본값: 20) | | includeSoldOut | | 품절 포함 여부 (기본값: false) |

megabox_find_nearby_theaters

사용자 좌표 기준으로 메가박스 주변 지점을 거리순으로 조회합니다.

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :--------------------------------- | | latitude | | 위도 (기본값: 서울 시청) | | longitude | | 경도 (기본값: 서울 시청) | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | areaCode | | 지역 코드 (기본값: 11, 서울) | | limit | | 최대 결과 수 (기본값: 10) |

megabox_list_now_showing

날짜/지점 조건으로 메가박스 영화 및 상영 회차 목록을 조회합니다.

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterId | | 지점 ID (예: 1372) | | movieId | | 영화 ID (예: 25104500) | | areaCode | | 지역 코드 (기본값: 11, 서울) |

megabox_get_remaining_seats

영화/지점/날짜 조건으로 회차별 남은 좌석 수를 조회합니다.

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterId | | 지점 ID | | movieId | | 영화 ID | | areaCode | | 지역 코드 (기본값: 11, 서울) | | limit | | 최대 결과 수 (기본값: 50) |

cgv_find_theaters

지역 코드 기준으로 CGV 극장 목록을 조회합니다.

| 파라미터 | 필수 | 설명 | | :----------- | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | regionCode | | 지역 코드 (예: 01 서울) | | limit | | 최대 결과 수 (기본값: 30) | | timeoutMs | | 요청 제한 시간(ms, 기본값: 15000) |

cgv_search_movies

날짜/극장 조건으로 CGV 영화 목록을 조회합니다.

| 파라미터 | 필수 | 설명 | | :------------ | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterCode | | CGV 극장 코드 (예: 0056) | | timeoutMs | | 요청 제한 시간(ms, 기본값: 15000) |

cgv_get_timetable

날짜/극장/영화 조건으로 CGV 상영 시간표를 조회합니다.

| 파라미터 | 필수 | 설명 | | :------------ | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterCode | | CGV 극장 코드 (예: 0056) | | movieCode | | CGV 영화 코드 | | limit | | 최대 결과 수 (기본값: 50) | | timeoutMs | | 요청 제한 시간(ms, 기본값: 15000) |

올리브영 REST 캐싱 정책

Cloudflare Edge Cache API(caches.default)를 사용해 올리브영 REST 응답을 캐싱합니다.

  • GET /api/oliveyoung/stores: 24시간 TTL
  • GET /api/oliveyoung/inventory: 10분 TTL
  • 공통: stale-while-revalidate 적용, 오류 응답(4xx/5xx)은 캐시하지 않음

메가박스 REST 캐싱 정책

Cloudflare Edge Cache API(caches.default)를 사용해 메가박스 REST 응답을 캐싱합니다.

  • GET /api/megabox/theaters: 24시간 TTL
  • GET /api/megabox/movies: 10분 TTL
  • GET /api/megabox/seats: 3분 TTL
  • 공통: stale-while-revalidate 적용, 오류 응답(4xx/5xx)은 캐시하지 않음

CGV REST 캐싱 정책

Cloudflare Edge Cache API(caches.default)를 사용해 CGV REST 응답을 캐싱합니다.

  • GET /api/cgv/theaters: 24시간 TTL
  • GET /api/cgv/movies: 10분 TTL
  • GET /api/cgv/timetable: 3분 TTL
  • 공통: stale-while-revalidate 적용, 오류 응답(4xx/5xx)은 캐시하지 않음

다이소 REST 캐싱 정책

Cloudflare Edge Cache API(caches.default)를 사용해 다이소 REST 응답을 캐싱합니다.

  • GET /api/daiso/products: 30분 TTL
  • GET /api/daiso/products/:id: 1시간 TTL
  • GET /api/daiso/stores: 24시간 TTL
  • GET /api/daiso/inventory: 10분 TTL
  • 공통: stale-while-revalidate 적용, 오류 응답(4xx/5xx)은 캐시하지 않음

REST API

MCP를 지원하지 않는 서비스를 위한 GET 기반 REST API입니다.

엔드포인트

| 엔드포인트 | 설명 | | :------------------------------ | :---------------------------------- | | GET /prompt | API 사용법 설명 페이지 (에이전트용) | | GET /api/daiso/products | 제품 검색 | | GET /api/daiso/products/:id | 제품 상세 정보 | | GET /api/daiso/stores | 매장 검색 | | GET /api/daiso/inventory | 재고 확인 | | GET /api/oliveyoung/stores | 올리브영 매장 검색 | | GET /api/oliveyoung/inventory | 올리브영 재고 확인 | | GET /api/megabox/theaters | 메가박스 주변 지점 조회 | | GET /api/megabox/movies | 메가박스 영화/회차 목록 조회 | | GET /api/megabox/seats | 메가박스 잔여 좌석 조회 | | GET /api/cgv/theaters | CGV 극장 목록 조회 | | GET /api/cgv/movies | CGV 영화 목록 조회 | | GET /api/cgv/timetable | CGV 상영 시간표 조회 |

제품 검색

GET /api/daiso/products?q={검색어}&page={페이지}&pageSize={개수}

| 파라미터 | 필수 | 설명 | | :--------- | :--: | :---------------------------- | | q | O | 검색 키워드 | | page | | 페이지 번호 (기본값: 1) | | pageSize | | 페이지당 결과 수 (기본값: 30) |

매장 검색

GET /api/daiso/stores?keyword={키워드}&sido={시도}&limit={개수}

| 파라미터 | 필수 | 설명 | | :-------- | :--: | :-------------------------------------------------- | | keyword | △ | 매장명/주소 키워드 (keyword 또는 sido 중 하나 필수) | | sido | △ | 시/도 | | gugun | | 구/군 | | dong | | 동 | | limit | | 최대 결과 수 (기본값: 50) |

재고 확인

GET /api/daiso/inventory?productId={제품ID}&lat={위도}&lng={경도}

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :---------------------------- | | productId | O | 제품 ID | | lat | | 위도 (기본값: 37.5665) | | lng | | 경도 (기본값: 126.978) | | keyword | | 매장 검색어 | | page | | 페이지 번호 (기본값: 1) | | pageSize | | 페이지당 결과 수 (기본값: 30) |

올리브영 매장 검색

GET /api/oliveyoung/stores?keyword={키워드}&lat={위도}&lng={경도}

| 파라미터 | 필수 | 설명 | | :-------- | :--: | :---------------------------------- | | keyword | | 매장명/지역 키워드 (예: 명동, 강남) | | lat | | 위도 (기본값: 37.5665) | | lng | | 경도 (기본값: 126.978) | | pageIdx | | 페이지 번호 (기본값: 1) | | limit | | 최대 결과 수 (기본값: 20) |

올리브영 재고 확인

GET /api/oliveyoung/inventory?keyword={검색어}&lat={위도}&lng={경도}

| 파라미터 | 필수 | 설명 | | :--------------- | :--: | :----------------------------- | | keyword | O | 검색 키워드 (예: 선크림, 립밤) | | lat | | 위도 (기본값: 37.5665) | | lng | | 경도 (기본값: 126.978) | | storeKeyword | | 주변 매장 필터 키워드 | | page | | 페이지 번호 (기본값: 1) | | size | | 페이지당 결과 수 (기본값: 20) | | sort | | 정렬 코드 (기본값: 01) | | includeSoldOut | | 품절 포함 여부 (기본값: false) |

메가박스 주변 지점 조회

GET /api/megabox/theaters?lat={위도}&lng={경도}&playDate={YYYYMMDD}&areaCode={지역코드}

| 파라미터 | 필수 | 설명 | | :--------- | :--: | :--------------------------------- | | lat | | 위도 (기본값: 37.5665) | | lng | | 경도 (기본값: 126.978) | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | areaCode | | 지역 코드 (기본값: 11, 서울) | | limit | | 최대 결과 수 (기본값: 10) |

메가박스 영화/회차 목록 조회

GET /api/megabox/movies?playDate={YYYYMMDD}&theaterId={지점ID}&movieId={영화ID}

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterId | | 지점 ID (예: 1372) | | movieId | | 영화 ID (예: 25104500) | | areaCode | | 지역 코드 (기본값: 11, 서울) |

메가박스 잔여 좌석 조회

GET /api/megabox/seats?playDate={YYYYMMDD}&theaterId={지점ID}&movieId={영화ID}

| 파라미터 | 필수 | 설명 | | :---------- | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterId | | 지점 ID | | movieId | | 영화 ID | | areaCode | | 지역 코드 (기본값: 11, 서울) | | limit | | 최대 결과 수 (기본값: 50) |

CGV 극장 목록 조회

GET /api/cgv/theaters?playDate={YYYYMMDD}&regionCode={지역코드}

| 파라미터 | 필수 | 설명 | | :----------- | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | regionCode | | 지역 코드 (예: 01 서울) | | limit | | 최대 결과 수 (기본값: 30) | | timeoutMs | | 요청 제한 시간(ms, 기본값: 15000) |

CGV 영화 목록 조회

GET /api/cgv/movies?playDate={YYYYMMDD}&theaterCode={극장코드}

| 파라미터 | 필수 | 설명 | | :------------ | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterCode | | CGV 극장 코드 (예: 0056) | | timeoutMs | | 요청 제한 시간(ms, 기본값: 15000) |

CGV 시간표 조회

GET /api/cgv/timetable?playDate={YYYYMMDD}&theaterCode={극장코드}&movieCode={영화코드}

| 파라미터 | 필수 | 설명 | | :------------ | :--: | :--------------------------------- | | playDate | | 조회 날짜 (YYYYMMDD, 기본값: 오늘) | | theaterCode | | CGV 극장 코드 (예: 0056) | | movieCode | | CGV 영화 코드 | | limit | | 최대 결과 수 (기본값: 50) | | timeoutMs | | 요청 제한 시간(ms, 기본값: 15000) |

응답 형식

{
  "success": true,
  "data": { ... },
  "meta": { "total": 100, "page": 1, "pageSize": 30 }
}

사용 예시

사용자: 수납박스 검색해줘
AI: daiso_search_products 도구로 제품 목록 조회

사용자: 이 제품 안산 중앙역 근처 매장에 재고 있어?
AI: daiso_check_inventory 도구로 특정 매장 재고 확인

사용자: 강남역 근처 다이소 매장 찾아줘
AI: daiso_find_stores 도구로 매장 검색

사용자: 명동 근처 올리브영 매장 찾아줘
AI: oliveyoung_find_nearby_stores 도구로 주변 매장 검색

사용자: 올리브영 선크림 재고 확인해줘
AI: oliveyoung_check_inventory 도구로 재고/매장 정보 조회

사용자: 강남역 근처 메가박스 지점 찾아줘
AI: megabox_find_nearby_theaters 도구로 주변 지점 조회

사용자: 메가박스 강남점 영화 목록과 잔여 좌석 알려줘
AI: megabox_list_now_showing / megabox_get_remaining_seats 도구로 회차/좌석 조회

사용자: 서울 지역 CGV 극장 목록 알려줘
AI: cgv_find_theaters 도구로 CGV 극장 목록 조회

사용자: CGV 강남 상영 영화랑 시간표 알려줘
AI: cgv_search_movies / cgv_get_timetable 도구로 영화/시간표 조회

개발

# Node 버전 맞추기
nvm use

# 설치
npm ci

# 환경 변수 설정
cp .env.example .env
# .env 파일에 ZYTE_API_KEY 값 입력

# 품질 검사 (포맷/린트/타입/테스트)
npm run check

# 로컬 개발 서버
npm run dev

# 배포
npm run deploy

npm 퍼블리싱

# npm 로그인
npm login

# 배포 산출물/메타 검증
npm run release:dry-run

# 퍼블리시 (공개 패키지)
npm run publish:public

기여 가이드는 CONTRIBUTING.md에서 확인할 수 있습니다.


아키텍처

| 항목 | 기술 | | :--------- | :--------------------------- | | 런타임 | Cloudflare Workers | | 프레임워크 | Hono + TypeScript | | 프로토콜 | MCP (Model Context Protocol) | | 전송 | SSE (Server-Sent Events) |


프로젝트 구조

daiso-mcp/
├── src/
│   ├── index.ts              # MCP 서버 진입점
│   ├── core/                 # 핵심 모듈
│   │   ├── types.ts          # 공통 타입
│   │   ├── interfaces.ts     # ServiceProvider 인터페이스
│   │   └── registry.ts       # ServiceRegistry
│   ├── services/             # 서비스 프로바이더
│   │   ├── daiso/            # 다이소 서비스
│   │   ├── oliveyoung/       # 올리브영 서비스 (Zyte API)
│   │   ├── megabox/          # 메가박스 서비스
│   │   └── cgv/              # CGV 서비스
│   ├── api/                  # REST API (MCP 미지원 서비스용)
│   │   ├── handlers.ts       # 다이소/올리브영 API 핸들러
│   │   ├── megaboxHandlers.ts # 메가박스 API 핸들러
│   │   ├── cgvHandlers.ts    # CGV API 핸들러
│   │   └── routes/           # 서비스별 API 라우트
│   ├── pages/                # 정적 페이지
│   │   └── prompt.ts         # 에이전트용 프롬프트 페이지
│   └── utils/                # 유틸리티
├── wrangler.toml             # Cloudflare Workers 설정
└── package.json

확장 가능한 아키텍처

이 프로젝트는 플러그인 기반 아키텍처로 설계되어 새로운 서비스를 쉽게 추가할 수 있습니다.

핵심 컴포넌트

| 컴포넌트 | 역할 | | :----------------- | :------------------------------------- | | ServiceProvider | 모든 서비스가 구현해야 하는 인터페이스 | | ServiceRegistry | 서비스 등록 및 MCP 서버 연결 관리 | | ToolRegistration | 도구 메타데이터와 핸들러 정의 |

새 서비스 추가 방법

예: CU 편의점 서비스 추가

// 1. src/services/cu/index.ts 생성
import type { ServiceProvider } from '../../core/interfaces.js';

class CuService implements ServiceProvider {
  readonly metadata = {
    id: 'cu',
    name: 'CU 편의점',
    version: '1.0.0',
  };

  getTools() {
    return [
      /* cu_search_products, cu_find_stores 등 */
    ];
  }
}

export function createCuService(): ServiceProvider {
  return new CuService();
}
// 2. src/index.ts에 한 줄 추가
import { createCuService } from './services/cu/index.js';

registry.registerAll([createDaisoService, createCuService]);

MIT License