발견

발견 (Discovery)

server/discover가 무엇이고, 클라이언트가 서버의 지원 프로토콜 버전·기능·정체성을 다른 요청보다 먼저 조회하는 데 어떻게 쓰이는지 설명하는 페이지예요. 서버는 반드시 server/discover를 구현해야 해요.

출처: 문서

본문

server/discover는 클라이언트가 다른 어떤 요청을 보내기 전에 서버의 지원 프로토콜 버전, 기능(capabilities), 정체성(identity)을 조회할 수 있게 해 줘요. 서버는 이를 반드시(MUST) 구현해야 해요.

요청 (Request)

요청은 표준 _meta 외에 본문(body) 파라미터를 담지 않아요:

{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "method": "server/discover",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {
        "name": "ExampleClient",
        "version": "1.0.0"
      },
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}

응답 (Response)

서버는 자신이 지원하는 프로토콜 버전, 기능, 정체성으로 응답해요. 이 작업은 캐싱을 지원해요.

{
  "jsonrpc": "2.0",
  "id": "discover-1",
  "result": {
    "resultType": "complete",
    "supportedVersions": ["2026-07-28"],
    "capabilities": {
      "tools": {},
      "resources": {}
    },
    "_meta": {
      "io.modelcontextprotocol/serverInfo": {
        "name": "ExampleServer",
        "version": "1.0.0"
      }
    },
    "instructions": "This server provides weather and resource utilities.",
    "ttlMs": 3600000,
    "cacheScope": "public"
  }
}

언제 호출할까 (When to Call)

server/discover 호출은 클라이언트에게 선택 사항이에요. 클라이언트는 어떤 RPC든 인라인으로 호출하고, 서버가 요청된 버전을 지원하지 않으면 UnsupportedProtocolVersionError를 처리하면 되거든요. 하지만 server/discover는 두 가지 시나리오에서 유용해요:

  • 서버 정보 표시 (Presenting server information). 클라이언트가 서버를 사용하기 위해 server/discover를 호출할 필요는 없지만, 서버의 정체성·기능·지원 버전을 단 한 번의 요청으로 가져오는 편리한 방법이에요. 예를 들어 클라이언트는 tools/list, prompts/list, resources/list를 각각 조사하는 대신, 단 한 번의 server/discover 응답에서 서버가 지원하는 기능을 표시할 수 있어요.
  • stdio 하위 호환성 조사 (stdio backward-compatibility probe). stdio에서는 요청별 HTTP 상태 코드가 없어서 폴백을 결정할 근거가 없어요. modern(요청별 _meta) 서버와 legacy(initialize 핸드셰이크) 서버를 모두 지원하는 클라이언트는 SHOULD 먼저 server/discover를 보내야 해요. 폴백 규칙은 stdio: Backward Compatibility를 참조하세요.

전체 버전 선택 흐름은 Protocol Version Negotiation을 참조하세요. 알려지지 않은 메서드에 대해 반환되는 HTTP 전용 상태 코드는 Transports의 Protocol Version Header 섹션을 참조하세요.

데이터 타입 (Data Types)

DiscoverResult

발견 결과(discovery result)는 다음을 포함해요:

  • supportedVersions: 서버가 지원하는 프로토콜 버전. 클라이언트는 이후 요청에 이것들 중 하나를 골라야 해요.
  • capabilities: 서버가 지원하는 기능 (tools, resources, prompts 등)
  • _meta['io.modelcontextprotocol/serverInfo']: 서버 소프트웨어의 이름과 버전. 서버는 SHOULD 이 필드를 포함해야 해요.
  • instructions: 이 서버를 효과적으로 사용하는 방법에 대한 LLM용 선택적 자연어 안내

참고 (Note): serverInfo는 서버가 스스로 보고하는 값으로, 프로토콜이 검증하지 않아요. 표시·로깅·디버깅을 위한 것이에요. 클라이언트는 SHOULD NOT 이 값을 사용해 동작을 바꾸거나 보안 결정에 의존해서는 안 돼요.

더 알아보기 (Learn more)