MCP 연동 및 보안
MCP 아키텍처, 전송 방식 및 권한 경계를 이해하고 타사 또는 자체 MCP Server에 안전하게 연결합니다.
Model Context Protocol(MCP)은 AI 애플리케이션과 외부 시스템을 연결하는 개방형 프로토콜입니다. 호환 클라이언트는 각 데이터 소스의 연동 프로토콜을 별도로 설계하지 않고 MCP Server로 컨텍스트를 가져오거나 도구를 호출하거나 미리 정의된 프롬프트를 사용할 수 있습니다.
MCP와 모델 API는 서로 다른 연동 계층입니다
AGTCloud API는 모델 호출을 담당하고 MCP Server는 호환 클라이언트에 도구와 컨텍스트를 제공합니다. MCP 연결에는 Server 배포자 또는 관리자가 제공한 설치 명령, URL 및 인증 방식을 사용합니다. AGTCloud 모델 API 주소를 MCP Server Endpoint로 사용할 수 없습니다.
MCP 동작 방식
하나의 MCP Host는 여러 MCP Server에 연결하고 Server별로 독립된 MCP Client를 생성할 수 있습니다.
| 참여자 | 주요 역할 | 일반적인 형태 |
|---|---|---|
| MCP Host | AI 애플리케이션을 실행하고 연결, 권한 및 사용자 확인 관리 | 코딩 에이전트, IDE, 데스크톱 어시스턴트 |
| MCP Client | 하나의 MCP Server와 전용 연결을 맺고 Host에 Server 기능 제공 | 보통 Host에 내장 |
| MCP Server | 특정 도구, 데이터 또는 프롬프트 템플릿 제공 | 로컬 하위 프로세스, 원격 서비스 |
MCP는 데이터 계층과 전송 계층으로 나뉩니다. 데이터 계층은 JSON-RPC 메시지, 기능 검색 및 Primitives를 정의하고 전송 계층은 로컬 프로세스나 네트워크 사이의 메시지 전달 방식을 담당합니다. 클라이언트가 보통 이러한 세부 사항을 캡슐화하므로 연동 시 클라이언트의 MCP 설정 진입점을 우선 사용합니다.
Server가 제공하는 기능
MCP Server는 주로 세 가지 Primitives를 제공합니다.
| Primitive | 제어 방식 | 역할 | 연동 시 주요 확인 사항 |
|---|---|---|---|
| Tools | 모델이 호출을 선택할 수 있으며 Host가 실행 정책과 승인을 담당 | API 호출, 파일 쓰기, 데이터베이스 조회 등의 작업 또는 조회 | 입력 Schema, 쓰기 작업, 외부 부작용 및 수동 승인 필요 여부 |
| Resources | 애플리케이션이 선택하고 관리 | 파일, 레코드, API 응답 등의 컨텍스트를 모델에 제공 | 데이터 범위, 민감 정보, 갱신 빈도 및 내용의 신뢰성 |
| Prompts | 보통 사용자가 직접 선택 | 재사용 가능한 상호작용 템플릿 및 매개변수 제공 | 템플릿 출처, 매개변수 의미 및 외부 지시 포함 여부 |
Server는 지원 기능을 선언하고 클라이언트는 사용할 수 있는 Tools, Resources 및 Prompts를 검색합니다. Server가 기능을 제공해도 클라이언트가 반드시 활성화하는 것은 아닙니다. 최종 동작은 Host 버전, 권한 정책 및 사용자 선택에도 좌우됩니다.
Server가 반환하는 내용을 외부 입력으로 취급합니다
Resource, Tool 결과 및 Prompt에는 신뢰할 수 없는 내용이 포함될 수 있습니다. MCP로 반환되었다는 이유만으로 그 안의 지시가 다른 파일, 자격 증명 또는 시스템 서비스에 접근하도록 자동 허용하지 않습니다.
전송 방식 선택
현재 MCP 규격은 stdio와 Streamable HTTP의 두 가지 표준 전송을 정의합니다.
| 전송 | 동작 방식 | 적합한 경우 | 주요 위험 |
|---|---|---|---|
stdio | 클라이언트가 로컬 Server 하위 프로세스를 시작하고 표준 입출력으로 줄 단위 JSON-RPC 메시지 교환 | 로컬 도구, 통제된 디렉터리 및 네트워크 배포가 필요 없는 Server | 시작 명령은 로컬 프로그램 실행과 같으며 Server는 프로세스 권한과 일부 환경 정보를 상속합니다 |
| Streamable HTTP | 클라이언트가 단일 MCP Endpoint에 HTTP POST를 보내고 Server는 JSON 또는 현재 요청 범위의 SSE 스트림 반환 | 원격 서비스, 팀 공유 기능 및 네트워크 인증이 필요한 Server | 서비스 신원, OAuth 또는 Token, 네트워크 경계, 데이터 외부 전송 및 원격 부작용 |
stdio에서는 Server의 stdout에 MCP 메시지만 출력하고 로그는 stderr에 기록해야 합니다. 연결에 실패하면 클라이언트가 수집한 stderr 로그를 확인할 수 있지만 자격 증명이 포함된 전체 로그를 타사에 보내지 않습니다.
현재 Streamable HTTP는 단일 POST Endpoint를 사용하므로 GET 또는 기존 HTTP+SSE 주소를 별도로 설정할 필요가 없습니다. 인증 방식은 Server가 결정합니다. OAuth 흐름이 제공되면 장기 자격 증명을 공유 설정에 직접 기록하기보다 해당 승인 페이지에 따라 인증합니다.
설정 구조 이해
클라이언트마다 필드 이름과 설정 위치가 완전히 같지는 않습니다. 다음은 일반적인 구조 예시이며 그대로 실행할 수 없습니다. Server 배포자의 실제 명령, 매개변수, URL 및 인증 방식으로 모든 자리표시자를 교체합니다.
{
"mcpServers": {
"replace-with-server-name": {
"command": "/absolute/path/to/server-command",
"args": [
"--replace-with-required-argument"
],
"env": {
"SERVICE_API_KEY": "replace-with-client-supported-secret-reference"
}
}
}
}command는 클라이언트가 실제로 실행하는 프로그램이므로 연결 전에 전체 경로와 배포 출처를 확인해야 합니다.args에는 접근을 허용할 디렉터리, 설정 파일 또는 Server 매개변수가 포함될 수 있습니다.env에는 Server에 필요한 최소 환경 변수만 전달합니다. 자격 증명 참조 구문은 클라이언트마다 다릅니다.
알 수 없는 시작 명령을 그대로 복사하지 않습니다
로컬 MCP 설정의 command와 args는 사용자의 컴퓨터에서 실행됩니다. 출처가 불분명한 원클릭 설치 명령을 실행하거나 전체 홈 디렉터리, SSH 디렉터리 또는 시스템 디렉터리를 기본 접근 범위로 지정하지 않습니다.
안전한 연동 단계
1. 클라이언트 지원 확인
클라이언트의 MCP 지원 여부와 stdio, Streamable HTTP 중 지원하는 방식을 확인합니다. 현재 클라이언트 버전의 설정 형식을 사용하고 다른 클라이언트의 예시로 필드를 추측하지 않습니다.
2. Server 신원 확인
Server 공식 저장소, 공급업체 콘솔 또는 조직 관리자에게서 설치 방식을 받습니다. 배포자, 버전, 업데이트 기록, 의존성 및 제거 방법을 확인하고 원격 Server는 도메인, HTTPS 및 인증 흐름도 확인합니다.
3. 기능 및 권한 목록 작성
활성화 전에 Server가 제공하는 Tools, Resources 및 Prompts를 확인합니다. 각 Tool의 입력, 읽기 범위, 쓰기 작업 및 외부 부작용을 기록하고 현재 작업과 무관한 기능은 비활성화합니다.
4. 최소 범위 설정
로컬 Server는 필요한 디렉터리와 환경 변수만 허용하고 원격 Server는 최소 권한 계정 또는 Scope를 사용합니다. 모델 API Key를 범용 MCP 자격 증명처럼 알 수 없는 Server에 보내지 않습니다.
5. 다시 불러오고 검사
클라이언트 설명에 따라 설정을 다시 불러와 Server 연결을 확인하고 클라이언트에 표시되는 기능 목록이 예상과 일치하는지 검사합니다. 연결 성공이 모든 Tool을 활성화해야 한다는 뜻은 아닙니다.
6. 읽기 전용 작업부터 시작
기능을 나열하거나 민감하지 않은 Resource 하나를 읽거나 부작용이 없는 Tool을 호출합니다. 입력, 출력 및 로그를 확인한 뒤 파일 쓰기, 데이터 수정 또는 외부 시스템 호출을 개별적으로 허용합니다.
권한 검토 체크리스트
| 범위 | 연동 전 확인 사항 |
|---|---|
| 로컬 파일 | Server가 읽고 쓸 수 있는 디렉터리, 심볼릭 링크를 따라가거나 디렉터리 외부 파일에 접근하는지 여부 |
| 명령 실행 | Tool이 실행할 프로그램과 매개변수를 모델 또는 외부 내용이 직접 제어하는지 여부 |
| 네트워크 접근 | Server가 접근할 도메인, 내부 서비스 및 타사 API |
| 자격 증명 | Key 또는 Token 저장 위치, 전달할 프로세스나 도메인 및 개별 철회 가능 여부 |
| 데이터 처리 | 입력과 결과의 로컬 외부 전송 여부 및 공급업체의 로그와 호출 데이터 저장 방식 |
| 쓰기 작업 | 수정, 삭제, 제출, 결제 또는 메시지 발송 전에 명확한 확인이 있는지 여부 |
| 업데이트 | Server 패키지나 원격 기능이 변경되면 클라이언트가 권한을 다시 표시하는지 여부 |
원격 Server는 신뢰할 수 있는 HTTPS 주소에만 연결하고 해당 인증 흐름에 따라 승인합니다. 로컬 Server는 절대 명령 경로, 격리 디렉터리 및 일반 사용자 권한을 우선 사용하며 편의를 위해 관리자 권한으로 바로 실행하지 않습니다.
자주 묻는 질문
| 증상 | 우선 확인할 항목 | 조치 |
|---|---|---|
| Server 시작 불가 | 명령 경로, 런타임, 매개변수 및 작업 디렉터리 | 일반 터미널에서 프로그램이 있는지 확인하되 클라이언트를 우회하여 알 수 없는 명령을 직접 실행하지 않습니다 |
| 연결됨으로 표시되지만 Tool이 없음 | Server 기능, 클라이언트 권한 및 버전 | 기능 목록을 다시 불러오고 클라이언트가 해당 Primitive를 지원하는지 확인합니다 |
stdio 연결 직후 끊김 | Server가 stdout에 일반 로그를 출력하는지 여부 | 로그를 stderr에 기록하여 stdout에는 MCP 메시지만 포함되도록 합니다 |
원격 Endpoint에서 401 또는 403 반환 | Server 인증 방식, Token 및 Scope | Server 문서에 따라 다시 승인하고 다른 서비스의 Token으로 바꾸지 않습니다 |
원격 Endpoint에서 404 반환 | URL에 전체 MCP 경로가 포함되는지 여부 | Server 배포자의 Endpoint를 사용하고 모델 API 경로를 임의로 추가하지 않습니다 |
| Tool 읽기는 가능하나 쓰기 불가 | Tool 권한, 디렉터리 범위 및 수동 확인 | 실제로 필요한 경우에만 권한을 확대하고 되돌릴 수 있는 테스트를 다시 수행합니다 |
| Tool 동작이 설명과 다름 | Server 버전, Tool Schema 및 외부 입력 | 해당 Tool을 즉시 비활성화하고 민감 정보를 제거한 증거를 보관하여 Server 배포자에게 문의합니다 |
| 연결 후 예상하지 않은 외부 요청 발생 | Server 네트워크 권한 및 데이터 흐름 | Server 연결을 끊고 자격 증명을 철회한 뒤 로그와 호스트 네트워크 활동을 검사합니다 |
지속적인 사용 권장 사항
- 연결된 Server, 버전, Tool 목록 및 승인 범위를 정기적으로 검토합니다.
- Server마다 독립적이고 철회 가능한 최소 권한 자격 증명을 사용합니다.
- 특히 삭제, 쓰기, 결제, 메시지 발송 및 운영 시스템 작업에서 수동 확인을 유지합니다.
- 알 수 없는 Resource 또는 Tool 결과의 지시를 신뢰할 수 있는 시스템 지시로 취급하지 않습니다.
- 로그, 스크린샷 및 오류 보고서에서 Key, Token, 고객 데이터 및 민감한 경로를 제거해야 합니다.
- Server 사용을 중단할 때는 클라이언트에서 설정을 제거하고 관련 자격 증명을 철회합니다.
모델 클라이언트에 AGTCloud를 설정하려면 CC-Switch 연동 튜토리얼부터 읽거나 왼쪽 타사 통합 디렉터리에서 도구를 선택합니다. 모델 엔드포인트와 요청 필드는 API Reference를 확인합니다. MCP 프로토콜 세부 사항과 버전 변경은 MCP 공식 문서를 기준으로 합니다.