Repository navigation
Expand file tree
/
Copy pathdiscovery.ts
More file actions
97 lines (94 loc) · 5.64 KB
/
Copy pathdiscovery.ts
File metadata and controls
97 lines (94 loc) · 5.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import {
buildAgentStartText,
WEB_READ_RULE,
ROUTE_SELECTION_TEXT,
IMAGE_SOURCE_RULE,
EXECUTION_EVIDENCE_RULE,
AGENT_GUIDE_STAMP,
WEB_SEARCH_DESCRIPTION,
AGENT_GUIDE_PATH,
} from './agentStart.js';
const BASE = 'https://mcp.aka.page';
/** 레지스트리 설명이 HTML로 해석되지 않도록 이스케이프합니다. */
function escapeHtml(value: string): string {
return value
.replaceAll('&', '&')
.replaceAll('<', '<')
.replaceAll('>', '>')
.replaceAll('"', '"')
.replaceAll("'", ''');
}
/** 배포마다 현재 레지스트리에서 정적 발견 자산을 생성합니다. */
export function buildDiscoveryAssets(info: {
services: { name: string }[];
tools: string[];
}): Record<string, string> {
const services = info.services.map((service) => escapeHtml(service.name)).join(' · ');
const firstQuery = '/browse/quick';
return {
'discovery.html': `<!doctype html>
<html lang="ko"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>DAISO MCP: 설치 없이 상품·매장·재고 조회</title>
<meta name="description" content="${escapeHtml(WEB_SEARCH_DESCRIPTION)}">
<meta name="robots" content="index,follow"><link rel="canonical" href="${BASE}/">
<link rel="alternate" type="text/plain" href="${BASE}${AGENT_GUIDE_PATH}" title="에이전트 시작 안내">
<style>body{font-family:system-ui,sans-serif;max-width:760px;margin:48px auto;padding:0 24px;line-height:1.7;color:#18222c;background:#fafafa}h1{line-height:1.3}a{color:#075bb5}pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#edf1f5;padding:16px;border-radius:8px}code{font-size:.9em}section{margin:32px 0}footer{border-top:1px solid #d8dee5;padding-top:20px}</style>
</head><body><main>
<h1>DAISO MCP</h1><p>${escapeHtml(AGENT_GUIDE_STAMP)} · <a href="${AGENT_GUIDE_PATH}">현재 버전 안내</a> · <a href="/guide/latest">항상 최신 안내로 이동</a></p><p>설치 없이 상품·매장·재고와 영화관 정보를 조회하세요. 사용자 API 키나 로그인 없이 쓸 수 있는 공개 서비스입니다.</p>
<p>${escapeHtml(WEB_SEARCH_DESCRIPTION)}</p>
<section id="web-start"><h2>ChatGPT에서 바로 조회하기</h2><p><a href="${escapeHtml(firstQuery)}">상품·매장·재고 웹 조회 시작</a></p><p>빠른 상품 검색과 지역 선택에서 요청과 일치하는 단어를 통째로 선택하세요. 목록 밖 입력만 글자 링크를 쓰고 재고가 목적이면 상품 카드의 매장 지역 선택을 바로 여세요. 이전 HTML은 같은 조건으로 새 응답 확인 링크로 구분합니다. 원본 API 캐시는 유지됩니다.</p>
<p>위 링크는 셸·설치 없이 웹 읽기로 호출하는 공개 REST GET의 HTML 결과입니다. <a href="/browse">모든 서비스의 /browse/ 경로</a>는 자동 HTML이며 쿼리 문자열은 필요 없습니다. 검색한 상품의 실제 ID로 재고를 조회하세요. 상품 검색만으로 매장 재고를 단정하지 마세요.</p></section>
<p><strong>${escapeHtml(WEB_READ_RULE)}</strong></p>
<section><h2>에이전트에서 설치 없이 사용하기</h2><p>원격 MCP 주소: <code>${BASE}</code><br>전송: Streamable HTTP · 인증: 없ì
6720
�Œ</p>
<p>${escapeHtml(ROUTE_SELECTION_TEXT).replaceAll('\n', '<br>')}</p>
<p><strong>${escapeHtml(IMAGE_SOURCE_RULE)}</strong></p>
<p>${escapeHtml(EXECUTION_EVIDENCE_RULE)}</p>
<p>웹 읽기 기능으로 이 페이지를 읽는 것만으로 MCP 연결이 생기지는 않습니다. 연결된 MCP 도구가 없고 웹 읽기가 가능하면 셸 유무와 무관하게 위 HTML REST 링크를 바로 여세요. 오류를 상품 없음으로 해석하지 마세요.</p>
<p><a href="${AGENT_GUIDE_PATH}">짧은 시작 안내 (현재 버전)</a> · <a href="/prompt">전체 API 사용 안내</a> · <a href="/root.json">개발자용 서비스·도구 목록 JSON</a></p></section>
<section><h2>지원 서비스</h2><p>${services}</p></section>
<footer><a href="https://github.com/hmmhmmhm/daiso-mcp">GitHub 문서와 소스</a> · <a href="/privacy">개인정보 처리방침</a></footer>
</main></body></html>\n`,
'root.json': JSON.stringify(info, null, 2) + '\n',
'llms.txt': buildAgentStartText(BASE),
'robots.txt':
'# 공개 검색 및 AI 에이전트의 읽기를 허용합니다.\n' +
[
'*',
'ChatGPT-User',
'OAI-SearchBot',
'GPTBot',
'CCBot',
'anthropic-ai',
'Claude-Web',
'Claude-User',
'Claude-SearchBot',
'Google-Extended',
'PerplexityBot',
'Perplexity-User',
'Applebot-Extended',
]
.map((bot) => `User-agent: ${bot}\nAllow: /\n`)
.join('\n') +
`\nSitemap: ${BASE}/sitemap.xml\n# 에이전트 안내: ${BASE}${AGENT_GUIDE_PATH}\n# 최신 안내 연결: ${BASE}/guide/latest\n`,
'sitemap.xml':
'<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n' +
[
'/',
'/browse',
'/browse/compose',
'/browse/daiso/products/%ED%95%AB%EC%8B%9D%EC%8A%A4',
'/browse/daiso/stores/%EA%B0%95%EB%82%A8',
AGENT_GUIDE_PATH,
'/guide/latest',
'/llms.txt',
'/prompt',
'/root.json',
'/privacy',
]
.map((path) => `<url><loc>${BASE}${path}</loc></url>`)
.join('\n') +
'\n</urlset>\n',
_headers:
'/*\n Access-Control-Allow-Origin: *\n Cache-Control: public, max-age=300\n X-Content-Type-Options: nosniff\n/llms.txt\n Content-Type: text/plain; charset=utf-8\n Cache-Control: no-store\n/discovery.html\n Cache-Control: no-store\n/robots.txt\n Content-Type: text/plain; charset=utf-8\n',
};
}