Skip to main content
Glama

πŸ‡°πŸ‡· KFDA MCP Server

MCP (Model Context Protocol) server for Korean Ministry of Food and Drug Safety (μ‹μ•½μ²˜) public OpenAPI.

LLM agents (Claude, ChatGPT, etc.) can autonomously query Korean drug master, DUR (Drug Utilization Review) safety rules, and health supplement databases through the standard MCP protocol.

DOI MCP Python License Healthcare


🎯 Why this exists

The Korean healthcare AI ecosystem lacks an open MCP server for MFDS (μ‹μ•½μ²˜) public APIs. Global MCP servers like BioMCP focus on US data (FDA, PubMed). For Korean healthcare AI applications β€” pharmacy systems, telemedicine, drug interaction checkers β€” direct access to KFDA/MFDS APIs is essential but each team has to write their own wrapper.

This project provides a standard MCP server so any LLM agent can query Korean drug safety data without bespoke integration code.


Related MCP server: pykrx-mcp

✨ Features

Tool

Description

KFDA OpenAPI

search_drug

μ˜μ•½ν’ˆ λ§ˆμŠ€ν„° 검색 (μ œν’ˆλͺ…Β·μ„±λΆ„Β·μ œμ‘°μ‚¬Β·ATC μ½”λ“œ)

μ˜μ•½ν’ˆ μ œν’ˆ ν—ˆκ°€μ •λ³΄

check_dur_interaction

두 μ•½λ¬Όμ˜ λ³‘μš©κΈˆκΈ°Β·μ—°λ ΉκΈˆκΈ°Β·μž„λΆ€κΈˆκΈ° 확인

μ˜μ•½ν’ˆ μ•ˆμ „μ‚¬μš©μ„œλΉ„μŠ€ (DUR)

search_supplement

건강기λŠ₯μ‹ν’ˆ μΈν—ˆκ°€ 정보 검색

μ‹ν’ˆμ•ˆμ „λ‚˜λΌ 건기식 OpenAPI

get_drug_easy_info

eμ•½μ€μš” (ν™˜μžμš© μ‰¬μš΄ μ•½λ¬Ό 정보) 쑰회

eμ•½μ€μš”

lookup_atc_code

ATC μ½”λ“œ β†’ μ•½λ¬Όκ΅° λΆ„λ₯˜ 정보

λ‚΄μž₯ λ§€ν•‘


πŸš€ Quick Start

1. Install

pip install kfda-mcp
# or from source
git clone https://github.com/pianovirus/kfda-mcp
cd kfda-mcp
pip install -e .

2. Get your MFDS API key

Apply for a free API key at data.go.kr (곡곡데이터포털) β€” select μ‹μ•½μ²˜ OpenAPI services.

3. Configure

Create .env:

MFDS_API_KEY=your_api_key_here

4. Run as MCP server

kfda-mcp

5. Connect from Claude Desktop

Add to ~/.config/claude/claude_desktop_config.json (or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "kfda": {
      "command": "kfda-mcp",
      "env": {
        "MFDS_API_KEY": "your_api_key_here"
      }
    }
  }
}

Restart Claude Desktop. Now Claude can call Korean drug safety tools autonomously.


πŸ’‘ Example Usage

Ask Claude (or any MCP-compatible LLM):

"ν™˜μžκ°€ μ™€νŒŒλ¦°μ„ 볡용 쀑인데 자λͺ½ μΆ”μΆœ μ˜μ–‘μ œλ₯Ό 같이 먹어도 λ˜λŠ”μ§€ ν™•μΈν•΄μ€˜"

Claude will autonomously:

  1. Call search_drug("μ™€νŒŒλ¦°") β†’ get warfarin info + ATC code

  2. Call check_dur_interaction("warfarin", "grapefruit_extract") β†’ DUR check

  3. Synthesize a safety recommendation grounded in MFDS data


πŸ— Architecture

LLM Agent (Claude / GPT / etc.)
    β”‚
    β”‚ MCP Protocol (stdio / SSE)
    β”‚
    β–Ό
KFDA MCP Server (this project)
    β”‚
    β”‚ HTTP requests
    β”‚
    β–Ό
MFDS Public APIs
  - μ˜μ•½ν’ˆ μ œν’ˆ ν—ˆκ°€μ •λ³΄ OpenAPI
  - μ˜μ•½ν’ˆ μ•ˆμ „μ‚¬μš©μ„œλΉ„μŠ€ (DUR)
  - μ‹ν’ˆμ•ˆμ „λ‚˜λΌ 건기식 OpenAPI
  - eμ•½μ€μš”

πŸ“‹ Tool Reference

search_drug(name: str, limit: int = 10)

Search Korean drug master by product name, generic name, or manufacturer.

Returns: List of drugs with product_name, generic_name, manufacturer, atc_code, kor_indication, dosage_form.

check_dur_interaction(drug_a: str, drug_b: str)

Check DUR safety rules between two drugs (λ³‘μš©κΈˆκΈ°Β·μ—°λ ΉκΈˆκΈ°Β·μž„λΆ€κΈˆκΈ° λ“±).

Returns: List of warnings with rule_type, severity, description_kor.

search_supplement(ingredient: str | None = None, product: str | None = None)

Search μ‹μ•½μ²˜ 건강기λŠ₯μ‹ν’ˆ (functional health food) registrations.

Returns: List of supplements with product_name, manufacturer, main_ingredient, approved_function.

get_drug_easy_info(drug_name: str)

Get patient-friendly drug information from eμ•½μ€μš” (consumer-facing drug guide).

Returns: purpose, dosage, side_effects, warnings in Korean.

lookup_atc_code(atc_code: str)

Look up ATC (Anatomical Therapeutic Chemical) classification by code.

Returns: level1 ~ level5 Korean & English names, drug examples.


πŸ›£ Roadmap

  • Project scaffold + MCP SDK setup

  • search_drug β€” μ˜μ•½ν’ˆ λ§ˆμŠ€ν„° βœ… live verified (νƒ€μ΄λ ˆλ†€ β†’ ATC N02BE01)

  • check_dur_interaction β€” DUR λ³‘μš©κΈˆκΈ° βœ… live verified (μ•„μŠ€ν”Όλ¦°+μ™€νŒŒλ¦° β†’ 50건)

  • search_supplement β€” 건기식 βœ… live verified (μ‹ν’ˆμ•ˆμ „λ‚˜λΌ C003, 비타민 검색 OK)

  • get_drug_easy_info β€” eμ•½μ€μš” βœ… live verified (νƒ€μ΄λ ˆλ†€ 효λŠ₯Β·μš©λ²•Β·λΆ€μž‘μš© λ°˜ν™˜)

  • lookup_atc_code β€” ATC λ§€ν•‘ (planned)

  • Local cache layer (reduce API calls) β€” planned

  • Async batch query support β€” planned

  • Multilingual responses (ν•œ/영) β€” planned

ν˜„μž¬ μƒνƒœ: 4/4 핡심 tool λͺ¨λ‘ live 검증 μ™„λ£Œ, production-ready

  • Local cache layer (reduce API calls)

  • Async batch query support

  • Multilingual responses (ν•œ/영)


🀝 Contributing

Korean healthcare AI engineers β€” contributions welcome! Please open an issue or PR.

This project aims to be the de facto MCP server for MFDS public APIs.


πŸ“œ License

MIT Β© 2026 Myunghee Kim Β· pianovirus@naver.com


πŸ™ Acknowledgments


ν•œκ΅­μ–΄ μš”μ•½

μ‹μ•½μ²˜(MFDS)의 곡곡 OpenAPIλ₯Ό MCP ν”„λ‘œν† μ½œλ‘œ 감싼 μ„œλ²„μž…λ‹ˆλ‹€. Claude, GPT 같은 LLM μ—μ΄μ „νŠΈκ°€ ν•œκ΅­ μ˜μ•½ν’ˆ λ§ˆμŠ€ν„°Β·DUR μ•ˆμ „μ„±Β·κ±΄κ°•κΈ°λŠ₯μ‹ν’ˆ 정보λ₯Ό 자율적으둜 μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•œκ΅­ ν—¬μŠ€ AI κ°œλ°œμžλ“€μ΄ 맀번 μ‹μ•½μ²˜ API wrapperλ₯Ό 직접 λ§Œλ“€ ν•„μš” 없이, 이 MCP μ„œλ²„ ν•˜λ‚˜λ‘œ ν‘œμ€€ν™”λœ 도ꡬ 접근을 μ œκ³΅ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.

κΈ°μ—¬ ν™˜μ˜ν•©λ‹ˆλ‹€. 🌱

Available Tools

4 tools
check_dur_interactionB

μ‹μ•½μ²˜ μ˜μ•½ν’ˆ μ•ˆμ „μ‚¬μš©μ„œλΉ„μŠ€(DUR)μ—μ„œ 두 μ•½λ¬Όμ˜ λ³‘μš©κΈˆκΈ°Β·μ—°λ ΉκΈˆκΈ° λ“± μ•ˆμ „μ„± 정보λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. Check Korean Drug Utilization Review (DUR) safety rules between two drugs.

ParametersJSON Schema
NameRequiredDescriptionDefault
drug_aYesμ•½λ¬Ό A 이름 λ˜λŠ” μ„±λΆ„λͺ…
drug_bYesμ•½λ¬Ό B 이름 λ˜λŠ” μ„±λΆ„λͺ…

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, and description only states the tool checks safety rules. Does not disclose behavior for invalid inputs, error handling, or any limitations.

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 concise with two short sentences, but the Korean and English versions are redundant. Front-loads the purpose.

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

Completeness3/5

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

For a simple query tool with full schema coverage, the description is adequate but does not mention return format or response behavior.

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?

Schema coverage is 100% with descriptions for both parameters. The tool description adds no additional semantic value 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 checks Korean DUR safety rules between two drugs, specifying contraindications and age restrictions. It is distinct from sibling tools which focus on drug info and search.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs siblings. Does not mention scenarios or prerequisites for use.

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

get_drug_easy_infoA

μ‹μ•½μ²˜ eμ•½μ€μš” (ν™˜μžμš© μ‰¬μš΄ μ•½λ¬Ό 정보)λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€. Get patient-friendly Korean drug information: purpose, dosage, side effects, warnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
drug_nameYesμ•½ν’ˆλͺ…

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the behavioral burden. It states the tool retrieves information (read-only implied) but does not disclose any behavioral traits such as authentication needs, rate limits, data source scope, or what happens on missing or invalid input. The description is insufficient for a mutation-free query tool.

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?

Two concise sentences (one Korean, one English) that efficiently convey the tool's purpose and content. No wasted words or redundancy. The description is front-loaded and easy to parse.

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?

With one required parameter and no output schema, the description covers the essential return content (purpose, dosage, side effects, warnings). It does not specify the response format (e.g., JSON structure), error handling, or edge cases, but for a simple lookup tool, the information is largely adequate.

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?

Schema coverage is 100% with one parameter (drug_name) described as 'μ•½ν’ˆλͺ…'. The description adds that the drug name should be in Korean and that the information is patient-friendly, but does not provide additional semantics like expected format, supported languages, or examples. Baseline 3 is appropriate since the schema already covers the parameter.

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 explicitly states it queries patient-friendly Korean drug information and lists specific content categories (purpose, dosage, side effects, warnings). It clearly distinguishes from sibling tools like check_dur_interaction (drug interactions) and search_drug (general search) by focusing on easy-to-understand patient info.

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 implies the tool should be used when seeking simplified patient drug information, but it does not explicitly state when to use this tool versus alternatives like search_drug or check_dur_interaction. Sibling names provide some context but no direct guidance.

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

search_drugA

μ‹μ•½μ²˜ μ˜μ•½ν’ˆ λ§ˆμŠ€ν„°μ—μ„œ μ•½ν’ˆμ„ κ²€μƒ‰ν•©λ‹ˆλ‹€ (Korean drug master search). μ œν’ˆλͺ…, μ„±λΆ„λͺ…, μ œμ‘°μ‚¬ λ“±μœΌλ‘œ 쑰회 κ°€λŠ₯. Returns product_name, generic_name, manufacturer, ATC code, indication.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes검색할 μ•½ν’ˆλͺ… (ν•œκΈ€ λ˜λŠ” 영문, λΆ€λΆ„ 맀치 지원)
limitNoλ°˜ν™˜ν•  μ΅œλŒ€ κ²°κ³Ό 수

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses return fields and mentions partial match support, but lacks details on auth needs, rate limits, or behavior for no results. Adequate but not rich.

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 concise: two sentences conveying purpose, searchable fields, and return fields. Front-loaded with the main action and no extraneous information.

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?

For a simple search tool with 2 parameters, the description and schema together cover the essential aspects (parameters, return fields). No output schema but return fields are listed. Lacks details on error handling or pagination, but acceptable for this complexity.

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 covers both parameters with descriptions (100% coverage). The description adds value by listing what can be searched (product name, ingredient, manufacturer), extending the understanding of the 'name' parameter beyond the schema's description.

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 searches a Korean drug master and lists searchable fields (product name, ingredient, manufacturer) and return fields. It distinguishes from siblings like search_supplement and check_dur_interaction by specifying the domain.

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 implies usage for drug searches but does not provide guidance on when not to use it or compare to alternatives. Sibling tools are listed but no explicit when-to-use or when-not-to-use context.

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

search_supplementA

μ‹μ•½μ²˜ μ‹ν’ˆμ•ˆμ „λ‚˜λΌ 건강기λŠ₯μ‹ν’ˆ μΈν—ˆκ°€ 정보λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€. Search Korean functional health food (건기식) registrations by ingredient or product name.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoλ°˜ν™˜ν•  μ΅œλŒ€ κ²°κ³Ό 수
productNoμ œν’ˆλͺ…
ingredientNoμ£Όμ„±λΆ„λͺ… (예: μ½”μ—”μžμž„Q10, 비타민D)

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the tool does a search (read operation) and specifies search fields, but does not mention pagination, result format, or any side effects. This is adequate for a simple lookup but lacks depth.

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 two sentences (Korean and English), directly stating purpose and search criteria. No unnecessary words, and the information is front-loaded.

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

Completeness3/5

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

Given the tool has no output schema and no required parameters, the description should at least indicate what is returned (e.g., list of registrations, details). It does not, leaving the agent uncertain about the output format. However, for a simple search, it is moderately 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 the schema already documents parameters. The description adds value by providing an example ingredient list ('μ½”μ—”μžμž„Q10, 비타민D'), which helps the agent understand valid values beyond the schema description.

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 searches Korean functional health food registrations by ingredient or product name. It uses a specific verb ('search') and resource ('건강기λŠ₯μ‹ν’ˆ μΈν—ˆκ°€ 정보'), and distinguishes itself from sibling tools which focus on drug-related information.

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 implies usage when needing to find health food registrations, and specifies search criteria (ingredient or product name). While no explicit when-not or alternatives are given, the sibling tools are clearly different domains, so the usage context is clear.

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

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: interaction checking, patient info retrieval, drug search, and supplement search. There is no overlap or ambiguity among them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (e.g., check_dur_interaction, search_drug). The naming is predictable and uniform.

Tool Count5/5

With 4 tools, the server is well-scoped for a focused domain of Korean drug and supplement information. Each tool serves a distinct function without redundancy.

Completeness4/5

The server covers drug search, patient information, interaction checking, and supplement searchβ€”key functionalities. Minor gaps exist (e.g., professional-level drug details), but the core workflows are supported.

Maintenance

ActivityStale
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
    A
    quality
    A
    maintenance
    Enables users to search and retrieve detailed pharmaceutical drug information from the Korea Pharmaceutical Information Center (KPIC) API. Supports drug name searches and detailed lookups by drug code including ingredients, usage, precautions, and storage information.
    2
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides Korean stock market data (KOSPI, KOSDAQ, KONEX) including prices, fundamentals, investor trading, short selling, and indices via MCP protocol, enabling natural language queries from AI agents like ChatGPT and Claude.
    3
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables querying Korean public datasets (apartment prices, weather, air quality) via natural language using an MCP server and local LLM agent.
    5

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/pianovirus/kfda-mcp'

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