From e2e3ba2c0ca997f4282b7626ab461af4f7b95c68 Mon Sep 17 00:00:00 2001 From: hmmhmmhm Date: Tue, 27 Oct 2026 12:40:56 +0900 Subject: [PATCH 1/5] =?UTF-8?q?docs:=20=EC=9B=B9=20=EC=9D=BD=EA=B8=B0=20?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=EA=B3=BC=20=EC=88=98=EC=A7=91=EB=B3=B8=20?= =?UTF-8?q?=EC=9E=AC=ED=99=95=EC=9D=B8=20=EC=A0=88=EC=B0=A8=20=EA=B0=B1?= =?UTF-8?q?=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++++++++--------- docs/service-reference.md | 12 +++++------ .../plans/2026-10-27-browse-read-sessions.md | 12 ++++++----- docs/web-reading-lab-results-2026-10-27.md | 14 +++++++++++++ src/pages/agentStart.ts | 20 ++++++++----------- src/pages/browse.ts | 2 +- src/pages/discovery.ts | 5 ++--- tests/pages/agentStart.test.ts | 2 +- tests/pages/browse-guidance.test.ts | 7 ++++++- tests/pages/discovery.test.ts | 2 +- tests/pages/latestGuide.test.ts | 6 +++--- tests/pages/productCards.test.ts | 2 +- tests/scripts/repository-config.test.ts | 2 +- 13 files changed, 60 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 0c62fd70..cd0189ff 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ AI 에이전트 사용 안내 > [!IMPORTANT] -> **최신 안내:** [현재 버전](https://mcp.aka.page/guide/2026-10-27.1) · [항상 최신 버전으로 이동](https://mcp.aka.page/guide/latest) +> **최신 안내:** [현재 버전](https://mcp.aka.page/guide/2026-10-27.2) · [항상 최신 버전으로 이동](https://mcp.aka.page/guide/latest) > -> **안내 버전: 2026-10-27.1 · 갱신일: 2026-10-27** +> **안내 버전: 2026-10-27.2 · 갱신일: 2026-10-27** > -> **웹 읽기는 실제 링크 ID로 click하세요.** 새 검색 URL을 조립해 open하지 말고 [원하는 검색어를 글자로 선택](https://mcp.aka.page/browse/compose/daiso/products/~)하세요. 상품의 **매장 지역 선택** 링크에서 지역도 선택할 수 있습니다. 입력 중에는 원본 조회를 실행하지 않습니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. +> **웹 읽기는 실제 링크 ID로 click하세요.** 새 검색 URL을 조립해 open하지 말고 [웹 조회 시작](https://mcp.aka.page/browse/read) 화면의 글자 선택 링크를 사용하세요. 상품의 **매장 지역 선택** 링크에서 지역도 선택할 수 있습니다. 입력 중에는 원본 조회를 실행하지 않습니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. > -> **ChatGPT 웹 조회:** 연결된 MCP 도구가 없으면 사용 가능한 실제 브라우저로, 브라우저 도구도 없으면 open/WebFetch로 [HTML GET으로 바로 조회](https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3)하세요. 설치·API 키·MCP 연결 설정은 필요 없습니다. +> **ChatGPT 웹 조회:** 연결된 MCP 도구가 없으면 사용 가능한 실제 브라우저로, 브라우저 도구도 없으면 open/WebFetch로 [HTML GET으로 바로 조회](https://mcp.aka.page/browse/read)하세요. 설치·API 키·MCP 연결 설정은 필요 없습니다. > > **로컬 설치·빌드·API 키 준비 없이 실제 조회부터 실행하세요.** 패키지 설치나 전체 스키마 탐색은 필요 없습니다. > @@ -17,7 +17,7 @@ > 3. 웹 읽기(open/WebFetch)만 가능하면 응답의 실제 링크 ID로 click합니다. 위 글자 선택 링크로 임의 검색어와 지역을 입력하고 실제 상품·재고 조회 링크를 따르세요. 새 URL 조립과 실패한 직접 open을 반복하지 마세요. Crawled가 과거인 수집본을 현재 재고로 단정하지 마세요. > 4. 위 세 수단이 없거나 모두 실패하면 실제 조회 제약과 오류를 알립니다. 셸이 있어도 설치 없는 웹 조회가 우선이며 터미널·셸로 우회하지 않습니다. 셸 DNS 오류를 웹 GET 실패로 확대하거나 실행하지 않은 요청의 실패를 만들지 마세요. > -> **검색 링크:** [핫식스 상품 검색](https://mcp.aka.page/browse/daiso/products/%ED%95%AB%EC%8B%9D%EC%8A%A4/pageSize/10) · [강남 매장 검색](https://mcp.aka.page/browse/daiso/stores/%EA%B0%95%EB%82%A8). 웹 읽기는 링크를 직접 열고, 접근 오류만으로 상품 없음이나 재고 0을 판단하지 마세요. +> **수집본·오류 구분:** 이전 HTML이면 **같은 조건으로 새 응답 확인** 링크를 최대2번 선택해 새 주소와 생성 시각을 확인하세요. 원본 API 캐시는 유지됩니다. `TimeoutError`는 같은 실제 링크를 한 번만 재확인하고 계속 실패하면 미확인으로 보고하세요. `Crawled: today`만으로 현재 재고를 단정하지 마세요. > > **실행 근거:** 실제 데이터·도구·오류만 보고하고 실행하지 않은 요청의 성공·실패를 만들지 마세요. REST GET 성공은 MCP 연결 성공과 구분합니다. > @@ -27,7 +27,7 @@ > > **웹 읽기 전용 에이전트는 `/browse/`의 실제 링크만 선택하세요.** 검색·상세·매장·재고·후속 조회가 모두 자동 HTML이며 쿼리 문자열이나 `format` 지정은 필요 없습니다. 검색어·지역은 글자 링크로 입력하고 응답의 상세·재고 링크를 따르세요. 일반 API 클라이언트의 필터 문법은 상세 사용 안내를 참고하세요. > -> [첫 HTML 조회](https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3) · [REST 사용법](https://mcp.aka.page/prompt) · [원격 MCP 연결](#원격-mcp로-바로-시작하기) +> [첫 HTML 조회](https://mcp.aka.page/browse/read) · [REST 사용법](https://mcp.aka.page/prompt) · [원격 MCP 연결](#원격-mcp로-바로-시작하기) @@ -130,7 +130,7 @@ 2. 서버 URL을 입력하고, 전송 방식을 묻는 경우 **HTTP / Streamable HTTP**를 선택합니다. 3. 도구를 활성화하고 `다이소 MCP로 수납박스 검색해줘`라고 요청합니다. -[앱별 연결 방법](docs/client-guide.md#원격-mcp-연결) · [WebFetch로 첫 조회](docs/service-reference.md?guide=2026-10-27.1#설치-없이-첫-조회) +[앱별 연결 방법](docs/client-guide.md#원격-mcp-연결) · [WebFetch로 첫 조회](docs/service-reference.md?guide=2026-10-27.2#설치-없이-첫-조회)

스마트폰과 노트북을 클라우드로 연결하는 두 햄스터 @@ -161,7 +161,7 @@ npx daiso products 수납박스 --json MCP 연결 없이 웹 읽기와 GET 요청을 지원하는 에이전트는 [REST 사용법](https://mcp.aka.page/prompt)을 읽고 조회할 수 있습니다. **상품·매장·재고와 모든 후속 조회는 `/browse/` 경로를 사용하세요.** 자동 HTML이며 쿼리 문자열은 필요 없습니다. -[수납박스 검색해 보기](https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3) +[상품·매장·재고 조회 시작](https://mcp.aka.page/browse/read)

브라우저 검색 결과에서 매장을 찾아가는 햄스터 @@ -208,7 +208,7 @@ MCP 연결 없이 웹 읽기와 GET 요청을 지원하는 에이전트는 [REST | 문서 | 내용 | | :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | | [연결·사용 가이드](docs/client-guide.md) | 앱별 MCP 연결, CLI, Skill, OpenAPI | -| [서비스 레퍼런스](docs/service-reference.md?guide=2026-10-27.1) | 서비스별 도구·REST API·응답 모델·가격 비교 | +| [서비스 레퍼런스](docs/service-reference.md?guide=2026-10-27.2) | 서비스별 도구·REST API·응답 모델·가격 비교 | | [일본 다이소](docs/daiso-jp-network-analysis.md) | 일본 상품·매장 검색과 지원 범위 | | [독립·예술영화관](docs/dtryx.md) | 디트릭스 지원 극장과 조회 방법 | | [AI 조회 가이드](docs/ai-instruction.md) | 도구 선택과 상품·매장·재고 조회 순서 | diff --git a/docs/service-reference.md b/docs/service-reference.md index 398eb069..c1639e3f 100644 --- a/docs/service-reference.md +++ b/docs/service-reference.md @@ -1,22 +1,22 @@ # DAISO MCP 서비스 레퍼런스 -실제 브라우저 도구가 있으면 /browse/ HTML을 그 도구로 여세요. 웹 읽기(open/WebFetch)는 [글자 선택 입력](https://mcp.aka.page/browse/compose/daiso/products/~)을 응답의 실제 링크 ID로 click합니다. 새 검색 URL을 조립하지 않고 상품·매장 지역·실제 재고 링크를 선택합니다. 접근 오류 시 사용 가능한 브라우저로 전환할 수 있으나 새 브라우저를 계속 실행하지 마세요. Crawled가 과거인 수집본은 현재 재고 확인이 아닙니다. 응답 생성 시각도 함께 확인하세요. +실제 브라우저 도구가 있으면 /browse/ HTML을 그 도구로 여세요. 웹 읽기(open/WebFetch)는 [웹 조회 시작](https://mcp.aka.page/browse/read) 화면의 글자 선택 링크를 응답의 실제 링크 ID로 click합니다. 새 검색 URL을 조립하지 않고 상품·매장 지역·실제 재고 링크를 선택합니다. 접근 오류 시 사용 가능한 브라우저로 전환할 수 있으나 새 브라우저를 계속 실행하지 마세요. Crawled가 과거인 수집본은 현재 재고 확인이 아닙니다. 응답 생성 시각도 함께 확인하세요. 이전 HTML이면 같은 조건의 새 응답 링크를 최대2번 선택합니다. `TimeoutError`만 같은 실제 링크를 한 번 재확인하고 계속 실패하면 미확인으로 보고하세요. 새 주소도 기존 API 캐시를 사용하며 원본 갱신을 보장하지 않습니다. README 하단에 있던 기능, REST API, 개발, 아키텍처 설명을 분리한 문서입니다. ## 설치 없이 첫 조회 -**ChatGPT 및 웹 읽기 에이전트는 터미널을 실행하지 말고 WebFetch 또는 URL 열기(open) 도구로 아래 링크를 직접 여세요.** 설치·API 키·MCP 연결 설정 없이 상품 검색 결과를 읽을 수 있습니다. 검색 도구(search)는 URL 열기를 대신하지 않습니다. +**ChatGPT 및 웹 읽기 에이전트는 문서에 표시된 실제 링크 ID로 아래 시작 링크를 click하세요.** 설치·API 키·MCP 연결 설정 없이 화면의 상품·지역 링크로 조회합니다. 새 URL을 조립하거나 터미널로 우회하지 마세요. click이 없는 도구는 실제 링크를 열되 같은 동작을 보장하지 않습니다. -[WebFetch로 다이소 수납박스 3개 조회](https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3) +[WebFetch로 상품·매장·재고 조회 시작](https://mcp.aka.page/browse/read) -[핫식스 상품 검색](https://mcp.aka.page/browse/daiso/products/%ED%95%AB%EC%8B%9D%EC%8A%A4/pageSize/10) · [강남 매장 검색](https://mcp.aka.page/browse/daiso/stores/%EA%B0%95%EB%82%A8) +시작 화면에서 수납박스·핫식스 예제 또는 글자 입력 링크를 선택하세요. -웹 읽기 도구에서는 위 링크를 직접 열어 조회하세요. URL 접근 오류가 나오면 실제 오류를 보고하고 상품 없음이나 재고 0으로 해석하지 마세요. +웹 읽기 도구에서는 위 응답의 실제 링크 ID를 선택해 조회하세요. URL 접근 오류가 나오면 실제 오류를 보고하고 상품 없음이나 재고 0으로 해석하지 마세요. 모든 후속 웹 GET도 `/browse/`를 사용하세요. 자동 HTML이며 쿼리 문자열이나 format 지정은 필요 없습니다. 상품 검색 결과의 실제 ID로 재고를 조회하고 검색 성공만으로 매장 재고를 단정하지 않습니다. 이미지는 응답 imageUrl과 카드의 원본 Markdown만 사용하고 이미지 검색으로 대체하지 않습니다. -현재 안내는 [버전 안내](https://mcp.aka.page/guide/2026-10-27.1), 다음 버전도 따라가려면 [항상 최신 안내](https://mcp.aka.page/guide/latest)를 여세요. 이 상세 레퍼런스를 끝까지 읽기 전에 첫 조회를 실행하세요. +현재 안내는 [버전 안내](https://mcp.aka.page/guide/2026-10-27.2), 다음 버전도 따라가려면 [항상 최신 안내](https://mcp.aka.page/guide/latest)를 여세요. 이 상세 레퍼런스를 끝까지 읽기 전에 첫 조회를 실행하세요. 이미 연결된 MCP 도구가 있는 환경만 `search_products`에 `service=daiso`, `query=수납박스`를 전달합니다. 서버는 https://mcp.aka.page 이며 Streamable HTTP, 인증 없음입니다. 실제로 실행한 도구·URL·오류만 보고하고 실행하지 않은 요청의 성공·실패를 만들지 않습니다. diff --git a/docs/superpowers/plans/2026-10-27-browse-read-sessions.md b/docs/superpowers/plans/2026-10-27-browse-read-sessions.md index 8e5de852..114ea9bb 100644 --- a/docs/superpowers/plans/2026-10-27-browse-read-sessions.md +++ b/docs/superpowers/plans/2026-10-27-browse-read-sessions.md @@ -10,11 +10,13 @@ ## 순서 -- [ ] `tests/pages/browseRead.test.ts`: 기존 등록 함수만 사용하여 루트 세션 링크·조건 보존·새 ID·중첩 거절·GET 제한의 기대 동작을 작성합니다. 아직 없는 경로의404가 기대200과 달라 실패하는지 확인합니다. 로컬 보호기가 Chrome3개 상태이므로 GitHub cloud CI에서 확인하고 실패를 정상으로 기록하지 않습니다. -- [ ] `src/pages/browseRead.ts`: UUID 검증, 내부 browse만 전달, HTML 링크 및 Location 재작성, no-store/noindex, 새 응답 링크를 구현합니다. 외부 이미지·guide 링크는 그대로 유지합니다. 잘못된 ID·중첩 read 경로는 내부 호출 전400으로 거절합니다. 응답 실패 상태를 성공으로 바꾸지 않습니다. -- [ ] `src/pages/browse.ts`: 기존 catchall보다 먼저 등록합니다. 쓰기·관리 API는 전달하지 않습니다. -- [ ] Cloud CI에서 새 회귀와 전체 검사·커버리지를 통과시킵니다. 실제 배포 전에 독립 읽기 전용 리뷰를 수행합니다. -- [ ] 배포 후 웹 도구의 실제 링크만으로 서로 다른 ID·응답 생성시각을 관측합니다. 고정 URL 결과와 비교합니다. 상품·매장·재고·진열 위치와 수량 미확인 구분을 유지합니다. 실제 Chat UI 검증은 브라우저 연결이 복구될 때 별도 수행합니다. +- [x] `tests/pages/browseRead.test.ts`: 기존 등록 함수만 사용하여 루트 세션 링크·조건 보존·새 ID·중첩 거절·GET 제한의 기대 동작을 작성합니다. 아직 없는 경로의404가 기대200과 달라 실패하는지 확인합니다. 로컬 보호기가 Chrome3개 상태이므로 GitHub cloud CI에서 확인하고 실패를 정상으로 기록하지 않습니다. +- [x] `src/pages/browseRead.ts`: UUID 검증, 내부 browse만 전달, HTML 링크 및 Location 재작성, no-store/noindex, 새 응답 링크를 구현합니다. 외부 이미지·guide 링크는 그대로 유지합니다. 잘못된 ID·중첩 read 경로는 내부 호출 전400으로 거절합니다. 응답 실패 상태를 성공으로 바꾸지 않습니다. +- [x] `src/pages/browse.ts`: 기존 catchall보다 먼저 등록합니다. 쓰기·관리 API는 전달하지 않습니다. +- [x] Cloud CI에서 새 회귀와 전체 검사·커버리지를 통과시킵니다. 실제 배포 전에 독립 읽기 전용 리뷰를 수행합니다. +- [x] 배포 후 웹 도구의 실제 링크만으로 서로 다른 ID·응답 생성시각을 관측합니다. 고정 URL 결과와 비교합니다. 상품·매장·재고·진열 위치와 수량 미확인 구분을 유지합니다. 실제 Chat UI 검증은 브라우저 연결이 복구될 때 별도 수행합니다. - [ ] 효과가 확인된 범위만 안내에 반영합니다. 검색 캐시를 강제로 삭제했다거나 원본 fresh 재고를 보장한다는 주장은 하지 않습니다. **제약:** 기존 root/GitHub 검색 수집본을 이 기능만으로 최신으로 갱신할 수 있다고 보지 않습니다. 사용자·운영 브라우저는 종료하지 않으며 새 본체를 반복 생성하지 않습니다. 누적 인증·쿼터 원장을 보존합니다. + +검증 기록: PR337의 cloud CI40444241157·Coverage40444241470·CodeQL40444241281·Mac 검사 통과, squash00a19c6, Deploy40444464995 성공입니다. 같은 세션 반복은03:31:01.678UTC를 재사용했고 새 ID 링크는03:31:09.075UTC를 반환했습니다. 상품1049516/강남구청역점10600 quantity3, 진열위치19/-2를 실제 링크로 확인했습니다. 원본 캐시 상태와 새 Chat UI는 별도 미확인입니다. diff --git a/docs/web-reading-lab-results-2026-10-27.md b/docs/web-reading-lab-results-2026-10-27.md index 13278c05..178e1c49 100644 --- a/docs/web-reading-lab-results-2026-10-27.md +++ b/docs/web-reading-lab-results-2026-10-27.md @@ -33,3 +33,17 @@ PR335의 실험 Worker 배포40437090435가 성공했다. 별도 브라우저를 ## 남은 작업 실제 상품 HTML의 재고 링크는 사용자 지역을 URL에 직접 추가하도록 요구한다. 따라서 지역도 링크로 입력하고 실제 상품 ID를 유지하는 운영 경로가 필요하다. 이 흐름의 실제 재고·진열 위치, 독립 실행 및 새 ChatGPT Chat 대화의 성공은 아직 검증하지 않았다. 오후2시 연구 목표는 계속 active이며 이번 결과만으로 완료 처리하지 않는다. + + +## 운영 링크 입력·읽기 세션 실험 (12:35 KST) + +PR336과337을 검사·리뷰 후 병합하고 운영에 배포했다. 공개 도구10개와 기존 JSON API, 원본 API 캐시·한도·권한은 유지했다. + +- 글자 링크로 `지갑`과 `안산`을 입력해 실제 상품1035676과 안산 매장3곳의 응답을 받았다. 수량은 전부null이며 품절이 아니다. 진열위치 응답도 성공했으나 hasLocation:false였다. +- 버전 없는 GitHub root는26.1, README blob은22.1, /guide/latest는21.3의 오래된 사본·리디렉션을 반환했다. GitHub의 새27.1 버전 쿼리 주소에서는27.1을 확인했다. 조회 주소가 같으면 no-store와 Crawled today도 최신성을 보장하지 않았다. +- 고정 수납박스 URL은00:44:16.978UTC의26.1 응답이었다. `/browse/read`에서 발급한 실제 링크의 세션3905f9b3-50da-4729-ae68-025b3d728cb1은03:31:01.678UTC의27.1 응답을 반환했다. 같은 링크를 다시 click하면 같은 시각이었다. +- 해당 응답의 새 링크를 click하자 세션3d475ecd-fd7b-48be-8125-9d2788fecfba와03:31:09.075UTC로 바뀌었다. 새 HTML 주소를 도구의 이전 수집본과 구분하는 효과를 관측했다. 원본 API 갱신을 증명하지는 않는다. +- 같은 세션의 상품1049516에서 글자 링크로 `강남`을 입력하고 재고를 조회했다. 첫 요청은TimeoutError, 한 번 재확인 후 성공했다. 강남역점11199는0, 강남세곡점41199는null, 강남구청역점10600은3이었다. 이어10600의 진열 위치 링크도 성공, zoneNo19·stairNo-2를 확인했다. +- 새 ID04e687c3-410c-451c-869a-b8df53e38729의 같은 재고 링크는 첫 click에 성공하고03:34:21.898UTC 응답을 반환했다. 각 경로의 캐시·네트워크·원본 지연을 분리해 인과관계를 확정한 것은 아니다. TimeoutError와 URL 접근 거절은 같은 오류로 취급하지 않는다. + +새 주소도 웹 도구가 수집한 뒤에는 재사용될 수 있다. 새 응답 링크는 검증된 범위의 대안이며 모든 계정·도구에서의 최신성 보장은 아니다. 새 ChatGPT Chat UI의 독립 검증은 BrowserSkill 연결0개와 Computer Use 서버 시간 초과로 아직 미완료다. 브라우저를 반복 생성하지 않았다. 원시 관측은 운영 기록의 read-sessions-observations.json에 보존했다. diff --git a/src/pages/agentStart.ts b/src/pages/agentStart.ts index 922588fa..29503f71 100644 --- a/src/pages/agentStart.ts +++ b/src/pages/agentStart.ts @@ -1,19 +1,19 @@ /** 검색·읽기 사본의 안내 세대를 구분하는 고정 버전 */ -export const AGENT_GUIDE_VERSION = '2026-10-27.1'; +export const AGENT_GUIDE_VERSION = '2026-10-27.2'; export const AGENT_GUIDE_UPDATED = '2026-10-27'; export const AGENT_GUIDE_STAMP = `안내 버전: ${AGENT_GUIDE_VERSION} · 갱신일: ${AGENT_GUIDE_UPDATED}`; export const AGENT_GUIDE_PATH = `/guide/${AGENT_GUIDE_VERSION}`; export const WEB_SEARCH_DESCRIPTION = - 'ChatGPT 웹 읽기로 설치·API 키·MCP 연결 설정 없이 상품을 조회하세요. /browse/compose의 실제 글자 링크를 선택하면 임의 검색어와 지역을 전달할 수 있습니다. 새 URL을 조립하지 말고 문서의 링크 ID로 click하세요. 다이소·편의점 재고와 영화·생활 정보도 지원합니다.'; + 'ChatGPT 웹 읽기로 설치·API 키·MCP 연결 설정 없이 조회하세요. /browse/read의 실제 링크 ID를 click하고 임의 검색어·지역을 글자로 선택합니다. 같은 조건의 새 응답 링크로 새 HTML 주소를 확인할 수 있습니다. 다이소·편의점 재고와 영화·생활 정보도 지원합니다.'; /** 웹 읽기 환경에서 쿼리 없는 HTML 경로를 우선합니다. */ export const WEB_READ_RULE = - '웹 조회는 /browse/ 경로를 사용하세요. Work 등에서 실제 브라우저 도구가 있으면 그 도구로 열고, 없으면 open/WebFetch를 사용하세요. 웹 읽기는 문서의 실제 링크 ID로 click하여 이동하세요. 검색어를 바꾼 새 URL을 조립해 open하지 말고 /browse/compose에서 글자를 선택하세요. 상품 HTML의 매장 지역 선택 링크는 실제 상품 ID를 유지합니다. 접근 오류가 나면 같은 주소를 반복하기 전에 실제 링크 선택을 확인하고 사용 가능한 브라우저로 전환할 수 있습니다. 브라우저를 추가로 계속 실행하지 마세요. Crawled가 과거인 수집본을 현재 재고로 단정하지 마세요. 상품 검색·상세·매장·재고·후속 조회가 모두 자동 HTML입니다. format이나 쿼리 문자열은 필요 없습니다. JSON API 주소를 웹 읽기로 열거나 셸로 우회하지 마세요. 접근 오류만으로 서비스 장애·로그인 필요·이 환경에서 실행할 수 없다고 단정하지 마세요.'; + '실제 브라우저 도구가 있으면 /browse/ HTML을 열고, 웹 읽기(open/WebFetch)만 있으면 /browse/read의 실제 링크 ID로 click하여 시작하세요. 새 URL을 조립하지 말고 글자 선택·상품·매장 지역 선택 링크를 따르세요. 오래된 수집본이면 같은 조건으로 새 응답 확인 링크를 최대2번 선택해 새 주소와 HTML 생성 시각을 확인하세요. 이 경로도 기존 API 캐시·한도·권한을 사용하며 원본 재고 갱신을 보장하지 않습니다. TimeoutError는 같은 실제 링크를 한 번만 재확인하고 계속 실패하면 미확인으로 보고하세요. URL 접근 거절을 같은 주소의 직접 open으로 반복하지 마세요. Crawled today만으로 현재 재고를 단정하지 말고 응답 생성 시각을 보고하세요. 모든 후속 /browse/ 조회는 자동 HTML이며 쿼리 문자열은 필요 없습니다. JSON API·셸로 우회하거나 브라우저를 추가로 계속 실행하지 마세요. 접근 오류를 상품 없음·재고0·로그인 필요로 단정하지 마세요.'; /** 셸 존재를 네트워크 접근 가능 여부로 오해하지 않는 실행 순서 */ export const ROUTE_SELECTION_TEXT = `1. 연결된 MCP 도구가 있으면 search_products {"service":"daiso","query":"수납박스","pageSize":3}를 호출합니다. 2. 실제 브라우저 도구가 있으면 /browse/ HTML GET 주소를 열고 페이지의 실제 상품·매장·재고를 읽습니다. Work의 내장 브라우저도 이 경로를 사용합니다. -3. 웹 읽기(open/WebFetch)만 가능하면 문서의 실제 링크 ID로 click합니다. /browse/compose에서 임의 검색어를 글자로 선택하고 상품 HTML의 매장 지역 선택으로 재고를 조회합니다. 새 URL 조립이나 직접 open 실패를 반복하지 마세요. 도구에 click이 없으면 결과의 실제 링크를 열되 같은 동작을 보장하지 않습니다. Crawled가 과거인 수집본은 현재 재고 확인으로 쓰지 않습니다. +3. 웹 읽기(open/WebFetch)만 가능하면 /browse/read의 실제 링크 ID로 click합니다. 임의 검색어를 글자로 선택하고 상품의 매장 지역 선택으로 재고를 조회합니다. 이전 HTML이면 같은 조건의 새 응답 링크를 최대2번 선택하고 생성 시각을 확인하세요. TimeoutError 재확인은 한 번만 합니다. 도구에 click이 없으면 실제 링크를 열되 같은 동작을 보장하지 않습니다. 수집본이나 미확인 수량을 현재 재고0으로 바꾸지 마세요. 4. 위 세 수단이 없거나 모두 실패하면 실제 조회 제약과 오류를 알립니다. 셸이 있어도 설치 없는 웹 조회가 우선입니다. 터미널·셸 호출로 우회하지 않습니다. 셸 DNS 오류를 웹 GET 실패나 서버 장애로 확대하지 말고 실제로 실행하지 않은 요청의 실패를 만들지 마세요.`; /** 유사 상품의 웹 검색 이미지를 실제 상품 사진으로 오인하지 않도록 제한합니다. */ @@ -38,19 +38,15 @@ ${AGENT_GUIDE_STAMP} ${ROUTE_SELECTION_TEXT} -웹 읽기용 임의 검색어 입력 (응답의 실제 글자 링크 ID를 선택): -${baseUrl}/browse/compose/daiso/products/~ -매장 검색어 입력: ${baseUrl}/browse/compose/daiso/stores/~ -아래 고정 예제도 문서의 실제 링크를 click하여 조회할 수 있습니다: -${baseUrl}/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3 -핫식스: ${baseUrl}/browse/daiso/products/%ED%95%AB%EC%8B%9D%EC%8A%A4 -강남역 매장: ${baseUrl}/browse/daiso/stores/%EA%B0%95%EB%82%A8%EC%97%AD +웹 읽기 시작 (문서의 실제 링크 ID를 선택): +${baseUrl}/browse/read +응답의 글자 입력 링크에서 임의 상품명·매장 지역을 선택하세요. 수납박스·핫식스 등 예제도 이 화면의 실제 링크로 조회합니다. 동일 주소의 수집본이 오래됐으면 새 응답 확인 링크를 선택하세요. 새 HTML 주소도 원본 API의 캐시를 사용하며 원본 재고의 새 갱신을 보장하지 않습니다. 이것은 공개 REST GET의 웹 조회이며 MCP 프로토콜 호출이 아닙니다. 상품 결과의 실제 상품 상세·매장 지역 선택 링크를 따르세요. 지역 입력 후 표시된 실제 재고 조회 링크를 선택합니다. 후속 URL을 새로 조립하지 마세요. 상품 검색만으로 매장 재고를 단정하지 마세요. 일반 API 클라이언트의 경로·필터 문법은 상세 사용 안내를 참고하세요. ${IMAGE_SOURCE_RULE} ${EXECUTION_EVIDENCE_RULE} -연결된 MCP 클라이언트는 initialize 절차를 처리합니다. MCP 결과의 isError=true/error를 확인하고 structuredContent 또는 content[].text에서 실제 상품을 읽습니다. 웹 읽기는 WebFetch·open 도구에서 위 HTML GET 링크를 그대로 여세요. +연결된 MCP 클라이언트는 initialize 절차를 처리합니다. MCP 결과의 isError=true/error를 확인하고 structuredContent 또는 content[].text에서 실제 상품을 읽습니다. 웹 읽기는 위 화면의 실제 링크 ID로 click하세요. 기존 서비스별 MCP 이름은 deprecated 호출 별칭입니다. 새 연동은 공개 도구 10개만 사용하며 도구를 늘리지 않습니다. 상세 API와 서비스 안내: ${baseUrl}/prompt · 전체 웹 조회: ${baseUrl}/browse diff --git a/src/pages/browse.ts b/src/pages/browse.ts index 0f92d821..cc2d56bd 100644 --- a/src/pages/browse.ts +++ b/src/pages/browse.ts @@ -41,7 +41,7 @@ export function registerBrowseRoutes(app: Hono<{ Bindings: AppBindings }>): void }); app.get('/browse', () => page( - `

설치 없이 웹으로 조회하기

임의 검색어를 글자 링크로 입력하기

open/WebFetch로 아래 링크를 여세요. 모든 결과는 HTML입니다. format이나 쿼리 문자열은 필요 없습니다.

수납박스 상품 3개 조회 · 핫식스 검색 · 강남역 매장 검색

주요 검색어 뒤에는 /page/2/pageSize/10처럼 조건 이름과 값을 붙입니다. 주요 검색어 없이 조건만 사용하려면 /browse/query/서비스/기능/조건/값을 사용하세요. 상품 검색은 재고 확인이 아닙니다. 실제 상품 ID와 사용자 지역으로 재고를 별도 조회하세요.

`, + `

설치 없이 웹으로 조회하기

임의 검색어를 글자 링크로 입력하기

open/WebFetch로 아래 링크를 여세요. 모든 결과는 HTML입니다. format이나 쿼리 문자열은 필요 없습니다.

수납박스 상품 3개 조회 · 핫식스 검색 · 강남역 매장 검색

웹 읽기는 글자 입력과 응답의 실제 링크 ID를 선택하세요. 아래는 일반 API 클라이언트용 경로 안내입니다. 주요 검색어 뒤에는 /page/2/pageSize/10처럼 조건 이름과 값을 붙입니다. 주요 검색어 없이 조건만 사용하려면 /browse/query/서비스/기능/조건/값을 사용하세요. 상품 검색은 재고 확인이 아닙니다. 실제 상품 ID와 사용자 지역으로 재고를 별도 조회하세요.

`, ), ); app.get('/browse/', (c) => c.redirect('/browse', 307)); diff --git a/src/pages/discovery.ts b/src/pages/discovery.ts index 95da35ad..c1beef66 100644 --- a/src/pages/discovery.ts +++ b/src/pages/discovery.ts @@ -27,7 +27,7 @@ export function buildDiscoveryAssets(info: { tools: string[]; }): Record { const services = info.services.map((service) => escapeHtml(service.name)).join(' · '); - const firstQuery = '/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3'; + const firstQuery = '/browse/read'; return { 'discovery.html': ` @@ -40,8 +40,7 @@ export function buildDiscoveryAssets(info: {

DAISO MCP

${escapeHtml(AGENT_GUIDE_STAMP)} · 현재 버전 안내 · 항상 최신 안내로 이동

설치 없이 상품·매장·재고와 영화관 정보를 조회하세요. 사용자 API 키나 로그인 없이 쓸 수 있는 공개 서비스입니다.

${escapeHtml(WEB_SEARCH_DESCRIPTION)}

${escapeHtml(WEB_READ_RULE)}

-

바로 조회하기

원하는 상품 검색어를 링크로 선택하기 · 매장 검색어를 링크로 선택하기

다이소 수납박스 상품 3개 조회

-

핫식스 상품 검색 · 강남 매장 검색

+

바로 조회하기

상품·매장·재고 웹 조회 시작

화면의 실제 링크에서 원하는 검색어와 지역을 선택하세요. 이전 HTML은 같은 조건으로 새 응답 확인 링크로 구분합니다. 원본 API 캐시는 유지됩니다.

위 링크는 셸·설치 없이 웹 읽기로 호출하는 공개 REST GET의 HTML 결과입니다. 모든 서비스의 /browse/ 경로는 자동 HTML이며 쿼리 문자열은 필요 없습니다. 검색한 상품의 실제 ID로 재고를 조회하세요. 상품 검색만으로 매장 재고를 단정하지 마세요.

에이전트에서 설치 없이 사용하기

원격 MCP 주소: ${BASE}
전송: Streamable HTTP · 인증: 없음

${escapeHtml(ROUTE_SELECTION_TEXT).replaceAll('\n', '
')}

diff --git a/tests/pages/agentStart.test.ts b/tests/pages/agentStart.test.ts index 40856556..a02b98c8 100644 --- a/tests/pages/agentStart.test.ts +++ b/tests/pages/agentStart.test.ts @@ -22,7 +22,7 @@ describe('에이전트 시작 안내', () => { expect(text).toContain('initialize'); expect(text).toContain('REST GET'); expect(text).toContain('MCP 프로토콜 호출이 아닙니다'); - expect(text).toContain('/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3'); + expect(text).toContain('/browse/read'); expect(text).toContain('https://example.com/prompt'); expect(text).toContain('전체 도구 목록이나 OpenAPI를 먼저 읽을 필요는 없습니다'); expect(text.split('\n').length).toBeLessThan(45); diff --git a/tests/pages/browse-guidance.test.ts b/tests/pages/browse-guidance.test.ts index ec3b8eee..037664d5 100644 --- a/tests/pages/browse-guidance.test.ts +++ b/tests/pages/browse-guidance.test.ts @@ -43,7 +43,12 @@ it('완전한 웹 예시 URL은 공백 없이 열리고 등록된 조회로 해 if (!url) continue; expect(url).not.toMatch(/\s/); const source = new URL(url); - if (source.pathname.startsWith('/browse/compose/')) { + if (source.pathname === '/browse/read') { + const { default: app } = await import('../../src/index.js'); + const response = await app.request(url); + expect(response.status).toBe(200); + expect(await response.text()).toContain('/browse/read/'); + } else if (source.pathname.startsWith('/browse/compose/')) { expect(renderBrowseComposer(source)).not.toBeNull(); } else { expect(browseApiUrl(source)).not.toBeNull(); diff --git a/tests/pages/discovery.test.ts b/tests/pages/discovery.test.ts index ae48bc92..c078368a 100644 --- a/tests/pages/discovery.test.ts +++ b/tests/pages/discovery.test.ts @@ -20,7 +20,7 @@ describe('공개 발견 자산', () => { expect(assets['discovery.html']).toContain(''); expect(assets['discovery.html']).toContain('설치 없이'); expect(assets['discovery.html']).toContain('search_products'); - expect(assets['discovery.html']).toContain('/browse/daiso/products/'); + expect(assets['discovery.html']).toContain('/browse/read'); expect(assets['discovery.html']).toContain('https://mcp.aka.page/'); expect(assets['discovery.html']).not.toContain('lottemart'); expect(assets['discovery.html']).not.toContain('Zyte'); diff --git a/tests/pages/latestGuide.test.ts b/tests/pages/latestGuide.test.ts index a787e098..f291ffe7 100644 --- a/tests/pages/latestGuide.test.ts +++ b/tests/pages/latestGuide.test.ts @@ -4,7 +4,7 @@ import app from '../../src/index.js'; import { buildDiscoveryAssets } from '../../src/pages/discovery.js'; import { apiResultHtml } from '../../src/pages/apiResult.js'; -const version = '2026-10-27.1'; +const version = '2026-10-27.2'; describe('최신 안내 경로와 원본 이미지', () => { it.each(['/guide/latest', '/guide/2026-10-21.2', '/guide/unknown'])('%s는 캐시 없이 현재 버전으로 연결한다', async path => { const r = await app.request(path); @@ -17,7 +17,7 @@ describe('최신 안내 경로와 원본 이미지', () => { expect(r.status).toBe(200); expect(r.headers.get('Cache-Control')).toBe('no-store'); expect(text).toContain('안내 버전: '+version); - expect(text).toContain('/browse/daiso/products/'); + expect(text).toContain('/browse/read'); expect(text).toContain('image_query'); expect(text).toContain('이미지 검색'); }); @@ -33,7 +33,7 @@ describe('최신 안내 경로와 원본 이미지', () => { it('발견 HTML/robots/sitemap에서 현재 버전 안내를 발견한다', () => { const a = buildDiscoveryAssets({ services: [], tools: [] }); for (const key of ['discovery.html','robots.txt','sitemap.xml']) expect(a[key]).toContain('/guide/'+version); - expect(a['discovery.html']).toContain('/browse/daiso/products/'); + expect(a['discovery.html']).toContain('/browse/read'); expect(a['_headers']).toContain('Cache-Control: no-store'); }); it('HTML 후속 링크와 원본 Markdown은 현재 버전을 사용하고 JSON 캐시는 유지한다', async () => { diff --git a/tests/pages/productCards.test.ts b/tests/pages/productCards.test.ts index 1d1a4e13..40c68ac4 100644 --- a/tests/pages/productCards.test.ts +++ b/tests/pages/productCards.test.ts @@ -51,7 +51,7 @@ describe('실제 상품 이미지 카드', () => { const assets = buildDiscoveryAssets({ services: [], tools: [] }); expect(assets['discovery.html']).toMatch(/name="description" content="ChatGPT.*browse\//); for (const text of [assets['discovery.html'], buildAgentStartText('https://example.com')]) { - expect(text).toContain('안내 버전: 2026-10-27.1'); + expect(text).toContain('안내 버전: 2026-10-27.2'); expect(text).toContain('갱신일: 2026-10-27'); } }); diff --git a/tests/scripts/repository-config.test.ts b/tests/scripts/repository-config.test.ts index 8ce63153..26d6247d 100644 --- a/tests/scripts/repository-config.test.ts +++ b/tests/scripts/repository-config.test.ts @@ -315,7 +315,7 @@ describe('repository maintenance configuration', () => { expect(fastStart).toContain('설치·API 키 없이'); expect(fastStart).toMatch(/\| 인증\s*\| 없음\s*\|/); expect(readme).toContain('로컬 설치·빌드·API 키 준비 없이'); - expect(fastStart).toContain('docs/service-reference.md?guide=2026-10-27.1#설치-없이-첫-조회'); + expect(fastStart).toContain('docs/service-reference.md?guide=2026-10-27.2#설치-없이-첫-조회'); const directCall = readText('docs/service-reference.md').split('### MCP 표준 응답 모델')[0]; expect(directCall).toContain('WebFetch'); expect(directCall).toContain('/browse/daiso/products/'); From 87b242ec2609533bc4e424dcefa5da11cfa2a0f3 Mon Sep 17 00:00:00 2001 From: hmmhmmhm Date: Tue, 27 Oct 2026 12:41:32 +0900 Subject: [PATCH 2/5] =?UTF-8?q?docs:=20=EC=A4=91=EA=B0=84=20=EA=B4=80?= =?UTF-8?q?=EC=B8=A1=20=EA=B8=B0=EB=A1=9D=EC=9D=98=20=EC=8B=9C=EC=A0=90?= =?UTF-8?q?=EC=9D=84=20=EA=B5=AC=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/web-reading-lab-results-2026-10-27.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/web-reading-lab-results-2026-10-27.md b/docs/web-reading-lab-results-2026-10-27.md index 178e1c49..7b6e47d0 100644 --- a/docs/web-reading-lab-results-2026-10-27.md +++ b/docs/web-reading-lab-results-2026-10-27.md @@ -30,7 +30,7 @@ PR335의 실험 Worker 배포40437090435가 성공했다. 별도 브라우저를 - [history.rs](https://github.com/openai/codex/blob/main/codex-rs/ext/web-search/src/history.rs)는 최근 사용자 텍스트2건과 제한된 assistant 텍스트를 검색 요청에 포함한다. 이것이 이번 URL 실패의 원인이라는 증거는 없다. - [독립 재현 질문53849](https://github.com/openai/codex/discussions/53849)도 URL별 성공 차이와 원본 로그 부재를 보고하지만 미답변 상태다. 이를 공식 원인 설명으로 사용하지 않는다. -## 남은 작업 +## 11:48 KST 시점의 남은 작업 실제 상품 HTML의 재고 링크는 사용자 지역을 URL에 직접 추가하도록 요구한다. 따라서 지역도 링크로 입력하고 실제 상품 ID를 유지하는 운영 경로가 필요하다. 이 흐름의 실제 재고·진열 위치, 독립 실행 및 새 ChatGPT Chat 대화의 성공은 아직 검증하지 않았다. 오후2시 연구 목표는 계속 active이며 이번 결과만으로 완료 처리하지 않는다. From 333a71d2834318a3cdc51e57791975341b20c447 Mon Sep 17 00:00:00 2001 From: hmmhmmhm Date: Tue, 27 Oct 2026 12:44:49 +0900 Subject: [PATCH 3/5] =?UTF-8?q?test:=20=EC=83=88=20=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=9D=98=20=EC=A1=B0=ED=9A=8C=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=EC=99=80=20=EC=95=88=EB=82=B4=20=EA=B3=84=EC=95=BD=20?= =?UTF-8?q?=EC=9C=A0=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/agentStart.ts | 2 +- src/pages/browse.ts | 2 +- tests/pages/apiResult.test.ts | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/pages/agentStart.ts b/src/pages/agentStart.ts index 29503f71..475c3289 100644 --- a/src/pages/agentStart.ts +++ b/src/pages/agentStart.ts @@ -8,7 +8,7 @@ export const WEB_SEARCH_DESCRIPTION = /** 웹 읽기 환경에서 쿼리 없는 HTML 경로를 우선합니다. */ export const WEB_READ_RULE = - '실제 브라우저 도구가 있으면 /browse/ HTML을 열고, 웹 읽기(open/WebFetch)만 있으면 /browse/read의 실제 링크 ID로 click하여 시작하세요. 새 URL을 조립하지 말고 글자 선택·상품·매장 지역 선택 링크를 따르세요. 오래된 수집본이면 같은 조건으로 새 응답 확인 링크를 최대2번 선택해 새 주소와 HTML 생성 시각을 확인하세요. 이 경로도 기존 API 캐시·한도·권한을 사용하며 원본 재고 갱신을 보장하지 않습니다. TimeoutError는 같은 실제 링크를 한 번만 재확인하고 계속 실패하면 미확인으로 보고하세요. URL 접근 거절을 같은 주소의 직접 open으로 반복하지 마세요. Crawled today만으로 현재 재고를 단정하지 말고 응답 생성 시각을 보고하세요. 모든 후속 /browse/ 조회는 자동 HTML이며 쿼리 문자열은 필요 없습니다. JSON API·셸로 우회하거나 브라우저를 추가로 계속 실행하지 마세요. 접근 오류를 상품 없음·재고0·로그인 필요로 단정하지 마세요.'; + '웹 조회는 /browse/ 경로를 사용하세요. 실제 브라우저 도구가 있으면 /browse/ HTML을 열고, 웹 읽기(open/WebFetch)만 있으면 /browse/read의 실제 링크 ID로 click하여 시작하세요. 새 URL을 조립하지 말고 글자 선택·상품·매장 지역 선택 링크를 따르세요. 오래된 수집본이면 같은 조건으로 새 응답 확인 링크를 최대2번 선택해 새 주소와 HTML 생성 시각을 확인하세요. 이 경로도 기존 API 캐시·한도·권한을 사용하며 원본 재고 갱신을 보장하지 않습니다. TimeoutError는 같은 실제 링크를 한 번만 재확인하고 계속 실패하면 미확인으로 보고하세요. URL 접근 거절을 같은 주소의 직접 open으로 반복하지 마세요. Crawled today만으로 현재 재고를 단정하지 말고 응답 생성 시각을 보고하세요. 모든 후속 /browse/ 조회는 자동 HTML이며 쿼리 문자열은 필요 없습니다. JSON API·셸로 우회하거나 브라우저를 추가로 계속 실행하지 마세요. 접근 오류를 상품 없음·재고0·로그인 필요로 단정하지 마세요. 해당 오류만으로 이 환경에서 실행할 수 없다고 단정하지 마세요.'; /** 셸 존재를 네트워크 접근 가능 여부로 오해하지 않는 실행 순서 */ export const ROUTE_SELECTION_TEXT = `1. 연결된 MCP 도구가 있으면 search_products {"service":"daiso","query":"수납박스","pageSize":3}를 호출합니다. diff --git a/src/pages/browse.ts b/src/pages/browse.ts index cc2d56bd..79ab0cd2 100644 --- a/src/pages/browse.ts +++ b/src/pages/browse.ts @@ -41,7 +41,7 @@ export function registerBrowseRoutes(app: Hono<{ Bindings: AppBindings }>): void }); app.get('/browse', () => page( - `

설치 없이 웹으로 조회하기

임의 검색어를 글자 링크로 입력하기

open/WebFetch로 아래 링크를 여세요. 모든 결과는 HTML입니다. format이나 쿼리 문자열은 필요 없습니다.

수납박스 상품 3개 조회 · 핫식스 검색 · 강남역 매장 검색

웹 읽기는 글자 입력과 응답의 실제 링크 ID를 선택하세요. 아래는 일반 API 클라이언트용 경로 안내입니다. 주요 검색어 뒤에는 /page/2/pageSize/10처럼 조건 이름과 값을 붙입니다. 주요 검색어 없이 조건만 사용하려면 /browse/query/서비스/기능/조건/값을 사용하세요. 상품 검색은 재고 확인이 아닙니다. 실제 상품 ID와 사용자 지역으로 재고를 별도 조회하세요.

    ${BROWSE_ROUTES.map((r) => `
  • ${r.title}: ${r.path}${r.positional.length ? ' 뒤에 ' + r.positional.join(', ') + ' 값을 순서대로 추가' : ''}
  • `).join('')}
`, + `

설치 없이 웹으로 조회하기

임의 검색어를 글자 링크로 입력하기

웹 읽기(open/WebFetch)는 아래 실제 링크 ID로 click하세요. 모든 결과는 HTML입니다. format이나 쿼리 문자열은 필요 없습니다.

수납박스 상품 3개 조회 · 핫식스 검색 · 강남역 매장 검색

웹 읽기는 글자 입력과 응답의 실제 링크 ID를 선택하세요. 아래는 일반 API 클라이언트용 경로 안내입니다. 주요 검색어 뒤에는 /page/2/pageSize/10처럼 조건 이름과 값을 붙입니다. 주요 검색어 없이 조건만 사용하려면 /browse/query/서비스/기능/조건/값을 사용하세요. 상품 검색은 재고 확인이 아닙니다. 실제 상품 ID와 사용자 지역으로 재고를 별도 조회하세요.

    ${BROWSE_ROUTES.map((r) => `
  • ${r.title}: ${r.path}${r.positional.length ? ' 뒤에 ' + r.positional.join(', ') + ' 값을 순서대로 추가' : ''}
  • `).join('')}
`, ), ); app.get('/browse/', (c) => c.redirect('/browse', 307)); diff --git a/tests/pages/apiResult.test.ts b/tests/pages/apiResult.test.ts index 32e9641b..19f547f1 100644 --- a/tests/pages/apiResult.test.ts +++ b/tests/pages/apiResult.test.ts @@ -65,10 +65,14 @@ describe('GET HTML 결과', () => { expect(res.status).toBe(400); expect(res.headers.get('Content-Type')).toContain('text/html'); expect(await res.text()).toContain('MISSING_QUERY'); }); - it('셸 없는 에이전트에게 HTML GET을 안내하며 txt charset을 명시한다', () => { + it('셸 없는 에이전트에게 HTML GET을 안내하며 txt charset을 명시한다', async () => { const assets = buildDiscoveryAssets({ services: [], tools: [] }); - expect(assets['discovery.html']).toContain('/pageSize/3'); - expect(assets['llms.txt']).toContain('/pageSize/3'); + expect(assets['discovery.html']).toContain('/browse/read'); + expect(assets['llms.txt']).toContain('/browse/read'); + const { default: app } = await import('../../src/index.js'); + const entry = await app.request('/browse/read'); + expect(entry.status).toBe(200); + expect(await entry.text()).toContain('/pageSize/3'); expect(assets['_headers']).toContain('/llms.txt\n Content-Type: text/plain; charset=utf-8'); }); }); From 5fcbd0c375a1e5b86089a2748a9f4103f28bda01 Mon Sep 17 00:00:00 2001 From: hmmhmmhm Date: Tue, 27 Oct 2026 12:47:40 +0900 Subject: [PATCH 4/5] =?UTF-8?q?docs:=20=EC=97=B0=EA=B2=B0=20=EB=AC=B8?= =?UTF-8?q?=EC=84=9C=EC=9D=98=20=EC=9B=B9=20=EC=9D=BD=EA=B8=B0=20=EC=A0=88?= =?UTF-8?q?=EC=B0=A8=EB=A5=BC=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ai-instruction.md | 8 ++++---- docs/client-guide.md | 6 +++--- docs/web-discovery.md | 10 +++++----- skills/daiso-cli/SKILL.md | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/ai-instruction.md b/docs/ai-instruction.md index d461a4cf..253b1caa 100644 --- a/docs/ai-instruction.md +++ b/docs/ai-instruction.md @@ -2,16 +2,16 @@ ## 설치 없이 첫 조회 -최신 지침은 https://mcp.aka.page/guide/latest 를 열어 현재 버전 주소로 이동합니다. 오래된 버전 경로도 최신 지침으로 연결됩니다. 첫 조회에는 지침의 guide 버전을 유지하세요. +최신 서버 안내는 [현재 버전](https://mcp.aka.page/guide/2026-10-27.2)과 [최신 연결](https://mcp.aka.page/guide/latest)에서 제공합니다. 웹 도구는 과거 리디렉션·수집본을 반환할 수 있으므로 표시된 버전과 HTML 생성 시각을 확인하세요. 1. 연결된 MCP 도구가 있으면 `search_products`에 `{"service":"daiso","query":"수납박스","pageSize":3}`를 전달합니다. 2. 실제 브라우저 도구가 있으면 /browse/ HTML GET 주소를 열고 실제 상품·매장·재고를 읽습니다. Work의 내장 브라우저도 사용 가능합니다. -3. 웹 읽기(open/WebFetch)만 가능하면 같은 HTML GET을 실행합니다. 접근 오류 시 문서의 링크를 따라갈 수 있으나 성공을 보장하지 않습니다. Crawled가 과거인 수집본을 현재 재고로 단정하지 마세요. +3. 웹 읽기(open/WebFetch)만 가능하면 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click합니다. 글자 입력·상품·매장 지역 선택 링크를 따르고 새 URL을 조립하지 마세요. 이전 HTML이면 같은 조건으로 새 응답 확인 링크를 최대2번 선택합니다. TimeoutError는 같은 실제 링크를 한 번만 재확인하고 계속 실패하면 미확인으로 보고합니다. 새 HTML도 기존 API 캐시를 사용하며 원본 갱신을 보장하지 않습니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. 4. 위 세 수단이 없거나 모두 실패하면 실제 조회 제약과 오류를 알립니다. 셸이 있어도 설치 없는 웹 조회가 우선이며 터미널·셸로 우회하지 않습니다. 셸 DNS 오류를 웹 GET 실패로 확대하거나 실행하지 않은 요청의 실패를 만들지 마세요. -https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3 +https://mcp.aka.page/browse/read -경로의 검색어를 사용자 요청으로 바꾸세요. 첫 조회 전에 npm·CLI·스킬 설치, health/help, 전체 도구 목록이나 OpenAPI 탐색을 하지 않습니다. 연결 설정을 요구하기 전에 현재 웹 도구로 실제 조회부터 실행합니다. +응답의 글자 선택 링크로 사용자 검색어를 입력하세요. 첫 조회 전에 npm·CLI·스킬 설치, health/help, 전체 도구 목록이나 OpenAPI 탐색을 하지 않습니다. 연결 설정을 요구하기 전에 현재 웹 도구로 실제 조회부터 실행합니다. **모든 웹 GET 조회는 `/browse/` 경로를 사용합니다. 자동 HTML이며 쿼리 문자열과 format 지정은 필요 없습니다.** 상품 검색·상세·매장·재고·후속 조회 모두 적용합니다. 실제 검색 결과의 ID를 사용하고 문서 예제 ID나 수량을 조회 결과로 쓰지 않습니다. REST GET 성공은 MCP 연결 성공과 구분합니다. diff --git a/docs/client-guide.md b/docs/client-guide.md index da60dec5..00b95eb3 100644 --- a/docs/client-guide.md +++ b/docs/client-guide.md @@ -1,8 +1,8 @@ # 앱 연결·CLI·Skill 가이드 -실제 브라우저 도구가 있으면 /browse/ HTML을 그 도구로 여세요. 웹 읽기(open/WebFetch)의 접근 오류 시 사용 가능한 브라우저로 전환합니다. Crawled가 과거인 수집본은 현재 재고 확인이 아닙니다. 응답 생성 시각도 함께 확인하세요. +실제 브라우저가 있으면 /browse/ HTML을 엽니다. 웹 읽기만 있으면 /browse/read에서 실제 링크 ID로 click합니다. 이전 HTML은 같은 조건의 새 응답 링크를 최대2번 확인하고 TimeoutError 재확인은 한 번만 합니다. 응답 생성 시각과 원본 재고 갱신은 구분하며 새 브라우저를 반복 생성하지 마세요. -연결된 MCP 도구가 있으면 [원격 MCP 안내](../README.md#원격-mcp로-바로-시작하기)를 따릅니다. 웹 읽기만 가능하면 설치·연결 설정 없이 [첫 상품 조회](https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3)를 open/WebFetch로 바로 여세요. 모든 후속 조회도 쿼리 없는 `/browse/` 경로를 사용하며 자동 HTML입니다. +연결된 MCP 도구가 있으면 [원격 MCP 안내](../README.md#원격-mcp로-바로-시작하기)를 따릅니다. 웹 읽기만 가능하면 설치·연결 설정 없이 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click하세요. 검색어와 지역은 글자 선택 링크로 입력하며 새 URL을 조립하지 않습니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. 모든 후속 조회도 쿼리 없는 `/browse/` 경로를 사용하며 자동 HTML입니다. 원격 서버는 `https://mcp.aka.page`, 전송 방식은 Streamable HTTP, 사용자 인증은 없습니다. ## 원격 MCP 연결 @@ -235,7 +235,7 @@ npx daiso products 수납박스 --json - 공개 페이지: `https://clawhub.ai/hmmhmmhm/daiso-cli` - 스킬 파일: [skills/daiso-cli/SKILL.md](../skills/daiso-cli/SKILL.md) - 명령 맵: [CLI 명령 맵](../skills/daiso-cli/references/cli-command-map.md) -- 사용자가 무설치 조회를 요청하면 연결된 MCP 도구를 사용하고, 없으면 웹 읽기의 HTML GET을 우선 사용합니다. 셸이 있어도 이 순서를 유지하며, 두 수단이 없으면 실제 도구 제약을 알리고 셸 호출로 우회하지 않습니다. WebFetch 또는 open으로 HTML 링크를 직접 여세요. `npx`나 Skill 설치, 전체 스키마 탐색은 필요하지 않습니다. +- 사용자가 무설치 조회를 요청하면 연결된 MCP 도구를 사용하고, 없으면 웹 읽기의 HTML GET을 우선 사용합니다. 셸이 있어도 이 순서를 유지하며, 두 수단이 없으면 실제 도구 제약을 알리고 셸 호출로 우회하지 않습니다. /browse/read의 실제 링크 ID로 click하고 글자 입력·상품·재고 링크를 따르세요. 새 URL을 조립하지 마세요. `npx`나 Skill 설치, 전체 스키마 탐색은 필요하지 않습니다. - CLI를 사용하기로 선택했고 쉘 실행이 가능한 환경에서만 `npx daiso`를 사용합니다. AI 앱 연결에는 MCP 서버 URL `https://mcp.aka.page`를 사용합니다. - 구조화 결과가 필요하면 스킬은 `npx daiso ... --json` 형태를 선택합니다. - 상황별 레시피는 `콜라 어디가 싸?`, `강남역 근처 카페`, `다이소 핫식스 재고`, `오늘 강남 CGV 시간표`처럼 실제 사용자 문장 기준으로 정리되어 있습니다. diff --git a/docs/web-discovery.md b/docs/web-discovery.md index 3bde216a..ad223383 100644 --- a/docs/web-discovery.md +++ b/docs/web-discovery.md @@ -1,8 +1,8 @@ # 웹에서 다이소 MCP 발견하기 -실제 브라우저 도구가 있으면 /browse/ HTML을 그 도구로 여세요. 웹 읽기(open/WebFetch)의 접근 오류 시 사용 가능한 브라우저로 전환합니다. Crawled가 과거인 수집본은 현재 재고 확인이 아닙니다. 응답 생성 시각도 함께 확인하세요. +실제 브라우저가 있으면 /browse/ HTML을 엽니다. 웹 읽기만 있으면 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click합니다. 이전 HTML은 같은 조건의 새 응답 링크를 최대2번 확인하고 TimeoutError 재확인은 한 번만 합니다. HTML 생성 시각은 원본 재고 갱신 시각이 아닙니다. -[공개 첫 화면](https://mcp.aka.page/)은 설치 없는 사용 방법과 첫 실제 조회 링크를 HTML로 제공합니다. 웹 읽기 기능만으로 MCP 도구가 자동 등록되는 것은 아닙니다. 연결된 MCP 도구를 먼저 사용하고, 없으면 실제 브라우저, 그다음 웹 읽기의 HTML GET을 사용합니다. 모든 수단이 없거나 실패하면 실제 조회 도구 제약을 알리며 셸 호출로 우회하지 않습니다. WebFetch 또는 open으로 HTML 링크를 직접 엽니다. +[공개 첫 화면](https://mcp.aka.page/)은 설치 없는 사용 방법과 첫 실제 조회 링크를 HTML로 제공합니다. 웹 읽기 기능만으로 MCP 도구가 자동 등록되는 것은 아닙니다. 연결된 MCP 도구를 먼저 사용하고, 없으면 실제 브라우저, 그다음 웹 읽기의 HTML GET을 사용합니다. 모든 수단이 없거나 실패하면 실제 조회 도구 제약을 알리며 셸 호출로 우회하지 않습니다. 웹 읽기는 응답의 실제 링크 ID를 click하고 검색어·지역은 글자 링크로 입력합니다. 새 URL을 조립하지 않습니다. - `/`: HTML 안내. `Accept: application/json`이면 기존 서버 정보 JSON. - `/root.json`: 현재 서비스·도구 목록 JSON. API 클라이언트는 이 명시적 주소를 권장합니다. @@ -39,11 +39,11 @@ OpenAI 검색·사용자 요청·학습 봇의 역할과 공개 IP는 [공식 ## 웹 읽기만 가능한 채팅 에이전트 -샌드박스나 셸 없이 URL만 읽을 수 있다면 [수납박스 HTML 조회](https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3)를 먼저 엽니다. 첫 화면과 llms.txt에도 이 링크를 안내합니다. 결과는 서버에서 생성하므로 JavaScript 실행이 필요 없습니다. +샌드박스나 셸 없이 웹 읽기만 가능하면 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID를 먼저 click합니다. 첫 화면과 llms.txt도 이 시작점을 안내합니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. 결과는 서버에서 생성하므로 JavaScript 실행이 필요 없습니다. -공개 `/browse/` GET 경로는 같은 실제 조회 결과를 항상 HTML로 제공합니다. 쿼리 문자열은 필요 없습니다. 기존 `/api/`의 JSON과 구형 HTML 주소는 하위호환으로 유지합니다. 예: `/browse/daiso/stores/%EA%B0%95%EB%82%A8`, `/browse/daiso/inventory/%EC%8B%A4%EC%A0%9C%EC%83%81%ED%92%88ID/%ED%99%95%EC%9D%B8%ED%95%9C%EB%A7%A4%EC%9E%A5%EB%AA%85/lat/%ED%99%95%EC%9D%B8%ED%95%9C%EC%9C%84%EB%8F%84/lng/%ED%99%95%EC%9D%B8%ED%95%9C%EA%B2%BD%EB%8F%84`. 상품 목록의 상세 링크도 HTML로 연결합니다. 다른 서비스의 필수 파라미터는 `/prompt`에서 확인합니다. +공개 `/browse/` GET 경로는 같은 실제 조회 결과를 항상 HTML로 제공합니다. 쿼리 문자열은 필요 없습니다. 기존 `/api/`의 JSON과 구형 HTML 주소는 하위호환으로 유지합니다. 일반 API 클라이언트용 기본 경로 예시: `/browse/daiso/stores/%EA%B0%95%EB%82%A8`, `/browse/daiso/inventory/%EC%8B%A4%EC%A0%9C%EC%83%81%ED%92%88ID/%ED%99%95%EC%9D%B8%ED%95%9C%EB%A7%A4%EC%9E%A5%EB%AA%85/lat/%ED%99%95%EC%9D%B8%ED%95%9C%EC%9C%84%EB%8F%84/lng/%ED%99%95%EC%9D%B8%ED%95%9C%EA%B2%BD%EB%8F%84`. 상품 목록의 상세 링크도 HTML로 연결합니다. 다른 서비스의 필수 파라미터는 `/prompt`에서 확인합니다. -HTML은 원래 응답의 성공·오류와 HTTP 상태를 보존합니다. 상품 검색 결과를 매장 재고로 단정하거나 오류를 재고 0으로 해석하면 안 됩니다. POST와 MCP 응답 형식은 변경하지 않습니다. 웹 읽기 도구가 HTML 접근도 거부하는 경우에는 경로 전환만으로 도구 내부의 접근 제한을 해결할 수는 없습니다. +HTML은 원래 응답의 성공·오류와 HTTP 상태를 보존합니다. 상품 검색 결과를 매장 재고로 단정하거나 오류를 재고 0으로 해석하면 안 됩니다. POST와 MCP 응답 형식은 변경하지 않습니다. 웹 읽기 도구가 HTML 접근도 거부하면 실제 오류를 구분해 기록합니다. 임의 URL open과 실제 링크 click은 이 실험에서 서로 다른 결과를 보였으며 모든 도구·계정에서의 성공을 보장하지 않습니다. `llms.txt`와 `robots.txt`는 정적 Assets에서도 `text/plain; charset=utf-8`을 명시합니다. UTF-8 본문을 다른 인코딩으로 추측하는 클라이언트에서 한글이 깨지는 것을 방지합니다. diff --git a/skills/daiso-cli/SKILL.md b/skills/daiso-cli/SKILL.md index 3a7d0e58..f02a6e7d 100644 --- a/skills/daiso-cli/SKILL.md +++ b/skills/daiso-cli/SKILL.md @@ -21,16 +21,16 @@ Use this skill to operate the Daiso MCP project through `npx daiso` and the publ ## 설치 없이 첫 조회 -최신 지침은 https://mcp.aka.page/guide/latest 를 열어 현재 버전 주소로 이동합니다. 오래된 버전 경로도 최신 지침으로 연결됩니다. 첫 조회에는 지침의 guide 버전을 유지하세요. +최신 서버 안내는 [현재 버전](https://mcp.aka.page/guide/2026-10-27.2)과 [최신 연결](https://mcp.aka.page/guide/latest)에서 제공합니다. 웹 도구는 과거 리디렉션·수집본을 반환할 수 있으므로 표시된 버전과 HTML 생성 시각을 확인하세요. 1. 연결된 MCP 도구가 있으면 `search_products`에 `{"service":"daiso","query":"수납박스","pageSize":3}`를 전달합니다. 2. 실제 브라우저 도구가 있으면 /browse/ HTML GET 주소를 열고 실제 상품·매장·재고를 읽습니다. Work의 내장 브라우저도 사용 가능합니다. -3. 웹 읽기(open/WebFetch)만 가능하면 같은 HTML GET을 실행합니다. 접근 오류 시 문서의 링크를 따라갈 수 있으나 성공을 보장하지 않습니다. Crawled가 과거인 수집본을 현재 재고로 단정하지 마세요. +3. 웹 읽기(open/WebFetch)만 가능하면 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click합니다. 글자 입력·상품·매장 지역 선택 링크를 따르고 새 URL을 조립하지 마세요. 이전 HTML이면 같은 조건으로 새 응답 확인 링크를 최대2번 선택합니다. TimeoutError는 같은 실제 링크를 한 번만 재확인하고 계속 실패하면 미확인으로 보고합니다. 새 HTML도 기존 API 캐시를 사용하며 원본 갱신을 보장하지 않습니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. 4. 위 세 수단이 없거나 모두 실패하면 실제 조회 제약과 오류를 알립니다. 셸이 있어도 설치 없는 웹 조회가 우선이며 터미널·셸로 우회하지 않습니다. 셸 DNS 오류를 웹 GET 실패로 확대하거나 실행하지 않은 요청의 실패를 만들지 마세요. -https://mcp.aka.page/browse/daiso/products/%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4/pageSize/3 +https://mcp.aka.page/browse/read -경로의 검색어를 사용자 요청으로 바꾸고 상세·매장·재고를 포함한 모든 후속 웹 GET에도 `/browse/`를 사용하세요. 자동 HTML이며 쿼리 문자열은 필요 없습니다. 첫 조회 전에 npx·패키지·스킬 설치, health/help, 전체 도구 목록이나 OpenAPI 탐색을 요구하지 않습니다. REST GET 성공과 MCP 도구 호출 성공은 구분합니다. +응답의 글자 선택 링크로 사용자 검색어를 입력하고 상세·매장·재고도 실제 링크 ID로 선택하세요. 모든 후속 웹 GET은 `/browse/` HTML입니다. 자동 HTML이며 쿼리 문자열은 필요 없습니다. 첫 조회 전에 npx·패키지·스킬 설치, health/help, 전체 도구 목록이나 OpenAPI 탐색을 요구하지 않습니다. REST GET 성공과 MCP 도구 호출 성공은 구분합니다. 상품 이미지는 해당 조회 응답의 imageUrl만 사용합니다. 전체 URL과 query string을 유지하고, 없거나 표시되지 않으면 생략하며 image_query·이미지 검색·검색 캐러셀을 사용하거나 웹 검색 이미지·다른 상품·다른 국가 이미지로 대체하지 않습니다. 실제 도구·URL·반환 데이터·오류만 보고하고 실행하지 않은 요청의 성공·실패를 만들지 않습니다. @@ -114,7 +114,7 @@ Lotte Mart is discontinued; MINISO is unsupported. Japan DAISO supports products ## Fallbacks -- npx 또는 Node.js를 사용할 수 없으면 use connected MCP tools or open the equivalent HTML GET through web reading. Use query-free /browse/ paths for every web GET. HTML is automatic. If neither is available, report the actual limitation without inventing results. +- npx 또는 Node.js를 사용할 수 없으면 use connected MCP tools or start web reading at /browse/read and click the actual response link IDs. Do not construct new URLs. Use query-free /browse/ paths for every web GET. HTML is automatic. If neither is available, report the actual limitation without inventing results. - For network failures, retry once with a narrower query, then report the failing service and command. - For no results, preserve the command used and suggest a broader keyword or nearby area. - Switch from CLI to MCP only when the user is configuring an AI app, the shell cannot run `npx`, or the host environment already exposes the MCP server. From 9e33cffa936945e656df08f590d86e4b8a6fba53 Mon Sep 17 00:00:00 2001 From: hmmhmmhm Date: Tue, 27 Oct 2026 12:53:45 +0900 Subject: [PATCH 5/5] =?UTF-8?q?docs:=20=EC=9B=B9=20=EC=9D=BD=EA=B8=B0=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=EA=B3=BC=20=ED=98=84=EC=9E=AC=20=EC=9E=AC?= =?UTF-8?q?=EA=B3=A0=20=ED=8C=90=EC=A0=95=20=EA=B8=B0=EC=A4=80=20=EB=B3=B4?= =?UTF-8?q?=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ai-instruction.md | 2 ++ docs/client-guide.md | 4 +++- docs/web-discovery.md | 4 +++- skills/daiso-cli/SKILL.md | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/ai-instruction.md b/docs/ai-instruction.md index 253b1caa..d77046e6 100644 --- a/docs/ai-instruction.md +++ b/docs/ai-instruction.md @@ -11,6 +11,8 @@ https://mcp.aka.page/browse/read +웹 도구의 `Crawled: today`만으로 현재 재고라고 단정하지 마세요. 응답의 HTML 생성 시각과 실제 수량을 확인하고, 수량이 null이면 품절이 아닌 미확인으로 보고합니다. + 응답의 글자 선택 링크로 사용자 검색어를 입력하세요. 첫 조회 전에 npm·CLI·스킬 설치, health/help, 전체 도구 목록이나 OpenAPI 탐색을 하지 않습니다. 연결 설정을 요구하기 전에 현재 웹 도구로 실제 조회부터 실행합니다. **모든 웹 GET 조회는 `/browse/` 경로를 사용합니다. 자동 HTML이며 쿼리 문자열과 format 지정은 필요 없습니다.** 상품 검색·상세·매장·재고·후속 조회 모두 적용합니다. 실제 검색 결과의 ID를 사용하고 문서 예제 ID나 수량을 조회 결과로 쓰지 않습니다. REST GET 성공은 MCP 연결 성공과 구분합니다. diff --git a/docs/client-guide.md b/docs/client-guide.md index 00b95eb3..5988285e 100644 --- a/docs/client-guide.md +++ b/docs/client-guide.md @@ -1,6 +1,8 @@ # 앱 연결·CLI·Skill 가이드 -실제 브라우저가 있으면 /browse/ HTML을 엽니다. 웹 읽기만 있으면 /browse/read에서 실제 링크 ID로 click합니다. 이전 HTML은 같은 조건의 새 응답 링크를 최대2번 확인하고 TimeoutError 재확인은 한 번만 합니다. 응답 생성 시각과 원본 재고 갱신은 구분하며 새 브라우저를 반복 생성하지 마세요. +실제 브라우저가 있으면 /browse/ HTML을 엽니다. 웹 읽기(open/WebFetch)만 있으면 /browse/read에서 실제 링크 ID로 click합니다. 이전 HTML은 같은 조건의 새 응답 링크를 최대2번 확인하고 TimeoutError 재확인은 한 번만 합니다. 응답 생성 시각과 원본 재고 갱신은 구분하며 새 브라우저를 반복 생성하지 마세요. + +웹 도구의 `Crawled: today`만으로 현재 재고라고 단정하지 마세요. 응답의 HTML 생성 시각과 실제 수량을 확인하고, 수량이 null이면 품절이 아닌 미확인으로 보고합니다. 연결된 MCP 도구가 있으면 [원격 MCP 안내](../README.md#원격-mcp로-바로-시작하기)를 따릅니다. 웹 읽기만 가능하면 설치·연결 설정 없이 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click하세요. 검색어와 지역은 글자 선택 링크로 입력하며 새 URL을 조립하지 않습니다. click이 없는 도구의 동일 동작은 보장하지 않습니다. 모든 후속 조회도 쿼리 없는 `/browse/` 경로를 사용하며 자동 HTML입니다. 원격 서버는 `https://mcp.aka.page`, 전송 방식은 Streamable HTTP, 사용자 인증은 없습니다. diff --git a/docs/web-discovery.md b/docs/web-discovery.md index ad223383..94d2edbe 100644 --- a/docs/web-discovery.md +++ b/docs/web-discovery.md @@ -1,6 +1,8 @@ # 웹에서 다이소 MCP 발견하기 -실제 브라우저가 있으면 /browse/ HTML을 엽니다. 웹 읽기만 있으면 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click합니다. 이전 HTML은 같은 조건의 새 응답 링크를 최대2번 확인하고 TimeoutError 재확인은 한 번만 합니다. HTML 생성 시각은 원본 재고 갱신 시각이 아닙니다. +실제 브라우저가 있으면 /browse/ HTML을 엽니다. 웹 읽기(open/WebFetch)만 있으면 [웹 조회 시작](https://mcp.aka.page/browse/read)의 실제 링크 ID로 click합니다. 이전 HTML은 같은 조건의 새 응답 링크를 최대2번 확인하고 TimeoutError 재확인은 한 번만 합니다. HTML 생성 시각은 원본 재고 갱신 시각이 아닙니다. + +웹 도구의 `Crawled: today`만으로 현재 재고라고 단정하지 마세요. 응답의 HTML 생성 시각과 실제 수량을 확인하고, 수량이 null이면 품절이 아닌 미확인으로 보고합니다. [공개 첫 화면](https://mcp.aka.page/)은 설치 없는 사용 방법과 첫 실제 조회 링크를 HTML로 제공합니다. 웹 읽기 기능만으로 MCP 도구가 자동 등록되는 것은 아닙니다. 연결된 MCP 도구를 먼저 사용하고, 없으면 실제 브라우저, 그다음 웹 읽기의 HTML GET을 사용합니다. 모든 수단이 없거나 실패하면 실제 조회 도구 제약을 알리며 셸 호출로 우회하지 않습니다. 웹 읽기는 응답의 실제 링크 ID를 click하고 검색어·지역은 글자 링크로 입력합니다. 새 URL을 조립하지 않습니다. diff --git a/skills/daiso-cli/SKILL.md b/skills/daiso-cli/SKILL.md index f02a6e7d..2b58f565 100644 --- a/skills/daiso-cli/SKILL.md +++ b/skills/daiso-cli/SKILL.md @@ -30,6 +30,8 @@ Use this skill to operate the Daiso MCP project through `npx daiso` and the publ https://mcp.aka.page/browse/read +웹 도구의 `Crawled: today`만으로 현재 재고라고 단정하지 마세요. 응답의 HTML 생성 시각과 실제 수량을 확인하고, 수량이 null이면 품절이 아닌 미확인으로 보고합니다. + 응답의 글자 선택 링크로 사용자 검색어를 입력하고 상세·매장·재고도 실제 링크 ID로 선택하세요. 모든 후속 웹 GET은 `/browse/` HTML입니다. 자동 HTML이며 쿼리 문자열은 필요 없습니다. 첫 조회 전에 npx·패키지·스킬 설치, health/help, 전체 도구 목록이나 OpenAPI 탐색을 요구하지 않습니다. REST GET 성공과 MCP 도구 호출 성공은 구분합니다. 상품 이미지는 해당 조회 응답의 imageUrl만 사용합니다. 전체 URL과 query string을 유지하고, 없거나 표시되지 않으면 생략하며 image_query·이미지 검색·검색 캐러셀을 사용하거나 웹 검색 이미지·다른 상품·다른 국가 이미지로 대체하지 않습니다. 실제 도구·URL·반환 데이터·오류만 보고하고 실행하지 않은 요청의 성공·실패를 만들지 않습니다.