diff --git a/README.md b/README.md
index e7b58c53..c78097f5 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
에이전트는 [짧은 시작 안내](https://mcp.aka.page/llms.txt)를 참고하세요. 무설치 요청에는 npm 설치나 전체 스키마 탐색이 필요하지 않습니다.
웹에서는 [공개 첫 화면](https://mcp.aka.page/)에서 시작할 수 있습니다. [검색·크롤러 안내와 배포 구조](docs/web-discovery.md)는 별도 문서에 정리했습니다.
-웹 읽기만 가능한 채팅 에이전트는 공개 GET API에 `&format=html`을 추가해 결과를 읽을 수 있습니다. [첫 HTML 조회](https://mcp.aka.page/api/daiso/products?q=%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4&pageSize=3&format=html) · [사용 방법](docs/web-discovery.md).
+**웹 읽기 전용 에이전트는 모든 `/api/*` GET 조회 URL에 `format=html`을 반드시 붙이세요.** 상품 검색·상세·매장·재고·후속 조회 모두 적용합니다. [첫 HTML 조회](https://mcp.aka.page/api/daiso/products?q=%EC%88%98%EB%82%A9%EB%B0%95%EC%8A%A4&pageSize=3&format=html) · [사용 방법](docs/web-discovery.md).
## 원격 MCP로 바로 시작하기
diff --git a/docs/ai-instruction.md b/docs/ai-instruction.md
index bf3cb7cb..48b9b5f7 100644
--- a/docs/ai-instruction.md
+++ b/docs/ai-instruction.md
@@ -13,7 +13,7 @@ curl -fsS --max-time 20 'https://mcp.aka.page' \
첫 조회 전에 `npx`, 패키지·스킬 설치, health/help, 전체 스키마나 도구 목록 탐색을 하지 않습니다. 위 예제의 검색어를 사용자 요청으로 바꾸고 조회 결과부터 제공합니다. 사용자 조건이나 호출 오류 때문에 필요한 경우에만 추가 안내를 읽습니다. 호출에 성공하면 추가 진단 없이 결과를 보여줍니다.
-`GET https://mcp.aka.page/api/daiso/products?q=수납박스`는 같은 서비스의 REST 직접 조회입니다. GET만 가능한 환경에서는 사용할 수 있지만 MCP 도구를 호출했다고 설명하지 않습니다. HTTP·네트워크 오류만으로 로그인 필요나 서버 장애를 단정하지 않고 실제 오류와 실행 환경을 확인합니다.
+`GET https://mcp.aka.page/api/daiso/products?q=수납박스&format=html`는 같은 서비스의 REST 직접 조회입니다. **웹 읽기 전용 에이전트는 모든 `/api/*` GET 조회 URL에 `format=html`을 반드시 붙입니다. 상품 검색·상세·매장·재고·후속 조회 모두 적용합니다.** JSON 주소가 읽히지 않으면 HTML 주소로 재시도하고, 그 실패만으로 로그인 필요나 실행 불가를 단정하지 않습니다. 이 REST 조회를 MCP 도구 호출이라고 설명하지 않습니다. HTTP·네트워크 오류만으로 로그인 필요나 서버 장애를 단정하지 않고 실제 오류와 실행 환경을 확인합니다.
당신은 다이소/통합 가격 후보 비교/주변 음식점·카페/GS25/세븐일레븐/CU/이마트24/올리브영/메가박스/롯데시네마/CGV 생활·쇼핑·영화 도우미입니다.
diff --git a/docs/web-discovery.md b/docs/web-discovery.md
index bcfdcdb2..5f14fd8a 100644
--- a/docs/web-discovery.md
+++ b/docs/web-discovery.md
@@ -44,3 +44,5 @@ OpenAI 검색·사용자 요청·학습 봇의 역할과 공개 IP는 [공식
HTML은 원래 응답의 성공·오류와 HTTP 상태를 보존합니다. 상품 검색 결과를 매장 재고로 단정하거나 오류를 재고 0으로 해석하면 안 됩니다. POST와 MCP 응답 형식은 변경하지 않습니다. 웹 읽기 도구가 HTML 접근도 거부하는 경우에는 이 옵션만으로 도구 내부 문제를 해결하지 못합니다.
`llms.txt`와 `robots.txt`는 정적 Assets에서도 `text/plain; charset=utf-8`을 명시합니다. UTF-8 본문을 다른 인코딩으로 추측하는 클라이언트에서 한글이 깨지는 것을 방지합니다.
+
+**웹 읽기 전용 에이전트는 모든 `/api/*` GET 조회 URL에 `format=html`을 반드시 붙이세요.** 검색·상세·매장·재고·후속 조회 모두 적용합니다. `/prompt`의 GET URL 예시도 모두 이 형식으로 제공합니다. JSON 스키마 예시는 필드 설명이고 웹 읽기용 URL 안내가 아닙니다. 일반 JSON API와 MCP 클라이언트의 계약은 유지합니다.
diff --git a/src/pages/agentStart.ts b/src/pages/agentStart.ts
index 19cdbb92..3bf7ee3a 100644
--- a/src/pages/agentStart.ts
+++ b/src/pages/agentStart.ts
@@ -1,7 +1,12 @@
+/** 웹 읽기 전용 환경에서 조회 형식을 선택하는 공통 규칙 */
+export const WEB_READ_RULE = '웹 읽기 전용 에이전트: 모든 /api/* GET 조회 URL에 format=html을 반드시 포함하세요. 상품 검색뿐 아니라 상세·매장·재고·후속 조회에도 적용합니다. 아래 문서의 JSON 응답 예시는 필드 설명이며 웹 읽기로 JSON 주소를 열라는 뜻이 아닙니다. JSON URL이 읽히지 않으면 format=html로 다시 조회하고, 그 실패만으로 서비스 장애·로그인 필요·이 환경에서 실행할 수 없다고 단정하지 마세요.';
+
/** 설치 없이 첫 실제 조회를 실행하는 에이전트 안내 */
export function buildAgentStartText(baseUrl: string): string {
return `# Daiso MCP: 설치 없이 시작하기
+**${WEB_READ_RULE}**
+
공개 원격 MCP: https://mcp.aka.page
전송: Streamable HTTP · 인증: 없음 (사용자 API 키 불필요)
샌드박스·셸 없이 웹 읽기만 가능한 채팅 에이전트는 아래 HTML GET 주소를 먼저 여세요. npm 설치나 HTTP POST 실행이 필요 없습니다.
diff --git a/src/pages/apiResult.ts b/src/pages/apiResult.ts
index 35d8956e..a0c26168 100644
--- a/src/pages/apiResult.ts
+++ b/src/pages/apiResult.ts
@@ -1,4 +1,5 @@
/** 웹 읽기 에이전트용 공개 GET 결과 표시 */
+import { WEB_READ_RULE } from './agentStart.js';
import type { MiddlewareHandler } from 'hono';
import type { AppBindings } from '../api/response.js';
@@ -33,9 +34,10 @@ export const apiResultHtml: MiddlewareHandler<{ Bindings: AppBindings }> = async
const title = failed ? '조회 실패' : '조회 성공';
const html = `
${title} — 다이소 MCP
${title}
+${escapeHtml(WEB_READ_RULE)}
요청: ${source} · HTTP ${c.res.status}
실제 API 조회 결과입니다. 오류를 상품 없음이나 재고 0으로 해석하지 마세요. 매장 재고는 상품 ID와 매장명 또는 사용자 위치를 확인한 뒤 별도로 조회하세요.
${renderValue(data, url.pathname === '/api/daiso/products')}
-동일 조회의 JSON 원본 · 설치 없는 조회 안내 · API 경로와 필수 파라미터 안내
+개발자용 JSON 원본 (웹 읽기용 아님) · 설치 없는 조회 안내 · API 경로와 필수 파라미터 안내
다른 공개 GET 조회도 기존 파라미터에 format=html을 추가하면 HTML로 읽을 수 있습니다. 웹 읽기만으로 MCP 연결이 생기는 것은 아닙니다.
`;
const headers = new Headers(c.res.headers);
headers.set('Content-Type', 'text/html; charset=utf-8');
diff --git a/src/pages/discovery.ts b/src/pages/discovery.ts
index 2f69f0b5..a2ac11c1 100644
--- a/src/pages/discovery.ts
+++ b/src/pages/discovery.ts
@@ -1,4 +1,4 @@
-import { buildAgentStartText } from './agentStart.js';
+import { buildAgentStartText, WEB_READ_RULE } from './agentStart.js';
const BASE = 'https://mcp.aka.page';
@@ -22,6 +22,7 @@ export function buildDiscoveryAssets(info: { services: { name: string }[]; tools
다이소 MCP
설치 없이 상품·매장·재고와 영화관 정보를 조회하세요. 사용자 API 키나 로그인 없이 쓸 수 있는 공개 서비스입니다.
+${escapeHtml(WEB_READ_RULE)}
바로 조회하기
다이소 수납박스 상품 3개 조회
위 링크는 셸·설치 없이 웹 읽기로 호출하는 공개 REST GET의 HTML 결과입니다. 다른 공개 GET 조회도 기존 파라미터에 format=html을 추가하세요. 검색한 상품의 실제 ID로 재고를 조회하세요. 상품 검색만으로 매장 재고를 단정하지 마세요.
에이전트에서 설치 없이 사용하기
원격 MCP 주소: ${BASE}
전송: Streamable HTTP · 인증: 없음
@@ -32,7 +33,7 @@ export function buildDiscoveryAssets(info: { services: { name: string }[]; tools
-H 'Accept: application/json, text/event-stream' \\
--data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"daiso_search_products","arguments":{"query":"수납박스","pageSize":3}}}'
웹 읽기 기능으로 이 페이지를 읽는 것만으로 MCP 연결이 생기지는 않습니다. 샌드박스나 셸 없이 웹 읽기만 가능한 채팅 에이전트는 위 HTML REST 링크를 바로 여세요. 오류를 상품 없음으로 해석하지 마세요.
-짧은 시작 안내 · 전체 API 사용 안내 · 현재 서비스·도구 목록 JSON
+짧은 시작 안내 · 전체 API 사용 안내 · 개발자용 서비스·도구 목록 JSON