MCP로 사내 시스템 연결
“우리 회사 데이터를 AI 손에”
02이 차시를 마치면
- 1.MCP가 왜 필요한지, 기존의 복사·붙여넣기식 연동과 무엇이 다른지 설명할 수 있다.
- 2.MCP의 구성 요소(클라이언트·서버·도구·리소스)를 각각의 역할로 구분해 설명할 수 있다.
- 3.이미 만들어진 MCP 서버를 Claude Code에 연결해 실제로 사용할 수 있다.
- 4.사내 API 하나를 감싸는 자체 MCP 서버를 최소 기능으로 만들 수 있다.
- 5.MCP 서버가 노출하는 권한 범위를 좁히고 기본적인 보안 점검을 할 수 있다.
03왜 필요한가
사내에는 이슈 트래커, 재고 조회용 사내 API, 휴가 신청 시스템, 업무용 구글 시트가 각각 따로 돌아가고 있다고 해보자. AI에게 '이번 주 미해결 이슈랑 재고 부족 품목을 같이 정리해줘'라고 시키고 싶어도, 지금 방식으로는 이슈 트래커 화면을 열어 내용을 복사하고, 사내 API 응답을 따로 조회해 붙여넣는 과정을 매번 사람이 대신 해줘야 한다. 시스템이 하나 더 늘어날 때마다 이 수작업도 하나씩 늘어난다.
- AI에게 새 데이터를 보여주려면 사람이 먼저 조회해서 붙여넣어야 한다 — 자동화가 아니라 반자동화에 머문다.
- 시트는 시트대로, 이슈 트래커는 이슈 트래커대로 연결 방식이 제각각이라 시스템이 늘 때마다 매번 새로 설계해야 한다.
- 복사·붙여넣기로 넘긴 데이터는 AI가 어디까지 접근했는지 기록이 남지 않아 권한 관리가 사실상 불가능하다.
- 나 혼자 익힌 연동 요령은 파일이나 설정으로 남지 않아 동료에게 그대로 넘겨줄 수 없다.
04개념 설명
MCP가 필요한 이유 — 연결 방식의 표준 규격
USB-C가 나오기 전에는 기기마다 충전 단자가 달라 케이블을 따로 챙겨야 했다. MCP(Model Context Protocol)가 나오기 전 AI와 외부 시스템의 관계도 비슷했다 — AI 도구마다, 시스템마다 연동 코드를 새로 짜야 했다.
MCP는 AI(클라이언트)와 외부 시스템(서버) 사이를 잇는 공통 접속 규격이다. 이 규격을 따라 한 번 만든 서버는 Claude Code뿐 아니라 이 규격을 지원하는 다른 AI 도구에서도 그대로 재사용할 수 있다.
USB-C 이전처럼
도구마다 · 시스템마다 연동을 새로 만들어야 했다
공통 접속 규격
한 번 만들면 여러 AI 클라이언트에서 재사용된다
- 표준 규격이 없으면 도구마다, 시스템마다 연동을 다시 만들어야 한다
- MCP는 누가 만들었든 같은 방식으로 AI와 시스템을 연결한다
- 한 번 만든 MCP 서버는 여러 AI 클라이언트에서 재사용된다
MCP의 네 요소 — 클라이언트, 서버, 도구, 리소스
MCP를 이루는 네 가지 역할을 통역 상황에 비유하면 이해가 쉽다. 클라이언트는 Claude Code처럼 사람을 대신해 요청하는 AI 도구다. 서버는 그 요청을 실제 시스템이 알아듣는 말로 바꿔 전달하고, 응답을 다시 AI가 알아듣는 형태로 돌려주는 통역사 역할을 한다.
서버 안에는 두 종류의 창구가 있다. 도구(tool)는 AI가 호출해 실행시킬 수 있는 동작이다 — '이슈 생성하기', '재고 조회하기' 같은 것이다. 리소스(resource)는 AI가 참고할 수 있도록 열어둔 데이터 덩어리다 — 특정 문서, 특정 테이블의 내용 같은 것이다.
| 요소 | 역할 |
|---|---|
| 클라이언트 | AI 도구, 요청하는 쪽 |
| 서버 | 시스템과 AI 사이의 통역 |
| 도구 (tool) | AI가 호출해 실행하는 동작 |
| 리소스 (resource) | AI가 읽을 수 있는 데이터 |
- 클라이언트 — Claude Code 등 AI 도구, 요청하는 쪽
- 서버 — 실제 시스템과 AI 사이를 통역하는 중간 다리
- 도구(tool) — AI가 호출해 실행시키는 동작
- 리소스(resource) — AI가 읽을 수 있게 열어둔 데이터
이미 있는 서버 붙이기 vs 직접 만들기
많이 쓰이는 시스템(파일 시스템, 깃허브, 대중적인 협업 도구 등)은 이미 누군가 만들어 공개해둔 MCP 서버가 있을 가능성이 높다. 이런 경우는 서버를 새로 짜는 게 아니라 설정 파일에 등록하는 것만으로 연결이 끝난다.
반면 사내에서만 쓰는 시스템 — 사내 API, 레거시 데이터베이스, 자체 이슈 트래커 — 은 그런 서버가 존재하지 않는다. 이 경우엔 그 시스템을 감싸는 MCP 서버를 직접 만들어야 하며, 이것이 이번 차시 실습의 핵심이다.
이미 있는 MCP 서버
설정 파일에 등록만 하면 끝
직접 만들어야 함
필요한 기능 하나만 먼저 감싼다
- 널리 쓰이는 시스템 — 이미 있는 MCP 서버를 설정만 해서 연결
- 사내 전용 시스템 — 감싸는 서버를 직접 만들어야 함
- 직접 만들 때도 처음엔 API 전체가 아니라 꼭 필요한 기능 하나만 감싼다
권한과 보안 — 다 열어주지 않는다
MCP 서버는 자신이 연결된 실제 시스템의 권한을 그대로 갖는다. 서버에 어떤 동작(도구)을 노출할지 정하는 일 자체가 보안 설계라는 뜻이다. 읽기만 필요한 상황에 쓰기·삭제 도구까지 노출해두면, AI가 실수로 잘못된 호출을 했을 때 되돌릴 수 없는 일이 생길 수 있다.
최소 권한 원칙 — 지금 실습에 꼭 필요한 만큼만 열어두고, 필요해지면 그때 넓힌다 — 을 서버를 처음 설계하는 순간부터 적용한다.
| 원칙 | 적용 |
|---|---|
| 최소 권한 | 지금 꼭 필요한 도구만 노출 |
| 인증 정보 | 서버 코드가 아니라 환경변수로 |
- 서버는 연결된 시스템의 권한을 그대로 물려받는다
- 필요한 도구만 노출하고, 쓰기·삭제는 정말 필요할 때만 연다
- 인증 정보는 서버 코드가 아니라 환경변수로 분리한다
05실습 가이드
1. 이미 있는 MCP 서버 하나 연결해보기
- Claude Code의 MCP 설정 화면(또는 설정 파일)을 연다.
- 공개적으로 제공되는 MCP 서버 중 하나(예: 파일 시스템 조회용 서버)를 골라 설정에 등록한다.
- Claude Code를 재시작하고, 도구 목록에 새 서버의 도구가 나타나는지 확인한다.
예상 결과 — 설정한 MCP 서버의 도구가 Claude Code의 사용 가능한 도구 목록에 나타난다.
안 될 때 — 도구가 안 보이면 설정 파일 형식(따옴표, 쉼표 등)이 잘못됐을 가능성이 크다. P7-1 프롬프트로 설정 파일 내용을 그대로 보여주고 검토를 요청한다.
2. 연결된 도구로 실제 요청해보기
- 채팅창에 연결한 서버의 기능을 쓸 수밖에 없는 질문을 던져본다 (예: '지금 폴더에 있는 파일 목록을 보여줘').
- AI가 실제로 그 도구를 호출했는지, 답변 과정에 도구 사용 흔적이 보이는지 확인한다.
예상 결과 — AI가 직접 답을 지어내지 않고, 연결된 도구를 호출해 실제 데이터를 가져와 답한다.
안 될 때 — AI가 도구를 안 쓰고 짐작으로 답하면, 질문을 더 구체적으로(어떤 도구를 써야만 답할 수 있는 질문으로) 바꿔 다시 물어본다.
3. 감쌀 사내 기능 하나 정하기
- 실제 사내 API에 접근 권한이 있다면 조회(읽기) 기능 하나를 고른다. 접근 권한이 없다면 실습용 공개 테스트 API로 대체한다.
- 이번 실습에서는 기능을 하나로 좁힌다 — 예: '상품 재고 조회하기' 하나만 감싼다.
- 그 기능의 요청 방식(URL, 필요한 값)과 응답 형태를 메모해둔다.
예상 결과 — 감쌀 기능 하나와 그 요청·응답 형태가 문서(또는 메모)로 정리된다.
안 될 때 — API 문서가 없거나 이해가 안 되면, API 응답 예시를 그대로 AI에게 보여주고 어떤 값이 무슨 의미인지 물어본다.
4. AI에게 최소 MCP 서버 코드 요청하기
- P7-2 프롬프트로 3단계에서 정리한 기능 하나만 감싸는 MCP 서버 코드를 요청한다.
- 받은 코드를 프로젝트 폴더에 저장한다.
- 필요한 패키지 설치 안내를 그대로 따라 실행한다.
예상 결과 — 서버 코드 파일과 실행에 필요한 패키지가 준비된다.
안 될 때 — 패키지 설치 중 에러가 나면 에러 메시지 전문을 P7-5(복구 프롬프트)에 붙여 다시 물어본다.
5. 로컬에서 서버 실행하고 Claude Code에 연결하기
- 터미널에서 서버를 실행해 오류 없이 뜨는지 확인한다.
- Claude Code의 MCP 설정에 방금 만든 서버를 등록한다.
- Claude Code를 재시작해 도구 목록에 새 도구가 뜨는지 확인한다.
예상 결과 — 자체 서버가 로컬에서 실행되고, 그 서버의 도구가 Claude Code 도구 목록에 나타난다.
안 될 때 — 도구 목록에 안 뜨면 설정 파일의 실행 경로나 포트 번호가 실제 서버와 다른지 먼저 확인한다.
6. 실제 요청으로 동작 확인하기
- 채팅창에서 감싼 기능을 실제로 쓰는 질문을 던진다 (예: '재고 5개 이하인 상품 있어?').
- 서버를 거쳐 실제 응답이 돌아오는지, 값이 실제 시스템 상태와 일치하는지 확인한다.
예상 결과 — AI가 자체 MCP 서버를 통해 실제 데이터를 가져와 정확하게 답한다.
안 될 때 — 값이 이상하거나 에러가 나면 P7-5로 에러 내용과 요청 내용을 함께 보내 원인을 확인한다.
7. 권한 범위 좁히기
- P7-3 프롬프트로 지금 서버가 노출하는 도구 목록을 점검받는다.
- 실습에 필요 없는 동작(쓰기·삭제 등)이 포함돼 있다면 제거하거나 별도 승인 없이는 실행되지 않도록 막는다.
- 변경 후 다시 실행해 필요한 조회 기능은 그대로 동작하는지 확인한다.
예상 결과 — 서버가 노출하는 도구가 꼭 필요한 조회 기능만 남는다.
안 될 때 — 기능을 줄였더니 필요한 조회까지 막혔다면, 어떤 도구를 남기고 뺐는지 AI에게 다시 설명하고 조정을 요청한다.
8. 보안 점검하기
- P7-4 프롬프트로 서버 코드에 인증키가 그대로 적혀 있는지, 로그에 민감한 값이 그대로 남는지 점검받는다.
- 지적된 부분을 환경변수 분리 등으로 수정한다.
- 수정한 코드가 저장소에 올라가기 전이라면 커밋 이력에도 키가 없는지 다시 확인한다.
예상 결과 — 인증키가 코드에서 분리되고, 점검 항목에서 지적된 문제가 해소된다.
안 될 때 — 이미 커밋에 키가 들어갔다면 단순히 지우는 것으로는 이력에서 사라지지 않는다. 키를 즉시 폐기·재발급하고 AI에게 이력 정리 방법을 물어본다.
06실전 프롬프트
07이것만은 주의
무슨 일이 생기나 — MCP 서버는 연결된 실제 시스템의 접근 권한을 그대로 가진다. 서버 자체가 뚫리거나 잘못 설정되면 연결된 시스템 전체가 위험에 노출될 수 있다.
대처 — 서버에는 지금 꼭 필요한 도구만 최소로 노출한다. 조회만 필요하면 쓰기·삭제 도구는 아예 만들지 않는다.
무슨 일이 생기나 — 코드 안에 키를 그대로 적어두면 저장소에 커밋되는 순간 누구나 볼 수 있는 상태가 되고, 나중에 지워도 이력에는 남아 있다.
대처 — 인증키는 항상 환경변수로 분리한다. 커밋 전에 .gitignore에 키 파일이 포함돼 있는지 확인한다.
무슨 일이 생기나 — 필요하지도 않은 쓰기나 삭제 동작까지 도구로 노출해두면, AI가 맥락을 잘못 이해해 실행했을 때 되돌릴 수 없는 변경이 생길 수 있다.
대처 — 처음엔 조회(읽기) 도구만 만든다. 쓰기가 정말 필요해지면 그때 별도 승인 절차와 함께 추가한다.
무슨 일이 생기나 — 실습 편의를 위해 서버를 외부에서도 접근 가능하게 열어두면, 원래 사내망 안에서만 안전했던 시스템이 누구나 접근할 수 있는 상태가 될 수 있다.
대처 — 실습 단계에서는 로컬에서만 실행한다. 실제로 팀에 배포할 때는 접근 제한(사내망 한정, 인증 절차)을 먼저 설계한다.
무슨 일이 생기나 — 요청·응답을 그대로 기록하는 로그에 개인정보나 인증 토큰이 찍혀 남으면, 로그 파일 자체가 새로운 유출 경로가 된다.
대처 — 로그를 남기기 전에 어떤 값이 찍히는지 확인하고, 민감한 값은 마스킹하거나 아예 기록하지 않는다.
08자가 점검
09과제
자신의 실제 업무에서 AI에게 연결하고 싶은 사내 시스템(이슈 트래커, 사내 API, 내부 데이터베이스 등) 하나를 골라, 조회 기능 한 가지만 감싸는 MCP 서버를 설계하고 만들어본다. 접근 가능한 사내 시스템이 없다면 공개 테스트 API로 대체해도 된다.
제출 형식 — ① MCP 서버 코드가 담긴 저장소 링크 ② 노출한 도구 목록과 각 도구의 권한 범위 설명 ③ 보안 점검 체크리스트(인증키 분리, 로그 점검, .gitignore 확인) 결과를 문서로 정리해 제출한다.
10더 알아보기
- MCP 공식 스펙 문서 — 클라이언트·서버·도구·리소스의 정확한 정의와 통신 방식 확인용
- Claude Code MCP 연동 가이드 — 설정 파일 형식과 서버 등록 절차의 최신 방법 확인용
- MCP(Model Context Protocol)
- — AI 클라이언트와 외부 시스템(서버)을 표준화된 방식으로 연결하기 위한 프로토콜.
- 도구(tool)
- — MCP 서버가 AI에게 노출해, AI가 직접 호출해 실행시킬 수 있는 동작.
- 리소스(resource)
- — MCP 서버가 AI에게 읽을 수 있도록 열어둔 데이터 단위(문서, 테이블 등).
- 최소 권한 원칙
- — 지금 꼭 필요한 만큼의 접근 권한만 부여하고, 필요해지면 그때 넓히는 보안 설계 원칙.
다음 차시 예고 — 다음 차시에서는 이번 차시에서 다룬 서버 하나를 넘어, 여러 개의 AI 에이전트를 동시에 굴려 작업을 나눠 맡기고 서로 검증하게 만드는 법을 다룹니다.