Claude AI and Code
Set up
- Create
CLAUDE.md. And, write downcontentsthat ai should be aware of/initcommand 로 CLAUDE.md 파일을 생성해도 되지만, 기본적인 내용을 채워서 줌. 내 요구사황과 맞지 않음- markdown file - it needs three headers
- Create
settings.jsonfile under.claudefolder - Project scope - Set up plugins
Claude AI
Project
Claude AI의 프로젝트(Projects) 기능은 특정 주제나 업무에 맞춰 대화와 문서를 한곳에 체계적으로 정리할 수 있는 전용 맞춤형 작업 공간(Workspace)입니다. 매번 새로운 대화를 시작할 때마다 배경 설명을 반복할 필요 없이, 프로젝트 내의 모든 대화가 동일한 컨텍스트(문맥)를 유지하도록 돕는 핵심 기능입니다.
프로젝트 기능의 주요 특징은 다음과 같습니다:
- 지식 기반(Knowledge Base) 문서 업로드: 각 프로젝트당 최대 20개의 파일(각 최대 30MB)을 업로드하여 저장할 수 있습니다. 이력서, 브랜드 스타일 가이드, 코드베이스, 회의록, PDF 문서 등을 업로드해 두면, Claude가 프로젝트 내의 모든 대화에서 이 데이터들을 기본 지식으로 참고하여 답변합니다.
- 맞춤형 지침(Project Instructions) 설정: Claude가 해당 프로젝트에서 어떤 역할과 어조를 취해야 하는지, 어떤 규칙을 따라야 하는지에 대한 고정 지침을 설정할 수 있습니다.
- 컨텍스트(Context) 연속성 유지: 프로젝트 환경 내에서는 이전에 업로드한 문서와 지침이 모든 대화에 자동으로 적용됩니다. 따라서 긴 호흡이 필요한 심층 연구, 콘텐츠 제작, 또는 코딩 작업을 할 때 일관성 있는 결과물을 얻을 수 있습니다.
- 팀 협업 공유 기능: 팀(Team) 및 엔터프라이즈(Enterprise) 요금제를 사용하는 기업 고객의 경우, 프로젝트 폴더를 팀원들과 공유하여 조직 전체의 ‘공동 지식 기반’을 구축하고 함께 작업할 수 있습니다.
사용 방법:
- Claude 화면의 사이드바에서 Projects를 클릭합니다.
- 새 프로젝트를 생성하고 이름을 지정합니다.
- 작업에 필요한 관련 문서(노트, 기획안, 코드 등)를 업로드합니다.
- Claude가 숙지해야 할 지침(Instructions)을 추가한 뒤 대화를 시작합니다.
Claude Code 심층 활용 가이드
Summary
Claude Code를 활용해 복잡한 개발 프로젝트를 구조화하고 자동화하는 고급 기법을 다룹니다. 특히 전역 설정(Claude.md), 작업의 순서도를 부여하는 스킬(Skills), 작업을 위임하는 서브에이전트(Subagents), 그리고 외부 도구와 연동하는 MCP(Model Context Protocol)를 통해 완전한 AI 개발 파이프라인을 구축하는 방법론을 제시합니다.
URLs
Refined Notes
1. 초기 설정 및 모드 활용 (Initialization & Modes)
프로젝트의 방향성을 설정하고 효율적인 작업 환경을 구성하는 단계입니다.
Claude.md(Global Context): 프로젝트의 가장 기본이 되는 지침서로, AI가 작업을 시작할 때 가장 먼저 읽어야 하는 전역(Global) 문서입니다.- 활용 팁: 다른 사람들의 유스케이스(Use case)를 분석하고, 가이드 공학(Guide Engineering)을 적용하여 작성합니다.
Claude-Code-best-practiceGit 저장소를 참고하는 것이 좋습니다. - 100 줄 이내로 작성 권장. 세부 내용은 하위 폴더의 Claude.md 에 작성.
- 활용 팁: 다른 사람들의 유스케이스(Use case)를 분석하고, 가이드 공학(Guide Engineering)을 적용하여 작성합니다.
- 작업 모드 (Modes):
Shift + Tab: 모드 전환 및 탐색 단축키.Accept edit on: AI의 코드 수정을 자동으로 수락하여 편하게 사용하는 모드.Plan mode: 코드를 즉시 작성하기 전, 기획 글이나 아키텍처를 먼저 구조화할 때 사용합니다.
2. 사용자 정의 자동화 (Custom Automation)
반복되는 작업을 자동화하고 자신만의 작업 흐름을 생성하는 단계입니다.
- 커맨드 (Commands): * 나만의 맞춤형 명령어를 만들어 사용할 수 있습니다. 이를 관리하기 위한 전용 Git Repository를 활용하는 사례도 존재합니다.
- 스킬 (Skills) vs. 젬 (Gems):
- 두 기능 모두 ‘특정 목적을 가지고 반복 사용’한다는 공통점이 있습니다.
- Gems: 단순히 단편적인 컨텍스트(Context)를 제공하는 데 그칩니다.
- Skills: 작업의 워크플로우(Workflow)와 순서도를 제공합니다. “이 순서대로 해줘”라는 지시가 가능합니다.
[!NOTE] 💡 Skills 작성 팁: 처음부터 스킬을 완벽하게 짜기보다, 사용자가 AI와 함께 하나의 사이클(Cycle)을 온전히 완료해 본 뒤, 그 성공적인 과정을 “Skills로 다듬어 달라”고 요청하는 것이 가장 효율적입니다. (예: PIPE 연구, 웹/앱 개발, 사업 기획, 영어 학습 등 다양한 분야 적용 가능)
- 서브에이전트 (Subagents) - Pipeline의 핵심:
- 작동 원리: 메인 AI(Main AI)가 사용자의 복잡한 명령을 받으면, 해당 업무를 가장 잘 수행할 수 있는 서브에이전트를 찾아 작업을 위임(Delegation)합니다.
- 보통 5~8개 정도의 서브에이전트를 운용하는 것이 적당하며, 프로젝트 내에서 단계(Steps)를 명확히 정의(Define steps well)하는 것이 중요합니다.
- 훅스 (Hooks):
- 이벤트 기반 트리거(Event Trigger)로 작동하며, 특정 상황에 맞춰 AI의 동작을 예약하거나 실행합니다.
- 소프트웨어 공학의
Signal & Slot패턴과 유사하며,cron(크론)을 활용해 특정 시간에 맞춰 작업을 실행하도록 설정할 수 있습니다.
3. 확장 및 외부 통합 (Scaling & Integration)
단일 AI의 한계를 넘어, 여러 에이전트와 외부 도구를 결합하는 심화 단계입니다.
- MCP (Model Context Protocol):
- AI가 로컬 환경이나 외부 도구들과 연결되는 단계입니다.
Awesome MCP Servers등을 참고하여, 파이프라인의 어느 단계(Step)에서 외부 도구의 개입이나 추가 컨텍스트가 필요한지 판단하여 연동합니다.
Key Insights
- Claude.md: 프로젝트 전체를 통제하는 최상위 가이드 문서.
- Workflow vs. Context (Skills vs. Gems): 단순 정보 제공을 넘어, 작업의 절차적 흐름을 통제하는 ‘스킬(Skills)’의 활용.
- Agentic Workflow: 메인 AI와 5~8개의 서브에이전트를 활용한 작업 위임 및 파이프라인 구축.
- MCP (Model Context Protocol): AI와 외부 서버, 도구, API를 표준화된 방식으로 연결하는 확장 프로토콜.
- Event-Driven Automation: Hooks와 Cron을 활용한 능동적인 작업 스케줄링 및 이벤트 처리.
MCP / Plugin / Subagent
[!NOTE]
MCP (주방/인프라): AI가 외부 데이터와 연결될 수 있게 해주는 ‘수도관과 가스레인지’입니다.Skill (레시피): 연결된 도구를 ‘어떻게’ 사용해야 하는지 알려주는 구체적인 ‘요리법(절차적 지식)’입니다.Connector (연결 튜브): MCP나 API를 통해 외부 앱(Slack, Jira 등)과 AI를 물리적으로 이어주는 ‘연결 통로’를 통칭합니다.Plugin (밀키트): 이 모든 것(Skill, MCP, 설정 등)을 한 번에 설치할 수 있게 포장해 놓은 ‘밀키트’입니다.
Comands
/model
- It returns a list of model, and user can select one of them.
/plugin
-
Do everything under local scope
/plugin install {plugin-name} -s local
/stats
- 7일, 30일, 전체 기간 등 특정 기간 동안의 누적 사용량 통계와 참여도 지표(engagement metrics)를 요약해서 보여줍니다
/context
- 현재 세션의 컨텍스트 윈도우(기억 용량) 내에서 어떤 파일과 대화가 공간을 차지하고 있는지 상세 내역을 분석해 줍니다
/cost
- 개발자 관점에서 현재 세션에 사용된 총 비용(달러)을 계산하여 알려줍니다
/statusline
- 화면 하단에 실시간 지표를 띄우기 위한 UI 설정 명령어
/status
- 프록시/네트워크 연결 상태를 점검하는 시스템 진단 명령어
Questions for terminologies
Make MCP vs Make MCP server & Form of results
네, 아주 정확한 지적입니다! MCP(프로토콜)를 만드는 것과 MCP 서버(도구)를 만드는 것은 완전히 다릅니다. 대부분의 사용자나 개발자가 “MCP를 만든다”라고 말할 때는 사실 “MCP 서버를 만든다”는 뜻입니다. 질문하신 ‘결과물의 형태’가 무엇인지, 규약(Protocol)과 구현체(Server)로 나누어 명확히 보여드릴게요.
- MCP (Model Context Protocol) = “법전” (이미 만들어짐)
- 누가 만들었나? Anthropic과 파트너사들이 만들었습니다.
- 만드는 행위: 규칙을 정하고 문서를 쓰는 것입니다.
- 결과물의 형태: 문서 (Specification Document)
- “서로 통신할 때는 JSON-RPC 2.0 형식을 써라.”
- “연결할 때는
initialize라는 메시지를 먼저 보내라.” - 이런 규칙들이 적힌 텍스트 문서(Markdown)와 이를 구현한 SDK(라이브러리)가 결과물입니다.
- 사용자님이 이걸 다시 만들 일은 거의 없습니다.
- MCP 서버 (MCP Server) = “법을 따르는 시민” (우리가 만들 것)
- 누가 만드나? 사용자님이나 일반 개발자가 만듭니다.
- 만드는 행위: 실제 기능을 수행하는 코드를 짜는 것입니다.
- 결과물의 형태: 실행 가능한 소스 코드 파일 (.py, .js, .ts)
- 단순한 JSON 파일도 아니고, 단순한 글자 나열도 아닙니다.
- 컴퓨터에서 돌아가는 프로그램입니다.
-
Example :🔍 “MCP 서버”를 만들면 실제로 남는 것
-
사용자님이 “날씨 정보를 알려주는 MCP 서버”를 만든다면, 결과물은 아래와 같은 파이썬 코드 파일(
weather_server.py) 하나입니다.# weather_server.py (이게 결과물입니다!) from mcp.server.fastmcp import FastMCP # 1. 서버 이름 짓기 mcp = FastMCP("My Weather Server") # 2. 도구(Tool) 정의하기 (실제 기능) @mcp.tool() def get_weather(city: str) -> str: """도시 이름을 입력받아 날씨를 알려줍니다.""" if city == "Seoul": return "맑음, 25도" return "알 수 없음" # 3. 서버 실행 if __name__ == "__main__": mcp.run()
-
- 결론
- 단순 JSON인가요? ❌ 아니요. JSON은 이 서버가 Claude와 대화할 때 주고받는 말(메시지)의 형식일 뿐입니다. 결과물 자체는 코드(로직)입니다.
- 단순 글자 문서인가요? ❌ 아니요. 실제로 실행되어야 하는 프로그램입니다.
-
혼동의 원인:
config.json-
사용자님이 “JSON 아닌가?”라고 생각하신 이유는 아마 설정 파일 때문일 겁니다. 만들어진 MCP 서버(
weather_server.py)를 Claude에게 등록할 때는 JSON 설정 파일을 건드려야 합니다.// claude_desktop_config.json (이건 '등록증'입니다) { "mcpServers": { "my-weather-bot": { "command": "python", "args": ["weather_server.py"] } } }
-
Meaning of making Plugin
Plugin(플러그인)의 결과물은 결국 “잘 포장된 폴더(저장소)”라고 생각하시면 됩니다. MCP 서버가 단순히 “실행 가능한 코드 조각(부품)”이라면, 플러그인은 이 부품을 사용자가 쉽게 설치하고 사용할 수 있도록 설명서와 설정을 함께 넣은 “완제품 박스”입니다. 구체적으로 플러그인을 만들었을 때 결과물이 어떤 파일 구조를 가지는지 눈으로 확인시켜 드릴게요.
- 📂 플러그인 결과물 (폴더 구조 예시)
- 만약 사용자님이
my-weather-plugin이라는 플러그인을 만들었다면, 그 결과물은 아래와 같은 파일들이 들어있는 하나의 폴더(또는 GitHub 저장소)입니다.my-weather-plugin/ <-- 이게 플러그인 결과물입니다! ├── README.md # [설명서] "이 플러그인은 날씨를 알려줍니다." ├── claude-plugin.json # [신분증] 이름, 버전, 실행 명령어 정보 (가장 중요!) ├── src/ # [본체] 실제 기능이 들어있는 코드 │ ├── main.py # <-- 여기에 MCP 서버 코드가 들어있음 │ └── utils.py ├── prompts/ # [페르소나] (옵션) 이 플러그인을 쓸 때 Claude의 행동 지침 │ └── weather-expert.md # "너는 기상 캐스터처럼 말해라" └── requirements.txt # [준비물] 필요한 파이썬 라이브러리 목록
- 만약 사용자님이
- 핵심 구성 요소 3가지
- 신분증 (Manifest File)
- 보통
claude-plugin.json또는package.json같은 파일입니다. - 역할: Claude에게 “내 이름은 이거고, 나를 실행하려면
python main.py라고 입력해”라고 알려주는 명찰입니다. - 이게 없으면 그냥 코드 덩어리일 뿐, 설치 가능한 플러그인이 아닙니다.
- 보통
- 본체 (Code / Executable)
main.py처럼 실제 날씨 정보를 가져오는 MCP 서버 코드입니다.- 앞서 말씀드린 “MCP를 만드는 과정”에서 나온 결과물이 바로 이 폴더 안에 들어갑니다.
- 페르소나/프롬프트 (Prompts - 옵션)
- 단순히 기능만 주는 게 아니라, “이 도구를 쓸 때는 기상 캐스터 말투를 써줘” 같은 시스템 프롬프트를 포함할 수 있습니다.
- 사용자님이 말씀하신 Subagent(서브에이전트)의 성격이 여기서 정의됩니다.
- 신분증 (Manifest File)
-
🔌 차이점 한눈에 보기
구분 MCP 서버 (부품) Plugin (완제품) 비유 모터 (Engine) 선풍기 (Fan) 형태 실행 가능한 코드 파일 ( server.py)코드를 포함한 설치 패키지 폴더 설치법 사용자가 직접 설정 파일 열어서 코드를 복붙해야 함 (DIY) claude plugin install <이름>명령어 한 번으로 설치됨구성 코드 + 라이브러리 코드 + 라이브러리 + 설치 정보(Manifest) + 프롬프트 -
요약: 사용자님이 만들어야 할 것
-
사용자님이 “나만의 기획/개발/테스트 플러그인”을 만든다면, 결과물은 다음과 같습니다.
- Github 저장소를 하나 만듭니다.
- 그 안에 각 에이전트의 역할이 적힌 프롬프트 파일을 넣습니다. (
planner.md,developer.md) - 필요하다면 자동화 스크립트(MCP)를 넣습니다.
- 마지막으로 “이걸 어떻게 설치해라”가 적힌 설정 파일(
manifest)을 넣습니다.
-
이 폴더 주소(URL) 자체가 바로 플러그인이 되는 것입니다!
-
How to deploy my MCP
Python으로 만든 MCP 서버를 다른 사람들에게 배포하는 방법은 크게 “전통적인 파이썬 패키지 배포 방식”과 “최신 MCP 전용 레지스트리 등록 방식” 두 가지로 나뉩니다. 사용자님이 만든 코드를 다른 사람이 쓰게 하려면 (1) 설치(Installation)와 (2) 연결(Configuration) 두 단계를 해결해줘야 합니다.
- 방법 1. PyPI (파이썬 패키지 저장소) 배포 [가장 추천 ⭐]
- 가장 표준적인 방법입니다.
pip나uv로 설치할 수 있게 만드는 것입니다.- 패키징:
pyproject.toml파일을 만들고 프로젝트를 패키지로 만듭니다. - 업로드: PyPI(Python Package Index)에 업로드합니다.
- 사용자 설치: 다른 사용자는 터미널에서 아래처럼 실행하거나, Claude 설정에 바로 입력할 수 있습니다.
-
현대적인 방식 (
uv사용 시 - 매우 빠름): 사용자는 별도 설치 없이 설정 파일에 이렇게 적기만 하면 됩니다.{ "mcpServers": { "weather-bot": { "command": "uvx", "args": ["weather-mcp-server"] } } }
-
- 패키징:
- 전통적인 방식 (
pip사용 시): 사용자가 먼저pip install weather-mcp-server를 한 뒤, 설정 파일에 경로를 적습니다.
- 가장 표준적인 방법입니다.
-
방법 2. Docker 이미지 배포 [환경 문제 해결]
-
사용자의 파이썬 버전이나 라이브러리 충돌을 걱정할 필요가 없는 가장 깔끔한 방법입니다.
- 이미지 빌드:
Dockerfile을 작성해서 도커 이미지를 만듭니다. - 업로드: Docker Hub에 올립니다. (예:
runab/weather-mcp) -
사용자 설정: 사용자는 Claude 설정 파일에 다음과 같이 적습니다.
{ "mcpServers": { "weather-bot": { "command": "docker", "args": ["run", "-i", "--rm", "runab/weather-mcp"] } } }
- 이미지 빌드:
-
-
방법 3. 깃허브(GitHub) 소스 공유 [가장 간단]
-
개발자들끼리 공유할 때 주로 씁니다.
- 업로드: GitHub 리포지토리에 코드를 올립니다 (
main.py,requirements.txt). - 사용자 행동:
git clone https://github.com/runab/my-mcp.gitpip install -r requirements.txt
- 연결: 사용자가 자신의 로컬 경로를 설정 파일에 적습니다.
- 업로드: GitHub 리포지토리에 코드를 올립니다 (
-
-
🚀 “마켓플레이스”에 올리는 법 (Smithery.ai / Glama)
-
아까 보셨던
marketplace add명령어처럼, 사람들이 검색해서 쉽게 찾게 하려면 MCP 레지스트리에 등록해야 합니다. 현재 가장 유명한 두 곳이 있습니다.- Smithery.ai: 현재 Claude Desktop용 MCP들이 가장 많이 모여있는 곳입니다.
- GitHub에 코드를 올린 후, Smithery 웹사이트에서 “Submit” 버튼을 눌러 내 리포지토리 주소를 등록합니다.
- 등록되면 다른 사람들이
npx -y @smithery/cli install @runab/weather-mcp같은 명령어로 한 방에 설치할 수 있게 됩니다.
- Glama: 또 다른 MCP 검색 엔진입니다. 여기도 GitHub 리포지토리를 등록하면 사람들이 검색할 수 있습니다.
- Smithery.ai: 현재 Claude Desktop용 MCP들이 가장 많이 모여있는 곳입니다.
-
-
요약: 배포 프로세스 4단계
- 코딩:
main.py를 짭니다. (FastMCP 등 사용) - 패키징:
pyproject.toml을 설정해서 PyPI에 올리거나, Docker Hub에 올립니다. - 홍보 (옵션): Smithery.ai 같은 레지스트리에 내 프로젝트를 등록합니다.
- 안내: 사용자에게 “이 JSON 코드를
claude_desktop_config.json에 복사/붙여넣기 하세요”라고README.md에 적어줍니다.
- 코딩:
-
가장 추천하는 시작 방법: 일단 GitHub에 소스 코드를 올리는 것부터 시작하세요. 그리고
README.md파일에 “어떻게 설정 파일에 추가하는지” JSON 예시를 적어두는 것이 배포의 첫걸음입니다!
Project 01 : Web and App Developing Orchestration
Project 02 : Pipeline Research Orchestration
Project 03 : English Study Orchestration
Project 04 : AI Scribe and Note Refiner Orchestration
- Process
- keyword 위주 정리한 노트를 사진 촬영 또는 스크린샷
- 이미지와 노트 필기 main 주제 등 간략하면서 핵심 context 제공
- 만들어진 노트가 가독성이 좋은지, 내용이 정확한지 확인
- Gitpage에 업로드. 이때, 기존 노트를 분석해서, 전채적인 맥락과 기존 내용을 망가트리지 않기