MCP 리소스 vs 툴, 언제 무엇을
MCP resource와 tool은 같은 서버에 붙을 수 있지만 누가 선택하고, 부작용이 있는지가 갈립니다. 스펙상 Resources는 애플리케이션(호스트)이 컨텍스트로 끌어오는 URI 기반 데이터이고, Tools는 모델이 스키마를 보고 호출하는 실행 가능한 함수입니다. Cursor는 둘 다 지원합니다(Tools·Resources·Prompts).
인접 글과 축을 나눕니다. mcp-tool-schema는 도구 description·required·실패 메시지 설계이고, mcp-auth-fail은 needsAuth·재연결입니다. 이 글은 resource vs tool 선택만 다룹니다. 요금·플랜·토큰·제휴 링크는 없습니다. 근거는 MCP Resources, MCP Tools, Cursor MCP입니다.
resource는 언제?
한 줄 답: 읽어서 컨텍스트로 넣을 데이터이고, 모델이 “실행”보다 참조해야 할 때 resource를 고릅니다. URI로 식별되고 resources/list·resources/read로 가져옵니다.
스펙은 Resources를 application-driven으로 설명합니다. 호스트가 어떤 조각을 모델에 넣을지 정하고, 서버는 파일·스키마·문서·앱 상태 같은 수동 데이터 소스를 노출합니다.
resource가 맞는 신호:
| 신호 | 왜 resource인가 |
|---|---|
| 읽기 위주 | 내용·스냅샷·스펙을 가져와 이해하면 끝 |
| URI로 고정 | file://…, docs://guide, 템플릿 URI로 주소가 있음 |
| 부작용 최소 | 호출만으로 DB를 바꾸거나 메일을 보내지 않음 |
| 컨텍스트 공급 | 에이전트 프롬프트에 “이 문서/스키마”를 붙이는 용도 |
| 구독·갱신 | subscribe/listChanged로 변경 알림이 의미 있음 |
실무 예:
- API OpenAPI·DB 스키마 — 한 번 읽어 호출 형식을 맞출 때.
- 정책·런북·ADR — 긴 문서를 컨텍스트로 넣을 때.
- 고정 설정 스냅샷 — “현재 feature flag 목록”처럼 조회 전용.
- Resource template —
ticket://{id}처럼 파라미터 URI로 같은 종류의 문서를 열 때.
피해야 할 오용:
- “읽기인데 인자·필터가 복잡하고 매번 다른 쿼리” → 그건 조회라도 tool에 가깝습니다.
- resource
read안에서 쓰기·삭제·전송을 숨기기 → 모델·승인 UI가 부작용을 못 봅니다.
Prefer resource when:
- Data is addressable by URI
- Host/user should choose what enters context
- Effect is read / snapshot / reference
tool은 언제?
한 줄 답: 모델이 언제 쓸지 고르고, JSON Schema 인자로 행동을 수행해야 할 때 tool을 고릅니다. tools/list로 발견하고 tools/call로 실행합니다.
스펙상 Tools는 모델이 외부 시스템과 상호작용하게 합니다(조회·API·계산·쓰기). Cursor 문서도 Tools를 “AI model to execute”로, Resources를 “read and referenced”로 나눕니다. 기본 승인 UI·Run Mode도 도구 호출 축에 붙습니다.
tool이 맞는 신호:
| 신호 | 왜 tool인가 |
|---|---|
| 모델 선택 | 사용자 요청을 보고 에이전트가 호출 여부를 결정 |
| 인자 스키마 | required·enum·범위가 있는 inputSchema |
| 부작용 가능 | 생성·갱신·삭제·전송·배포 |
| 실패 회복 | isError·재시도·다른 인자로 다시 시도 |
| 승인 필요 | 사람이 인자 펼쳐 보고 Allow할지 정함 |
실무 예:
- 이슈 생성·상태 변경 —
create_ticket,transition_issue. - 검색·필터 조회 —
jql,query,limit처럼 매 호출 인자가 다름. - 파일/드라이브 쓰기·공유 — 읽기-only resource로 덮지 않음.
- 빌드·테스트 트리거 — 실행 결과가 로그·아티팩트로 돌아옴.
스키마 문장·required 설계는 mcp-tool-schema로 넘깁니다. 여기서는 **“행동이냐 참조냐”**만 고릅니다.
Prefer tool when:
- Model should decide timing and arguments
- Side effects or parameterized queries
- Approval / Run Mode should see the call
둘 다 있으면?
한 줄 답: 카탈로그·본문은 resource, 검색·변경·액션은 tool로 나누거나, tool 결과에 resource link / embedded resource를 돌려 읽기 후속을 붙입니다. 같은 데이터를 양쪽에 중복 노출하지 않습니다.
스펙은 tool 결과가 Resource Links나 Embedded Resources를 포함할 수 있다고 합니다. 전형적인 패턴:
| 패턴 | resource 역할 | tool 역할 |
|---|---|---|
| 카탈로그 + 액션 | resources/list로 문서·티켓 URI | search_* / update_*로 찾기·바꾸기 |
| 액션 → 링크 | 결과 URI를 resources/read로 후속 읽기 | create_*가 새 URI를 반환 |
| 템플릿 + 완성 | URI template로 주소 체계 | tool이 id를 고르거나 생성 |
| 읽기 전용 미러 | 정책 PDF·스펙 | 없음(쓰기 tool만 다른 서버) |
선택 체크리스트:
[ ] “이 이름”이 고정 URI로 열리면 → resource
[ ] 매 요청마다 인자·필터·페이지가 바뀌면 → tool
[ ] 쓰기가 있으면 → 반드시 tool (resource read에 숨기지 않음)
[ ] tool이 큰 본문을 매번 반환하면 → link/URI로 넘기고 resource read
[ ] 승인 UI에 안 보이는 부작용이 있는가? → tool로 드러내기
[ ] needsAuth로 도구가 비면 → mcp-auth-fail (이 글 범위 밖)
실무 한 줄: 컨텍스트는 resource로 싸고, 결정은 tool로 시킨다. Drive에서 “스펙 파일 URI를 읽고(resource/또는 read tool), 티켓은 별도 create tool”처럼 서버를 쪼개도 됩니다. Cursor Available Tools는 주로 tool 목록이므로, resource만 있는 서버는 호스트 UI·명시 @ 참조에 더 의존할 수 있습니다—제품 화면을 확인하세요.
한 줄 정리: resource = URI 컨텍스트(읽기), tool = 모델 실행(행동), 둘 다 = 카탈로그/본문 + 액션/링크. 스키마 문장·인증 실패 글과 축이 다릅니다.
FAQ
resource와 tool을 이름이 비슷하면 어떻게 구분하나요?
프로토콜 메서드로 나눕니다. resources/*면 컨텍스트 데이터, tools/*면 호출 가능한 함수입니다. UI 라벨만 보고 판단하지 마세요.
조회(GET)만 하는 API도 tool이어야 하나요?
인자가 매번 달라지고 모델이 타이밍을 고르면 tool이 자연스럽습니다. 고정 문서·스키마 스냅샷이면 resource가 맞습니다. “읽기 = 무조건 resource”는 아닙니다.
mcp-tool-schema·mcp-auth-fail과 무엇이 다른가요?
mcp-tool-schema는 description·required·에러 문구. mcp-auth-fail은 needsAuth·OAuth 재연결. 이 글은 resource vs tool 선택 축입니다.
Cursor에서 resource를 어떻게 쓰나요?
Cursor는 Resources를 지원한다고 문서에 명시합니다. 서버가 resources capability를 선언하고 list/read를 구현해야 합니다. 채팅의 Available Tools는 tool 중심이므로, resource UX는 서버·호스트 버전에 따라 다릅니다—로그와 Customize 카드로 확인하세요.
출처 (Sources)
- MCP Resources — URI·list/read·application-driven
- MCP Tools — list/call·스키마·resource link/embed
- MCP server concepts — tools vs resources 요약표
- Cursor MCP — Tools·Resources 지원, Available Tools, 승인
- 인접: mcp-tool-schema(스키마 설계), mcp-auth-fail(needsAuth)