Resources 는 MCP 의 읽기 전용 쪽이야. 고유한 이름을 갖고 가져올 수 있는 건 뭐든 여기로 들어와. 디스크의 파일, DB 의 row, 문서 페이지, 메모리 상태의 스냅샷. Resource 하나에는 URI (선 위에서 쓰는 이름), mime type, 붙여도 되는 annotation, 그리고 텍스트나 바이너리인 content 가 있어.
Protocol 이 열어둔 resource method 는 셋이야. resources/list 는 쓸 수 있는 resource 를 돌려주고, resources/read 는 URI 로 지목한 resource 하나의 content 를 돌려줘. resources/subscribe 는 server 가 지원한다고 밝힌 경우에만 쓸 수 있는데, 특정 resource 가 바뀌면 client 가 알림을 받게 해줘. 이 구독이 host 가 화면을 늘 최신으로 유지하고 싶을 때 실시간 UI 의 바탕이 돼.
머릿속에 넣어둘 그림은 이거야. Resource 는 user 한테 묻지 않고 host 가 읽어도 되는 것. 설계상 안전하거든 — side effect 도 없고, 상태를 바꾸지도 않고, 되돌릴 수 없는 동작도 없어. 그래서 host 가 확인 절차 없이 마음껏 목록을 뽑고 미리 당겨올 수 있는 거야.
흔한 모양은 이래. Postgres MCP server 는 table 마다 resource 를 하나씩 열어두고 (URI 는 postgres:///orders 같은 식), filesystem server 는 허용된 경로마다, 문서 server 는 페이지마다 하나씩 열어. Tool 이 뭔가를 바꾸는 쪽이라면, Resource 는 그냥 읽히기를 기다리며 가만히 앉아 있는 쪽이야.