Skip to main content
Glama
yonghwan1106

K-LifeGuard MCP Server

by yonghwan1106

K-LifeGuard MCP Server

지능형 응급 의료 코디네이터 MCP Server

증상 기반 최적 병원 추천, 실시간 ETA, 보호자 알림 기능을 제공합니다.

Features

Tool

Description

lifeguard_search_emergency

증상과 위치 기반 최적 응급의료기관 추천 (복합 스코어링)

lifeguard_activate_emergency

응급 모드 활성화, 보호자 알림, 병상 모니터링

lifeguard_get_status

현재 응급 세션 상태 및 실시간 병상 조회

lifeguard_find_pharmacy

주변 약국 검색 (야간/휴일 필터)

Related MCP server: modu-emergencybell

Scoring Algorithm

병원 추천은 다음 복합 스코어링 공식을 사용합니다:

Score = (병상 가용성 × 0.4) + (거리 × 0.3) + (교통 ETA × 0.2) + (전문 장비 × 0.1)

Installation

npm install
npm run build

Configuration

.env 파일을 생성하고 API 키를 설정하세요:

cp .env.example .env
# 공공데이터포털 API 키 (필수)
DATA_GO_KR_API_KEY=your_api_key

# 카카오 REST API 키 (선택 - ETA 계산용)
KAKAO_REST_API_KEY=your_kakao_api_key

API Key 발급

  1. 공공데이터포털: https://www.data.go.kr

    • 국립중앙의료원 응급의료정보 API 신청

  2. 카카오 개발자: https://developers.kakao.com

    • REST API 키 발급 (네비게이션 API)

Usage

Claude Desktop 연동

claude_desktop_config.json:

{
  "mcpServers": {
    "k-lifeguard": {
      "command": "node",
      "args": ["C:/path/to/k-lifeguard-mcp-server/dist/index.js"],
      "env": {
        "DATA_GO_KR_API_KEY": "your_api_key",
        "KAKAO_REST_API_KEY": "your_kakao_api_key"
      }
    }
  }
}

직접 실행

npm start

Tool Examples

응급실 검색

증상: 가슴통증
위치: 서울 시청 (37.5665, 126.9780)
반경: 10km

응답:

  • 증상 분석 (심장내과, CT/MRI 필요 등)

  • 병원 5곳 추천 (점수, 거리, ETA, 병상, 장비)

약국 검색

위치: 현재 위치
필터: night (야간 운영)

응답:

  • 야간 운영 약국 목록

  • 운영시간, 거리, 연락처

Project Structure

k-lifeguard-mcp-server/
├── src/
│   ├── index.ts           # MCP 서버 엔트리포인트
│   ├── types.ts           # TypeScript 타입 정의
│   ├── constants.ts       # 상수 (API URL, 증상 매핑 등)
│   ├── schemas/           # Zod 입력/출력 스키마
│   ├── tools/             # MCP 도구 구현
│   │   ├── searchEmergency.ts
│   │   ├── activateEmergency.ts
│   │   ├── getStatus.ts
│   │   └── findPharmacy.ts
│   └── services/          # 외부 API 클라이언트
│       ├── nemcApi.ts     # 공공데이터포털 API
│       ├── kakaoNaviApi.ts # 카카오 내비 API
│       ├── sessionManager.ts
│       └── utils.ts
├── dist/                  # 빌드 결과물
├── package.json
└── tsconfig.json

Data Sources

  • 공공데이터포털 (NEMC): 응급의료기관 정보, 실시간 병상

  • 카카오 모빌리티: 실시간 교통 ETA

License

MIT

Author

yonghwan1106

Available Tools

4 tools
lifeguard_activate_emergency응급 모드 활성화A

응급 모드를 활성화합니다.

선택한 병원으로 이동을 시작하고, 보호자에게 카카오톡 알림을 발송하며, 실시간 병상 모니터링을 시작합니다.

Args:

  • hospital_id (string, required): 병원 HPID (lifeguard_search_emergency 결과에서 획득)

  • hospital_name (string, required): 병원명

  • eta_minutes (number, required): 예상 도착 시간 (분)

  • user_latitude (number, required): 사용자 현재 위치 위도

  • user_longitude (number, required): 사용자 현재 위치 경도

  • symptoms (string, required): 환자 증상

  • notify_guardians (boolean, optional): 보호자 알림 여부 (기본값: true)

Returns:

  • 세션 정보 (ID, 병원, 상태)

  • 카카오 내비 딥링크

  • 보호자 알림 결과

  • 모니터링 정보

  • 응급 팁

Examples:

  • lifeguard_search_emergency로 찾은 병원 선택 후 호출

ParametersJSON Schema
NameRequiredDescriptionDefault
symptomsYes환자 증상
eta_minutesYes예상 도착 시간 (분)
hospital_idYes병원 HPID (lifeguard_search_emergency 결과에서 획득)
hospital_nameYes병원명
user_latitudeYes사용자 현재 위치 위도
user_longitudeYes사용자 현재 위치 경도
notify_guardiansNo보호자에게 카카오톡 알림 발송 여부 (기본값: true)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (write operation) and destructiveHint=false. The description adds behavioral context: it activates emergency mode, triggers movement, sends alerts, and starts monitoring. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but well-structured with sections: purpose, action list, args, returns, example. It is front-loaded with the main action, and each sentence adds value, though it could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All 7 parameters are fully described, and despite no output schema, the description lists return values (session info, deep link, alert result, monitoring info, tips). Given the context signals (no enums, no nested objects), the description is complete and informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds extra value by explaining each parameter in detail (e.g., hospital_id sourced from search results, notify_guardians default true) and providing examples, raising the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '응급 모드를 활성화합니다' (activates emergency mode) and details specific actions: starting hospital movement, sending KakaoTalk alert, and beginning real-time bed monitoring. It is distinct from sibling tools like lifeguard_search_emergency (search) and lifeguard_get_status (status check).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies that this tool should be called after selecting a hospital from lifeguard_search_emergency, providing clear when-to-use guidance. It does not explicitly state when not to use or alternatives, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lifeguard_find_pharmacy약국 검색A
Read-onlyIdempotent

주변 약국을 검색합니다.

야간 운영 약국, 휴일 운영 약국을 필터링할 수 있습니다.

Args:

  • latitude (number, required): 현재 위치 위도

  • longitude (number, required): 현재 위치 경도

  • filter (string, optional): 필터 옵션 (기본값: "all")

    • "all": 전체 약국

    • "night": 야간 운영 약국 (22시 이후 영업)

    • "holiday": 휴일 운영 약국 (일요일/공휴일)

  • radius_km (number, optional): 검색 반경 km (기본값: 3)

  • limit (number, optional): 최대 결과 수 (기본값: 10)

  • response_format (string, optional): 출력 형식 (기본값: "markdown")

Returns:

  • 약국 목록 (이름, 주소, 연락처, 거리, 운영시간)

Examples:

  • "집 근처 약국 찾기" → latitude, longitude 입력

  • "야간 영업하는 약국" → filter: "night"

  • "일요일에 여는 약국" → filter: "holiday"

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo최대 결과 수 (기본값: 10)
filterNo필터 옵션: all(전체), night(야간 22시 이후 운영), holiday(휴일 운영)all
latitudeYes현재 위치 위도
longitudeYes현재 위치 경도
radius_kmNo검색 반경 km (기본값: 3)
response_formatNo출력 형식: 'markdown'은 사람이 읽기 쉬운 형식, 'json'은 프로그래밍 처리용markdown

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, openWorldHint, etc. Description adds behavioral details such as default filter and radius, return format options, and the nature of results (list of pharmacies with fields). This is valuable beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with clear sections for args and examples, front-loading the main purpose. It is moderately concise and each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description specifies the return structure (list of pharmacies with name, address, phone, distance, hours). Examples cover typical use cases. For a search tool with 6 parameters, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds natural language explanations, default values, and examples for parameters like filter and response_format, improving understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states '주변 약국을 검색합니다.' which is a specific verb and resource. It clearly distinguishes from sibling tools like lifeguard_get_status and lifeguard_search_emergency by focusing on pharmacies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description provides context for when to use (finding nearby pharmacies with optional filters) and includes examples. However, it does not explicitly exclude other tools or compare to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lifeguard_get_status응급 상태 조회A
Read-onlyIdempotent

현재 응급 모드 상태를 조회합니다.

활성화된 응급 세션이 있으면 목적지 병원의 실시간 병상 정보도 함께 조회합니다.

Args:

  • session_id (string, optional): 세션 ID (미입력 시 가장 최근 활성 세션 조회)

Returns:

  • 세션 활성화 여부

  • 세션 정보 (ID, 병원, 경과 시간, 남은 ETA)

  • 실시간 병상 현황

  • 가능한 액션

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNo세션 ID (미입력 시 가장 최근 활성 세션 조회)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and idempotent. Description adds conditional behavior (bed info only if active session) and return fields. No contradictions, but edge cases not covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with main purpose first, conditional behavior, then args/returns in a list. Concise, slightly verbose in the returns section but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one optional parameter, no output schema, the description covers purpose, parameter behavior, and return values. Lacks error handling info, but rest is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter session_id is described in both schema and description identically. Schema coverage is 100% so baseline 3 applies; description adds no new semantics beyond restating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries emergency mode status and optionally retrieves real-time bed info. It distinguishes from siblings by using specific verb(조회) and resource(응급 모드 상태).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Parameter usage is explained (session_id optional, defaults to latest). No explicit guidance on when to use this tool vs. siblings or when not to use it. Adequate but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lifeguard_search_emergency증상 기반 응급실 검색A
Read-onlyIdempotent

증상과 현재 위치 기반으로 최적의 응급의료기관을 추천합니다.

실시간 병상 가용성, 거리, 카카오내비 교통 상황, 전문 장비 보유 여부를 복합 스코어링하여 최적의 병원 5곳을 추천합니다.

Args:

  • latitude (number, required): 현재 위치 위도 (예: 37.5665)

  • longitude (number, required): 현재 위치 경도 (예: 126.9780)

  • symptoms (string, required): 증상 설명 (예: "가슴통증", "소아고열", "뇌졸중 의심")

  • radius_km (number, optional): 검색 반경 km (기본값: 10, 범위: 1-50)

  • response_format (string, optional): 출력 형식 "markdown" 또는 "json" (기본값: "markdown")

Returns:

  • 최적 병원 5곳 추천 (순위, 이름, 주소, 연락처, 거리, ETA, 병상, 장비, 점수)

  • 증상 분석 결과 (매칭된 키워드, 권장 진료과, 필요 장비)

  • 스코어링 공식 설명

Examples:

  • "서울 시청 근처에서 가슴통증 환자 발생" → latitude: 37.5665, longitude: 126.9780, symptoms: "가슴통증"

  • "대전에서 소아 고열" → latitude: 36.3504, longitude: 127.3845, symptoms: "소아고열"

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes현재 위치 위도 (예: 37.5665)
symptomsYes증상 설명 (예: 가슴통증, 소아고열, 뇌졸중 의심)
longitudeYes현재 위치 경도 (예: 126.9780)
radius_kmNo검색 반경 km (기본값: 10)
response_formatNo출력 형식: 'markdown'은 사람이 읽기 쉬운 형식, 'json'은 프로그래밍 처리용markdown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, which align with the read-only search nature. The description adds behavioral details beyond annotations, such as real-time data integration, scoring formula, and the top 5 result limitation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for Args, Returns, and Examples. It is front-loaded with the purpose and every sentence adds value. There is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters, no output schema), the description explains the return structure (top 5 hospitals, symptom analysis, scoring explanation) and provides examples. However, it lacks error handling or edge cases (e.g., no hospitals found).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value with examples (e.g., '가슴통증', '소아고열') and contextualizes parameters like response_format, improving understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool recommends optimal emergency medical institutions based on symptoms and current location, using specific criteria. It is distinct from sibling tools like lifeguard_activate_emergency (activation) and lifeguard_find_pharmacy (pharmacy).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context and examples but does not explicitly state when not to use this tool or compare with siblings. Usage is implied through examples but lacks explicit guidance on alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.3/5.0
Disambiguation5/5

All four tools have clearly distinct purposes: status checking, emergency hospital search, emergency activation, and pharmacy search. There is no overlap or ambiguity in their functions.

Naming Consistency5/5

All tool names follow a consistent 'lifeguard_verb_noun' pattern with lowercase and underscores. Verbs are descriptive (get, search, activate, find) and nouns are appropriate.

Tool Count5/5

With 4 tools, the server is well-scoped for its purpose: emergency medical assistance. Each tool provides essential functionality without being overwhelming or underdeveloped.

Completeness4/5

The tool set covers the main emergency workflow (search, activate, monitor status) and adds pharmacy search. However, it lacks a tool to cancel or complete an emergency session, which is a minor but notable gap.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

  • A
    license
    B
    quality
    D
    maintenance
    Integrates with Google Maps to locate and evaluate medical facilities in emergency situations, helping users find appropriate hospitals and clinics based on medical needs, emergency level, and facility capabilities.
    5
    5
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI-driven post-discharge patient monitoring and care coordination through tools for symptom triage, recovery tracking, exercise recommendation, and clinical reporting.
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables emergency medical coordination with tools for triage, medication guidance, blood donor outreach, mass casualty simulation, and emergency plan generation.
    MIT

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/yonghwan1106/k-lifeguard-mcp-server'

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