curl -L -o sitemap-parser.skill "https://aiskillstore.io/v1/agent/skills/b71dbb30-c3f9-40ef-a089-991f0d1bea1d/download?platform=ClaudeCode"
{
"tool": "download_skill",
"arguments": {
"skill_id": "b71dbb30-c3f9-40ef-a089-991f0d1bea1d",
"platform": "ClaudeCode"
}
}
{
"mcpServers": {
"skill-store": {
"url": "https://aiskillstore.io/mcp/"
}
}
}
Sitemap parser with 4 actions: fetch_via_robots, parse, detect, audit. Zero external deps, robots.txt auto-discovery, Korean URL encoding, 10+ audit rules.
Compatible Platforms any
Findings: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)"]
✅ No security risks found.
AI Review Stage
제공된 스킬 메타데이터, 코드 파일, 정적 분석 결과를 바탕으로 'sitemap-parser' 스킬의 안전성을 검토했습니다. 1. **선언된 permissions(network/filesystem/subprocess)과 실제 코드가 일치하는가?** * `network: true`: `lib/fetcher.py` 모듈에서 `urllib.request`를 사용하여 HTTP(S) 통신을 수행합니다. 이는 `domain_url` 및 `sitemap_url`을 통해 robots.txt 및 sitemap 파일을 가져오는 스킬의 핵심 기능에 필수적이며, 선언된 권한과 일치합니다. * `filesystem: false`: `os.path`는 모듈 로딩 경로 설정에만 사용되며, 임의의 파일 읽기/쓰기(`open()`, `read()`, `write()`)와 같은 파일 시스템 접근은 코드에서 발견되지 않았습니다. 선언된 권한과 일치합니다. * `subprocess: false`: `subprocess` 모듈이나 `os.system()`과 같은 외부 프로세스 실행 코드는 발견되지 않았습니다. 선언된 권한과 일치합니다. 2. **악의적 목적의 코드가 있는가? (데이터 탈취, 시스템 파괴, 난독화 등)** * 코드 전반에 걸쳐 악의적인 행위를 유발할 수 있는 패턴(예: 데이터 탈취 시도, 시스템 명령 실행, 불필요한 외부 통신)은 발견되지 않았습니다. * `lib/fetcher.py`에서 네트워크 요청 시 5초 타임아웃, 20MB 최대 바이트 제한, 5회 리다이렉트 제한 등 안전 장치가 잘 구현되어 있습니다. * XML 파싱은 Python 표준 라이브러리인 `xml.etree.ElementTree`를 사용하며, 기본적으로 XXE(XML External Entity) 공격에 안전합니다. * `filter_pattern` 입력은 정규식을 허용하여 ReDoS(Regular Expression Denial of Service) 공격의 잠재적 위험이 있으나, Python의 `re` 모듈은 C로 구현되어 있어 일반적으로 성능이 우수하며, 공격 성공 시에도 스킬 호출 타임아웃으로 제한될 가능성이 높습니다. 이는 해당 유형의 스킬에서 허용 가능한 수준의 위험으로 판단됩니다. * 정적 분석 결과에서도 난독화나 금지된 실행 파일이 발견되지 않았습니다. 3. **선언되지 않은 외부 통신이 있는가?** * 모든 외부 통신은 `urllib.request`를 통해 사용자 입력으로 제공된 URL(robots.txt, sitemap)에 대한 요청으로 제한됩니다. 스킬의 기능과 무관한 다른 외부 서버로의 통신은 발견되지 않았습니다. 4. **사용자 데이터를 무단으로 수집하거나 전송하는가?** * 스킬은 `domain_url`, `sitemap_url`, `sitemap_content`, `filter_pattern` 등 스킬의 기능 수행에 필요한 입력 데이터만을 처리합니다. 사용자 IP 주소나 시스템 정보 등 불필요한 데이터를 수집하거나 외부로 전송하는 행위는 발견되지 않았습니다. 5. **코드 품질이 스킬의 목적과 일치하는가?** * 코드는 `main.py`와 `lib` 패키지로 잘 구조화되어 있으며, 함수명과 변수명이 명확하고 주석이 잘 작성되어 있습니다. * 네트워크 요청 및 XML 파싱 과정에서 적절한 오류 처리 로직이 구현되어 있습니다. * 'Zero external deps'라는 설명과 같이 Python 표준 라이브러리만을 사용하여 의존성 관리가 명확합니다. * 전반적인 코드 품질은 스킬의 목적(sitemap 파싱 및 감사)을 달성하기에 충분히 높습니다. 종합적으로 판단할 때, 이 스킬은 선언된 보안 정책을 준수하며 악의적인 의도를 가진 코드를 포함하고 있지 않습니다. 따라서 안전하게 서비스에 공개될 수 있습니다.
Representative input/output examples for this skill. Agents can use these to understand how to invoke the skill and what output to expect.
robots.txt 자동 탐색으로 sitemap 발견 및 URL 수집 / Discover sitemaps via robots.txt and collect URLs
{
"action": "fetch_via_robots",
"domain_url": "https://example.com",
"follow_index": true,
"max_urls": 100
}
{
"action": "fetch_via_robots",
"all_urls": [
{
"changefreq": "weekly",
"lastmod": "2024-01-15",
"loc": "https://example.com/",
"priority": "1.0"
},
{
"changefreq": "monthly",
"lastmod": "2024-01-10",
"loc": "https://example.com/about",
"priority": "0.8"
}
],
"meta": {
"domain_url": "https://example.com",
"fetched_at": "2024-01-15T12:00:00Z",
"follow_index": true,
"max_urls": 100,
"sitemaps_processed": 1
},
"robots_url": "https://example.com/robots.txt",
"sitemaps_found": [
"https://example.com/sitemap.xml"
],
"total": 2
}
XML urlset sitemap 직접 파싱 / Parse an XML urlset sitemap directly
{
"action": "parse",
"max_urls": 500,
"sitemap_url": "https://example.com/sitemap.xml"
}
{
"action": "parse",
"meta": {
"filter_pattern": null,
"sitemap_url": "https://example.com/sitemap.xml",
"source": "url"
},
"sitemap_type": "urlset",
"stats": {
"filtered_out": 0,
"total": 2,
"with_changefreq": 2,
"with_lastmod": 2,
"with_priority": 2
},
"total": 2,
"urls": [
{
"changefreq": "daily",
"lastmod": "2024-01-15",
"loc": "https://example.com/",
"priority": "1.0"
},
{
"changefreq": "weekly",
"lastmod": "2024-01-14",
"loc": "https://example.com/blog/",
"priority": "0.8"
}
]
}
RSS 피드를 sitemap으로 파싱 (URL 추출) / Parse an RSS feed as a sitemap to extract URLs
{
"action": "parse",
"filter_pattern": "/post-",
"sitemap_content": "\u003c?xml version=\"1.0\"?\u003e\n\u003crss version=\"2.0\"\u003e\n \u003cchannel\u003e\n \u003ctitle\u003eMy Blog\u003c/title\u003e\n \u003citem\u003e\u003ctitle\u003ePost 1\u003c/title\u003e\u003clink\u003ehttps://blog.example.com/post-1\u003c/link\u003e\u003cpubDate\u003eMon, 15 Jan 2024 00:00:00 +0000\u003c/pubDate\u003e\u003c/item\u003e\n \u003citem\u003e\u003ctitle\u003ePost 2\u003c/title\u003e\u003clink\u003ehttps://blog.example.com/post-2\u003c/link\u003e\u003cpubDate\u003eSun, 14 Jan 2024 00:00:00 +0000\u003c/pubDate\u003e\u003c/item\u003e\n \u003c/channel\u003e\n\u003c/rss\u003e\n"
}
{
"action": "parse",
"meta": {
"filter_pattern": "/post-",
"sitemap_url": null,
"source": "content"
},
"sitemap_type": "rss",
"stats": {
"filtered_out": 0,
"total": 2,
"with_changefreq": 0,
"with_lastmod": 2,
"with_priority": 0
},
"total": 2,
"urls": [
{
"changefreq": "",
"lastmod": "2024-01-15T00:00:00+00:00",
"loc": "https://blog.example.com/post-1",
"priority": ""
},
{
"changefreq": "",
"lastmod": "2024-01-14T00:00:00+00:00",
"loc": "https://blog.example.com/post-2",
"priority": ""
}
]
}
응답 바이트로 sitemap 형식 자동 감지 / Auto-detect sitemap format from content
{
"action": "detect",
"sitemap_content": "\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003csitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\u003e\n \u003csitemap\u003e\u003cloc\u003ehttps://example.com/sitemap-pages.xml\u003c/loc\u003e\u003c/sitemap\u003e\n\u003c/sitemapindex\u003e\n"
}
{
"action": "detect",
"meta": {
"confidence": "high",
"detection_method": "xml_root_tag"
},
"sitemap_type": "sitemapindex"
}
sitemap 위생 검사 — 10+ 규칙으로 SEO·구조 이슈 탐지 / Audit sitemap for SEO and structural issues
{
"action": "audit",
"sitemap_url": "https://example.com/sitemap.xml"
}
{
"action": "audit",
"issues": [
{
"category": "QUAL",
"fix_hint": {
"action": "Add \u003clastmod\u003eYYYY-MM-DD\u003c/lastmod\u003e to each \u003curl\u003e entry",
"doc_ref": "https://www.sitemaps.org/protocol.html#lastmoddef",
"example": "\u003clastmod\u003e2024-01-15\u003c/lastmod\u003e",
"summary": "lastmod \ud544\ub4dc\ub97c \ucd94\uac00\ud558\uc138\uc694 / Add lastmod field"
},
"location": "urlset/url[3]",
"message": "lastmod \ud544\ub4dc\uac00 \ub204\ub77d\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uac80\uc0c9\uc5d4\uc9c4 \ud06c\ub864 \uc6b0\uc120\uc21c\uc704 \uacb0\uc815\uc5d0 \ud65c\uc6a9\ub429\ub2c8\ub2e4. / lastmod field is missing; used by search engines for crawl prioritization.",
"rule": "QUAL_MISSING_LASTMOD",
"severity": "warning"
},
{
"category": "SEO",
"fix_hint": {
"action": "Replace http:// with https:// in all \u003cloc\u003e values",
"doc_ref": "https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap",
"example": "https://example.com/page",
"summary": "HTTPS\ub85c \ubcc0\uacbd\ud558\uc138\uc694 / Change URL to HTTPS"
},
"location": "urlset/url[5]/loc",
"message": "URL\uc774 HTTPS\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. / URL does not use HTTPS.",
"rule": "SEO_NO_HTTPS",
"severity": "error"
}
],
"meta": {
"issue_count": 2,
"rules_applied": 11,
"sitemap_type": "urlset",
"sitemap_url": "https://example.com/sitemap.xml",
"total_urls_checked": 10
},
"score": 72
}
All examples are also available via the agent API:
/v1/agent/skills/b71dbb30-c3f9-40ef-a089-991f0d1bea1d/schema
No reviews yet. Be the first to leave one!