@isnow890/naver-search-mcp 1.0.43 โ†’ 1.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -12,6 +12,13 @@ MCP server for Naver Search API and DataLab API integration, enabling comprehens
12
12
 
13
13
  #### Version History
14
14
 
15
+ ###### 1.0.44 (2025-08-31)
16
+
17
+ - `get_current_korean_time` tool added - Essential time context tool for Korean timezone
18
+ - Enhanced all existing tool descriptions to reference time tool for temporal queries
19
+ - Improved temporal context handling for "today", "now", "current" searches
20
+ - Comprehensive Korean time formatting with multiple output formats
21
+
15
22
  ###### 1.0.4 (2025-08-21)
16
23
 
17
24
  - `find_category` tool added - with fuzzy matching and ranking system support
@@ -59,6 +66,10 @@ MCP server for Naver Search API and DataLab API integration, enabling comprehens
59
66
 
60
67
  ### Available tools:
61
68
 
69
+ #### ๐Ÿ• Time & Context Tools
70
+
71
+ - **get_current_korean_time**: Get current Korean time (KST) with comprehensive date/time information. Essential for understanding "today", "now", or "current" context in Korean timezone. Always use this tool when temporal context is needed for searches or analysis.
72
+
62
73
  #### ๐Ÿ†• Category Search
63
74
 
64
75
  - **find_category**: Category search tool - No more need to manually check category numbers via URL for trend and shopping insight searches. The LLM will find it out as you say.
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Get current Korean time (KST/UTC+9)
3
+ * @param args - No arguments required
4
+ * @returns Current Korean time in multiple formats
5
+ */
6
+ export async function getCurrentKoreanTime(args) {
7
+ const now = new Date();
8
+ const koreanTime = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Seoul" }));
9
+ return {
10
+ current_korean_time: {
11
+ iso_string: koreanTime.toISOString(),
12
+ korean_date: koreanTime.toLocaleDateString("ko-KR", {
13
+ year: "numeric",
14
+ month: "long",
15
+ day: "numeric",
16
+ weekday: "long"
17
+ }),
18
+ korean_time: koreanTime.toLocaleTimeString("ko-KR", {
19
+ hour: "2-digit",
20
+ minute: "2-digit",
21
+ second: "2-digit",
22
+ hour12: false
23
+ }),
24
+ formatted: `${koreanTime.getFullYear()}๋…„ ${koreanTime.getMonth() + 1}์›” ${koreanTime.getDate()}์ผ ${koreanTime.toLocaleDateString("ko-KR", { weekday: "long" })} ${koreanTime.toLocaleTimeString("ko-KR", { hour12: false })}`,
25
+ timezone: "Asia/Seoul (KST)",
26
+ timestamp: koreanTime.getTime()
27
+ }
28
+ };
29
+ }
30
+ export const timeToolHandlers = {
31
+ getCurrentKoreanTime,
32
+ };
package/dist/src/index.js CHANGED
@@ -9,6 +9,8 @@ import { SearchArgsSchema, NaverLocalSearchParamsSchema, } from "./schemas/searc
9
9
  import { DatalabSearchSchema, DatalabShoppingSchema, DatalabShoppingDeviceSchema, DatalabShoppingGenderSchema, DatalabShoppingAgeSchema, DatalabShoppingKeywordsSchema, DatalabShoppingKeywordDeviceSchema, DatalabShoppingKeywordGenderSchema, DatalabShoppingKeywordAgeSchema, } from "./schemas/datalab.schemas.js";
10
10
  import { FindCategorySchema } from "./schemas/category.schemas.js";
11
11
  import { findCategoryHandler } from "./handlers/category.handlers.js";
12
+ import { GetKoreanTimeSchema } from "./schemas/time.schemas.js";
13
+ import { timeToolHandlers } from "./handlers/time.handlers.js";
12
14
  // Configuration schema for Smithery
13
15
  export const configSchema = z.object({
14
16
  NAVER_CLIENT_ID: z.string().describe("Naver API Client ID"),
@@ -24,7 +26,7 @@ export function createNaverSearchServer({ config, }) {
24
26
  // Create a new MCP server only once
25
27
  const server = new McpServer({
26
28
  name: "naver-search",
27
- version: "1.0.43",
29
+ version: "1.0.44",
28
30
  });
29
31
  // Initialize Naver client with config
30
32
  const client = NaverSearchClient.getInstance();
@@ -33,7 +35,7 @@ export function createNaverSearchServer({ config, }) {
33
35
  clientSecret: config.NAVER_CLIENT_SECRET,
34
36
  });
35
37
  server.registerTool("search_news", {
36
- description: "๐Ÿ“ฐ Search latest Korean news articles from major outlets. Perfect for current events, breaking news, and recent developments. Covers politics, economy, society, and international news. (๋„ค์ด๋ฒ„ ๋‰ด์Šค ๊ฒ€์ƒ‰ - ์ตœ์‹  ๋‰ด์Šค์™€ ์‹œ์‚ฌ ์ •๋ณด)",
38
+ description: "๐Ÿ“ฐ Search latest Korean news articles from major outlets. Perfect for current events, breaking news, and recent developments. Covers politics, economy, society, and international news. For today's news or current events, use get_current_korean_time first to understand what 'today' means. (๋„ค์ด๋ฒ„ ๋‰ด์Šค ๊ฒ€์ƒ‰ - ์ตœ์‹  ๋‰ด์Šค์™€ ์‹œ์‚ฌ ์ •๋ณด, ์˜ค๋Š˜ ๋‰ด์Šค๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
37
39
  inputSchema: SearchArgsSchema.shape,
38
40
  }, async (args) => {
39
41
  const result = await searchToolHandlers.search_news(args);
@@ -42,7 +44,7 @@ export function createNaverSearchServer({ config, }) {
42
44
  };
43
45
  });
44
46
  server.registerTool("search_blog", {
45
- description: "โœ๏ธ Search personal blogs and reviews for authentic user experiences. Great for product reviews, personal stories, detailed tutorials, and real user opinions. Find genuine Korean perspectives. (๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ๊ฒ€์ƒ‰ - ์‹ค์ œ ์‚ฌ์šฉ์ž ํ›„๊ธฐ์™€ ๊ฐœ์ธ์  ๊ฒฝํ—˜)",
47
+ description: "โœ๏ธ Search personal blogs and reviews for authentic user experiences. Great for product reviews, personal stories, detailed tutorials, and real user opinions. Find genuine Korean perspectives. For recent posts or 'today's content', use get_current_korean_time first. (๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ๊ฒ€์ƒ‰ - ์‹ค์ œ ์‚ฌ์šฉ์ž ํ›„๊ธฐ์™€ ๊ฐœ์ธ์  ๊ฒฝํ—˜, ์ตœ๊ทผ ๊ธ€์ด๋‚˜ ์˜ค๋Š˜ ๋‚ด์šฉ์„ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
46
48
  inputSchema: SearchArgsSchema.shape,
47
49
  }, async (args) => {
48
50
  const result = await searchToolHandlers.search_blog(args);
@@ -51,7 +53,7 @@ export function createNaverSearchServer({ config, }) {
51
53
  };
52
54
  });
53
55
  server.registerTool("search_shop", {
54
- description: "๐Ÿ›’ Search Naver Shopping for products, prices, and shopping deals. Compare prices across vendors, find product specifications, and discover shopping trends in Korea. (๋„ค์ด๋ฒ„ ์‡ผํ•‘ ๊ฒ€์ƒ‰ - ์ƒํ’ˆ ์ •๋ณด์™€ ๊ฐ€๊ฒฉ ๋น„๊ต)",
56
+ description: "๐Ÿ›’ Search Naver Shopping for products, prices, and shopping deals. Compare prices across vendors, find product specifications, and discover shopping trends in Korea. For current deals or today's specials, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์‡ผํ•‘ ๊ฒ€์ƒ‰ - ์ƒํ’ˆ ์ •๋ณด์™€ ๊ฐ€๊ฒฉ ๋น„๊ต, ํ˜„์žฌ ํ• ์ธ์ด๋‚˜ ์˜ค๋Š˜ ํŠน๊ฐ€๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
55
57
  inputSchema: SearchArgsSchema.shape,
56
58
  }, async (args) => {
57
59
  const result = await searchToolHandlers.search_shop(args);
@@ -60,7 +62,7 @@ export function createNaverSearchServer({ config, }) {
60
62
  };
61
63
  });
62
64
  server.registerTool("search_image", {
63
- description: "๐Ÿ–ผ๏ธ Search for images with Korean context and relevance. Find visual content, infographics, charts, and photos related to your search terms. Great for visual research and content discovery. (๋„ค์ด๋ฒ„ ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ - ์‹œ๊ฐ์  ์ปจํ…์ธ  ๋ฐœ๊ฒฌ)",
65
+ description: "๐Ÿ–ผ๏ธ Search for images with Korean context and relevance. Find visual content, infographics, charts, and photos related to your search terms. Great for visual research and content discovery. For recent images or current visual content, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์ด๋ฏธ์ง€ ๊ฒ€์ƒ‰ - ์‹œ๊ฐ์  ์ปจํ…์ธ  ๋ฐœ๊ฒฌ, ์ตœ๊ทผ ์ด๋ฏธ์ง€๋‚˜ ํ˜„์žฌ ์‹œ๊ฐ ์ž๋ฃŒ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
64
66
  inputSchema: SearchArgsSchema.shape,
65
67
  }, async (args) => {
66
68
  const result = await searchToolHandlers.search_image(args);
@@ -69,7 +71,7 @@ export function createNaverSearchServer({ config, }) {
69
71
  };
70
72
  });
71
73
  server.registerTool("search_kin", {
72
- description: "โ“ Search Naver KnowledgeiN for Q&A and community-driven answers. Find solutions to problems, get expert advice, and discover community insights on various topics. (๋„ค์ด๋ฒ„ ์ง€์‹iN ๊ฒ€์ƒ‰ - ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€, ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์‹)",
74
+ description: "โ“ Search Naver KnowledgeiN for Q&A and community-driven answers. Find solutions to problems, get expert advice, and discover community insights on various topics. For recent questions or current discussions, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์ง€์‹iN ๊ฒ€์ƒ‰ - ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€, ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์‹, ์ตœ๊ทผ ์งˆ๋ฌธ์ด๋‚˜ ํ˜„์žฌ ํ† ๋ก ์„ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
73
75
  inputSchema: SearchArgsSchema.shape,
74
76
  }, async (args) => {
75
77
  const result = await searchToolHandlers.search_kin(args);
@@ -78,7 +80,7 @@ export function createNaverSearchServer({ config, }) {
78
80
  };
79
81
  });
80
82
  server.registerTool("search_book", {
81
- description: "๐Ÿ“š Search for books, publications, and literary content. Find book reviews, author information, publication details, and reading recommendations in Korean literature and translated works. (๋„ค์ด๋ฒ„ ์ฑ… ๊ฒ€์ƒ‰ - ๋„์„œ ์ •๋ณด์™€ ์„œํ‰)",
83
+ description: "๐Ÿ“š Search for books, publications, and literary content. Find book reviews, author information, publication details, and reading recommendations in Korean literature and translated works. For new releases or current bestsellers, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์ฑ… ๊ฒ€์ƒ‰ - ๋„์„œ ์ •๋ณด์™€ ์„œํ‰, ์‹ ๊ฐ„๋„์„œ๋‚˜ ํ˜„์žฌ ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
82
84
  inputSchema: SearchArgsSchema.shape,
83
85
  }, async (args) => {
84
86
  const result = await searchToolHandlers.search_book(args);
@@ -87,7 +89,7 @@ export function createNaverSearchServer({ config, }) {
87
89
  };
88
90
  });
89
91
  server.registerTool("search_encyc", {
90
- description: "๐Ÿ“– Search Naver Encyclopedia for authoritative knowledge and definitions. Best for academic research, getting reliable information, and understanding Korean concepts and terminology. (๋„ค์ด๋ฒ„ ์ง€์‹๋ฐฑ๊ณผ ๊ฒ€์ƒ‰ - ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด์™€ ์ •์˜)",
92
+ description: "๐Ÿ“– Search Naver Encyclopedia for authoritative knowledge and definitions. Best for academic research, getting reliable information, and understanding Korean concepts and terminology. For current definitions or recent updates, use get_current_korean_time for context. (๋„ค์ด๋ฒ„ ์ง€์‹๋ฐฑ๊ณผ ๊ฒ€์ƒ‰ - ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด์™€ ์ •์˜, ํ˜„์žฌ ์ •์˜๋‚˜ ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” get_current_korean_time์œผ๋กœ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•˜์„ธ์š”)",
91
93
  inputSchema: SearchArgsSchema.shape,
92
94
  }, async (args) => {
93
95
  const result = await searchToolHandlers.search_encyc(args);
@@ -96,7 +98,7 @@ export function createNaverSearchServer({ config, }) {
96
98
  };
97
99
  });
98
100
  server.registerTool("search_academic", {
99
- description: "๐ŸŽ“ Search academic papers, research documents, and scholarly content. Access Korean academic resources, research papers, theses, and professional publications. (๋„ค์ด๋ฒ„ ์ „๋ฌธ์ž๋ฃŒ ๊ฒ€์ƒ‰ - ํ•™์ˆ  ๋…ผ๋ฌธ๊ณผ ์ „๋ฌธ ์ž๋ฃŒ)",
101
+ description: "๐ŸŽ“ Search academic papers, research documents, and scholarly content. Access Korean academic resources, research papers, theses, and professional publications. For recent publications or current research, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์ „๋ฌธ์ž๋ฃŒ ๊ฒ€์ƒ‰ - ํ•™์ˆ  ๋…ผ๋ฌธ๊ณผ ์ „๋ฌธ ์ž๋ฃŒ, ์ตœ๊ทผ ๋ฐœํ‘œ๋‚˜ ํ˜„์žฌ ์—ฐ๊ตฌ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
100
102
  inputSchema: SearchArgsSchema.shape,
101
103
  }, async (args) => {
102
104
  const result = await searchToolHandlers.search_academic(args);
@@ -105,7 +107,7 @@ export function createNaverSearchServer({ config, }) {
105
107
  };
106
108
  });
107
109
  server.registerTool("search_local", {
108
- description: "๐Ÿ“ Search for local businesses, restaurants, and places in Korea. Find location information, reviews, contact details, and business hours for Korean establishments. (๋„ค์ด๋ฒ„ ์ง€์—ญ ๊ฒ€์ƒ‰ - ์ง€์—ญ ์—…์ฒด์™€ ์žฅ์†Œ ์ •๋ณด)",
110
+ description: "๐Ÿ“ Search for local businesses, restaurants, and places in Korea. Find location information, reviews, contact details, and business hours for Korean establishments. For current business hours or today's availability, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์ง€์—ญ ๊ฒ€์ƒ‰ - ์ง€์—ญ ์—…์ฒด์™€ ์žฅ์†Œ ์ •๋ณด, ํ˜„์žฌ ์˜์—…์‹œ๊ฐ„์ด๋‚˜ ์˜ค๋Š˜ ์ด์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
109
111
  inputSchema: NaverLocalSearchParamsSchema.shape,
110
112
  }, async (args) => {
111
113
  const result = await searchToolHandlers.search_local(args);
@@ -114,7 +116,7 @@ export function createNaverSearchServer({ config, }) {
114
116
  };
115
117
  });
116
118
  server.registerTool("search_cafearticle", {
117
- description: "โ˜• Search Naver Cafe articles for community discussions and specialized content. Find niche communities, hobby groups, and specialized discussions on various topics. (๋„ค์ด๋ฒ„ ์นดํŽ˜๊ธ€ ๊ฒ€์ƒ‰ - ์ปค๋ฎค๋‹ˆํ‹ฐ ํ† ๋ก ๊ณผ ์ „๋ฌธ ์ •๋ณด)",
119
+ description: "โ˜• Search Naver Cafe articles for community discussions and specialized content. Find niche communities, hobby groups, and specialized discussions on various topics. For recent discussions or current community topics, use get_current_korean_time first. (๋„ค์ด๋ฒ„ ์นดํŽ˜๊ธ€ ๊ฒ€์ƒ‰ - ์ปค๋ฎค๋‹ˆํ‹ฐ ํ† ๋ก ๊ณผ ์ „๋ฌธ ์ •๋ณด, ์ตœ๊ทผ ๋…ผ์˜๋‚˜ ํ˜„์žฌ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฃผ์ œ๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋จผ์ € get_current_korean_time์œผ๋กœ ํ˜„์žฌ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์„ธ์š”)",
118
120
  inputSchema: SearchArgsSchema.shape,
119
121
  }, async (args) => {
120
122
  const result = await searchToolHandlers.search_cafearticle(args);
@@ -124,7 +126,7 @@ export function createNaverSearchServer({ config, }) {
124
126
  });
125
127
  // Register datalab tools
126
128
  server.registerTool("datalab_search", {
127
- description: "๐Ÿ“Š Analyze search keyword trends over time using Naver DataLab. Track popularity changes, seasonal patterns, and compare multiple keywords. Perfect for market research and trend analysis. (๋„ค์ด๋ฒ„ ๋ฐ์ดํ„ฐ๋žฉ ๊ฒ€์ƒ‰์–ด ํŠธ๋ Œ๋“œ ๋ถ„์„)",
129
+ description: "๐Ÿ“Š Analyze search keyword trends over time using Naver DataLab. Track popularity changes, seasonal patterns, and compare multiple keywords. Perfect for market research and trend analysis. For current trend analysis or 'recent trends', use get_current_korean_time to determine proper date ranges. (๋„ค์ด๋ฒ„ ๋ฐ์ดํ„ฐ๋žฉ ๊ฒ€์ƒ‰์–ด ํŠธ๋ Œ๋“œ ๋ถ„์„, ํ˜„์žฌ ํŠธ๋ Œ๋“œ๋‚˜ ์ตœ๊ทผ ๋™ํ–ฅ ๋ถ„์„ ์‹œ get_current_korean_time์œผ๋กœ ์ ์ ˆํ•œ ๋‚ ์งœ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜์„ธ์š”)",
128
130
  inputSchema: DatalabSearchSchema.shape,
129
131
  }, async (args) => {
130
132
  const result = await datalabToolHandlers.datalab_search(args);
@@ -133,7 +135,7 @@ export function createNaverSearchServer({ config, }) {
133
135
  };
134
136
  });
135
137
  server.registerTool("datalab_shopping_category", {
136
- description: "๐Ÿ›๏ธ STEP 2: Analyze shopping category trends over time. Use find_category first to get category codes. BUSINESS CASES: Market size analysis, seasonal trend identification, category performance comparison. EXAMPLE: Compare 'ํŒจ์…˜์˜๋ฅ˜' vs 'ํ™”์žฅํ’ˆ' trends over 6 months. (๋„ค์ด๋ฒ„ ์‡ผํ•‘ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํŠธ๋ Œ๋“œ ๋ถ„์„ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ์œผ์„ธ์š”)",
138
+ description: "๐Ÿ›๏ธ STEP 2: Analyze shopping category trends over time. Use find_category first to get category codes. BUSINESS CASES: Market size analysis, seasonal trend identification, category performance comparison. EXAMPLE: Compare 'ํŒจ์…˜์˜๋ฅ˜' vs 'ํ™”์žฅํ’ˆ' trends over 6 months. For current period analysis, use get_current_korean_time to set proper date ranges. (๋„ค์ด๋ฒ„ ์‡ผํ•‘ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํŠธ๋ Œ๋“œ ๋ถ„์„ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ํ˜„์žฌ ๊ธฐ๊ฐ„ ๋ถ„์„์‹œ get_current_korean_time์œผ๋กœ ์ ์ ˆํ•œ ๋‚ ์งœ ๋ฒ”์œ„ ์„ค์ •)",
137
139
  inputSchema: DatalabShoppingSchema.shape,
138
140
  }, async (args) => {
139
141
  const result = await datalabToolHandlers.datalab_shopping_category(args);
@@ -142,7 +144,7 @@ export function createNaverSearchServer({ config, }) {
142
144
  };
143
145
  });
144
146
  server.registerTool("datalab_shopping_by_device", {
145
- description: "๐Ÿ“ฑ Analyze shopping trends by device (PC vs Mobile). Use find_category first. BUSINESS CASES: Mobile commerce strategy, responsive design priority, device-specific campaigns. EXAMPLE: 'PC ์‚ฌ์šฉ์ž๊ฐ€ ๋” ๋งŽ์ด ๊ตฌ๋งคํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋Š”?' (๊ธฐ๊ธฐ๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ๋ถ„์„ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ์œผ์„ธ์š”)",
147
+ description: "๐Ÿ“ฑ Analyze shopping trends by device (PC vs Mobile). Use find_category first. BUSINESS CASES: Mobile commerce strategy, responsive design priority, device-specific campaigns. EXAMPLE: 'PC ์‚ฌ์šฉ์ž๊ฐ€ ๋” ๋งŽ์ด ๊ตฌ๋งคํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋Š”?' For current device trends, use get_current_korean_time to set proper analysis period. (๊ธฐ๊ธฐ๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ๋ถ„์„ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ํ˜„์žฌ ๊ธฐ๊ธฐ ํŠธ๋ Œ๋“œ ๋ถ„์„์‹œ get_current_korean_time์œผ๋กœ ์ ์ ˆํ•œ ๋ถ„์„ ๊ธฐ๊ฐ„ ์„ค์ •)",
146
148
  inputSchema: DatalabShoppingDeviceSchema.pick({
147
149
  startDate: true,
148
150
  endDate: true,
@@ -157,7 +159,7 @@ export function createNaverSearchServer({ config, }) {
157
159
  };
158
160
  });
159
161
  server.registerTool("datalab_shopping_by_gender", {
160
- description: "๐Ÿ‘ฅ Analyze shopping trends by gender (Male vs Female). Use find_category first. BUSINESS CASES: Gender-targeted marketing, product positioning, demographic analysis. EXAMPLE: 'ํ™”์žฅํ’ˆ ์‡ผํ•‘์—์„œ ๋‚จ๋…€ ๋น„์œจ์€?' (์„ฑ๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ๋ถ„์„ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ์œผ์„ธ์š”)",
162
+ description: "๐Ÿ‘ฅ Analyze shopping trends by gender (Male vs Female). Use find_category first. BUSINESS CASES: Gender-targeted marketing, product positioning, demographic analysis. EXAMPLE: 'ํ™”์žฅํ’ˆ ์‡ผํ•‘์—์„œ ๋‚จ๋…€ ๋น„์œจ์€?' For current gender trends, use get_current_korean_time to set proper analysis period. (์„ฑ๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ ๋ถ„์„ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ํ˜„์žฌ ์„ฑ๋ณ„ ํŠธ๋ Œ๋“œ ๋ถ„์„์‹œ get_current_korean_time์œผ๋กœ ์ ์ ˆํ•œ ๋ถ„์„ ๊ธฐ๊ฐ„ ์„ค์ •)",
161
163
  inputSchema: DatalabShoppingGenderSchema.pick({
162
164
  startDate: true,
163
165
  endDate: true,
@@ -172,7 +174,7 @@ export function createNaverSearchServer({ config, }) {
172
174
  };
173
175
  });
174
176
  server.registerTool("datalab_shopping_by_age", {
175
- description: "๐Ÿ‘ถ๐Ÿ‘ฆ๐Ÿ‘จ๐Ÿ‘ด Analyze shopping trends by age groups (10s, 20s, 30s, 40s, 50s, 60s+). Use find_category first. BUSINESS CASES: Age-targeted products, generational preferences, lifecycle marketing. EXAMPLE: '๊ฐœ๋ฐœ ๋„๊ตฌ๋Š” ์–ด๋А ์—ฐ๋ น๋Œ€๊ฐ€ ๋งŽ์ด ๊ตฌ๋งคํ•˜๋‚˜?' (์—ฐ๋ น๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ์œผ์„ธ์š”)",
177
+ description: "๐Ÿ‘ถ๐Ÿ‘ฆ๐Ÿ‘จ๐Ÿ‘ด Analyze shopping trends by age groups (10s, 20s, 30s, 40s, 50s, 60s+). Use find_category first. BUSINESS CASES: Age-targeted products, generational preferences, lifecycle marketing. EXAMPLE: '๊ฐœ๋ฐœ ๋„๊ตฌ๋Š” ์–ด๋А ์—ฐ๋ น๋Œ€๊ฐ€ ๋งŽ์ด ๊ตฌ๋งคํ•˜๋‚˜?' For current age trends, use get_current_korean_time to set proper analysis period. (์—ฐ๋ น๋ณ„ ์‡ผํ•‘ ํŠธ๋ Œ๋“œ - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ํ˜„์žฌ ์—ฐ๋ น ํŠธ๋ Œ๋“œ ๋ถ„์„์‹œ get_current_korean_time์œผ๋กœ ์ ์ ˆํ•œ ๋ถ„์„ ๊ธฐ๊ฐ„ ์„ค์ •)",
176
178
  inputSchema: DatalabShoppingAgeSchema.pick({
177
179
  startDate: true,
178
180
  endDate: true,
@@ -187,7 +189,7 @@ export function createNaverSearchServer({ config, }) {
187
189
  };
188
190
  });
189
191
  server.registerTool("datalab_shopping_keywords", {
190
- description: "๐Ÿ” Compare specific keywords within a shopping category. Use find_category first. BUSINESS CASES: Product keyword optimization, competitor analysis, search trend identification. EXAMPLE: Within 'ํŒจ์…˜' category, compare '์›ํ”ผ์Šค' vs '์ž์ผ“' vs '๋“œ๋ ˆ์Šค' trends. (์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ํ‚ค์›Œ๋“œ ๋น„๊ต - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ์œผ์„ธ์š”)",
192
+ description: "๐Ÿ” Compare specific keywords within a shopping category. Use find_category first. BUSINESS CASES: Product keyword optimization, competitor analysis, search trend identification. EXAMPLE: Within 'ํŒจ์…˜' category, compare '์›ํ”ผ์Šค' vs '์ž์ผ“' vs '๋“œ๋ ˆ์Šค' trends. For current keyword trends, use get_current_korean_time to set proper analysis period. (์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ํ‚ค์›Œ๋“œ ๋น„๊ต - ๋จผ์ € find_category ๋„๊ตฌ๋กœ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ๊ณ , ํ˜„์žฌ ํ‚ค์›Œ๋“œ ํŠธ๋ Œ๋“œ ๋ถ„์„์‹œ get_current_korean_time์œผ๋กœ ์ ์ ˆํ•œ ๋ถ„์„ ๊ธฐ๊ฐ„ ์„ค์ •)",
191
193
  inputSchema: DatalabShoppingKeywordsSchema.shape,
192
194
  }, async (args) => {
193
195
  const result = await datalabToolHandlers.datalab_shopping_keywords(args);
@@ -222,6 +224,16 @@ export function createNaverSearchServer({ config, }) {
222
224
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
223
225
  };
224
226
  });
227
+ // Register current time tool
228
+ server.registerTool("get_current_korean_time", {
229
+ description: "๐Ÿ• Get current Korean time (KST) with date and time information. Use this tool whenever you need to know 'today', 'now', 'current time', or any time-related queries. Essential for understanding what 'today' means in Korean context. Always use this tool when users mention 'today' or 'current' to provide accurate time context. (ํ˜„์žฌ ํ•œ๊ตญ ์‹œ๊ฐ„ ์กฐํšŒ - '์˜ค๋Š˜', 'ํ˜„์žฌ', '์ง€๊ธˆ' ๋“ฑ์˜ ์‹œ๊ฐ„ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ•ญ์ƒ ์‚ฌ์šฉํ•˜์„ธ์š”)",
230
+ inputSchema: GetKoreanTimeSchema.shape,
231
+ }, async (args) => {
232
+ const result = await timeToolHandlers.getCurrentKoreanTime(args);
233
+ return {
234
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
235
+ };
236
+ });
225
237
  // Register category search tool
226
238
  server.registerTool("find_category", {
227
239
  description: "๐Ÿš€ STEP 1: Find shopping categories with Korean search terms. Search in KOREAN (ํŒจ์…˜, ํ™”์žฅํ’ˆ, ๊ฐ€์ „์ œํ’ˆ, etc.) to find category codes needed for datalab tools. Smart fuzzy matching finds similar categories even with partial matches. (์นดํ…Œ๊ณ ๋ฆฌ ๊ฒ€์ƒ‰: ํ•œ๊ตญ์–ด๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋žฉ ๋ถ„์„์— ํ•„์š”ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์ฃผ๋Š” ํ•„์ˆ˜ ๋„๊ตฌ)",
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Schema for Korean time tool - no parameters needed
4
+ */
5
+ export const GetKoreanTimeSchema = z.object({
6
+ // No parameters required for getting current time
7
+ });
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isnow890/naver-search-mcp",
3
- "version": "1.0.43",
3
+ "version": "1.0.44",
4
4
  "description": "Naver Search MCP Server",
5
5
  "main": "dist/src/index.js",
6
6
  "module": "./src/index.ts",