KRDS MCP服务器🇰🇷
KRDS网站(https://v04.krds.go.kr)的模型上下文协议(MCP)服务器,用于提取和分析UI/UX设计系统。与Magic MCP类似,提取设计模式并生成可在各种框架中使用的组件代码。
🚀 主要功能
设计系统MCP工具(Magic MCP风格)
该服务器可以实时分析和提取KRDS网站的设计系统,帮助开发者轻松实现政府标准UI。
🎨 4个关键工具
analyze_design-KRDS设计系统分析
- 提取调色板 - 字体排印规则分析 - 确定边距和布局模式 - 列出UI组件
extract_component-提取特定UI组件
- 提取标题、推送、导航等主要组件结构 - 分析HTML结构和CSS样式 - 提取各组件的设计令牌 - 包括实际使用示例
get_design_tokens-提取设计令牌
- 提取CSS变量和自定义属性 - 颜色系统(Primary,Secondary,状态颜色) - 字体大小(字体大小、行距、字距) - 空白系统(Spacing,Padding,Margin) - 阴影和边框样式
generate_code-生成特定于框架的组件代码
- 反应:JSX+CSS/样式化组件/顺风 - 视图:SFC(单文件组件)형식 - Angular:TypeScript+模板 - 纯HTML:香草HTML+CSS
主要功能
- 🔄 实时提取:从KRDS网站实时提取设计信息
- 🛡️ 回退模式:在网络故障时提供静态设计模式
- 🎯 遵守政府标准:反映韩国政府网站可访问性和设计准则
- 性能优化:通过缓存和重试逻辑提供可靠的服务
- 🇰🇷 韩文支援:完全支持韩文文本和UI标签
📁 项目结构
krds-mcp-server/
├── src/ # 소스 코드
│ ├── server.ts # MCP 서버 메인 진입점
│ ├── tools/ # MCP 도구 구현체
│ │ ├── content-retrieval.ts # 콘텐츠 검색 도구
│ │ ├── search.ts # 검색 기능
│ │ ├── navigation.ts # 웹사이트 내비게이션
│ │ ├── export.ts # 데이터 내보내기 도구
│ │ ├── image-tools.ts # 이미지 처리
│ │ └── korean-text.ts # 한국어 텍스트 분석
│ ├── scraping/ # 웹 스크래핑 모듈
│ │ ├── krds-scraper.ts # KRDS 메인 스크래퍼
│ │ ├── navigation-crawler.ts # 내비게이션 크롤러
│ │ ├── content-integration.ts # 콘텐츠 통합
│ │ └── rate-limiter.ts # 속도 제한기
│ ├── parsing/ # 콘텐츠 파싱
│ │ ├── content-parser.ts # 콘텐츠 파서
│ │ ├── korean-text-processor.ts # 한국어 텍스트 프로세서
│ │ ├── image-extractor.ts # 이미지 추출기
│ │ ├── metadata-extractor.ts # 메타데이터 추출기
│ │ └── table-parser.ts # 테이블 파서
│ ├── cache/ # 캐싱 시스템
│ │ ├── cache-manager.ts # 캐시 관리자
│ │ ├── memory-cache.ts # 메모리 캐시
│ │ ├── redis-cache.ts # Redis 캐시
│ │ ├── file-cache.ts # 파일 캐시
│ │ └── cache-strategies.ts # 캐시 전략
│ ├── korean/ # 한국어 언어 처리
│ ├── types/ # TypeScript 타입 정의
│ │ └── index.ts
│ └── utils/ # 유틸리티 함수
│ ├── config.ts # 설정
│ └── logger.ts # 로깅
├── tests/ # 테스트 스위트
│ ├── unit/ # 단위 테스트
│ ├── integration/ # 통합 테스트
│ ├── e2e/ # 엔드투엔드 테스트
│ ├── helpers/ # 테스트 유틸리티
│ └── mock-data/ # 테스트 데이터
├── docs/ # 문서
├── config/ # 설정 파일
└── dist/ # 컴파일된 출력물🛠️ 安装方法
前提条件
- Node.js 18.0.0或更高版本
- npm 9.0.0或更高版本
- TypeScript 5.3.0或更高版本
- Redis(可选,用于分布式缓存)
快速入门
- 复制存储库
git clone https://github.com/yourusername/krds-mcp-server.git
cd krds-mcp-server- 安装从属关系
npm install- 首选参数
cp .env.example .env
# .env 파일을 편집하여 설정을 입력하세요- 构建项目
npm run build- 服务器启动
npm start设置开发环境
# 핫 리로딩을 사용한 개발 모드 실행
npm run dev
# 특정 설정으로 실행
NODE_ENV=development LOG_LEVEL=debug npm run devDocker设置
# Docker 이미지 빌드
npm run docker:build
# Docker Compose로 실행
docker-compose up -d
# 또는 단일 컨테이너 실행
npm run docker:run设置⚙ENT
环境变量
在项目根目录中 .env 创建文件:
# 서버 설정
NODE_ENV=production
PORT=3000
LOG_LEVEL=info
# KRDS 웹사이트 설정
KRDS_BASE_URL=https://v04.krds.go.kr
KRDS_TIMEOUT=30000
KRDS_RETRY_ATTEMPTS=3
KRDS_RETRY_DELAY=1000
KRDS_USER_AGENT=KRDS-MCP-Server/1.0.0
# 속도 제한 설정
KRDS_RATE_LIMIT_ENABLED=true
KRDS_REQUESTS_PER_MINUTE=60
KRDS_CONCURRENT_REQUESTS=5
# Puppeteer 설정
PUPPETEER_HEADLESS=true
PUPPETEER_TIMEOUT=30000
PUPPETEER_SLOWMO=0
PUPPETEER_VIEWPORT_WIDTH=1920
PUPPETEER_VIEWPORT_HEIGHT=1080
# 캐시 설정
CACHE_TYPE=memory,redis,file
CACHE_TTL=3600
CACHE_MAX_SIZE=104857600
# 메모리 캐시
CACHE_MEMORY_MAX_MB=100
CACHE_MEMORY_CLEANUP_INTERVAL=300
# Redis 캐시 (선택사항)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
REDIS_KEY_PREFIX=krds:
# 파일 캐시
CACHE_FILE_BASE_DIR=/tmp/krds-cache
CACHE_FILE_MAX_SIZE_MB=500
CACHE_FILE_CLEANUP_INTERVAL=3600
# 한국어 언어 처리
KOREAN_PROCESSING_ENABLED=true
KOREAN_STEMMING_ENABLED=true
KOREAN_ROMANIZATION_ENABLED=true
KOREAN_KEYWORD_EXTRACTION_ENABLED=true
# 내보내기 설정
EXPORT_MAX_FILE_SIZE_MB=50
EXPORT_DEFAULT_FORMAT=json
# 보안 설정
CORS_ENABLED=true
CORS_ORIGIN=*
HELMET_ENABLED=true
RATE_LIMIT_WINDOW_MS=60000
RATE_LIMIT_MAX_REQUESTS=100高级设置
详细的设置选项包括: 设置指南请参阅。
🧪 测试
运行测试
# 모든 테스트 실행
npm test
# 특정 테스트 스위트 실행
npm run test:unit # 단위 테스트만 실행
npm run test:integration # 통합 테스트만 실행
npm run test:e2e # 엔드투엔드 테스트만 실행
# 커버리지와 함께 테스트 실행
npm run test:coverage
# 감시 모드에서 테스트 실행
npm run test:watch
# 특정 패턴으로 테스트 실행
npm test -- --testNamePattern="Korean.*processing"测试结构
- 测试单位 (
tests/unit/:独立测试单个组件 - 集成测试 (
tests/integration/:测试组件之间的交互 - E2E测试 (
tests/e2e/:测试完整的工作流和MCP协议合规性
韩语文本测试
测试套件包括全面的韩语语言处理测试:
// 한국어 텍스트 테스트 예제
describe('한국어 텍스트 처리', () => {
it('정부 정책 문서를 처리해야 함', async () => {
const koreanText = '교육부는 새로운 정책을 발표했습니다.';
const analysis = await koreanProcessor.analyzeText(koreanText);
expect(analysis.keywords).toContain('교육부');
expect(analysis.romanized).toBe('gyoyugbuneun saeroun jeongchaegeul balphyohaetsseumnida');
expect(analysis.sentiment).toBe('positive');
});
});性能测试
# 성능 벤치마크 실행
npm run test:performance
# 메모리 사용량 프로파일링
NODE_OPTIONS="--max-old-space-size=2048" npm run test:e2e📚 MCP工具文档
内容搜索工具
搜索包含全文处理功能的韩国政府文件。
{
"name": "retrieve_content",
"arguments": {
"url": "https://v04.krds.go.kr/policy/education/2024/plan",
"includeImages": true,
"includeAttachments": true,
"processKoreanText": true
}
}参数:
url(字符串)-KRDS文档URLdocumentId(字符串)-用于代替URL的文档标识符includeImages(布尔型,默认值:true)-图像提取和处理includeAttachments(布尔型,默认值:true)-包括附件processKoreanText(布尔型,默认值:true)-启用韩文文本处理
回复:
{
"success": true,
"document": {
"id": "krds-doc-2024-edu-001",
"title": "Educational Policy Development Plan 2024",
"titleKorean": "2024년 교육정책 발전방안",
"content": "Full document content...",
"contentKorean": "한국어 문서 내용...",
"metadata": {
"agency": "Ministry of Education",
"agencyKorean": "교육부",
"keywords": ["education", "policy"],
"keywordsKorean": ["교육", "정책"],
"language": "ko"
},
"images": [...],
"attachments": [...]
},
"executionTimeMs": 2500
}搜索工具
通过高级韩语支持搜索KRDS文档。
{
"name": "search_documents",
"arguments": {
"query": "교육정책",
"category": "교육",
"maxResults": 20,
"sortBy": "date",
"sortOrder": "desc"
}
}参数:
query(字符串)-搜索查询(韩语支持)category(字符串,可选)-要搜索的类别(例如“教育”、“健康”、“经济”)maxResults(数字,默认值:10)-最大结果数sortBy(字符串,默认值:“relevance”)-排序标准(“date”、“relevance”、“title”)sortOrder(字符串,默认值:“desc”)-排序顺序(“asc”,“desc”)
韩语文本分析工具
执行高级韩语文本分析,包括语言学功能。
{
"name": "analyze_korean_text",
"arguments": {
"texts": ["교육부는 새로운 정책을 발표했습니다."],
"includeRomanization": true,
"includeSentiment": true,
"extractKeywords": true,
"analyzeStemming": true
}
}参数:
texts(数组)-要分析的韩文文本数组includeRomanization(布尔型,默认值:false)-包括罗马字符转换includeSentiment(布尔型,默认值:false)-包括情感分析extractKeywords(布尔型,默认值:true)-提取关键字analyzeStemming(布尔型,默认值:false)-包括词干分析
回复:
{
"success": true,
"analyses": [{
"originalText": "교육부는 새로운 정책을 발표했습니다.",
"romanized": "gyoyugbuneun saeroun jeongchaegeul balphyohaetsseumnida",
"keywords": ["교육부", "정책", "발표"],
"stemmed": ["교육부", "새롭다", "정책", "발표"],
"sentiment": "positive",
"wordCount": 6,
"characterCount": 19
}]
}导航工具
浏览KRDS网站结构和类别。
{
"name": "navigate_site",
"arguments": {
"action": "list_categories"
}
}
{
"name": "navigate_site",
"arguments": {
"action": "browse_category",
"category": "education"
}
}参数:
action(字符串)-要执行的操作(“list_categories”、“browse_category”、“get_sitemap”)category(字符串,可选)-要导航的类别(例如“education”、“health”、“economy”)depth(数字,可选)-导航深度(默认值:2)
导出工具
以多种格式导出文档。
{
"name": "export_documents",
"arguments": {
"documents": [/* 문서 객체들 */],
"format": "pdf",
"includeImages": true,
"filename": "education-policies-2024"
}
}参数:
documents(数组)-要导出的文档对象数组format(字符串)-导出格式(“json”、“csv”、“xlsx”、“pdf”、“xml”)includeImages(布尔型,默认值:false)-是否包括图像filename(字符串,可选)-输出文件名encoding(字符串,默认值:“utf-8”)-文本编码
支持类型: json, csv, xlsx, pdf, xml
🚀 性能
优化功能
- 连接池:重新使用浏览器实例和HTTP连接
- 🧠 智能缓存:多层缓存,包括韩文文本优化
- 🔄 并行处理:并行文档处理
- 速度限制:使用可设置的限制进行郑重的写入
- 🗄️ 内存管理:自动清理和资源监控
性能基准
最新硬件的典型性能指标:
任务时间吞吐量 |------|------|---------| |搜索文档1.5-3秒20-40文档/分钟 |韩语文本分析50-200ms 300-1200文本/分钟 |搜索查询0.8-2秒30-75查询/分钟 |缓存点击量5-20 ms 3000+运算/分钟|
监视
# 성능 메트릭 보기
curl http://localhost:3000/metrics
# 캐시 통계 확인
curl http://localhost:3000/cache/stats
# 건강 상태 확인
curl http://localhost:3000/health🔧 开发
代码质量
# 린팅
npm run lint
npm run lint:fix
# 포매팅
npm run format
npm run format:check
# 타입 검사
npm run typecheck调试
# 디버그 로그와 함께 실행
LOG_LEVEL=debug npm run dev
# 특정 디버그 네임스페이스 활성화
DEBUG=krds:scraper,krds:parser npm run dev
# 성능 프로파일링
NODE_OPTIONS="--inspect" npm run dev添加新工具
src/tools/your-tool.ts在中创建工具文件:
import type { Tool } from '@modelcontextprotocol/sdk/types.js';
export const yourTool: Tool = {
name: 'your_tool_name',
description: '도구 설명',
inputSchema: {
type: 'object',
properties: {
param: { type: 'string', description: '매개변수 설명' }
},
required: ['param']
}
};
export async function yourToolHandler(params: any, context: ToolContext) {
// 구현 코드
}src/tools/index.ts在中注册tests/unit/tools/your-tool.test.ts将测试添加到- 更新文档
🚢 部署
生产部署
# 프로덕션용 빌드
npm run build
# 프로덕션 서버 시작
NODE_ENV=production npm start
# 또는 PM2 사용
pm2 start ecosystem.config.js部署Docker
# 이미지 빌드
docker build -t krds-mcp-server .
# 컨테이너 실행
docker run -d \
--name krds-mcp-server \
-p 3000:3000 \
-e NODE_ENV=production \
-e REDIS_HOST=redis \
krds-mcp-server按环境设置
- 开发:
.env.development - 测试:
.env.test - 暂存:
.env.staging - 生产:
.env.production
健康状况检查
服务器提供健康检查端点:
# 기본 건강 상태 검사
GET /health
# 상세 건강 상태 검사
GET /health/detailed
# 준비 상태 검사
GET /ready监视和记录
- 结构化日志记录:包含关联ID的JSON日志
- 度量:Prometheus兼容的度量端点
- 错误跟踪:全面的错误记录,包括堆栈跟踪
- 性能监视:请求时间和资源使用率
🤝 贡献
欢迎您的贡献!有关详细信息,请访问 贡献指南请参阅。
为贡献者快速入门
- 存储库叉
- 创建功能分支:
git checkout -b feature/amazing-feature - 创建更改
- 添加新功能的测试
- 确认所有测试通过:
npm test - 提交更改:
git commit -m 'Add amazing feature' - 推送到分支:
git push origin feature/amazing-feature - 打开Pull Request
开发指南
- 符合TypeScript最佳实践
- 添加对新功能的全面测试
- 更新API更改的文档
- 使用反式提交消息
- 确保正确测试韩语文本处理
📄 许可证
MIT许可证-详细信息 许可证 请参考文件。
🐛 问题和支持
- 错误报告:
- 功能请求:
- 安全问题: security@yourserver.com发送电子邮件至
📖 附加文档
🙏 致谢
- 提供KRDS数据访问的韩国政府
- MCP SDK开发者和社区
- 韩语语言处理库维护人员
- 开源测试和开发工具
- 贡献者和社区成员
______________________________________________________________________
为韩国政府数据社区制作的❤
