|
|
나는 프로그래밍 책을 자주 출판하는 저자야. 매번아래와 같은 폴더를 만들어야 하는데 이것을 자동화 하고 싶어. 아래 폴더 구조와 샘플 코드를 참고해서 MCP 서버 코드를 작성해 줘.
[PART별 폴더 구조]
- PART01 폴더
-CHAPTER01 폴더
-code_examples 폴더
-screenshots 폴더
-resources 폴더
-CHAPTER02 폴더
-code_examples 폴더
-screenshots 폴더
-resources 폴더
...
- PART02 폴더
-CHAPTER09 폴더
-code_examples 폴더
-screenshots 폴더
-resources 폴더
...
파트 수와 각 파트당 챕터 수를 파라미터로 받아서 위와 같은 폴더 구조를 자동으로 생성하는 MPC 함수를 만들어줘
번호는 연속적으로 해주고(CHAPTER01, CHAPTER02, ...) 폴더명은 두 자리 숫자로 해줘.
아래 소스 코드를 참고해줘.
"
47쪽에서 진행했던 mcptool code block
"
import os
from mcp.server.fastmcp import FastMCP
# 기본 경로 설정
BASE_PATH = "D:/Github/Claude_Code_WS/basic/file"
# MCP 서버 생성
mcp = FastMCP(name="server")
@mcp.tool()
def create_book_structure(num_parts: int, chapters_per_part: list[int]) -> str:
"""
프로그래밍 책을 위한 폴더 구조를 자동으로 생성합니다.
각 파트별로 다른 챕터 수를 지정할 수 있습니다.
Parameters
----------
num_parts : int
파트 수
chapters_per_part : list[int]
각 파트별 챕터 수 리스트 (예: [3,4,2])
Returns
-------
str
생성 결과 메시지
"""
try:
created_folders = []
chapter_counter = 1
# 파라미터 유효성 검사
if len(chapters_per_part) != num_parts:
return f"오류: chapters_per_part 배열의 길이({len(chapters_per_part)})가 num_parts({num_parts})와 일치하지 않습니다."
for part_num in range(1, num_parts + 1):
# PART 폴더 생성
part_folder = f"PART{part_num:02d}"
part_path = os.path.join(BASE_PATH, part_folder)
if not os.path.exists(part_path):
os.makedirs(part_path)
created_folders.append(part_folder)
# 해당 파트의 챕터 수만큼 반복
chapters_in_this_part = chapters_per_part[part_num - 1]
for _ in range(chapters_in_this_part):
# CHAPTER 폴더 생성
chapter_folder = f"CHAPTER{chapter_counter:02d}"
chapter_path = os.path.join(part_path, chapter_folder)
if not os.path.exists(chapter_path):
os.makedirs(chapter_path)
created_folders.append(f"{part_folder}/{chapter_folder}")
# 각 챕터 안에 서브폴더들 생성
subfolders = ["code_examples", "screenshots", "resources"]
for subfolder in subfolders:
subfolder_path = os.path.join(chapter_path, subfolder)
if not os.path.exists(subfolder_path):
os.makedirs(subfolder_path)
created_folders.append(f"{part_folder}/{chapter_folder}/{subfolder}")
chapter_counter += 1
result_message = f"✅ 책 폴더 구조가 성공적으로 생성되었습니다!\n"
result_message += f"📁 총 {len(created_folders)}개의 폴더가 생성되었습니다.\n"
result_message += f"📖 {num_parts}개 파트, 총 {sum(chapters_per_part)}개 챕터\n\n"
# 파트별 요약 정보
result_message += "📚 파트별 구조:\n"
chapter_start = 1
for i, chapters in enumerate(chapters_per_part, 1):
chapter_end = chapter_start + chapters - 1
result_message += f" • PART{i:02d}: CHAPTER{chapter_start:02d} ~ CHAPTER{chapter_end:02d} ({chapters}개 챕터)\n"
chapter_start = chapter_end + 1
result_message += "\n📂 각 챕터별 하위 폴더:\n"
result_message += " • code_examples (예제 코드)\n"
result_message += " • screenshots (스크린샷)\n"
result_message += " • resources (리소스 파일)\n"
return result_message
except Exception as e:
return f"❌ 폴더 생성 중 오류가 발생했습니다: {str(e)}"
@mcp.tool()
def create_simple_book_structure(num_parts: int, chapters_per_part: int) -> str:
"""
프로그래밍 책을 위한 폴더 구조를 자동으로 생성합니다 (간단 버전).
모든 파트에 동일한 챕터 수를 적용합니다.
Parameters
----------
num_parts : int
파트 수
chapters_per_part : int
각 파트별 챕터 수 (모든 파트 동일)
Returns
-------
str
생성 결과 메시지
"""
# 모든 파트에 동일한 챕터 수 적용
chapters_list = [chapters_per_part] * num_parts
return create_book_structure(num_parts, chapters_list)
@mcp.tool()
def preview_book_structure(num_parts: int, chapters_per_part: list[int]) -> str:
"""
실제 폴더를 생성하지 않고 생성될 폴더 구조를 미리 보여줍니다.
Parameters
----------
num_parts : int
파트 수
chapters_per_part : list[int]
각 파트별 챕터 수 리스트
Returns
-------
str
폴더 구조 미리보기
"""
try:
# 파라미터 유효성 검사
if len(chapters_per_part) != num_parts:
return f"오류: chapters_per_part 배열의 길이({len(chapters_per_part)})가 num_parts({num_parts})와 일치하지 않습니다."
preview = f"📋 생성될 폴더 구조 미리보기\n"
preview += f"{'='*50}\n\n"
chapter_counter = 1
total_folders = 0
for part_num in range(1, num_parts + 1):
part_folder = f"PART{part_num:02d}"
preview += f"📁 {part_folder}/\n"
total_folders += 1
chapters_in_this_part = chapters_per_part[part_num - 1]
for _ in range(chapters_in_this_part):
chapter_folder = f"CHAPTER{chapter_counter:02d}"
preview += f" 📁 {chapter_folder}/\n"
total_folders += 1
subfolders = ["code_examples", "screenshots", "resources"]
for subfolder in subfolders:
preview += f" 📁 {subfolder}/\n"
total_folders += 1
chapter_counter += 1
preview += "\n"
preview += f"📊 요약:\n"
preview += f" • 총 파트 수: {num_parts}개\n"
preview += f" • 총 챕터 수: {sum(chapters_per_part)}개\n"
preview += f" • 생성될 폴더 수: {total_folders}개\n"
return preview
except Exception as e:
return f"❌ 미리보기 생성 중 오류가 발생했습니다: {str(e)}"
@mcp.tool()
def preview_simple_book_structure(num_parts: int, chapters_per_part: int) -> str:
"""
간단 버전의 폴더 구조 미리보기입니다.
Parameters
----------
num_parts : int
파트 수
chapters_per_part : int
각 파트별 챕터 수 (모든 파트 동일)
Returns
-------
str
폴더 구조 미리보기
"""
chapters_list = [chapters_per_part] * num_parts
return preview_book_structure(num_parts, chapters_list)
if __name__ == "__main__":
# MCP 서버 실행
mcp.run()
