diff --git a/.github/workflows/workers-invocations-chart.yml b/.github/workflows/workers-invocations-chart.yml
index 68b06122..dfa7a448 100644
--- a/.github/workflows/workers-invocations-chart.yml
+++ b/.github/workflows/workers-invocations-chart.yml
@@ -69,7 +69,7 @@ jobs:
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- git add scripts/ops/README.md assets/analytics/workers-invocations.json assets/analytics/workers-invocations.png
+ git add README.md scripts/ops/README.md assets/analytics/workers-invocations.json assets/analytics/workers-invocations.png
if git diff --cached --quiet; then
echo "No chart changes to commit"
diff --git a/README.md b/README.md
index c78097f5..d8b3c344 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,120 @@
+[](https://mcptoplist.com/server/glama%2Fhmmhmmhm%2Fdaiso-mcp)
+
+
+
+

+
+
+
+
# Daiso MCP 및 Skill
+다이소(제품/매장/재고), 상품 가격 비교, 주변 음식점/카페, 주유소/유가, 개발자 요청 제출, GS25(매장/상품/재고), 세븐일레븐(상품/매장/재고/인기검색어/카탈로그), CU(매장/재고), 이마트24(매장/상품/재고), 올리브영(매장/재고), 메가박스(지점/영화/시간표/좌석), 롯데시네마(지점/영화/좌석), CGV(극장/영화/시간표), 디트릭스(독립·예술영화관/상영작/잔여 좌석) 조회 기능을 MCP, CLI, Codex Skill로 AI에 연결합니다.
+
+디트릭스의 지원 범위와 CLI 예시는 [독립·예술영화관 조회 가이드](docs/dtryx.md)를 참고하세요.
+
+
+
+**MCP:** `https://mcp.aka.page` · **CLI:** `npx daiso` · **Skill:** `clawhub install daiso-cli`
+
+**ClawHub:** [clawhub.ai/hmmhmmhm/daiso-cli](https://clawhub.ai/hmmhmmhm/daiso-cli)
+
+한국 로컬 리테일, 생활 정보, 영화관 조회를 MCP, CLI, Codex Skill로 연결하는 도구입니다.
+사용자는 별도 API 키를 준비하지 않고 바로 사용할 수 있습니다.
+
+
+
+
지원 서비스
+
+
+
+
+ | 분류 |
+ 서비스 |
+ 조회 기능 |
+
+
+
+
+ | 장소 |
+ 네이버 지역 검색 |
+ 음식점, 카페, 디저트, 주변 장소 |
+
+
+ | 교통 |
+ 오피넷 |
+ 전국 평균 유가, 최저가 주유소, 위치 기반 주유소, 주유소 상세정보 |
+
+
+ | 비교 |
+ 다이소, GS25, 세븐일레븐, 이마트24 |
+ 같은 상품의 판매처별 가격 후보 비교 |
+
+
+ | 운영 |
+ Supabase |
+ MCP 오류, 개선 요청, 신규 기능 요청 저장 |
+
+
+ | 리테일 |
+ 다이소, 올리브영 |
+ 상품, 매장, 재고 |
+
+
+ | 편의점 |
+ GS25, 세븐일레븐, CU, 이마트24 |
+ 상품, 매장, 재고, 인기검색어, 카탈로그 |
+
+
+ | 영화관 |
+ CGV, 메가박스, 롯데시네마 |
+ 극장, 영화, 시간표, 잔여 좌석 |
+
+
+
+
+
+
+[](https://opensource.org/licenses/MIT)
+[](https://workers.cloudflare.com/)
+[](https://modelcontextprotocol.io/)
+[](https://github.com/hmmhmmhm/daiso-mcp/actions/workflows/coverage.yml)
+[](https://github.com/hmmhmmhm/daiso-mcp/actions/workflows/coverage.yml)
+[](https://aka-page.betteruptime.com/)
+
+**[실시간 서비스 상태 보기](https://aka-page.betteruptime.com/)**
+
+
+
Cloudflare 요청 수 (2026-09-07 ~ 2026-10-06, 30일)
+
+

+
+
기준 워커: daiso-mcp · 마지막 갱신: 2026-10-07 05:21 KST
+
집계: Worker 실행 + 루트 GET 리디렉션 요청 · 사용자 수와 다릅니다.
+
+
+
+> [!IMPORTANT]
+> 최근 공개 서버 사용량이 크게 증가하여 2026년 7월 18일부터 올리브영·CGV·CU·GS25의 검색을 포함한 공개 GET API에 IP당 하루 합산 3,000회(KST 기준)의 호출 제한을 적용합니다. 한도를 초과하는 사용이 필요하다면 Daiso MCP는 오픈 소스이므로 이 저장소를 직접 배포해 이용해 주세요.
+
+\n\n', '')
+ .replace('../../assets/analytics/', './assets/analytics/')
+ .replace(README_END, `
\n\n${README_END}`);
+ await updateReadme(publicSection, publicReadmePath);
+ }
console.log(
`[workers-chart] script=${scriptName} days=${points.length} total=${formatNumber(payload.total)}`,
diff --git a/tests/scripts/repository-config.test.ts b/tests/scripts/repository-config.test.ts
index 0a717ada..84a0527b 100644
--- a/tests/scripts/repository-config.test.ts
+++ b/tests/scripts/repository-config.test.ts
@@ -204,7 +204,7 @@ describe('repository maintenance configuration', () => {
expect(workflow).toContain('CLOUDFLARE_ZONE_ID');
expect(workflow).toContain('WORKERS_CHART_ROOT_REDIRECT_START');
expect(workflow).toContain(
- 'git add scripts/ops/README.md assets/analytics/workers-invocations.json assets/analytics/workers-invocations.png',
+ 'git add README.md scripts/ops/README.md assets/analytics/workers-invocations.json assets/analytics/workers-invocations.png',
);
expect(workflow).toContain('git pull --rebase --autostash origin main');
expect(workflow).toContain('git push origin HEAD:main');
@@ -298,7 +298,11 @@ describe('repository maintenance configuration', () => {
expect(readme).toContain('Daiso MCP 및 Skill');
expect(readme).toContain('skills/daiso-cli/SKILL.md');
expect(readme).toContain('npx daiso');
- const fastStart = readme.split('\n').slice(0, 100).join('\n');
+ const fastStart = readme
+ .slice(readme.indexOf('다이소·편의점 재고'))
+ .split('\n')
+ .slice(0, 100)
+ .join('\n');
expect(fastStart).toContain('https://mcp.aka.page');
expect(fastStart).toContain('Streamable HTTP');
expect(fastStart).toContain('API 키·토큰·OAuth 설정 불필요');
@@ -307,7 +311,7 @@ describe('repository maintenance configuration', () => {
expect(fastStart).toContain('"method":"tools/call"');
expect(fastStart).toContain('"name":"daiso_search_products"');
expect(fastStart).toContain('"query":"수납박스"');
- expect(readme).not.toContain('WORKERS_INVOCATIONS_CHART:START');
+ expect(readme).toContain('WORKERS_INVOCATIONS_CHART:START');
expect(readme).toContain('scripts/ops/README.md');
});
diff --git a/tests/scripts/workers-chart-entrypoint.test.ts b/tests/scripts/workers-chart-entrypoint.test.ts
index cff51480..20f03f1b 100644
--- a/tests/scripts/workers-chart-entrypoint.test.ts
+++ b/tests/scripts/workers-chart-entrypoint.test.ts
@@ -137,4 +137,24 @@ describe('workers chart entrypoint', () => {
expect(readme.endsWith('\n\n## Footer\n')).toBe(true);
expect(readme).toContain('Worker 실행 + 루트 GET 리디렉션 요청');
});
+ it('상단 README 차트도 갱신하며 기존 중앙 정렬과 뒤 이미지를 보존한다', async () => {
+ const { root, dataPath } = await fixture();
+ const prefix = '# Header\n
\n';
+ const suffix = '\n

\n
\n## Quick start\n';
+ await fs.writeFile(
+ path.join(root, 'README.md'),
+ prefix +
+ '\nold chart\n
\n> quota\n
\n' +
+ suffix,
+ );
+ run(root, { WORKERS_CHART_INPUT_JSON: dataPath });
+ const readme = await fs.readFile(path.join(root, 'README.md'), 'utf8');
+ expect(readme.startsWith(prefix)).toBe(true);
+ expect(readme.endsWith(suffix)).toBe(true);
+ expect(readme).toContain('./assets/analytics/workers-invocations.png');
+ expect(readme).not.toContain('old chart');
+ expect(readme.match(/
/g)).toHaveLength(2);
+ expect(readme.match(/<\/div>/g)).toHaveLength(2);
+ expect(readme).toContain('IP당 하루 합산 3,000회');
+ });
});