my_mcp_server
A multi-tool MCP server that summarizes YouTube transcripts, provides transcript statistics, offers health checks, and suggests git commit messages based on changes.
README
MY MCP Server
여러 개의 MCP 도구를 한 서버에서 제공하는 개인 스터디용 예제입니다.
주요 기능:
summarize_youtube: YouTube 자막을 가져와 요약 반환transcript_stats: 자막의 통계(세그먼트 수, 길이 등) 반환ping: 서버 헬스체크
MCP(Model Context Protocol) SDK:
mcp(Anthropic)
Transcript:youtube-transcript-api
디렉터리 구조
.
├─ server.py # 얇은 엔트리포인트
├─ mcp_server/
│ ├─ __init__.py
│ ├─ core.py # MCP 서버 생성/핸들러 + 레지스트리 연동
│ ├─ registry.py # ToolRegistry (툴 스펙/핸들러 등록/라우팅)
│ ├─ utils/
│ │ ├─ __init__.py
│ │ ├─ youtube.py # 자막 fetch + dict/객체 호환 + ID 추출
│ │ └─ text.py # 요약 등 텍스트 유틸
│ └─ tools/
│ ├─ __init__.py # ALL = [각 툴 모듈]
│ ├─ summarize_youtube.py # 요약 툴
│ ├─ transcript_stats.py # 통계 툴
│ └─ ping.py # 핑(헬스체크)
요구사항
- Python 3.10+
mcp(예:pip install mcp)youtube-transcript-api
버전 확인:
pip show mcp pip show youtube-transcript-api
설치 & 실행
# 1) (선택) 가상환경
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 2) 의존성 설치
pip install mcp youtube-transcript-api
# 3) 실행 (로그 레벨 조정 가능)
LOG_LEVEL=DEBUG python server.py
이 서버는 stdio 기반 MCP 서버입니다. MCP 클라이언트(예: IDE 플러그인, MCP 호환 앱)에서 stdio 서버로 등록해 호출합니다.
제공 도구(툴)
1) summarize_youtube
- 설명: YouTube 자막을 가져와 요약을 반환
- 입력(JSON Schema):
{ "type": "object", "properties": { "url": { "type": "string", "description": "YouTube 비디오 URL" }, "language": { "type": "string", "description": "자막 언어 코드(ko, en, ja 등)" } }, "required": ["url"] } - 출력:
TextContent(요약 및 기본 정보)
2) transcript_stats
- 설명: 자막 통계(세그먼트 수, 길이 등)만 반환
- 입력(JSON Schema):
{ "type": "object", "properties": { "url": { "type": "string" }, "language": { "type": "string" } }, "required": ["url"] } - 출력:
TextContent
3) ping
- 설명: 서버 헬스체크
- 입력: 없음
4) commit_suggester
-
설명: Git 변경 내용을 읽어 현재 브랜치와 변경 파일을 기반으로 Conventional Commits 스타일 또는 사용자 정의 포맷에 맞는 커밋 메시지 후보를 생성합니다. 브랜치 이름이
feature/xxx이면 type을feat으로, scope을xxx으로 자동 추정합니다. 사용자가path를 주면 그 경로의 Git 리포지터리를 대상으로 합니다. -
입력 주요 필드 예시:
{ "mode": "staged", # staged, working, range "range": "HEAD~3..HEAD", # mode=range일 때 "format": "{emoji} {type}({scope}): {subject}", # 사용자 정의 템플릿 "rules": { "types": ["feat","fix"], "require_scope": true, "subject_max": 50 }, "language": "ko", "suggestions": 3, "breaking": false, "debug": true, "path": "./" # 특정 하위 디렉토리 리포지터리 지정 } -
기능 요약:
- 변경 파일/스테이징 상태 수집 (
mode) - 타입/스코프 추정: 파일명 + 브랜치명 기반 자동 보정
- 커밋 메시지 포맷: Conventional Commits 기본 또는 사용자 정의 템플릿 지원
- 경로 지정:
path로 특정 서브디렉토리의 Git 리포지터리 사용 - 디버그 모드: 내부 결정 과정 로그 포함
- BREAKING CHANGE 포함 옵션
- 변경 파일/스테이징 상태 수집 (
-
예시 사용:
- 스테이징된 변경으로 한국어 Conventional Commit 메시지 2개 제안:
{"mode":"staged","language":"ko","suggestions":2} feature/user-auth브랜치에서 scope을 자동으로user-auth로 잡고 메시지 생성:{"mode":"staged","language":"en","rules":{"require_scope":true},"suggestions":1}- 하위 폴더
subproject/리포지터리 기준으로 emoji 포함 포맷:{ "mode":"working", "format":"{emoji} {type}({scope}): {subject}", "allow_emoji": true, "path":"subproject/" }
- 스테이징된 변경으로 한국어 Conventional Commit 메시지 2개 제안:
-
팁:
format템플릿에 들어가는 변수:{type},{scope},{subject},{emoji},{branch},{files_changed},{body}등.rules.subject_max을 줄이면 제목 길이를 제한할 수 있음.require_scope을 켜면 scope이 없을 땐 기본core가 들어감.
로깅
- 전역 로그 레벨은 환경변수
LOG_LEVEL로 제어합니다. (DEBUG/INFO/WARNING/ERROR) - 주요 로거
mcp.entry: 진입점(server.py)mcp.core: MCP 서버 시작/중지, call_tool 라우팅/에러mcp.utils.youtube: 자막 fetch 단계 로깅
예:
LOG_LEVEL=DEBUG python server.py
개발 팁
-
툴 추가 방법
mcp_server/tools/your_tool.py생성tool_spec(mcp.types.Tool),async def handle(arguments)구현mcp_server/tools/__init__.py의ALL목록에 모듈을 추가
-
YouTube 자막 주의
youtube-transcript-api버전에 따라 각 세그먼트가dict또는FetchedTranscriptSnippet(객체)일 수 있습니다.
본 프로젝트는 공통 접근 헬퍼로 두 형태 모두 지원합니다.
Claude(클로드) 데스크톱에 등록하기
Claude Desktop에서 이 MCP 서버를 사용하려면 데스크톱 설정 파일에 MCP 서버를 등록해야 합니다.
1) 설정 파일 위치
운영체제별 기본 경로는 다음 중 하나입니다.
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
파일이 없다면 직접 생성해도 됩니다. JSON 포맷을 반드시 지켜주세요.
2) 로컬 파이썬 프로세스로 등록 (권장: 개발용)
서버를 로컬에서 직접 실행하는 방식입니다. cwd를 프로젝트 루트로 맞춰주세요.
{
// 기존 설정이 있다면 병합하세요
"mcpServers": {
"my-mcp-server": {
"command": "python3",
"args": ["server.py"],
"cwd": "/Users/user/Desktop/DEV/my_mcp_server",
"env": {
"LOG_LEVEL": "INFO"
}
}
}
}
command는python또는python3를 사용하세요(환경에 맞게).- 가상환경을 쓰는 경우
command에 가상환경의 파이썬 경로를 지정해도 됩니다. (예:"/Users/user/Desktop/DEV/my_mcp_server/.venv/bin/python")
3) Docker 컨테이너로 등록 (배포/격리 실행)
이미지를 빌드한 뒤, Claude가 컨테이너를 STDIN/STDOUT로 구동하도록 설정합니다.
{
"mcpServers": {
"my-mcp-server-docker": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "LOG_LEVEL=INFO",
"my-mcp-server:latest"
]
}
}
}
-i옵션이 중요합니다(표준입력을 열어 MCP가 통신할 수 있게 함). 필요 시--pull=always를 추가해 최신 이미지를 받도록 할 수 있습니다.
4) 적용 방법
claude_desktop_config.json수정/저장- Claude Desktop을 재시작
- Claude 대화창에서
@또는 사이드패널의 MCP 섹션에서my-mcp-server(또는 설정한 이름)를 확인 후 사용
등록 명은 자유롭게 정해도 되지만, README의 예시와 동일하게 쓰면 문서와 일치해 편합니다.
트러블슈팅
-
'FetchedTranscriptSnippet' object is not subscriptable- 원인: 세그먼트가 dict가 아닐 때
entry['text']로 접근 - 해결: 공통 헬퍼를 통해
getattr/dict.get모두 대응 (이미 반영됨)
- 원인: 세그먼트가 dict가 아닐 때
-
Server.list_tools() takes 1 positional argument but 2 were given- 원인: MCP 저수준
Server의 데코레이터는 팩토리 함수이므로 괄호 필요/불필요 혼동 - 해결: 현재 코드는
@self.server.list_tools()/@self.server.call_tool()형태로 정상 동작하도록 구성
- 원인: MCP 저수준
-
자막이 없는 영상 / 지역 제한 / 비공개
- “사용 가능한 자막을 찾을 수 없습니다” 메시지를 반환합니다. 다른 영상 또는 언어코드로 재시도하세요.
라이선스
MIT (각 라이브러리의 라이선스는 해당 저장소 참고)
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。