검증 기준: 2026년 8월 27일

확인한 MCP Stable Specification: 2026-07-28

MCP 서버를 운영 환경에 연결하는 일은 LLM에 API 하나를 더 붙이는 작업이 아닙니다. 연결된 Tool이 고객 데이터 조회, 파일 변경, 메시지 전송, 권한 수정이나 배포 같은 실제 작업을 수행한다면 MCP는 곧 운영 시스템의 권한 경로가 됩니다.

따라서 확인해야 할 것은 “MCP가 OAuth를 지원하는가”만이 아닙니다. 어떤 사용자를 인증했고 토큰이 어느 서버를 대상으로 발급됐는지 확인합니다. 허용할 Tool과 Parameter, 고위험 작업의 승인자, Secret과 Tenant의 격리 위치, 권한 회수 방식도 하나의 아키텍처로 연결돼야 합니다.

MCP 자체를 안전하거나 위험한 기술로 단정할 수는 없습니다. MCP는 Host·Client·Server 사이의 통신 형식과 권한 흐름을 표준화하지만 공식 Specification도 Protocol만으로 모든 보안 원칙을 강제할 수는 없다고 밝힙니다. 실제 안전성은 Host의 정책, Server의 권한 검사, Downstream 시스템의 자격증명과 운영 통제에서 결정됩니다.

최신 MCP 버전에서 먼저 달라진 전제

2026년 8월 27일 기준 최신 Stable Revision은 2026-07-28입니다. 이 Revision에서 MCP의 Modern Protocol은 요청마다 Version과 Capability를 선언하는 무상태 구조를 사용합니다. 과거 Revision에서 사용하던 Mcp-Session-Id는 최신 Streamable HTTP에 포함되지 않으며 Server는 해당 Header를 받아도 무시합니다.

이 변화는 “Session 보안을 더 이상 생각하지 않아도 된다”는 뜻이 아닙니다. Protocol-level Session이 없어졌을 뿐, 장바구니 ID나 Workflow ID 같은 상태 Handle, OAuth Token, 사용자 승인 기록과 Downstream Credential은 여전히 존재합니다. 공식 Security Guidance도 Handle 소유만으로 인증했다고 판단하지 말고 검증된 사용자와 Server-side로 묶으며 만료시킬 것을 요구합니다.

OAuth 버전 표기도 구분해야 합니다. MCP 2026-07-28 Authorization 문서는 OAuth 2.1 Draft-13을 참조하지만 IETF의 현재 OAuth 2.1 Working Draft는 Draft-15입니다. OAuth 2.1은 아직 최종 RFC가 아니므로 “OAuth 2.1 호환”이라는 문구보다 resource, Audience Validation, PKCE, Issuer Validation, HTTPS가 실제로 구현됐는지를 확인하는 편이 정확합니다.[6][7][8]

네 개의 Identity를 하나로 취급하지 않는다

운영 MCP 환경에는 최소 네 종류의 주체가 있습니다.

공식 Architecture에서 Host는 여러 Client를 관리하면서 연결 권한, 보안 정책과 사용자 동의를 통제합니다. 각 Client는 하나의 Server와 1:1 관계를 맺고 Server 간 보안 경계를 유지합니다. 보호된 MCP Server는 OAuth Resource Server, MCP Client는 사용자 대신 요청하는 OAuth Client로 정의됩니다.

여기서 인증(Authentication)과 권한 부여(Authorization)를 분리해야 합니다.

사용자가 회사 계정으로 로그인했다는 사실은 인증 결과입니다. 그 사용자가 특정 Tenant의 데이터를 읽을 수 있는지, 특정 Tool로 운영 데이터를 삭제할 수 있는지는 별도의 권한 판단입니다. MCP Server는 로그인 여부만 확인하고 Tool을 실행해서는 안 됩니다. 요청마다 검증된 Principal, Tenant, Scope, Tool, Parameter와 대상 Resource를 함께 평가해야 합니다.[6][7]

주체
역할
보안상 확인할 질문
사용자 또는 업무 주체실제 작업을 요청하는 사람·서비스누구이며 어느 Tenant와 Role에 속하는가
MCP Host·Client사용자 대신 MCP Server에 요청어느 Server를 신뢰하며 어떤 Tool을 노출하는가
MCP ServerTool·Resource·Prompt를 제공하는 OAuth Resource Server토큰과 실제 Tool 권한을 어떻게 검증하는가
Downstream API·데이터 저장소실제 데이터 조회·변경을 수행MCP Server에 어떤 별도 권한을 위임했는가
MCP의 네 주체와 권한 확인 질문
서비스 작동 방식

관측에서 복구와 개선까지 이어지는 운영서비스 지표와 경보를 기준으로 대응하고 변경 이력과 사후 보고를 다음 개선에 연결합니다.

MCP Production Trust Boundary Diagram

[Resource·Prompt·Tool Result 등 신뢰하지 않은 데이터]

신뢰하지 않은 데이터 → LLM Context → 작업 제안 → Policy + Authorization + Approval → 통과한 경우만 실제 Tool 실행

이 구조에서 LLM은 작업을 제안하는 주체이지, 권한을 부여하는 주체가 아닙니다.

사용자 또는 업무 주체
사람, 서비스 계정, 자동화 주체가 로그인하고 동의합니다.
Identity Provider / Authorization Server
사용자를 인증하고 MCP Server A 전용 Token을 발급합니다. 최소 Scope, 짧은 Lifetime과 Step-up을 적용합니다.
MCP Host / Client
허용 Server와 사용자·Role별 Tool Allowlist를 관리합니다. Tool·Parameter를 표시하고 고위험 Action을 승인하며 Server 간 Credential과 Context를 분리합니다.
Trust Boundary 1: MCP Server A 전용 Access Token
resource / audience = MCP Server A입니다. MCP Server는 Issuer·Audience·만료·활성 상태·Scope를 검증합니다. Principal과 Tenant를 Server-side로 연결하고 Tool·정규화된 Parameter의 권한을 검사합니다. Secret Broker·감사·폐기도 맡습니다.
Trust Boundary 2: 별도 Downstream Credential
별도의 Downstream Token 또는 Workload Identity를 사용합니다. MCP Client Token을 전달하지 않습니다.
Downstream API / Database / SaaS
자체 Resource·Scope·Tenant 권한을 검사하고 MCP Server를 독립된 Client로 식별합니다.

Token Audience를 Scope와 혼동하지 않는다

Scope는 “무엇을 할 수 있는가”를 표현합니다. Audience 또는 Resource는 “그 토큰을 어디에서 사용할 수 있는가”를 제한합니다.

예를 들어 orders:write Scope를 가진 토큰이라고 해서 모든 주문 API와 MCP Server가 그 토큰을 받아서는 안 됩니다. 토큰은 특정 MCP Server를 대상으로 발급되고 해당 Server에서만 유효해야 합니다.

MCP Authorization Specification은 Client가 Authorization Request와 Token Request 모두에 resource Parameter를 포함하고 대상 MCP Server의 Canonical URI를 지정하도록 요구합니다. MCP Server는 토큰이 자신을 Intended Audience로 하여 발급됐는지 검증해야 하며 자신에게 발급되지 않은 토큰을 받아들이거나 전달해서는 안 됩니다.

운영 점검에서는 다음 세 질문에 답할 수 있어야 합니다.

Authorization Server는 어떤 resource를 기준으로 토큰을 발급하는가?

MCP Server는 Audience를 어떤 방식으로 검증하는가?

다른 MCP Server나 Downstream API에 같은 토큰을 제시했을 때 확실하게 거부되는가?

마지막 항목은 문서 확인만으로 끝내지 말고 Negative Test로 검증해야 합니다.

Token Passthrough는 Proxy 구현의 지름길이 아닙니다

MCP Client가 가진 Access Token을 MCP Server가 그대로 Downstream API에 전달하는 방식을 Token Passthrough라고 합니다. 최신 MCP Authorization과 Security Best Practices는 이를 명시적으로 금지합니다.

Passthrough를 허용하면 MCP Server가 Token의 원래 Audience를 무시하게 되고 Downstream 시스템에서는 실제 호출 경로와 Client Identity를 구분하기 어려워집니다. 로그에는 MCP Server가 아니라 다른 주체가 직접 호출한 것처럼 남을 수 있으며 토큰 하나가 여러 Resource에서 재사용되면 침해 범위도 커집니다.

권장 구조는 토큰을 두 개의 독립된 Credential로 분리하는 것입니다.

MCP Client → MCP Server:

MCP Server 전용 Token resource / audience = MCP Server

MCP Server → Downstream API:

MCP Server가 별도로 취득한 Downstream Token resource / audience = Downstream API

사용자가 Third-party 서비스 접근을 승인해야 하는 경우에도 Third-party Credential은 MCP Client를 통과하면 안 됩니다. 공식 Elicitation Specification은 사용자가 MCP Server를 직접 승인하고 Server가 Downstream Token을 저장·관리하도록 요구합니다. Protocol Core는 무상태여도 이러한 외부 연동 Credential Store는 상태를 가져야 합니다.[7][8]

최소 권한은 Scope 하나로 끝나지 않는다

read, write, admin Scope 몇 개를 만든 것만으로 최소 권한이 구현되지는 않습니다. 운영 환경에서는 적어도 네 단계의 Gate가 필요합니다.

MCP 공식 Security Guidance도 모든 Scope를 처음부터 발급하기보다 낮은 권한으로 시작하고 필요한 작업이 처음 발생했을 때 최소 Scope만 요청하는 Progressive Scope Model을 권고합니다. Server는 부족한 Scope에 대해 403과 정확한 Scope Challenge를 반환할 수 있습니다.

Tool Allowlist는 Server와 사용자에 따라 달라져야 합니다

하나의 MCP Server가 노출한 모든 Tool을 모든 사용자와 Agent에 자동으로 제공해서는 안 됩니다.

Allowlist는 적어도 다음 단위로 관리합니다.

허용한 MCP Server

사용자·Role·Tenant별 허용 Tool

Development·Staging·Production 환경별 허용 Tool

조회·변경·삭제·외부 전송 등 Action 유형

대상 Resource와 최대 작업량

자동 실행 또는 승인 필요 여부

Tool 이름도 전역적으로 고유한 Security Identity가 아닙니다. 공식 Specification은 Tool 이름의 고유성이 Server 내부에만 적용되며 Server 이름이 중복될 수 있다고 설명합니다. 따라서 delete_file이라는 이름이나 Server Display Name이 아니라, 신뢰된 Server Identity와 Tool ID의 조합으로 정책을 관리해야 합니다.

JSON Schema 검증과 권한 검사는 다른 작업입니다

MCP Tool은 inputSchema로 Parameter의 구조와 형식을 정의할 수 있습니다. 그러나 Schema를 통과했다는 것은 요청의 형태가 맞다는 뜻일 뿐, 호출자가 그 값에 접근할 권한이 있다는 뜻은 아닙니다.

예를 들어 다음 Parameter가 Schema상 유효하더라도:

{ "tenant_id": "tenant-b", "record_id": "1234", "action": "delete" }

호출자가 tenant-b에 속하지 않는다면 Server는 거부해야 합니다.

Server는 다음 순서로 Parameter를 검사해야 합니다.

형식과 필수 값 검증

Encoding·경로·Identifier 정규화

허용된 값과 범위 확인

Principal과 Tenant의 Resource 소유 관계 확인

업무 규칙과 현재 상태 확인

대량 작업·외부 전송·고위험 Action 여부 평가

승인 조건 확인

실행 직전 권한 재검증

공식 Tool Specification도 Server에 모든 입력 검증, 적절한 Access Control, Rate Limit과 Output Sanitization을 요구합니다. Client에는 민감한 작업의 확인, 호출 전 입력 표시, LLM에 전달하기 전 결과 검증과 감사 기록을 권고합니다.[6][7]

Gate
판단 질문
예시
Server Admission이 MCP Server 자체를 연결해도 되는가승인된 Endpoint·Package·Issuer인가
Tool Exposure이 사용자에게 어떤 Tool을 보여줄 것인가조회 Tool만 허용, 삭제 Tool 제외
Invocation Authorization이 Tool과 Parameter를 실행해도 되는가사용자가 해당 Project·Record를 수정할 권한이 있는가
Impact Approval이 Action을 지금 실행해도 되는가Production 삭제·대량 전송·권한 변경 승인
Server 연결부터 실행 승인까지 네 Gate

Human Approval은 권한 검사를 대신하지 않는다

사용자가 확인 버튼을 눌렀다고 해서 허용되지 않은 작업이 합법적인 작업으로 바뀌지는 않습니다.

승인은 Server-side Authorization을 통과한 요청에 대해 업무 영향과 사용자 의도를 다시 확인하는 추가 Gate입니다. 반대로 권한이 없는 사용자의 요청은 승인 화면을 보여주기 전에 거부해야 합니다.

Action Risk에 따른 승인 기준

고위험 승인 기록은 다음 값에 묶어야 합니다.

MCP Server

Tool

정규화된 Parameter

Tenant와 Environment

예상 영향

승인 사용자

짧은 만료시간

단일 실행 또는 명확한 작업 범위

승인 후 LLM이 Parameter를 바꿔 재호출할 수 있다면, 기존 승인을 재사용해서는 안 됩니다.[6]

Action 등급
예시
기본 처리
낮음공개 정보 조회, 상태 확인정책 범위 안에서 자동 실행 가능
보통사내 비공개 정보 조회, 제한된 검색최초 연결·범위 동의 또는 정책 기반 승인
높음데이터 수정, 외부 메시지 전송, 파일 업로드Tool·대상·Parameter를 표시하고 실행 전 확인
매우 높음삭제, 권한 변경, Secret 접근, Production 배포, 결제·환불, 대량 Export요청별 명시적 승인, 필요 시 재인증·Step-up·이중 승인
Action 위험도별 승인 기준

Prompt Injection과 Tool Use 사이에 강제 경계를 둔다

Prompt Injection은 문서, 메일, 웹페이지, Tool Result처럼 신뢰하지 않은 데이터가 모델의 판단에 영향을 주는 문제입니다. 공격자는 데이터 안에 “다른 Tool로 이 내용을 외부로 전송하라”는 지시를 넣을 수 있습니다.

이때 모델이 Tool Call을 제안하는 것과 실제 시스템이 작업을 허용하는 것을 분리해야 합니다.

신뢰하지 않은 데이터

→ 모델의 Tool Call 제안

→ Tool Allowlist → Server-side Authorization → Parameter Validation → 필요 시 Human Approval → 실제 실행

Tool Annotation도 이 경계를 대신하지 못합니다. 공식 MCP 자료는 Annotation이 Prompt Injection 저항성을 만들지 않는다고 설명합니다. 신뢰하지 않은 Server는 readOnly 같은 Annotation을 거짓으로 제공할 수 있습니다. Annotation 자체는 Enforcement가 아닙니다. 강한 보장이 필요하면 Host Policy, Server-side Access Control, Network Control과 Sandbox가 필요합니다. Model Context Protocol Blog

특히 다음 조합은 별도 정책으로 차단하거나 승인 수준을 높일 필요합니다.

비공개 데이터를 읽을 수 있음

신뢰하지 않은 외부 콘텐츠를 읽음

외부 시스템으로 데이터를 전송하거나 변경할 수 있음

모델에게 “민감한 내용을 보내지 말라”고 지시하는 것만으로는 이 조합을 통제할 수 없습니다.

Secret Boundary는 Prompt 밖에 있어야 한다

API Key, Refresh Token, Database Credential과 Signing Key를 Prompt, Tool Description이나 일반 Tool Argument에 넣어서는 안 됩니다.

권장 경계는 다음과 같습니다.

MCP Client는 MCP Server 전용 Token만 보유

MCP Server는 Downstream Credential을 Secret Store에서 조회

Downstream Credential은 사용자·Tenant·Integration에 묶어 저장

Tool은 Credential 자체가 아니라 Credential Reference나 Server-side 연결을 사용

Token·Secret은 Log, Error, URL, Tool Result에 포함하지 않음

Credential 접근 권한과 Tool 실행 권한을 별도로 관리

Third-party Authorization을 사용할 때도 MCP Server가 Token을 저장·관리하고 MCP Client에는 전달하지 않아야 합니다. Elicitation URL에는 Credential이나 개인정보를 넣을 수 없으며 사전 인증된 URL도 전달해서는 안 됩니다.[6]

Local stdio Server는 별도의 위험 모델을 가진다

MCP Authorization Specification에서 HTTP Authorization은 선택적 기능이며 stdio Transport는 같은 OAuth 흐름을 따르기보다 환경에서 Credential을 가져오도록 정의돼 있습니다. 그러나 이는 Local Server가 신뢰된다는 뜻이 아닙니다.

Local MCP Server는 MCP Client와 같은 사용자 권한으로 실행될 수 있습니다. 따라서 설치 전에 실제 실행 Command를 보여주고 파일시스템·네트워크 접근을 제한하며 Sandbox와 최소 권한 실행을 적용해야 합니다. 공식 Guidance도 One-click 설정에서 정확한 Command 표시와 명시적 승인, 파일·네트워크 제한을 요구합니다.[7][8]

Tenant는 모델이 보내는 값으로 결정하지 않는다

멀티테넌트 환경에서 가장 위험한 설계 중 하나는 Tool Parameter의 tenant_id를 그대로 신뢰하는 것입니다.

Tenant는 다음 중 검증된 Server-side 근거로 결정해야 합니다.

인증된 사용자와 Tenant Membership

Authorization Grant

Server-side Policy Mapping

연결된 Downstream Account

Workload Identity와 배포 환경

Tool Parameter에 Tenant나 Project ID가 들어오더라도 그 값은 대상 선택 값일 뿐입니다. Server는 호출자가 해당 대상에 접근할 수 있는지 다시 확인해야 합니다.

Cache, 상태 Handle, Downstream Token과 승인 기록에도 같은 원칙을 적용합니다. 다음처럼 사용자와 Tenant를 Binding하지 않은 전역 Key는 피해야 합니다.

나쁜 상태 Key:

workflow:1234

권장 구조: tenant-a:user-42:workflow:1234

최신 MCP는 Protocol-level Session이 없지만 여러 요청에 걸친 Workflow Handle은 일반 Tool Argument로 전달될 수 있습니다. 공식 Guidance는 Handle 소유를 인증으로 간주하지 않고 검증된 사용자에게 Server-side로 묶으며 만료시킬 것을 요구합니다.[8]

서비스 작동 방식

캠페인에 필요한 데이터부터 연결캠페인에서 역산한 이벤트와 속성을 정의하고 식별자와 전송 시점, 측정 도구의 역할을 맞춥니다.

Credential Lifetime과 Revocation을 함께 설계한다

짧은 Token Lifetime은 유출 피해를 줄이지만 Revocation을 대신하지는 않습니다. 반대로 Revocation Endpoint가 있더라도 Resource Server가 오래된 권한 결과를 장기간 Cache하면 즉시 차단되지 않을 수 있습니다.

MCP Authorization Security Considerations는 짧은 Access Token과 Public Client의 Refresh Token Rotation을 요구합니다. RFC 7009는 Access·Refresh Token을 폐기하는 표준 Endpoint를, RFC 7662는 Resource Server가 Token의 Active·Expired·Revoked 상태와 권한 Metadata를 조회하는 방식을 정의합니다.

사용자 퇴사, Tenant 이동, 외부 서비스 연결 해제나 보안 사고가 발생했을 때는 다음을 한꺼번에 처리할 수 있어야 합니다.

사용자와 MCP Server 사이의 Grant 폐기

MCP Refresh·Access Token 무효화

MCP Server가 보관한 Downstream Grant 폐기

Tool과 Tenant Policy 제거

State Handle과 미사용 승인 기록 무효화

해당 Server 연결 또는 Client Registration 비활성화

이미 진행 중인 고위험 작업 취소

“Token이 곧 만료된다”는 이유로 Revocation 경로를 생략하면 안 됩니다.[8]

Credential·상태
보관 주체
Lifetime 원칙
폐기 지점
MCP Access TokenMCP Client짧게, 요청마다 검증Authorization Server·MCP Server
MCP Refresh TokenMCP Client의 안전한 저장소기밀 저장, Public Client는 회전Authorization Server
Downstream TokenMCP Server Secret Store사용자·Tenant·Integration별 분리Downstream Authorization Server·MCP Server
State HandleMCP Server예측 불가능, 목적 제한, 짧게Server State Store
Human ApprovalHost 또는 Policy StoreParameter에 Binding, 단일 실행 또는 짧게Approval Store
Server·Tool Trust Grant관리 Plane변경 검토와 주기적 재승인Host·Policy Engine
Credential과 상태별 보관·수명·폐기 지점

Audit은 Prompt 전체를 저장하는 일이 아니다

이 글의 Audit은 Agent Observability와 목적이 다릅니다. Model Latency, Retrieval 시간, Token 사용량과 Retry 분석은 Topic 020의 범위입니다. MCP Security Audit은 권한 판단과 실제 Side Effect를 재구성하는 데 초점을 둡니다.

최소한 다음 이벤트를 기록합니다.

검증된 사용자 또는 Service Principal

Tenant와 Environment

MCP Server Identity와 Authorization Server Issuer

Protocol Version

Tool ID와 Version

정규화된 Parameter의 Redacted Summary 또는 Hash

요청한 Scope와 실제 부여된 Scope

Audience·Token Validation 결과

적용한 Policy Version

Allow·Deny·Step-up 결정

Human Approval 주체·시각·범위

Downstream Resource와 Action

실행 결과와 Error

Credential·Grant·Server 폐기 이벤트

Tool 목록과 권한 설정 변경

반대로 다음 값은 기본 Audit Log에서 제외하거나 별도 보호 저장소로 분리합니다.

Access Token과 Refresh Token 원문

API Key와 Secret

전체 Prompt·Completion

민감한 Tool Result 전체

개인정보가 포함된 원문 Parameter

인증된 URL이나 Credential Reference

공식 Tool Specification 역시 Tool Usage를 감사 목적으로 기록하도록 권고하지만 무엇을 기록할지는 별도의 데이터 최소화 정책이 필요합니다.[6]

Server Trust는 이름이나 Tool 설명으로 결정하지 않는다

MCP의 clientInfo는 Protocol상 Self-reported 값이며 보안 판단에 사용해서는 안 됩니다. Tool Annotation도 신뢰한 Server에서 온 경우가 아니라면 신뢰할 수 없습니다. Server 이름도 전역적으로 중복될 수 있습니다.

Server Trust Record에는 최소한 다음을 남깁니다.

운영·배포 주체

Remote Endpoint 또는 Local Package의 정확한 식별자

Package Version·Digest·Signature

Authorization Server Issuer

허용 Redirect URI와 Client Registration 방식

노출 Tool·Resource·Prompt 목록

파일시스템·네트워크·Downstream 접근 범위

데이터 저장·보존·삭제 정책

Update Channel과 자동 업데이트 여부

보안 연락처와 Incident 대응 경로

연결 비활성화·제거 절차

Tool 목록이 변경되면 단순 UI 갱신으로 끝내지 말고 새 Tool과 기존 Tool의 권한·Risk 차이를 다시 검토해야 합니다.[6]

Third-party MCP는 별도 Trust Domain으로 취급한다

외부 MCP Server를 연결할 때는 “많이 쓰는 Server인가”보다 다음을 확인합니다.

Remote Server

Endpoint와 운영 주체가 확인되는가

Authorization Server Issuer가 예상한 값과 일치하는가

Client Credential을 다른 Authorization Server와 공유하지 않는가

OAuth Metadata Discovery URL이 내부 IP·Cloud Metadata·Localhost를 가리킬 수 없는가

Tool과 Scope가 실제 사용 목적보다 넓지 않은가

데이터가 어느 지역과 시스템에 저장되는가

Tool 목록·권한·약관 변경을 탐지할 수 있는가

즉시 비활성화할 Kill Switch가 있는가

MCP Client는 Authorization Server별로 Registration State, Credential과 Token을 분리해야 합니다. Metadata Discovery 과정에서는 악성 Server가 내부 주소나 Cloud Metadata Endpoint를 가리키는 SSRF 위험이 있습니다. HTTPS 강제, Private·Reserved IP 차단, Redirect 재검증과 Egress 통제가 필요합니다.

Local Server

Package Source와 Publisher를 확인했는가

실제 실행 Command와 Argument를 검토했는가

자동 업데이트로 실행 내용이 바뀌는가

사용자 Home·SSH Key·Browser Profile·환경변수 접근이 필요한가

외부 네트워크 Egress가 필요한가

Sandbox 또는 별도 OS User로 실행할 수 있는가

제거 후 Credential과 State가 남지 않는가

Local Server는 설치 파일이 아니라 사용자의 권한으로 실행되는 코드입니다. Discovery나 편리한 설치 절차를 Trust Approval로 간주해서는 안 됩니다.[8]

MCP Production Security Checklist

아래 항목 중 하나라도 명확히 답할 수 없다면, 전체 권한을 한 번에 연결하기보다 Read-only Sandbox나 제한된 Tenant에서 먼저 검증해야 합니다.

Version과 Transport 1
운영 Client와 Server가 지원하는 MCP Revision을 기록했습니다.
Version과 Transport 2
2026-07-28 Modern Protocol과 Legacy Session 기반 Revision을 구분했습니다.
Version과 Transport 3
HTTP 요청마다 Protocol Version을 검사하고 불일치 요청을 거부합니다.
Version과 Transport 4
Streamable HTTP Server가 Origin을 검증합니다.
Version과 Transport 5
Local HTTP Server는 기본적으로 Localhost 또는 제한된 IPC에만 Binding합니다.
Version과 Transport 6
stdio Server가 어떤 환경변수와 OS 권한을 상속하는지 확인했습니다.
Server Trust 1
허용 MCP Server Endpoint 또는 Package를 Allowlist로 관리합니다.
Server Trust 2
Display Name이나 Self-reported serverInfo를 Security Identity로 사용하지 않습니다.
Server Trust 3
Remote Server의 운영 주체, Domain, TLS와 Authorization Server Issuer를 확인했습니다.
Server Trust 4
Local Server의 정확한 실행 Command·Package Version·Digest를 검토했습니다.
Server Trust 5
Server·Tool 목록 변경 시 재승인 또는 Risk Review가 실행됩니다.
Server Trust 6
연결을 즉시 차단하는 Kill Switch가 있습니다.
Authentication과 Authorization 1
사용자 또는 Service Principal을 검증하는 Authentication Boundary가 있습니다.
Authentication과 Authorization 2
MCP Server가 매 요청의 Token을 검증합니다.
Authentication과 Authorization 3
사용자 인증과 Tool 실행 권한 검사를 분리합니다.
Authentication과 Authorization 4
Principal·Role·Tenant Mapping을 Server-side에서 관리합니다.
Authentication과 Authorization 5
부족한 권한은 401과 403을 구분해 거부합니다.
Authentication과 Authorization 6
낮은 권한으로 시작하고 필요한 Action에서만 Step-up합니다.
Token Audience와 Passthrough 1
Authorization Request와 Token Request에 MCP Server의 resource를 보냅니다.
Token Audience와 Passthrough 2
MCP Server가 자신을 Intended Audience로 한 Token만 수락합니다.
Token Audience와 Passthrough 3
다른 API나 MCP Server용 Token을 제시하는 Negative Test가 실패합니다.
Token Audience와 Passthrough 4
Token을 Query String이나 Tool Parameter로 전달하지 않습니다.
Token Audience와 Passthrough 5
MCP Client Token을 Downstream API로 전달하지 않습니다.
Token Audience와 Passthrough 6
Downstream API에는 별도 Token 또는 Workload Identity를 사용합니다.
Token Audience와 Passthrough 7
Authorization Server별 Client Credential과 Token Store가 분리돼 있습니다.
Tool과 Parameter Policy 1
사용자·Role·Tenant·Environment별 Tool Allowlist가 있습니다.
Tool과 Parameter Policy 2
Model이 선택했다는 이유만으로 Tool을 실행하지 않습니다.
Tool과 Parameter Policy 3
모든 Tool Input을 Schema와 업무 규칙으로 검증합니다.
Tool과 Parameter Policy 4
Identifier·Path·URL·수량·날짜를 정규화한 뒤 권한을 검사합니다.
Tool과 Parameter Policy 5
Tool Parameter의 Tenant·Project ID를 그대로 신뢰하지 않습니다.
Tool과 Parameter Policy 6
대상 Resource가 호출자의 Tenant에 속하는지 확인합니다.
Tool과 Parameter Policy 7
대량 작업, 외부 전송과 반복 호출에 별도 Limit를 둡니다.
Tool과 Parameter Policy 8
Tool Output을 정제·검증한 뒤 LLM Context에 전달합니다.
Tool과 Parameter Policy 9
Tool Annotation은 신뢰한 Server의 Hint로만 사용합니다.
Human Approval과 High-impact Action 1
고위험 Action 목록과 소유자가 정의돼 있습니다.
Human Approval과 High-impact Action 2
승인 화면에 Tool, 대상, Parameter와 예상 영향을 표시합니다.
Human Approval과 High-impact Action 3
승인 전에 Server-side Authorization을 완료합니다.
Human Approval과 High-impact Action 4
승인을 정확한 Tool·Parameter·Tenant·Environment에 Binding합니다.
Human Approval과 High-impact Action 5
승인 후 Parameter가 바뀌면 다시 승인받습니다.
Human Approval과 High-impact Action 6
삭제·권한 변경·Production 작업·결제·대량 Export는 요청별 승인 대상입니다.
Human Approval과 High-impact Action 7
필요한 Action에는 재인증, Scope Step-up 또는 이중 승인을 적용합니다.
Human Approval과 High-impact Action 8
자동 실행 가능한 Action과 사람이 승인해야 하는 Action이 문서화돼 있습니다.
Prompt Injection Boundary 1
Resource·Prompt·Tool Result를 기본적으로 신뢰하지 않은 입력으로 취급합니다.
Prompt Injection Boundary 2
LLM의 Tool Call은 실행 명령이 아니라 제안으로 취급합니다.
Prompt Injection Boundary 3
Prompt 안의 지시가 Tool Allowlist나 권한 정책을 바꿀 수 없습니다.
Prompt Injection Boundary 4
비공개 데이터 조회 후 외부 전송 Tool 사용 시 승인 수준을 높입니다.
Prompt Injection Boundary 5
모델 지시문이 아니라 Host·Server·Network Policy로 Exfiltration을 통제합니다.
Prompt Injection Boundary 6
신뢰하지 않은 콘텐츠가 포함된 실행 경로를 Audit에서 식별 가능합니다.
Secret과 Tenant Isolation 1
Secret을 Prompt, Tool Description, URL이나 일반 Argument에 넣지 않습니다.
Secret과 Tenant Isolation 2
Downstream Token을 MCP Server의 보호된 Secret Store에 보관합니다.
Secret과 Tenant Isolation 3
Token을 사용자·Tenant·Integration 단위로 분리합니다.
Secret과 Tenant Isolation 4
한 Tenant의 Cache·State·Credential이 다른 Tenant에서 조회되지 않습니다.
Secret과 Tenant Isolation 5
State Handle을 인증 수단으로 사용하지 않습니다.
Secret과 Tenant Isolation 6
State Handle을 사용자·Tenant에 Binding하고 만료시킵니다.
Secret과 Tenant Isolation 7
Error와 Audit Log에 Token·Secret이 포함되지 않습니다.
Lifetime과 Revocation 1
Access Token이 불필요하게 장기간 유효하지 않습니다.
Lifetime과 Revocation 2
Refresh Token을 기밀로 저장하고 필요한 경우 회전합니다.
Lifetime과 Revocation 3
사용자 Grant와 Downstream Grant의 폐기 경로를 각각 보유합니다.
Lifetime과 Revocation 4
Server·Tool·Client Registration을 즉시 비활성화하는 경로가 있습니다.
Lifetime과 Revocation 5
사용자 퇴사·Tenant 이동·연결 해제 시 자동 폐기 절차가 있습니다.
Lifetime과 Revocation 6
권한 Cache 시간이 목표 Revocation 시간보다 길지 않습니다.
Lifetime과 Revocation 7
State Handle과 미사용 Approval도 함께 무효화합니다.
Lifetime과 Revocation 8
진행 중인 고위험 작업을 취소하거나 차단하는 경로가 있습니다.
Audit과 Incident Response 1
Allow·Deny·Step-up·Approval·Revocation 결정을 기록합니다.
Audit과 Incident Response 2
사용자, Tenant, Server, Tool, Policy Version과 결과를 연결하는 기록이 있습니다.
Audit과 Incident Response 3
Parameter는 Redaction 또는 Hash를 적용해 기록합니다.
Audit과 Incident Response 4
Raw Token·Secret·민감 Prompt 전체를 일반 Log에 남기지 않습니다.
Audit과 Incident Response 5
Tool과 Scope 변경 이력을 보존합니다.
Audit과 Incident Response 6
비정상 호출량·반복 실패·Cross-tenant 시도를 탐지합니다.
Audit과 Incident Response 7
Credential 유출 시 어떤 Grant와 Downstream 연결을 폐기할지 Runbook이 있습니다.
Audit과 Incident Response 8
사고 후 실제 실행된 Side Effect를 재구성하는 기록이 있습니다.

연결을 보류해야 하는 조건

다음 중 하나라도 존재하면 Production 연결을 보류하는 편이 낫습니다.

MCP Server가 Token Audience를 검증하지 않습니다.

Client Token을 Downstream API로 그대로 전달합니다.

모든 Tool을 모든 사용자에게 노출합니다.

Tenant를 Prompt나 Tool Argument만으로 결정합니다.

고위험 Action을 Model 판단만으로 자동 실행합니다.

Secret이 Prompt·Argument·Log에 포함됩니다.

Third-party Server의 운영 주체와 실행 권한을 확인할 수 없습니다.

Credential과 연결을 폐기하는 경로가 없습니다.

실행 결과를 어느 사용자·Tenant·승인과도 연결할 수 없습니다.

연결 성공보다 거부 성공을 시험해야 한다

MCP Server가 정상적으로 연결되고 Tool이 호출되는지만 확인하면 보안 검증의 절반도 끝나지 않습니다.

운영 전에는 다음 요청이 확실히 실패하는지 시험해야 합니다.

다른 Audience용 Token

만료되거나 폐기된 Token

Scope가 부족한 Token

허용되지 않은 Tool

다른 Tenant의 Resource ID

승인 후 Parameter가 변경된 요청

다른 사용자의 State Handle

허용하지 않은 Downstream Destination

비활성화한 Server와 Client Credential

Production 연결 판정 기준은 “Agent가 작업을 수행할 수 있는가”가 아닙니다.

잘못된 사용자, Token, Tool, Parameter, Tenant와 승인으로는 작업을 수행할 수 없으며 이미 부여한 권한을 신속하게 회수하고 그 과정을 감사 기록으로 재구성할 수 있는가.

여기에 답할 수 있을 때 MCP는 연결 기능만이 아니라 통제 가능한 운영 권한 경로가 됩니다.