Skip to main content
Glama

krds-a11y-mcp

CI npm License: MIT KRDS: KOGL Type 1

KRDS(범정부 UI/UX 디자인 시스템) 컴포넌트를 KWCAG 2.2 접근성 조건과 함께 공급하고, 위반이 남으면 AI의 작업 종료를 막는 MCP 서버.

An MCP server that supplies KRDS (Korea Government Design System) components with KWCAG 2.2 accessibility built in, and keeps AI agents from finishing while accessibility violations remain.

  • 공급 — 접근성 조건을 갖춘 KRDS 부품·템플릿을 준다. 레이블·대체 텍스트 같은 필수 입력을 안 채우면 마크업을 주지 않는다

  • 검사 — 렌더된 페이지를 axe와 자체 실측(명도 대비, 키보드, 화면에 안 그려진 요소)으로 검사해 KWCAG 번호로 보고한다

  • 강제 — Claude Code·Codex 훅이 위반이 남은 채 작업을 끝내지 못하게 막는다

정직한 범위: 자동 판정은 접근성 이슈의 3~4할이다. 이 도구는 "심사 통과 보장"이 아니라 심사 전 자가진단 + 증빙 생성 도구다. KWCAG 최종 판정 기준은 전문가 심사와 보조기술(스크린리더) 실사용 평가이며, 자동 도구는 이를 대체하지 못한다.

왜 만들었나

공공 웹은 KRDS와 KWCAG 2.2(웹 접근성 국가표준, 33개 검사항목)를 함께 지켜야 한다. 그런데

  • KRDS 공식 패턴 샘플 33종을 전수 검사하면 33종 모두에서 접근성 문제가 나온다. 샘플을 복사하는 것만으로는 준수가 안 된다

  • axe 같은 자동 검사기는 WCAG 번호로 보고해 KWCAG 기준 심사·보고서와 번호가 맞지 않는다

  • 검사는 보통 개발이 끝난 뒤에 해서 교정 왕복 비용이 크다

그래서 "검사해서 고치는" 대신 처음부터 KWCAG 조건이 들어간 KRDS 마크업을 공급하고, 검사는 조립·변환 과정에서 깨진 것을 잡는 안전망으로 둔다. 안전망은 지시가 아니라 훅으로 강제한다.

Related MCP server: accessibility-mcp-server

빠른 시작

프로젝트 루트에서:

npx -y krds-a11y-mcp init

init이 설치하는 것 (기존 파일은 보존하고 우리 항목만 추가, 재실행해도 중복 없음):

파일

내용

.mcp.json

MCP 서버 등록 (도구 9종 + 자동 주입 사용 규칙)

.claude/settings.json

Stop 훅(위반이 남으면 작업 종료 차단) + PreToolUse 훅(금지 행동 차단)

CLAUDE.md · AGENTS.md

핵심 사용 규칙 (Codex 등 타 AI 도구 호환)

.codex/config.toml · .codex/hooks.json

Codex용 MCP 서버 등록과 같은 두 훅

설치 후 처음 한 번:

  • Claude Code — 프로젝트를 열고 MCP 서버를 승인한다

  • Codex — 프로젝트를 신뢰(trust)하고 /hooks에서 krds-a11y 훅 2개를 승인한다. 훅 내용이 바뀌면 다시 승인해야 한다

재검사(validate_page)까지 쓰려면 브라우저 검사 스택을 한 번 설치한다. 없으면 도구가 이 안내를 그대로 돌려준다.

pnpm add -D playwright @axe-core/playwright
npx playwright install chromium
claude mcp add krds-a11y -- npx -y krds-a11y-mcp

또는 .mcp.json:

{
  "mcpServers": {
    "krds-a11y": { "command": "npx", "args": ["-y", "krds-a11y-mcp"] }
  }
}

훅은 아래 하네스 절의 설정을 붙인다.

사용 흐름

사용자: "로그인 페이지 만들어줘"
  → AI가 get_page_scaffold(pattern: "login-id", withSiteChrome: true, ...) 호출
  → 필수 입력(페이지 제목 등)이 비면 도구가 거부하고 되물음
  → 접근성 교정이 내장된 완성 마크업 수신, 콘텐츠 교체

AI가 작업을 끝내려 할 때
  → Stop 훅이 검사 기록을 판정
  → 검사가 없거나 위반이 남았으면 종료 거부 + 교정 지시
  → AI가 validate_page로 검사하고 위반 위치·교정 방법대로 고친 뒤 다시 검사

도구 9종

도구

시점

하는 일

list_components

탐색

KRDS 컴포넌트 43종 색인. 변형 없이 부를 때 채워야 하는 필수 입력 수, 변형 전용·해당 시 입력은 따로 표기

get_component

부품 공급

컴포넌트 마크업 + 보장 항목 + 필수 입력 강제. 필수 입력(레이블 등)을 안 채우면 마크업을 주지 않는다. 반복 항목은 객체 배열(crumbs: [{crumbLabel, href}])로 받는다. 킷 결함이 알려진 부품(탭 등)은 교정본을, 폼 부품은 필수 표시·오류 연결 지침을, JS 동작 부품은 상태 클래스·초기화·끄는 법·라우트 전환 뒤 재초기화를 함께 준다. breadcrumb·pagination·radio_button·checkbox·text_input·select는 입력값을 교정본 구조에 넣은 마크업을 생성한다(required·errorMessage·checked·currentPage 상태 입력)

get_requirements

설계·리뷰

마크업 없이 접근성 요건만 조회

get_page_scaffold

페이지 생성

KRDS 공식 패턴 기반 템플릿 13종(로그인 3·신청 5·검색 1·메인 1·서브 1·게시판 2) 또는 빈 뼈대. withSiteChrome: true면 정부 배너·헤더·푸터를 코드로 조립한다. siteMenu(1~3단계)·orgName·logoSrc로 헤더 메뉴·모바일 전체메뉴·로고 교체 CSS까지 만든다. output: "parts"면 head·header·main·footer·scripts 조각으로 나눠 준다 (JSP include, 레이아웃 컴포넌트)

get_tokens

스타일

킷 디자인 토큰(색·간격·글자 크기 768개) 검색. 임의 hex 대신 토큰을 쓰게 한다

get_framework_guide

React·Next.js

킷 JS가 SPA에서 죽는 문제(DOMContentLoaded 1회 초기화)의 검증된 처방. 라우트 전환 뒤 재초기화 훅 포함

get_icon_fix_css

교정

킷 아이콘 경로 버그(206곳 404) 전면 교정 CSS

validate_page

완성 후

렌더된 페이지를 브라우저로 재검사. axe 전수 → KWCAG 33항목 번역, 명도 대비 실측, 키보드 검사(실제 Tab 순회, 탭 화살표·펼침·모달 초점/Escape 같은 위젯 조작), 사이트 공통부 누락, KRDS 사용 문제(부품 재발명·킷 스타일 조작·오류 메시지 연결 누락·라디오 그룹 이름 누락·모달 배치), 레거시 CSS의 킷 침투, 페이지 문제(리소스 404·가로 넘침·한글 깨짐·화면에 안 그려진 조작 요소). 위반 규칙별 교정 방법을 제시하고 리포트·스크린샷을 reports/에 남긴다. actions(클릭·키 입력·값 입력)로 모달 열림·오류 표시 같은 상태 화면을, screen으로 화면 이름별 기록을, sourceDir로 dev 서버 url 검사의 낡음 판정을 지원한다

inspect_page

확인

요소의 색·배치·간격(margin·padding·gap)·폰트 적용 여부를 실측 조회

AI에게 주는 세부 사용 규칙은 MCP 연결 시 서버 instructions로 자동 전달된다(원본: src/server/index.ts의 SERVER_INSTRUCTIONS). init이 만드는 CLAUDE.md·AGENTS.md에는 핵심 요약만 마커 구간으로 들어간다.

하네스 — 위반이 남으면 끝내지 못하게

"완성하면 검사하라"는 지시는 따를 때도 건너뛸 때도 있다. 그래서 판정을 훅으로 옮겼다.

gate — 판정 명령

reports/의 검사 기록을 읽어 위반이 남았는지, 검사 뒤에 페이지가 바뀌었는지(낡음)를 판정한다. 판정 로직은 이 명령 한 곳에만 있고 훅과 CI가 같이 쓴다.

npx krds-a11y-mcp gate              # 사람용 요약
npx krds-a11y-mcp gate --json       # 훅·CI용 구조화 출력
npx krds-a11y-mcp gate --only form  # 지정 화면만 (반복 가능)

종료 코드

뜻

다음 행동

0

전 화면 위반 0, 검사 최신

없음

1

위반 잔존 또는 사이트 공통부(헤더·푸터) 누락

교정 후 재검사. 일부러 공통부를 뺀 페이지는 data-krds-a11y="no-chrome"

2

검사 기록 없음·낡음·검사 무효(킷 CSS 미로드, 상호작용 실패 등)

validate_page 실행

url 검사는 validate_page에 sourceDir을 넘기면 그 아래 소스 수정 시각으로 낡음을 판정한다. 넘기지 않으면 "판정 불가"로 표기한다(통과로 꾸미지 않는다).

stop-hook — 작업 종료 차단

AI가 작업을 끝내려는 순간 gate를 판정해, 위반·공통부 누락·낡음이 남으면 종료를 거부하고 교정 지시를 모델에게 전달한다. 통과할 때까지 반복하고, 상한(기본 5회)을 넘으면 "자동 교정 실패, 사람 확인 필요"를 남기고 풀어준다. 검사 기록이 하나도 없는 프로젝트는 막지 않는다(페이지 작업이 없던 세션의 오탐 방지).

{
  "hooks": {
    "Stop": [{ "hooks": [{ "type": "command", "command": "npx -y krds-a11y-mcp stop-hook" }] }]
  }
}

pretool-hook — 금지 행동 사전 차단

파일을 쓰기 직전에 세 가지를 막는다. 실사용 테스트에서 실제로 관찰된 행동들이다.

  • 프로젝트 폴더에 임시 검사 스크립트 생성(.axe-check.mjs류) → validate_page·inspect_page가 대체

  • 킷 원본(node_modules/krds-uiux) 수정 → 재설치로 사라지고 보증 근거가 훼손된다

  • 문서루트로 복사한 킷(webapp/krds-uiux 등) 수정 → npm 킷과 조용히 어긋난다. 교정은 별도 CSS로

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [{ "type": "command", "command": "npx -y krds-a11y-mcp pretool-hook" }]
      }
    ]
  }
}

시스템 임시 디렉터리의 일회용 스크립트와 .eslintrc.js 같은 정상 설정 파일은 막지 않는다. Bash 경유 수정은 범위 밖이다(파일 쓰기 도구만 본다).

Codex

init이 .codex/hooks.json에 같은 두 훅을 건다. PreToolUse 대상은 apply_patch|Edit|Write이고, 패치 본문의 모든 경로를 뽑아 하나라도 금지 대상이면 패치 전체를 막는다.

  • 프로젝트 신뢰와 /hooks 승인 전에는 설정도 훅도 읽히지 않는다

  • codex exec(비대화형)에서는 훅이 실행되지 않는다. 자동화로 돌린다면 gate를 CI에서 따로 호출해야 한다

템플릿이 보장하는 것과 지켜야 하는 것

템플릿은 KRDS 공식 패턴 샘플을 전수 검사해 나온 문제를 교정해 만들었다(감사 기록: docs/mapping/pattern-audit.md). 게시판 2종은 공식 샘플이 없어 하위 페이지 틀에 킷 부품을 조립했다. 보장이 유지되는 조건:

  1. 구조·클래스·속성(aria 포함)을 유지한 채 렌더된 DOM이 템플릿과 같을 것. React/Vue/JSP 변환은 자유지만 래퍼 요소를 끼우지 않는다

  2. 스타일은 킷 CSS와 동봉 CSS를 그대로 로드. Tailwind 등으로 재작성하지 않고 공존만 한다

  3. 콘텐츠는 자유, 단 조건부 항목(alt·레이블 등)은 반드시 채운다. 도구가 생성 단계에서 강제한다

  4. 시안은 배치·구성만 참고. 색·타이포는 킷 토큰을 쓴다

  5. 데모 플레이스홀더(href="#")는 실제 URL로 바꾼다

요약하면 ⑴ 접근성 교정분은 불변 ⑵ 화면 구조는 기본값(명시 요구 시에만 이탈) ⑶ 콘텐츠·문구는 자유.

데이터의 근거

  • 매핑표 — KRDS 컴포넌트 43종 × KWCAG 33항목을 자동 충족·조건부·범위 밖으로 분류(docs/mapping/). 근거는 공식 킷(KRDS-uiux)의 실제 파일이며 판정마다 출처(파일·행)를 남긴다. 확신이 없으면 미확정으로 둔다

  • KWCAG↔WCAG↔axe 번역표 — 커버리지 완전 1 / 부분 19 / 불가 13. 불가 13항목은 리포트에 수동 체크리스트와 확인 매뉴얼로 내보낸다

  • 킷 결함 기록 — 아이콘 경로, 셀렉트 기본색 대비, 탭 role 등 공식 킷의 알려진 결함과 처리는 docs/mapping/kit-bugs.md

개발

pnpm install
pnpm test             # vitest
pnpm typecheck        # tsc --noEmit
pnpm build            # tsup → dist/

pnpm build:previews   # 템플릿 프리뷰 생성
pnpm scan:axe         # 전 템플릿 axe 전수 (위반 시 exit 1)
pnpm verify:a11y      # 키보드 전수·접근성 트리 검증

검사 기능 테스트에는 Chromium이 필요하다(pnpm exec playwright install chromium).

라이선스

  • 이 저장소의 코드: MIT

  • KRDS 유래 자료(템플릿의 공식 패턴 교정본·발췌 레이아웃 CSS·패턴 이미지, 킷 마크업 인용)는 공공누리 제1유형을 따른다. 출처 표기는 NOTICE에 있다

Available Tools

9 tools
get_componentKRDS 컴포넌트 공급A

KRDS 컴포넌트의 킷 마크업과 접근성 요건을 반환한다. 이 컴포넌트가 보장하는 KWCAG 항목, 사용자가 반드시 채워야 하는 값(필수 입력), 그리고 페이지 조립 후 따로 확인해야 하는 항목을 함께 알려준다. 필수 입력을 채우지 않으면 마크업 대신 무엇을 채워야 하는지 안내한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputsNo필수 입력 값 — 필드명: 값. 배열(헤더 목록 등)은 쉼표로 이어 받는다. 반복 항목은 객체 배열로 줘도 된다 — 예: crumbs: [{crumbLabel, href}, …]. 바깥 키 이름(crumbs·items 등)은 자유이고 항목 안의 키가 필드명이다. 상태 입력: required(필수 표시)·checked(선택된 항목)는 불리언, errorMessage(오류 상태), currentPage(현재 쪽). 확인용 입력(modalPlacement·captionSync 등 구현 의무 확인)은 true를 준다. breadcrumb·pagination·radio_button·checkbox·text_input·select는 값을 넣은 마크업을 만들어 준다. 미제공 시 요건 안내만 반환하고 마크업은 주지 않는다
variantNo변형 이름 — 예: 'icon', 'size'. 킷 파일명 접미사와 같다
componentIdYes컴포넌트 id — 'krds:button' 또는 'button'

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does reasonably well: it discloses the conditional output (markup only when required inputs are supplied, otherwise fill-in guidance) and enumerates the returned artifacts. Missing permissions, rate limits, or error semantics, but the core conditional behavior is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what is returned, then the guarantees, then the fallback behavior. No filler, though the middle sentence bundles three distinct outputs into one long clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description properly explains the return payload (markup, KWCAG coverage, required inputs, post-assembly checks). Combined with a 100%-documented schema and a nested inputs object, an agent has enough to invoke it correctly, though sibling routing remains unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents componentId, variant, and the nested inputs object in detail. The description's mention of mandatory user-supplied values mirrors the inputs parameter concept but adds no format or syntax detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it returns the kit markup and accessibility requirements for a KRDS component, plus the KWCAG items it guarantees. An agent can tell this fetches a single component's definition, but the description never names or distinguishes itself from siblings like list_components or get_requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the discussed return content and the note that missing required inputs yields guidance instead of markup, but there is no explicit when-to-use statement nor any comparison against list_components, get_requirements, or validate_page. The agent must infer the correct entry point on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_framework_guideSPA 프레임워크 × 킷 충돌 가이드A

React·Next.js에서 킷을 쓸 때의 충돌(킷 JS는 DOMContentLoaded 1회 init·클라이언트 라우팅 모름)과 실사용 검증된 처방을 반환한다. 킷 위젯(탭·아코디언·GNB)이 SPA에서 동작하지 않으면 자체 해법을 발명하기 전에 이 가이드를 먼저 보라.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameworkNo프레임워크 — react(Vite 등 SPA 공통) 또는 nextjs. 비우면 목록을 안내한다

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does so well: it names the root cause (kit JS initializes once on DOMContentLoaded and is unaware of client routing) and characterizes the return as conflict diagnoses plus field-verified prescriptions. It doesn't restate read-only safety, but 'get_...guide' plus the content description make the operation type evident.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler, and the failure scenario is front-loaded before the directive. Slightly dense but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single optional-enum, no-output-schema guide tool, the description covers what it returns (conflicts + prescriptions) and when to reach for it. Return-value detail is general rather than structured, but adequate given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum values (react/nextjs) are documented in the schema, including the empty-value behavior. The description only echoes the React/Next.js scope, adding no new parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('returns conflicts and verified prescriptions for the kit in React·Next.js') and names the concrete symptoms (tabs, accordion, GNB failing in SPA), which is clearly distinct from the component-listing siblings. No explicit sibling comparison, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger condition ('if kit widgets don't work in SPA') and a strong directive to consult it before inventing a workaround. It lacks a named alternative tool, but the when-to-use context is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_icon_fix_css킷 아이콘 버그 전면 교정 CSSA

킷 v1.1.0 npm판의 아이콘 경로 버그(img/img 중복, 206곳 404)를 페이지 전체 범위로 교정하는 CSS를 반환한다. get_page_scaffold(withSiteChrome)를 쓰면 자동 주입되므로 필요 없다. 레이아웃을 직접 구성하는 프로젝트(React 레이아웃 등)에서 아이콘이 안 보일 때, 빠진 곳을 한 개씩 손으로 고치지 말고 이 전체본을 받아 교정 파일로 저장하라.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetBaseNo킷 자산 경로 (기본 node_modules/krds-uiux, 예: /krds-uiux)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden, and it delivers: it names the underlying bug, its magnitude (206 locations), the scope of the fix (whole page), and the intended artifact (save as a correction file). It stops short of describing the returned CSS structure or any size/authoring caveats, keeping it shy of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool returns, then the exclusion, then the use case. Three tight sentences with no filler, though the bug details in the opening clause are somewhat dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single optional-parameter tool with no output schema, the description explains what is produced (corrective CSS), corrects a common misuse path, and specifies the intended action. Complete enough for correct invocation, with only minor gaps around the returned payload's form.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and assetBase is already documented in the schema (default node_modules/krds-uiux). The description only alludes to the kit asset context and adds no new format or behavior detail for the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource (returns CSS that corrects the kit v1.1.0 icon path bug img/img duplication, 206 places 404) with precise scope. It explicitly distinguishes itself from the sibling get_page_scaffold, noting that tool already injects this CSS, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not (if you use get_page_scaffold withSiteChrome it is auto-injected, so not needed) and a when (projects composing layout directly, e.g. React layouts, when icons don't show). It also tells the agent what to do instead of manual per-instance fixes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_scaffoldKRDS 페이지 뼈대A

KRDS 페이지의 시작 골격을 반환한다. pattern을 지정하면 공식 KRDS 패턴 기반 완성 템플릿(접근성 교정 적용)을 주고, 미지정 시 빈 뼈대를 준다. 새 페이지를 만들 때 컴포넌트 조회보다 먼저 호출하라. 로그인·신청 등 정형 화면은 반드시 pattern을 사용하라 — 레이아웃을 직접 창작하지 않는 것이 KRDS 준수의 기본이다.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNo주 언어 코드. 기본 "ko" (kwcag:7.1.1)
slotsNo패턴 슬롯 값 — 필수 슬롯 미입력 시 무엇을 채울지 안내만 반환한다
outputNo"parts"면 조각(head·header·main·footer·scripts)으로 나눠 준다 — 여러 화면이 공통부를 공유할 때(JSP include, 정적 사이트 공통 조각, 레이아웃 컴포넌트) 손으로 떼어 내지 말고 이것을 써라. 기본 "page"
logoSrcNo기관 로고 이미지 경로 — 킷 로고(CSS 배경)를 바꾸는 CSS를 헤더·푸터에 넣는다. 고대비 모드에도 같은 이미지를 쓴다
orgNameNo기관명 — withSiteChrome의 헤더·푸터 로고 대체 텍스트가 된다(로고는 CSS 배경이라 유일한 텍스트). 실제 기관명을 넣어라
patternNoKRDS 패턴 이름 (예: "login"). 정형 화면이면 지정하라 — 완성 구조를 반환한다
homeHrefNo로고 링크 — 기본 "/"
siteMenuNowithSiteChrome의 헤더 메뉴(1~3단계) — 주면 킷 데모 메뉴(자리 문구 수십 개) 대신 이 트리로 데스크톱 메뉴와 모바일 전체메뉴를 만든다. 하위가 없는 항목은 href 필수, 하위가 있는 항목은 여닫는 버튼이 된다. 예: [{label:"민원",children:[{label:"민원 신청",href:"/apply"}]},{label:"알림",href:"/notice"}]
assetBaseNo킷 자산 경로 — 기본 "node_modules/krds-uiux". 킷을 복사·CDN으로 서빙하면 그 경로
loginHrefNo있으면 헤더에 로그인 링크를 둔다 (siteMenu와 함께)
pageTitleYes페이지 제목 — <title>과 h1에 들어간다 (kwcag:6.4.2). 비어있으면 안 된다
withCarouselNo캐러셀 사용 예정이면 true — swiper 번들 스크립트 포함
withSiteChromeNotrue면 사이트 공통부(공식 배너·헤더·푸터·운영기관 식별자)를 도구가 올바른 랜드마크 구조로 조립해 포함한다 — 직접 조립보다 이 옵션을 권장. siteMenu·orgName·logoSrc로 메뉴와 로고까지 만든다

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose key traits: output differs drastically with vs without pattern, pattern templates come with accessibility corrections already applied, and missing required slots produce guidance rather than content. It does not state side-effect/idempotency profile or the exact return shape, but for a read-only generator the disclosed behavior is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core behavior and then the mandatory rules. Every sentence carries a distinct instruction (what it returns, pattern vs no pattern, ordering vs component lookup, compliance rule); no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, nested-object tool with no output schema and no annotations, the description covers purpose, mode selection, and sequencing well. The remaining gap is the concrete return form (HTML string vs parts vs file, and how much the caller must post-process) — the `output` parameter implies it, but the description never states it directly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above baseline by giving 'pattern' real semantic weight — that it switches the tool into official-template mode with accessibility fixes and is mandatory for standard screens. The other dozen parameters (withSiteChrome, siteMenu, slots, output, etc.) are left entirely to the schema, which is adequate given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (returns the starting skeleton of a KRDS page) and immediately distinguishes the two output modes: pattern specified yields a complete accessible template, omitted yields an empty skeleton. It also positions itself relative to siblings by telling the agent to call it before component lookup, so an agent can tell it apart from get_component/list_components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing (call before component lookup when building a new page) and an explicit when-not/alternative path (do not hand-craft layouts; use pattern for standard login/apply screens). Both the trigger and the prohibited behavior are stated, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_requirements컴포넌트 접근성 요건 조회A

마크업 없이 특정 컴포넌트의 접근성 요건만 조회한다. 필수 입력 목록, 보장 항목, 위임 항목, 그리고 아직 확정되지 않은 미해결 질문까지 포함한다. 코드 리뷰나 설계 검토에 쓴다.

ParametersJSON Schema
NameRequiredDescriptionDefault
componentIdYes컴포넌트 id — 'krds:button' 또는 'button'

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the whole burden. It usefully discloses the payload composition (required inputs, guaranteed items, delegated items, unresolved questions), which is real behavioral context for a read tool. It does not state read-only/idempotency guarantees, behavior on an unknown componentId, or any error/rate-limit characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, purpose front-loaded, then return contents, then use case. No filler and no repetition of what the schema already states; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description takes on the job of describing the return payload and does so explicitly. Together with the fully covered single parameter and the named use cases, it is largely sufficient for a read-only lookup, with only edge-case behavior (invalid id, response format) left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single componentId is fully documented in the schema (including the 'krds:button' / 'button' accepted formats). The description adds no further parameter semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (조회) and resource (특정 컴포넌트의 접근성 요건), and explicitly scopes out markup ("마크업 없이 ... 요건만"), which implicitly separates it from the markup-bearing get_component sibling. It never names a sibling directly, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"코드 리뷰나 설계 검토에 쓴다" supplies a usable context for when to reach for this tool, but there are no exclusions and no alternatives named (e.g., when to use get_component or list_components instead). Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tokensKRDS 디자인 토큰 조회A

킷 디자인 토큰(색·간격·글자 크기 등 CSS 커스텀 프로퍼티)을 조회한다. var() 참조는 실제 값(hex 등)까지 풀어서 준다. 커스텀 CSS에서 색·크기가 필요하면 임의 값 대신 여기서 토큰을 찾아 var()로 쓰라 — 명도 대비 등 접근성 보장이 토큰에 내장돼 있다. query 없이 부르면 분류 안내를 준다.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo검색어 — 공백 구분 낱말 전부 포함 매칭. 예: "light-color text", "pc-gap"

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it delivers real behavioral context: var() references are expanded to concrete values (hex, etc.), contrast/accessibility guarantees are baked into tokens, and a query-less call returns category guidance rather than failing. It omits error/empty-result behavior and pagination, but for a lookup tool this is solid coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what is retrieved, then the value-resolution behavior, then the usage directive, then the no-param fallback. No filler; every sentence informs a decision or expectation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description covers the key gaps: what is returned, that values are resolved, what a query-less call yields, and when to prefer it. The main residual gap is that the shape/format of the returned token list is not described, but this is minor for a simple lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (the query param already documents space-separated AND matching with examples), so the baseline is 3. The description goes beyond the schema by explaining what happens when the optional param is omitted (category guidance is returned), which is meaning the schema does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (retrieve kit design tokens — color/spacing/font-size CSS custom properties) and adds the non-obvious behavioral detail that var() references are resolved to real values. The scope is unambiguous next to siblings like get_icon_fix_css or list_components, which cover entirely different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to reach for this tool ("if you need colors/sizes in custom CSS") and warns against the alternative of hardcoding arbitrary values, plus notes that tokens carry built-in accessibility (contrast). It stops short of naming a sibling tool as the alternative, but the when/when-not framing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

inspect_page페이지 시각 상태 점검A

렌더된 페이지에서 요소의 계산 스타일(색·배경·폰트·크기·배치·margin·padding·gap)과 폰트 적용 여부를 읽는다. '이 요소가 무슨 색인가', '폰트가 진짜 적용됐나(시스템 폰트 폴백인가)', '어디에 배치됐나'를 확인할 때 임시 playwright 스크립트를 만들지 말고 이 도구를 쓴다. url 또는 filePath와 CSS 셀렉터 목록을 받는다.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo점검할 페이지 URL (http/https)
htmlNoHTML 문자열 — 최후 수단
filePathNo점검할 로컬 HTML 파일 경로
selectorsNo점검할 CSS 셀렉터 목록 (각각 첫 매칭 요소를 읽음)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It does well on what gets read (computed styles and font-application/fallback detection) but says nothing about the cost of rendering a browser page, what happens when a selector matches nothing, or how the results come back.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what is read, then the usage triggers, then the required inputs. The property enumeration is long but informative rather than wasteful; nothing reads as filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description partially compensates by listing the style properties it returns. Gaps remain around non-matching selectors, the 20-selector cap, and rendering/time cost, but for a read-only inspection tool this is close to sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents url, html, filePath and selectors, making 3 the baseline. The description restates 'url or filePath plus a selector list' but omits the html fallback parameter entirely, so it adds little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb-and-resource pair: it reads computed styles (color, background, font, size, layout, margin, padding, gap) and font-application status from a rendered page. That is precise enough to separate it from get_tokens (token values) and validate_page (assertions), though it never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete triggering questions ('what color is this element', 'is the font really applied or a system fallback', 'where is it positioned') and an anti-pattern (don't spin up a temporary playwright script). It stops short of an explicit when-not-to-use or a named alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_componentsKRDS 컴포넌트 목록A

사용 가능한 KRDS 컴포넌트 43종의 색인을 반환한다. 각 항목은 id·이름과 해당 컴포넌트에서 사용자가 반드시 채워야 하는 접근성 필수 입력의 개수를 담는다. 마크업과 상세 요건은 get_component로 조회한다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the payload shape: each entry carries id, name, and a count of mandatory accessibility inputs. It does not mention ordering, pagination, or caching, but for a zero-parameter read-only catalog the disclosed return semantics are the material trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and payload, followed immediately by the cross-reference. No filler or restated name/title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe returns, and it does so adequately by enumerating the item fields and noting the accessibility count. It is complete enough to call the tool correctly, missing only secondary details like ordering or total-count guarantees.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly implies the call is unconditional, needing no filtering input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('사용 가능한 KRDS 컴포넌트 43종의 색인을 반환한다') and even quantifies scope (43 items). It explicitly distinguishes itself from the sibling get_component, which handles markup and detailed requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative tool explicitly ('마크업과 상세 요건은 get_component로 조회한다'), giving clear routing between index-level and detail-level queries. It stops short of an explicit when-to-use trigger for the listing itself (e.g. discovery vs. validation workflows), so it is clear but not fully prescriptive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_page완성 페이지 KWCAG 재검사A

조립·변환이 끝난 페이지를 실제 브라우저로 열어 KWCAG 2.2 기준으로 재검사한다. axe-core 전수 실행을 KWCAG 33항목으로 번역하고, 보류된 명도 대비는 직접 실측하며, 수동 확인이 필요한 항목은 확인 절차와 함께 명시한다 — 자동 판정은 접근성 이슈의 일부이므로 이 도구의 통과가 심사 통과를 뜻하지 않는다. 템플릿을 프레임워크로 변환한 뒤, 페이지를 조립한 뒤, 콘텐츠를 채운 뒤에 호출하라. url(dev 서버·배포본) 또는 filePath(로컬 HTML)를 권장한다 — 상대 경로 자산이 그대로 해석된다.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNo검사할 페이지 URL (http/https)
htmlNoHTML 문자열 — 상대 경로 자산이 깨지므로 최후 수단
outDirNo리포트·스크린샷 저장 디렉터리 (기본 reports/) — 화면별 하위 폴더에 검사 이력이 쌓인다
screenNo화면 이름 — 검사 기록 폴더 이름이 된다. 같은 화면을 호스트·포트를 바꿔 검사해도 이력이 이어지고, 상태 화면(actions)은 다른 이름으로 따로 기록하라 — 예: "apply-form", "apply-form-오류". 없으면 url·파일 이름에서 만든다
actionsNo검사 전에 실행할 상호작용(순서대로, 실제 클릭·키 입력) — 모달 열림·탭 전환·오류 표시 같은 상태 화면을 검사할 때. click·fill은 selector, fill은 value, press는 key(Enter·Escape·ArrowRight 등, selector를 주면 그 요소에 초점 뒤), wait는 selector(보일 때까지) 또는 ms. 예: [{type:"click",selector:"#apply"},{type:"wait",selector:".form-hint-invalid"}]. 한 단계라도 실패하면 검사 무효로 기록돼 gate가 막는다. 임시 빌드로 초기값을 바꾸지 말고 이것을 쓴다
filePathNo검사할 로컬 HTML 파일 경로
keepRunsNo화면별로 남길 최근 검사 수 — 첫 회(기준 증빙)는 항상 따로 남기므로 결과는 첫 회 + 최근 N회(최대 N+1개)다. 미지정이면 환경 변수 KRDS_A11Y_KEEP_RUNS, 그것도 없으면 전부 보존
sourceDirNourl(dev 서버·배포본)을 검사할 때 그 화면을 만드는 소스 폴더 — 예: "src", ["src", "public"], JSP는 "src/main/webapp". 넘기면 gate가 검사 뒤 소스가 바뀌었는지(낡음)를 판정해 재검사를 요구한다. 없으면 url 검사의 낡음은 판정 불가

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so unusually well: it discloses that only part of accessibility is auto-judged, that contrast is measured directly, that manual-check items are reported with their procedures, and that a pass here is not a review pass. It also reinforces that a failed interaction step invalidates the inspection and blocks the gate, which is critical operational context an agent must know before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, followed by mechanism, limitation caveat, invocation timing, and input preference — each sentence earns its place. The limitation caveat is dense (stacked em-dash clauses) but not redundant, and the whole definition stays proportionate to an 8-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 optional parameters, no output schema, and no annotations, the description covers why, when, and with what inputs, plus the crucial 'automation is partial' caveat. What is missing is any statement of what the run returns (violations, screenshots, report layout) and how it relates to inspect_page, but with no output schema the gap is modest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description adds a genuine decision rule by recommending url (dev server/deploy) or filePath (local HTML) and explaining that relative-path assets resolve correctly in those modes. This prioritization goes slightly beyond the per-field schema text, though most parameter detail is still schema-supplied rather than description-supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource+standard: re-inspects an assembled/converted page in a real browser against KWCAG 2.2, running axe-core and translating results into the 33 KWCAG items. It also clarifies scope beyond automation ('passing here does not mean passing review'), which separates it from a generic inspection. It never names the closest sibling (inspect_page), so an agent must infer the boundary rather than being told.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit invocation timing is given as a workflow sequence: call after converting templates to a framework, after assembling the page, and after filling content. It also steers input choice (url or filePath recommended, html as last resort) and warns against mutating initial values via temporary builds. No alternative sibling tool is named and no clear exclude case is stated, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.1.0
    • First observedget_component
    • First observedget_framework_guide
    • First observedget_icon_fix_css
    • First observedget_page_scaffold
    • First observedget_requirements
    • First observedget_tokens
    • First observedinspect_page
    • First observedlist_components
    • First observedvalidate_page

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

Each tool targets a distinct part of the a11y workflow (tokens, component index, component detail, scaffold, validation, style inspection). The only real overlap is get_component vs get_requirements, which both surface accessibility requirements; the descriptions do clarify that get_requirements omits markup for review, but an agent could still misselect between them.

Naming Consistency5/5

All names follow a clean snake_case verb_noun pattern (get_tokens, list_components, get_component, get_page_scaffold, validate_page, inspect_page). No camelCase mixing or vague verbs; the convention is predictable throughout.

Tool Count5/5

Nine tools is well-scoped for an accessibility toolkit spanning discovery, scaffolding, requirement lookup, validation, and debugging. Each tool earns its place without redundancy or bloat.

Completeness4/5

The surface covers a full a11y lifecycle: token lookup, component discovery/detail, scaffolds, requirement review, browser validation, and computed-style inspection, plus framework and icon-fix guides. Minor gap in that there are no authoring/update operations, but the server is clearly read/query/generate oriented, so coverage is largely sufficient.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to perform comprehensive web accessibility checks (WCAG 2.1/2.2) including color contrast analysis, ARIA validation, and full accessibility report generation without requiring any API key.
    8
    23 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI agents with web accessibility analysis tools via MCP, enabling checks for alt text, heading hierarchy, color contrast, ARIA validation, and form accessibility.
    32 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides Korean government design system (KRDS) guidelines to AI models via MCP, enabling AI assistants to comply with KRDS standards when developing government websites and digital services.
    12 npm
    15
    MIT