Cursor AI IDE에서 사용할 수 있는 Markdown 문서 관리 MCP (Model Context Protocol) 서버입니다.
이 프로젝트는 Cursor AI IDE에서 Markdown 문서의 CRUD 작업을 효율적으로 수행할 수 있도록 하는 MCP 서버를 제공합니다. 문서 생성, 읽기, 수정, 삭제뿐만 아니라 검색, 메타데이터 관리 등 고급 기능을 지원합니다.
- 문서 생성: 새로운 Markdown 파일 생성
- 문서 읽기: 기존 Markdown 파일 내용 읽기
- 문서 수정: 기존 파일 내용 수정 또는 추가
- 문서 삭제: Markdown 파일 삭제
- 문서 목록 조회: 디렉토리 내 Markdown 파일 목록 조회
- 내용 검색: 파일 내용에서 키워드 검색
- 메타데이터 관리: YAML frontmatter 관리 (추가, 수정, 삭제)
- 언어: Python 3.9+
- 프레임워크: MCP Python SDK
- 문서 형식: Markdown (.md, .markdown)
- 의존성:
mcp
,pyyaml
,pathlib2
,typing-extensions
git clone <repository-url>
cd markdown-mcp-server
pip install -r requirements.txt
pip install -e .
Cursor AI IDE의 설정 파일에 MCP 서버를 추가하세요:
{
"mcp": {
"servers": {
"markdown-manager": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/path/to/markdown-mcp-server"
}
}
}
}
MARKDOWN_MCP_BASE_PATH
: 파일 작업의 기본 디렉토리 (기본값: 현재 디렉토리)
Markdown 파일을 읽어서 내용을 반환합니다.
매개변수:
file_path
(string): 읽을 파일의 경로encoding
(optional, string): 파일 인코딩 (기본값: "utf-8")
반환값:
{
"success": true,
"content": "파일 내용",
"content_without_frontmatter": "frontmatter 제외한 내용",
"frontmatter": {"title": "제목", "author": "작성자"},
"file_info": {"name": "파일명", "size": 1024, ...},
"encoding": "utf-8"
}
새로운 Markdown 파일을 생성합니다.
매개변수:
file_path
(string): 생성할 파일의 경로content
(string): 파일 내용overwrite
(optional, boolean): 기존 파일 덮어쓰기 여부 (기본값: false)
반환값:
{
"success": true,
"message": "File created successfully: file.md",
"file_path": "/full/path/to/file.md",
"file_info": {"name": "file.md", "size": 1024, ...}
}
기존 Markdown 파일의 내용을 수정합니다.
매개변수:
file_path
(string): 수정할 파일의 경로content
(string): 새로운 내용append
(optional, boolean): 내용 추가 여부 (기본값: false)
반환값:
{
"success": true,
"message": "File updated successfully: file.md",
"file_path": "/full/path/to/file.md",
"file_info": {"name": "file.md", "size": 1024, ...}
}
지정된 Markdown 파일을 삭제합니다.
매개변수:
file_path
(string): 삭제할 파일의 경로confirm
(optional, boolean): 삭제 확인 (기본값: false)
반환값:
{
"success": true,
"message": "File deleted successfully: file.md"
}
지정된 디렉토리의 Markdown 파일 목록을 반환합니다.
매개변수:
directory
(optional, string): 검색할 디렉토리 경로 (기본값: ".")recursive
(optional, boolean): 하위 디렉토리 포함 여부 (기본값: false)pattern
(optional, string): 파일 패턴 (기본값: "*.md")
반환값:
{
"success": true,
"files": [
{
"name": "file1.md",
"size": 1024,
"modified": 1234567890,
"relative_path": "file1.md"
}
],
"count": 1,
"directory": "."
}
Markdown 파일 내용에서 키워드를 검색합니다.
매개변수:
directory
(string): 검색할 디렉토리query
(string): 검색 키워드case_sensitive
(optional, boolean): 대소문자 구분 여부 (기본값: false)
반환값:
{
"success": true,
"results": [
{
"file_path": "file1.md",
"matches": [
{"line_number": 5, "line_content": "This line contains the keyword"}
],
"match_count": 1
}
],
"total_files_searched": 10,
"files_with_matches": 1,
"query": "keyword",
"case_sensitive": false
}
Markdown 파일의 YAML frontmatter를 관리합니다.
매개변수:
file_path
(string): 대상 파일 경로action
(string): 작업 유형 ("get", "set", "update", "remove")metadata
(optional, object): 메타데이터 정보 (set/update 작업 시 필요)
반환값 (get 작업):
{
"success": true,
"frontmatter": {"title": "제목", "author": "작성자"},
"has_frontmatter": true
}
반환값 (기타 작업):
{
"success": true,
"message": "Frontmatter set completed successfully",
"file_path": "/full/path/to/file.md",
"action": "set"
}
-
새로운 프로젝트 문서 생성
"새로운 프로젝트 문서를 생성해주세요. 파일명: project-overview.md"
-
키워드로 문서 검색
"'API 문서' 키워드가 포함된 모든 마크다운 파일을 찾아주세요"
-
기존 문서에 내용 추가
"README.md 파일에 설치 가이드 섹션을 추가해주세요"
-
메타데이터 관리
"project.md 파일의 frontmatter에 버전 정보를 추가해주세요"
markdown-mcp-server/
├── src/
│ ├── __init__.py
│ ├── server.py # MCP 서버 메인 로직
│ ├── markdown_manager.py # Markdown 문서 관리 클래스
│ └── utils.py # 유틸리티 함수
├── tests/
│ ├── __init__.py
│ ├── test_server.py
│ └── test_markdown_manager.py
├── requirements.txt
├── setup.py
└── README.md
# 단위 테스트 실행
python -m unittest tests.test_markdown_manager
# 통합 테스트 실행
python -m unittest tests.test_server
# 모든 테스트 실행
python -m unittest discover tests
# 직접 실행
python -m src.server
# 환경 변수와 함께 실행
MARKDOWN_MCP_BASE_PATH=/path/to/docs python -m src.server
- 경로 검증: 모든 파일 경로는 path traversal 공격을 방지하기 위해 검증됩니다.
- 권한 확인: 파일 시스템 접근 권한을 확인합니다.
- 입력 검증: 모든 사용자 입력은 검증됩니다.
- 안전한 파일 처리: 파일 크기 제한 및 인코딩 문제를 처리합니다.
모든 API 호출은 일관된 에러 응답 형식을 반환합니다:
{
"error": "에러 메시지 설명"
}
일반적인 에러 상황:
- 파일이 존재하지 않는 경우
- 권한이 없는 경우
- 잘못된 파일 경로
- 인코딩 오류
- 디렉토리가 존재하지 않는 경우
서버는 구조화된 로깅을 제공합니다:
- INFO: 일반적인 작업 로그
- WARNING: 경고 상황
- ERROR: 오류 상황
로그 레벨은 환경 변수 LOG_LEVEL
로 설정할 수 있습니다.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE
파일을 참조하세요.
문제가 발생하거나 질문이 있으시면 GitHub Issues를 통해 문의해 주세요.
- 초기 버전 릴리스
- 기본 CRUD 기능 구현
- 검색 및 메타데이터 관리 기능 추가
- MCP 서버 통합
- 테스트 코드 작성