Skip to main content
Glama
IHTSDO

snowstorm-mcp-server

Official
by IHTSDO

snowstorm-mcp-server

CI

SNOMED CT 임상 용어를 SnowstormSnowstorm Lite 백엔드를 통해 조회하는 MCP 서버입니다.

SNOMED CT는 전 세계 80개 이상의 국가에서 전자 건강 기록에 사용되는 가장 포괄적인 임상 용어입니다. 이 서버는 Model Context Protocol (MCP)을 통해 SNOMED CT 조회, 검색, 검증, 계층 구조 탐색, 값 집합 확장을 제공하여 AI 어시스턴트가 임상 용어를 직접 다룰 수 있게 합니다.

연결된 백엔드에서 사용 가능한 모든 SNOMED CT 에디션(International, US, UK, AU 등)을 지원합니다. 공개 Snowstorm 인스턴스에 연결할 때 사용자 계정이 필요하지 않습니다.

이 저장소는 서로 관련이 있지만 구별되는 두 가지 사용 모드를 지원합니다.

  1. 호스팅된 원격 커넥터: 공개 HTTPS MCP 엔드포인트를 실행하고 사용자 지정 커넥터 / Connector Directory 흐름을 통해 Claude를 연결합니다.

  2. 자체 호스팅 또는 로컬 사용: 자체 Snowstorm 또는 Snowstorm Lite 배포를 대상으로 서버를 직접 실행합니다. Claude Desktop 및 향후 MCPB 패키징 시나리오를 포함합니다.

Claude 웹/데스크톱/모바일용 호스팅된 커넥터를 준비 중이라면 호스팅된 원격 커넥터부터 시작하세요. 자체 용어 백엔드를 대상으로 서버를 직접 실행하려면 자체 호스팅 및 로컬 사용부터 시작하세요.

호스팅된 원격 커넥터

이 모드는 공개 MCP 엔드포인트(예: https://your-domain.example/mcp)를 운영하면서 Claude가 Anthropic 인프라에서 해당 엔드포인트에 연결하도록 하려는 경우에 사용합니다.

호스팅 배포 (Docker)

컨테이너를 빌드하고 실행합니다:

docker build -t snowstorm-mcp-server .
docker run -p 8000:8000 --memory=512m --restart=unless-stopped snowstorm-mcp-server

--memory를 설정하세요. cgroup 제한이 없으면 커널의 전역 OOM killer가 발동할 때까지 컨테이너가 커질 수 있으며, OOM killer는 호스트에서 가장 큰 프로세스를 선택하므로 이 서버의 오류가 컨테이너만이 아니라 시스템 전체를 중단시킬 수 있습니다. 제한이 있으면 컨테이너만 종료되고 --restart가 즉시 다시 시작합니다.

서버는 번들된 config.docker-snowstorm.yaml을 사용하여 포트 8000에서 Streamable HTTP 모드로 시작합니다(http://localhost:8080의 로컬 Snowstorm을 기대합니다). 런타임에 자체 구성을 마운트하세요:

docker run -p 8000:8000 \
  -v /path/to/your/config.yaml:/app/config.yaml \
  snowstorm-mcp-server

프로덕션에서는 HTTPS 리버스 프록시 뒤에 배포하거나 자동 TLS를 제공하는 플랫폼(Cloud Run, Fly.io, Railway 등)에 배포하세요. 공개용 배포에서는 리버스 프록시에서 클라이언트별 속도 제한(IP 기반)을 구성하세요. MCP 2026-07-28은 프로토콜 수준 세션을 제거했으므로 애플리케이션 수준의 세션별 제한은 더 이상 HTTP 클라이언트에 적용되지 않습니다. 전역 제한은 여전히 총 백엔드 부하를 제한합니다. 아래 성능 가드를 참조하세요.

Claude 웹/데스크톱용 원격 MCP 커넥터 배포의 경우 서버는 기본적으로 Streamable HTTP 엔드포인트에서 https://claude.aihttps://claude.com에 대한 CORS를 활성화합니다. 필요한 경우 SNOWSTORM_MCP_CORS_ALLOW_ORIGINS 환경 변수로 허용된 출처 목록을 쉼표로 구분하여 재정의할 수 있습니다.

출처 검증은 기본적으로 켜져 있습니다. Origin 헤더가 있지만 허용 목록에 없는 MCP 엔드포인트 요청은 HTTP 403으로 거부됩니다. 이것이 DNS 리바인딩을 방지하는 방법입니다. 리바인딩된 페이지의 POST는 여전히 실제 출처를 전달합니다. 브라우저는 Fetch Standard에 따라 모든 POST(동일 출처 포함)에 Origin을 첨부하기 때문입니다. Origin이 전혀 없는 요청(즉, 모든 비브라우저 MCP 클라이언트)은 영향을 받지 않습니다.

이것은 모든 현재 브라우저 엔진에 적용됩니다. Firefox 103 이전(2022년 7월)은 null을 보내는 대신 Origin을 완전히 생략할 수 있었으며, 특히 network.http.sendOriginHeader 기본 설정이 비활성화된 경우 그랬습니다. 이러한 클라이언트가 범위에 있다면 SNOWSTORM_MCP_ALLOWED_HOSTS도 설정하세요.

허용 목록은 기본적으로 위의 CORS 출처로 설정됩니다. 리버스 프록시 뒤의 동일 출처 배포(CORS는 꺼져 있지만 브라우저 POST는 여전히 Origin을 전달)에서는 SNOWSTORM_MCP_ALLOWED_ORIGINS(쉼표로 구분)로 독립적으로 재정의하세요. 이 변수는 목록에 추가하는 것이 아니라 대체하므로, 서비스하는 모든 브라우저 출처를 포함해야 합니다. 자신의 도메인만 설정하면 https://claude.ai가 차단됩니다. *로 설정하면 앱 수준 검사가 비활성화됩니다. SNOWSTORM_MCP_ALLOWED_HOSTS도 설정된 경우 SDK 계층이 여전히 CORS 목록에 대해 Origin을 검증합니다.

업그레이드 안내: 페이지 출처가 허용 목록에 없는 브라우저 클라이언트는 이전에는 성공했지만 이제 CORS 설정과 관계없이 403을 받습니다. CORS는 이러한 요청을 거부한 적이 없으며 응답 헤더만 보류했고, 동일 출처 읽기는 CORS의 적용을 전혀 받지 않았습니다. 자체 웹 UI를 제공하는 자체 호스팅 배포는 SNOWSTORM_MCP_ALLOWED_ORIGINS를 해당 출처로 설정하거나 *로 설정하여 이전 동작을 복원해야 합니다. 비브라우저 클라이언트는 Origin을 보내지 않으므로 영향을 받지 않습니다.

SNOWSTORM_MCP_ALLOWED_HOSTS를 서버에 접근하는 호스트 이름(쉼표로 구분, 예: mcp.example.org,mcp.example.org:443)으로 설정하면 인식할 수 없는 Host를 HTTP 421로 추가로 거부할 수 있습니다. 호스트 목록이 불완전하면 모든 트래픽이 거부되므로 기본적으로 꺼져 있습니다. localhost에 바인딩할 때 자동으로 활성화됩니다. 이는 심층 방어입니다. 위의 Origin 검증이 이 POST 전용 엔드포인트의 리바인딩 경로를 이미 차단합니다.

MCP 프로토콜 버전

서버는 이중 시대를 지원합니다. 동일한 엔드포인트에서 무상태 MCP 2026-07-28 개정판과 이전 핸드셰이크 기반 개정판(2025-11-25 및 이전)을 제공하므로 기존 클라이언트가 계속 작동합니다. 두 경우 모두 무상태로 실행되며 Mcp-Session-Id를 생성하지 않으므로 세션 선호도 없이 수평 확장할 수 있습니다.

원격 커넥터 참고 사항

  • Anthropic은 클라우드 인프라에서 호스팅된 MCP 엔드포인트에 연결합니다.

  • Anthropic은 base_url, user_agent, 대상 인증과 같은 내부 Snowstorm 백엔드 설정을 구성하지 않습니다. 이러한 설정은 서버 구성에 유지됩니다.

  • 이 저장소의 manifest.json은 호스팅된 원격 커넥터 흐름이 아닌 로컬 패키징 시나리오를 위한 것입니다.

Related MCP server: Smart EHR MCP Server

자체 호스팅 및 로컬 사용

이 모드는 자체 Snowstorm 또는 Snowstorm Lite 백엔드를 대상으로 MCP 서버를 직접 실행하려는 경우에 사용합니다. 로컬, 사설 인프라, 또는 Claude Desktop / MCPB 스타일 패키징 등이 해당됩니다.

개발 빠른 시작

uv venv
uv pip install -e ".[dev]"
uv run pytest -q
./scripts/check.sh

단위 테스트와 통합 테스트 워크플로(Docker 스택 설정 및 RF2 가져오기 포함)는 docs/testing.md를 참조하세요.

Docker 통합 스택 (Snowstorm + Lite)

통합 테스트를 위해 로컬 컨테이너를 시작합니다:

docker compose -f docker-compose.integration.yml up -d

로컬 RF2 아카이브를 Snowstorm과 Snowstorm Lite 양쪽에 가져옵니다:

dev/integration/import_snomed.sh \
  --rf2-zip ../SnomedCT_InternationalRF2_PRODUCTION_20251101T120000Z.zip

각 백엔드에 대해 통합 테스트를 실행합니다. .env에서 SNOWSTORM_MCP_TEST_CONFIG를 관련 구성 파일을 가리키도록 설정한 후:

uv run pytest -q tests/integration

로컬에서 서버 실행

서버는 YAML 파일에서 구성을 읽습니다(example-configs/config.local.yaml 참조). 프로젝트 루트에 .env 파일을 만들어 구성 경로와 모든 비밀 값을 설정하세요(.env.example 참조):

cp .env.example .env
# edit .env to point at your config file

서버는 시작 시 현재 작업 디렉터리에서 .env를 자동으로 로드합니다. 기존 셸 환경 변수가 .env 값보다 우선합니다.

stdio (Claude Desktop 및 대부분의 MCP 클라이언트용):

uv run snowstorm-mcp-server --transport stdio

--log-level DEBUG|INFO|WARNING|ERROR를 사용하여 상세 수준을 제어합니다(기본값: INFO). 로그는 stderr로 출력되며 Claude Desktop이 mcp-server-snowstorm.log에 기록합니다. 서버는 시작 시 활성 가드 구성을 출력하므로 올바른 구성 파일에서 설정이 로드되고 있는지 확인할 수 있습니다.

로깅

기본적으로 서버는 UTC 타임스탬프와 함께 줄마다 JSON 객체 하나를 기록하므로 로그 수집기가 직접 파싱할 수 있습니다:

{"timestamp": "2026-07-13T10:29:04.929Z", "level": "ERROR", "logger": "snowstorm_mcp_server.mcp_app", "message": "Tool call failed [E_BACKEND_HTTP]: HTTP 502 ...", "error_code": "E_BACKEND_HTTP", "error_type": "HttpRequestError", "status_code": 502}

도구 실패에는 구조화된 필드(error_code, error_type, status_code)가 포함되어 오류율을 원인별로 분석할 수 있습니다. 가드 작동(속도 제한, 차단된 ECL, 순회 감지)은 경고로 기록됩니다. 로컬 개발 중에는 --log-format text를 사용하여 기존의 사람이 읽을 수 있는 출력을 사용하세요.

Streamable HTTP (HTTP 기반 MCP 클라이언트용):

uv run snowstorm-mcp-server --transport streamable-http

독립형 sse 전송은 Streamable HTTP를 위해 제거되었습니다. HTTP+SSE 전송은 MCP 2025-03-26부터 더 이상 사용되지 않으며 2026-07-28부터 기능 수명 주기 정책에 따라 공식적으로 Deprecated입니다.

Claude Desktop 구성 예시 (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "snowstorm": {
      "command": "uv",
      "args": [
        "run",
        "--project", "/path/to/snowstorm-mcp-server",
        "snowstorm-mcp-server",
        "--transport", "stdio"
      ]
    }
  }
}

참고: Claude Desktop은 프로젝트 디렉터리에서 uv를 실행하므로 .env 파일을 자동으로 인식합니다. 명시적 환경 변수를 선호한다면 Claude Desktop 구성의 "env" 키를 통해 전달하세요.

로컬 패키징 / MCPB 설치

Connector Directory 항목에서 서버를 설치하면 매니페스트가 구성 파일 경로를 요청하고 시작 시 --config로 전달합니다. 로컬 개발에는 example-configs/의 YAML 파일 중 하나를 선택하거나 자체 Snowstorm/Snowstorm Lite 배포 구성 경로를 제공하세요.

구성

example-configs/config.local.yaml을 참조하세요(http://localhost:8080의 Snowstorm).

백엔드 유형 제한

단일 구성은 Snowstorm 또는 Snowstorm Lite 대상 중 하나만 사용해야 하며, 같은 구성에 둘을 혼합할 수 없습니다. server_mode 필드는 대상 유형과 일치해야 합니다(Snowstorm 대상은 "snowstorm", Lite 대상은 "lite").

여러 Snowstorm Lite 인스턴스가 지원됩니다(SNOMED 에디션당 하나).

다중 에디션 Lite 구성 예시

server_mode: "lite"
default_terminology: snomedct
response_limits:
  max_expand_contains: 100
  max_search_hits: 50
  max_synonyms: 25

# Guards — all values shown are defaults. Omit the block to use defaults.
# For public-facing HTTP deployments, do per-client limiting at the reverse
# proxy: MCP 2026-07-28 removed sessions, so per_session_rate_limit_calls
# only has an effect on stdio.
# guards:
#   rate_limit_calls: 10
#   rate_limit_window_seconds: 60
#   max_concurrent_requests: 3
#   max_count_per_call: 500
#   large_result_threshold: 1000
#   max_children_calls_per_minute: 5
#   per_session_rate_limit_calls: null   # stdio only; no effect over HTTP
#   block_zero_cardinality_on_large_sets: false  # set true to block [0..0] on top-level roots
#   enable_expansion_size_guard: false   # preflight summary check for any non-summary expansion
#   expansion_count_threshold: 20000     # block if total concepts exceeds this value
#   size_cache_ttl_seconds: 86400

targets:
  lite-int:
    base_url: "http://localhost:8081"
    mode: "lite"
    terminology_name: "snomedct"
    fhir_path: "/fhir"
    auth:
      mode: "none"

  lite-us:
    base_url: "http://localhost:8082"
    mode: "lite"
    terminology_name: "snomedct-us"
    fhir_path: "/fhir"
    auth:
      mode: "bearer"
      token: "${SNOWSTORM_LITE_TOKEN}"

용어 기반 라우팅

이 서버는 백엔드 대상이 아닌 용어(SNOMED 에디션)를 기준으로 요청을 라우팅합니다.

  • Snowstorm: 용어는 GET /codesystems에서 자동으로 검색됩니다. 각 코드 시스템의 shortName(소문자)이 용어 이름이 됩니다(예: snomedct, snomedct-us). 네이티브 Snowstorm 작업에는 브랜치 경로가 자동으로 사용됩니다.

  • Snowstorm Lite: 각 인스턴스는 하나의 용어를 제공합니다. 대상 구성에서 terminology_name을 구성하세요.

기본 용어

구성에서 default_terminology를 설정하면 호출자가 terminology 매개변수를 생략할 수 있습니다. 사용 가능한 용어가 하나뿐이면 자동으로 기본값이 됩니다.

사용 가능한 MCP 도구

도구

설명

백엔드

list_terminologies

사용 가능한 SNOMED 용어집과 기본값 나열

모두

server_health

용어집에 대한 연결 가능성 및 기능 확인

모두

server_capabilities

용어집에 대한 상세 백엔드 정보

모두

fhir_metadata

FHIR CapabilityStatement 요약(선택적 원시 페이로드)

모두

snomed_expand

ECL을 지원하는 FHIR ValueSet/$expand

모두

snomed_lookup

FHIR CodeSystem/$lookup

모두

snomed_validate_code

FHIR CodeSystem/$validate-code

모두

snomed_subsumes

FHIR CodeSystem/$subsumes

모두

snomed_get_ancestors

IS-A 계층을 통한 상위 개념 가져오기(ECL 기반)

모두

snomed_get_children

개념의 직접 하위 개념 가져오기(ECL 기반)

모두

snomed_get_descendants

개념의 모든 하위 개념 가져오기(ECL 기반)

모두

snowstorm_list_codesystems

네이티브 코드 시스템 요약

Snowstorm 전용

snowstorm_list_versions

네이티브 코드 시스템 버전

Snowstorm 전용

snowstorm_search_concepts

용어별 네이티브 개념 검색

Snowstorm 전용

snowstorm_get_concept_native

동의어가 포함된 네이티브 개념 상세 정보

Snowstorm 전용

모든 도구는 선택적 terminology 매개변수(예: "snomedct-us")를 허용합니다. 대부분의 도구는 라우팅 제한/대상 선택 명확화를 위해 선택적 target도 허용합니다. 생략하면 기본 용어집이 사용됩니다.

환경 변수 비밀값 재정의

비밀값은 값을 커밋하는 대신 환경 변수를 사용하여 런타임에 주입할 수 있습니다.

  • 구성의 자리 표시자 보간: ${ENV_VAR} 또는 ${ENV_VAR:-default}

  • 대상 인증 비밀값 재정의 변수:

    • SNOWSTORM_MCP_TARGETS__<TARGET_NAME_UPPER>__AUTH__PASSWORD

    • SNOWSTORM_MCP_TARGETS__<TARGET_NAME_UPPER>__AUTH__TOKEN

샘플 MCP 도구 호출

list_terminologies:

{}

예상 응답 형태:

{
  "terminologies": [
    {"name": "snomedct", "backend_type": "snowstorm", "branch_path": "MAIN"},
    {"name": "snomedct-us", "backend_type": "lite", "branch_path": null}
  ],
  "default_terminology": "snomedct"
}

server_capabilities(기본 용어집):

{}

예상 응답 형태:

{
  "terminology": "snomedct",
  "backend_type": "snowstorm",
  "reachable": true,
  "fhir_base_url": "http://localhost:8080/fhir",
  "capabilities": {"has_fhir": true, "has_native_api": true, "has_lite_load_package": false},
  "fhir_metadata_summary": {"resourceType": "CapabilityStatement", "fhirVersion": "4.0.1"}
}

fhir_metadata 요약 전용 모드(원시 CapabilityStatement 본문 생략):

{"terminology": "snomedct", "include_raw": false}

예상 응답 형태:

{
  "terminology": "snomedct",
  "fhir_base_url": "http://localhost:8080/fhir",
  "summary": {"resourceType": "CapabilityStatement", "fhirVersion": "4.0.1"}
}

snomed_lookup:

{"code": "404684003", "terminology": "snomedct"}

예상 응답 형태:

{
  "terminology": "snomedct",
  "code": "404684003",
  "found": true,
  "display": "Clinical finding",
  "system": "http://snomed.info/sct"
}

코드가 에디션에 존재하지 않으면 도구는 오류 대신 구조화된 부정 결과를 반환합니다:

{
  "terminology": "snomedct",
  "code": "99999999999",
  "found": false,
  "message": "Code '99999999999' was not found in this SNOMED CT edition/version. Verify the concept ID or search for the concept by term."
}

snowstorm_search_concepts(Snowstorm 전용):

{"terminology": "snomedct", "term": "myocardial infarction", "limit": 5}

예상 응답 형태:

{
  "terminology": "snomedct",
  "term": "myocardial infarction",
  "branch": "MAIN",
  "returned": 5,
  "hits": [{"concept_id": "22298006", "pt": "Myocardial infarction"}]
}

사용 예시

다음 예시는 AI 어시스턴트가 자연어 질문에 응답하여 서버의 도구를 사용하는 방법을 보여줍니다.

예시 1 — 임상 개념 조회

사용자: "SNOMED CT 개념 22298006은 무엇인가요?"

어시스턴트는 {"code": "22298006"}으로 snomed_lookup을 호출하고 개념의 선호 용어("심근경색"), SNOMED CT 시스템 URI, 관련 속성을 받습니다. 그런 다음 어시스턴트는 임상적 의미를 포함하여 개념을 평이한 언어로 사용자에게 설명할 수 있습니다.

예시 2 — 계층 관계 확인

사용자: "SNOMED CT에서 제2형 당뇨병은 내분비 장애의 한 종류인가요?"

어시스턴트는 {"code_a": "362969004", "code_b": "44054006"}으로 snomed_subsumes를 호출합니다(각각 내분비 장애와 제2형 당뇨병). 응답은 code_a가 code_b를 포함하는지 여부를 나타내어 IS-A 관계를 확인하거나 부인합니다.

예시 3 — 임상 용어로 개념 찾기

사용자: "'심방세동'과 관련된 SNOMED CT 개념을 찾아주세요."

어시스턴트는 {"filter": "atrial fibrillation", "count": 10}으로 snomed_expand를 호출하여 용어집 전체를 검색합니다. 응답은 일치하는 개념을 ID, 선호 용어, 활성 여부와 함께 반환하므로 어시스턴트는 임상적으로 관련된 일치 항목의 간결한 목록을 제시할 수 있습니다.

FHIR 작업 및 다중 에디션 Snowstorm

네이티브 Snowstorm 작업(검색, 개념 상세)의 경우 용어집의 브랜치 경로가 자동으로 사용되어 올바른 에디션을 선택합니다.

FHIR 작업($lookup, $validate-code, $subsumes)의 경우 용어집이 올바른 백엔드 서버로 라우팅됩니다. 다중 에디션 Snowstorm 인스턴스에서는 정확한 에디션 지정을 위해 FHIR version 매개변수를 추가로 지정해야 할 수 있습니다. FHIR 에디션 선택은 브랜치 경로가 아닌 system/version 매개변수에 의해 결정되기 때문입니다.

추가 백엔드 기능 참고 사항과 v0.1 범위 경계는 docs/v0.1-capability-matrix.md에 문서화되어 있습니다. 릴리스 태깅/스모크 절차는 docs/release-v0.1-checklist.md에 있습니다.

성능 보호 장치

백엔드 HTTP 호출을 수행하는 모든 도구는 Snowstorm 인스턴스를 과부하로부터 보호하기 위한 공통 보호 장치 세트를 공유합니다. 이는 호출되는 도구와 관계없이 적용됩니다 — server_health, server_capabilities, fhir_metadata, snomed_expand, snomed_lookup, snomed_validate_code, snomed_subsumes, 모든 계층 도구 및 모든 snowstorm_* 네이티브 도구.

항상 활성화되는 보호 장치:

보호 장치

기본값

설명

전역 속도 제한

60초당 10회 호출

프로세스 내 모든 세션에 걸친 슬라이딩 윈도우

동시성 상한

동시 3개

병렬 Snowstorm 요청에 대한 세마포어

ECL 사전 검사

백엔드에 도달하기 전에 알려진 고비용 패턴 차단

개수 상한

최대 500

snomed_expand 또는 계층 도구 호출당 요청되는 개념 수의 상한

재귀 순회 감지

분당 5회 계층 호출

반복되는 get_children 패턴 감지

확장 크기 임계값

비활성화

사전 summary_only 검사 — 개념 ID와 관계없이 N개 개념을 초과하는 확장 차단

프로세스별로만 적용됩니다. 보호 장치는 메모리 내 상태를 사용합니다. 로드 밸런서 뒤에서 여러 서버 프로세스를 실행하는 경우 각 프로세스는 자체 독립적인 한도를 적용합니다. 프로세스 간 공유 한도의 경우 Redis 기반 구현이 필요합니다.

세션별 속도 제한(stdio 전용)

MCP 2026-07-28은 프로토콜 수준 세션을 제거했습니다. Streamable HTTP에서는 모든 요청이 이제 독립적이므로 per_session_rate_limit_calls는 키로 사용할 안정적인 대상이 없어 절대 트리거되지 않습니다 — 각 요청은 새롭고 빈 윈도우를 받습니다. 서버는 설정된 경우 시작 시 경고를 기록합니다. stdio에서는 여전히 작동합니다. 한 프로세스가 정확히 한 클라이언트를 서비스하기 때문입니다. HTTP 배포의 경우 역방향 프록시에서 클라이언트별 제한을 수행하십시오(Nginx limit_req, Caddy rate_limit, Cloudflare 등). 프로토콜이 더 이상 전달하지 않는 네트워크 ID를 키로 사용합니다.

전역 속도 제한은 모든 호출자 간에 공유되며 영향을 받지 않습니다 — 총 백엔드 부하를 제한하는 제어 수단으로 유지됩니다:

guards:
  rate_limit_calls: 30            # global ceiling across all callers
  rate_limit_window_seconds: 60
  per_session_rate_limit_calls: 8 # stdio only; a no-op over HTTP

per_session_rate_limit_calls가 설정되면 각 세션은 동일한 rate_limit_window_seconds를 사용하는 자체 독립적인 슬라이딩 윈도우를 갖습니다. 세션은 객체 ID로 추적되며 기본 세션 객체가 가비지 컬렉션되면 자동으로 삭제됩니다.

보호 장치가 없는 도구

Snowstorm 백엔드를 호출하지 않는 메모리 내 도구는 의도적으로 보호 장치 없이 남겨집니다: list_terminologies.

Snowstorm 네이티브 검색 제약(중요)

MCP 도구 snowstorm_search_concepts는 Snowstorm의 네이티브 설명 검색 엔드포인트(GET /browser/{branch}/descriptions)를 호출하며, 매우 짧은 쿼리(예: AD, B2)는 HTTP 400으로 거부될 수 있습니다.

실용적인 지침:

  • 검색 가능한 문자(문자/숫자)를 최소 3개 사용하십시오.

  • 짧은 약어의 경우 문맥을 포함하십시오(예: AD 대신 더 긴 문구 사용).

MCP 서버는 이를 조기에 검증합니다: 너무 짧은 용어는 Snowstorm을 호출하지 않고 0건의 결과와 제약을 설명하는 notice 필드가 포함된 성공 응답을 반환합니다. 예상되는 부정적 결과(너무 짧은 용어 또는 존재하지 않는 snomed_lookup 코드)는 도구 오류가 아닌 구조화된 데이터로 반환되므로 MCP 오류 지표는 실제 실패만 반영합니다.

개인정보 보호 정책

이 서버는 MCP 클라이언트와 구성된 SNOMED CT 백엔드(Snowstorm 또는 Snowstorm Lite) 사이의 무상태 프록시 역할을 합니다. 개인 데이터를 수집, 저장 또는 처리하지 않으며 구성된 백엔드 외부의 제3자에게 데이터를 보내지 않습니다. 모든 쿼리 콘텐츠는 백엔드로 전달되며 응답이 전달된 후 폐기됩니다. 세션별 속도 제한이 활성화된 경우 서버는 속도 제한 적용을 위해서만 세션별 메모리 내 호출 타임스탬프를 보유합니다. 이 상태에는 PII가 포함되지 않으며 세션이 종료되면 자동으로 폐기됩니다.

응답에는 SNOMED CT 용어집 콘텐츠가 포함됩니다. 이 서버를 통한 해당 콘텐츠에 대한 액세스는 SNOMED CT 브라우저 라이선스 계약(아래 라이선스 참조)의 적용을 받습니다. 호스팅 서비스로 배포되는 경우 표준 웹 서버 액세스 로그(IP 주소, 타임스탬프, 요청 경로)는 운영 목적으로 호스팅 인프라에 의해 보관될 수 있습니다.

전체 개인정보 보호 정책은 PRIVACY.md를 참조하십시오.

지원

라이선스

서버 소프트웨어Apache 2.0에 따라 라이선스가 부여됩니다.

이 서버가 반환하는 SNOMED CT 콘텐츠는 해당 라이선스의 적용을 받지 않습니다. 이 서버를 통한 SNOMED CT 액세스는 공개 SNOMED CT 브라우저가 제공되는 것과 동일한 기준인 SNOMED CT 브라우저 라이선스 계약의 적용을 받습니다. 요약하면, SNOMED International 제휴 라이선스를 보유하지 않은 최종 사용자는 이 서버를 사용하여 용어집을 탐색하고 평가할 수 있지만 다음은 할 수 없습니다:

  • SNOMED CT 식별자를 기록 시스템, 데이터베이스 또는 문서에 복사 ("데이터 생성 시스템" 또는 "데이터 분석 시스템"으로 사용);

  • SNOMED CT 콘텐츠를 번역하거나 수정; 또는

  • SNOMED CT 콘텐츠를 재배포하거나 공유.

이 서버를 직접 호스팅하거나, SNOMED CT를 제품이나 서비스에 통합하거나, 탐색 및 평가를 넘어 SNOMED CT를 사용하려면 전체 SNOMED CT 라이선스를 취득해야 합니다 — SNOMED CT 받기를 참조하십시오. SNOMED International 제휴사는 제휴 라이선스의 조건 내에서 이 서버를 사용할 수 있습니다. SNOMED CT는 © SNOMED International이며, "SNOMED" 및 "SNOMED CT"는 등록 상표입니다.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IHTSDO/snowstorm-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server