Nara Market FastMCP Server
Provides access to South Korean government procurement (G2B) and Nara Market shopping mall data, enabling users to search bid announcements, procurement statistics, product catalogs, and contract information through 15 specialized tools.
README
🚀 Nara Market FastMCP 2.0 Server
한국 정부조달(G2B) 및 나라장터 쇼핑몰 데이터를 수집하는 FastMCP서버입니다.
🛠️ 사용 가능한 MCP 도구 (총 15개)
🏛️ 기본 API 호출 도구 (4개)
| Tool | 기능 | 지원 API |
|---|---|---|
call_public_data_standard_api |
공공데이터개방표준 API 호출 | 입찰공고, 낙찰정보, 계약정보 등 |
call_procurement_statistics_api |
공공조달통계정보 API 호출 | 전체/기관별/기업별 조달 통계 |
call_product_list_api |
물품목록정보 API 호출 | 상품분류, 물품정보 등 |
call_shopping_mall_api |
종합쇼핑몰품목정보 API 호출 | MAS 계약 상품정보 |
🤖 AI 친화 간편 도구 (4개)
| Tool | 기능 | 특징 |
|---|---|---|
get_recent_bid_announcements |
최근 입찰공고 조회 | 한글 업무구분, 자동 날짜 계산 |
get_successful_bids_by_business_type |
업무구분별 낙찰정보 조회 | 한글 입력, 자동 코드 변환 |
get_procurement_statistics_by_year |
연도별 조달통계 조회 | 간단한 연도 입력 |
search_shopping_mall_products |
쇼핑몰 제품 검색 | 제품명/업체명 검색 |
🧭 고급 분석 도구 (4개)
| Tool | 기능 | 용도 |
|---|---|---|
get_all_api_services_info |
전체 API 서비스 정보 | 사용 가능한 모든 서비스 및 오퍼레이션 조회 |
get_api_operations |
서비스별 오퍼레이션 목록 | 특정 서비스의 세부 기능 확인 |
call_api_with_pagination_support |
페이징 지원 API 호출 | 대량 데이터 조회 및 탐색 가이드 |
get_data_exploration_guide |
데이터 탐색 가이드 | 파라미터 조합 및 검색 전략 제공 |
📦 기본 기능 도구 (3개)
| Tool | 기능 | 설명 |
|---|---|---|
crawl_list |
나라장터 상품 목록 조회 | 기본 상품 리스트 수집 |
get_detailed_attributes |
상품 상세 속성 조회 | 개별 상품의 세부 정보 |
server_info |
서버 정보 | 버전 및 사용 가능한 도구 목록 |
📚 AI 가이드 리소스 (3개 Resource + 3개 Prompt)
MCP Resources
api_parameter_requirements- API별 필수/선택 파라미터 가이드parameter_value_examples- 파라미터 값 예시 및 형식 가이드common_search_patterns- 자주 사용되는 검색 패턴 및 최적화 전략
MCP Prompts
workflow_guide- 단계별 워크플로우 가이드 (5가지 분석 시나리오)parameter_selection_guide- 파라미터 선택 및 최적화 가이드real_world_query_examples- 실제 업무 시나리오별 쿼리 예제 (8가지)
🔧 설치 및 실행
시스템 요구사항
- Python: 3.10 이상
- 메모리: 최소 2GB (대량 데이터 수집 시 4GB+ 권장)
- 디스크: 수집 데이터 크기에 따라 조정
1. 로컬 설치 (개발/테스트)
# 저장소 클론
git clone <repository-url>
cd naramarketmcp
# 환경 설정
cp .env.example .env
# .env 파일에서 NARAMARKET_SERVICE_KEY 설정
# 의존성 설치
pip install -r requirements.txt
# STDIO 모드로 실행 (MCP 클라이언트용)
python -m src.main
# HTTP 서버 모드로 실행 (테스트용)
export FASTMCP_TRANSPORT=http
export FASTMCP_HOST=127.0.0.1
export FASTMCP_PORT=8000
python -m src.main
2. 패키지 설치
# 패키지 설치
pip install .
# 콘솔 스크립트로 실행
naramarket-mcp
# SSE 모드 지원 (선택사항)
pip install .[sse]
export FASTMCP_TRANSPORT=sse
naramarket-mcp
3. Docker 실행
# 이미지 빌드
docker build -t naramarket-mcp .
# 컨테이너 실행
docker run --rm \
-e NARAMARKET_SERVICE_KEY=your-api-key \
-p 8000:8000 \
naramarket-mcp
🏭 Smithery.ai 클라우드 배포
빠른 배포
-
Smithery CLI 설치
npm install -g @smithery/cli -
API 키 준비
- data.go.kr에서 나라장터 API 키 발급
- Smithery.ai 대시보드에서
NARAMARKET_SERVICE_KEY시크릿 설정
-
배포 실행
./deploy.sh # 또는 수동: smithery deploy
배포 구성
- ✅
smithery.yaml: 메인 배포 설정 - ✅
Dockerfile: 프로덕션 최적화 컨테이너 - ✅
.env.example: 환경변수 템플릿 - ✅
deploy.sh: 자동 배포 스크립트
주요 배포 특징
- HTTP Transport: Smithery.ai의 HTTP 기반 MCP 프로토콜
- 동적 포트:
PORT환경변수 자동 감지 - 헬스체크:
/mcp엔드포인트 모니터링 - 시크릿 관리: 환경변수 기반 API 키 설정
- 오토스케일링: 로드에 따른 1-10 인스턴스 자동 확장
MCP 엔드포인트
배포 완료 후 다음 엔드포인트 사용 가능:
GET /mcp- 헬스체크 및 서버 정보POST /mcp- MCP 도구 호출DELETE /mcp- 리셋/정리 작업
🌐 API 사용 예시
나라장터 상품 목록 조회
{
"method": "tools/call",
"params": {
"name": "crawl_list",
"arguments": {
"category": "데스크톱컴퓨터",
"page_no": 1,
"num_rows": 50,
"days_back": 30
}
}
}
G2B 입찰공고 정보 조회
{
"method": "tools/call",
"params": {
"name": "get_bid_announcement_info",
"arguments": {
"num_rows": 20,
"page_no": 1,
"start_date": "20240101",
"end_date": "20240131"
}
}
}
대량 데이터 CSV 수집 (분할 처리)
{
"method": "tools/call",
"params": {
"name": "crawl_to_csv",
"arguments": {
"category": "노트북컴퓨터",
"output_csv": "laptops_2024.csv",
"total_days": 365,
"window_days": 30,
"max_windows_per_call": 2,
"append": false,
"explode_attributes": true
}
}
}
⚙️ 환경 변수 설정
필수 환경 변수
# 나라장터 API 서비스 키 (필수)
NARAMARKET_SERVICE_KEY=your-service-key-here
선택 환경 변수
# FastMCP Transport 모드
FASTMCP_TRANSPORT=stdio # stdio, sse, http
# HTTP 모드 설정 (FASTMCP_TRANSPORT=http일 때)
FASTMCP_HOST=127.0.0.1
FASTMCP_PORT=8000
# API 환경 설정
API_ENVIRONMENT=production # production, development
# 로깅 레벨
LOG_LEVEL=INFO
🔍 대용량 데이터 수집 가이드
윈도우 분할 전략
대량 데이터 수집 시 메모리 효율성과 재시작 가능성을 위해 윈도우 분할을 사용합니다.
{
"method": "tools/call",
"params": {
"name": "crawl_to_csv",
"arguments": {
"category": "데스크톱컴퓨터",
"output_csv": "desktop_full.csv",
"total_days": 365,
"window_days": 30,
"max_windows_per_call": 2,
"max_runtime_sec": 1800,
"append": false
}
}
}
이어받기 실행
{
"method": "tools/call",
"params": {
"name": "crawl_to_csv",
"arguments": {
"category": "데스크톱컴퓨터",
"output_csv": "desktop_full.csv",
"total_days": 300,
"anchor_end_date": "20240301",
"window_days": 30,
"max_windows_per_call": 2,
"append": true
}
}
}
주요 파라미터 설명
| 파라미터 | 설명 | 기본값 |
|---|---|---|
total_days |
수집할 총 일수 (역순) | 365 |
window_days |
윈도우 크기 (일) | 30 |
anchor_end_date |
시작 기준 날짜 (YYYYMMDD) | 오늘 |
max_windows_per_call |
호출당 최대 윈도우 수 | 0 (무제한) |
max_runtime_sec |
최대 실행 시간 (초) | None |
append |
기존 파일에 추가 여부 | false |
explode_attributes |
속성 컬럼 펼치기 | false |
📁 프로젝트 구조
naramarketmcp/
├── src/
│ ├── __init__.py
│ ├── main.py # FastMCP 서버 진입점
│ ├── core/ # 핵심 모듈
│ │ ├── __init__.py
│ │ ├── config.py # 설정 관리
│ │ └── models.py # 데이터 모델
│ ├── api/ # API 클라이언트
│ │ ├── __init__.py
│ │ └── client.py # API 호출 로직
│ ├── services/ # 비즈니스 로직
│ │ ├── __init__.py
│ │ └── data_service.py # 데이터 처리 서비스
│ └── tools/ # MCP 도구
│ ├── __init__.py
│ ├── base.py # 기본 도구 클래스
│ ├── naramarket.py # 나라장터 도구
│ └── openapi_tools.py # G2B OpenAPI 도구
├── tests/ # 테스트 코드
├── deployments/ # 배포 설정
├── .env.example # 환경변수 템플릿
├── .gitignore
├── Dockerfile # 컨테이너 이미지
├── deploy.sh # 배포 스크립트
├── pyproject.toml # 프로젝트 설정
├── requirements.txt # 의존성
├── smithery.yaml # Smithery 배포 설정
└── README.md # 프로젝트 문서
🔧 문제 해결
일반적인 문제
1. API 키 오류
Error: Missing or invalid NARAMARKET_SERVICE_KEY
해결방법: .env 파일 또는 환경변수에 올바른 API 키 설정
2. 메모리 부족
MemoryError: Unable to allocate array
해결방법: window_days 줄이기, max_windows_per_call 감소
3. 네트워크 타임아웃
requests.exceptions.Timeout
해결방법: max_runtime_sec 설정, 재시작 가능한 배치로 분할
로그 분석
# 로그 레벨 조정
export LOG_LEVEL=DEBUG
# 실행 로그 확인
python -m src.main 2>&1 | tee server.log
성능 최적화
- 메모리: 큰 데이터셋은 CSV 직접 저장 사용
- 네트워크: 적절한
window_days설정으로 배치 크기 조정 - 디스크: SSD 사용 권장, 충분한 여유 공간 확보
🤝 기여 방법
개발 환경 설정
# 개발 의존성 설치
pip install .[dev]
# 테스트 실행
pytest tests/
# 타입 체크
mypy src/
기여 가이드라인
- 이슈 생성: 버그 리포트 또는 기능 요청
- 포크 & 브랜치:
feature/your-feature-name브랜치 생성 - 개발: 테스트 코드와 함께 구현
- 테스트: 모든 테스트 통과 확인
- Pull Request: 상세한 설명과 함께 PR 생성
코드 스타일
- 포매팅: Black 사용
- 린팅: Flake8 준수
- 타입: Type hints 필수
- 문서: Docstring 작성
📄 라이선스
Apache License 2.0 - 자세한 내용은 LICENSE 파일 참조
🔗 관련 링크
- Smithery.ai: https://smithery.ai
- FastMCP: https://github.com/jlowin/fastmcp
- 나라장터 Open API: https://www.data.go.kr/
- G2B 전자조달시스템: http://www.g2b.go.kr/
📊 변경 이력
v0.1.0 (Latest)
- ✅ FastMCP 2.0 업그레이드
- ✅ Smithery.ai 배포 지원 추가
- ✅ G2B OpenAPI 5개 도구 통합
- ✅ HTTP Transport 지원
- ✅ 프로덕션 준비 완료
💡 문의사항이나 기술 지원이 필요하시면 이슈를 생성해 주세요.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。