kfda-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kfda-mcpcheck DUR interaction between ibuprofen and aspirin"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π°π· 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.
π― 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 |
| μμ½ν λ§μ€ν° κ²μ (μ νλͺ Β·μ±λΆΒ·μ μ‘°μ¬Β·ATC μ½λ) | μμ½ν μ ν νκ°μ 보 |
| λ μ½λ¬Όμ λ³μ©κΈκΈ°Β·μ°λ ΉκΈκΈ°Β·μλΆκΈκΈ° νμΈ | μμ½ν μμ μ¬μ©μλΉμ€ (DUR) |
| 건κ°κΈ°λ₯μν μΈνκ° μ 보 κ²μ | μνμμ λλΌ κ±΄κΈ°μ OpenAPI |
| eμ½μμ (νμμ© μ¬μ΄ μ½λ¬Ό μ 보) μ‘°ν | eμ½μμ |
| 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_here4. Run as MCP server
kfda-mcp5. 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:
Call
search_drug("μνλ¦°")β get warfarin info + ATC codeCall
check_dur_interaction("warfarin", "grapefruit_extract")β DUR checkSynthesize 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
Anthropic MCP β Standard protocol for LLM-tool communication
μνμμ½νμμ μ² (MFDS) β Public health data API provider
곡곡λ°μ΄ν°ν¬νΈ β Korean government open data platform
νκ΅μ΄ μμ½
μμ½μ²(MFDS)μ 곡곡 OpenAPIλ₯Ό MCP νλ‘ν μ½λ‘ κ°μΌ μλ²μ λλ€. Claude, GPT κ°μ LLM μμ΄μ νΈκ° νκ΅ μμ½ν λ§μ€ν°Β·DUR μμ μ±Β·κ±΄κ°κΈ°λ₯μν μ 보λ₯Ό μμ¨μ μΌλ‘ μ‘°νν μ μμ΅λλ€.
νκ΅ ν¬μ€ AI κ°λ°μλ€μ΄ λ§€λ² μμ½μ² API wrapperλ₯Ό μ§μ λ§λ€ νμ μμ΄, μ΄ MCP μλ² νλλ‘ νμ€νλ λꡬ μ κ·Όμ μ 곡νλ κ²μ΄ λͺ©νμ λλ€.
κΈ°μ¬ νμν©λλ€. π±
Available Tools
4 toolscheck_dur_interactionB
μμ½μ² μμ½ν μμ μ¬μ©μλΉμ€(DUR)μμ λ μ½λ¬Όμ λ³μ©κΈκΈ°Β·μ°λ ΉκΈκΈ° λ± μμ μ± μ 보λ₯Ό νμΈν©λλ€. Check Korean Drug Utilization Review (DUR) safety rules between two drugs.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_a | Yes | μ½λ¬Ό A μ΄λ¦ λλ μ±λΆλͺ | |
| drug_b | Yes | μ½λ¬Ό B μ΄λ¦ λλ μ±λΆλͺ |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_name | Yes | μ½νλͺ |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | κ²μν μ½νλͺ (νκΈ λλ μλ¬Έ, λΆλΆ λ§€μΉ μ§μ) | |
| limit | No | λ°νν μ΅λ κ²°κ³Ό μ |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | λ°νν μ΅λ κ²°κ³Ό μ | |
| product | No | μ νλͺ | |
| ingredient | No | μ£Όμ±λΆλͺ (μ: μ½μμμQ10, λΉνλ―ΌD) |
TDQS
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.
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.
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.
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.
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.
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
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.
All tool names follow a consistent verb_noun pattern with underscores (e.g., check_dur_interaction, search_drug). The naming is predictable and uniform.
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.
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
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
Korea-native MCP gateway: Korean commerce, payments, messaging, gov & finance APIs for AI agents.
Let AI agents query data and act across all your business apps via MCP.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Korean fact-verification tools for AI agents: business registration, address, DART, apt prices, laws
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables 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.25MIT

pykrx-mcpofficial
AlicenseNot gradedqualityCmaintenanceProvides 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.3MIT- AlicenseAqualityCmaintenanceEnables natural language querying of Korean public medical data (data.go.kr) through MCP clients like Claude, providing tools for searching hospitals, drugs, non-payment costs, disease statistics, and more.101MIT
- FlicenseAqualityCmaintenanceEnables querying Korean public datasets (apartment prices, weather, air quality) via natural language using an MCP server and local LLM agent.5
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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