sometrend-mcp-server
Version:
TM2 기반의 썸트렌드(sometrend) MCP 서버 - 트렌드 분석 및 데이터 처리
442 lines (423 loc) • 15.9 kB
text/typescript
/**
* TM2 MCP 프롬프트 정의
*
* - 평판 분석
* : 기업 · 기관에 대한 긍부정 성향과 연관키워드를 분석하여 이미지 제고를 위한 커뮤니케이션 전략 수립에 활용
* - 여론 분석
* : 온라인 · 소셜 상에서 사람들이 자유롭게 표현하고 소통하는 담론들을 분석하여 관심 주제에 대한 인지도 및 의견 파악에 활용
* - 브랜드 분석
* : 자사와 경쟁사 브랜드에 대한 인지도, 긍부정 성향, 연관키워드 등을 분석하여 브랜드 포지셔닝 전략 수립에 활용
* - 위기 이슈 관리
* : 위험 · 부정적 이슈를 조기에 포착하고 확산도를 분석하여 신속하고 효과적인 위기 이슈 대응 전략 수립에 활용
* - 마케팅 분석
* : 마케팅 요소(4P : Product, Price, Place, Promotion) 에 대한 여론을 분석하여 마케팅 전략 수립 · 성과 평가에 활용
* - 경쟁사 비교 분석
* : 브랜드 별 언급 점유율 분석을 통해 동종산업 내 현황을 파악하고, 강약점 분석을 통해 비교 우위 전략 수립에 활용
* - 상품 분석
* : 온라인 상에 언급된 소비자들의 구매결정요소(Key Buying Factor)들을 분석하여 상품 개선 · 신상품 개발에 활용
* - 공공 · 금융 · 기타
* : 정책에 대한 여론을 수렴하여 반영하거나, 투자자들의 심리 및 실시간 마켓 동향을 파악 하는 등 다양한 분야에서 활용
*/
import type {
PromptArgument,
PromptDefinition,
PromptCategory,
PromptStatistics,
PromptConstants,
PromptTemplates
} from '../types/prompts.js';
// === 기본 분석 프롬프트 정의 ===
export const BASIC_PROMPT_DEFINITIONS: PromptDefinition[] = [
{
name: "analyze_social_trend",
description: "소셜 미디어 트렌드 종합 분석을 위한 프롬프트",
arguments: [
{
name: "keyword",
description: "분석할 키워드",
required: true
},
{
name: "period",
description: "분석 기간 (예: 최근 1개월, 3개월)",
required: false
},
{
name: "focus",
description: "분석 초점 (언급량, 감성, 연관어 등)",
required: false
}
] as const
},
{
name: "keyword_comparison",
description: "여러 키워드의 비교 분석 프롬프트",
arguments: [
{
name: "keywords",
description: "비교할 키워드들 (쉼표로 구분)",
required: true
},
{
name: "metric",
description: "비교 기준 (언급량, 감성, 연관어)",
required: false
}
]
},
{
name: "sentiment_analysis",
description: "키워드 감성 분석 전문 프롬프트",
arguments: [
{
name: "keyword",
description: "감성 분석할 키워드",
required: true
},
{
name: "timeframe",
description: "분석 시간 범위",
required: false
}
]
},
{
name: "association_analysis",
description: "연관어 분석 전문 프롬프트",
arguments: [
{
name: "keyword",
description: "연관어를 분석할 키워드",
required: true
},
{
name: "category",
description: "분류체계 기준 (선택사항)",
required: false
}
]
},
{
name: "crisis_monitoring",
description: "위기 모니터링 및 이슈 탐지 프롬프트",
arguments: [
{
name: "keyword",
description: "모니터링할 키워드",
required: true
},
{
name: "threshold",
description: "위기 감지 임계값",
required: false
}
]
}
];
// === TM2 전문 분석 시나리오 프롬프트 ===
export const EXTENDED_PROMPT_DEFINITIONS: PromptDefinition[] = [
{
name: "reputation_analysis",
description: "평판 분석 - 기업·기관에 대한 긍부정 성향과 연관키워드를 분석하여 이미지 제고를 위한 커뮤니케이션 전략 수립에 활용",
arguments: [
{
name: "organization",
description: "분석할 기업이나 기관명",
required: true
},
{
name: "analysis_period",
description: "분석 기간 (예: 최근 3개월, 6개월)",
required: false
},
{
name: "focus_area",
description: "중점 분석 영역 (제품, 서비스, 경영진, 전반적 이미지 등)",
required: false
},
{
name: "benchmark_targets",
description: "비교 대상 기업/기관 (선택사항)",
required: false
}
]
},
{
name: "public_opinion_analysis",
description: "여론 분석 - 온라인·소셜 상에서 사람들이 자유롭게 표현하고 소통하는 담론들을 분석하여 관심 주제에 대한 인지도 및 의견 파악에 활용",
arguments: [
{
name: "topic",
description: "분석할 여론 주제 또는 이슈",
required: true
},
{
name: "target_demographic",
description: "타겟 인구층 (연령대, 지역, 성별 등)",
required: false
},
{
name: "opinion_scope",
description: "의견 분석 범위 (찬반, 인지도, 관심도, 우려사항 등)",
required: false
},
{
name: "regional_focus",
description: "지역별 분석 여부",
required: false
}
]
},
{
name: "brand_analysis",
description: "브랜드 분석 - 자사와 경쟁사 브랜드에 대한 인지도, 긍부정 성향, 연관키워드 등을 분석하여 브랜드 포지셔닝 전략 수립에 활용",
arguments: [
{
name: "brand_name",
description: "분석할 주요 브랜드명",
required: true
},
{
name: "competitor_brands",
description: "경쟁사 브랜드들 (쉼표로 구분)",
required: false
},
{
name: "positioning_focus",
description: "포지셔닝 분석 초점 (품질, 가격, 이미지, 서비스 등)",
required: false
},
{
name: "market_segment",
description: "시장 세그먼트 (예: 프리미엄, 대중, 저가 등)",
required: false
}
]
},
{
name: "crisis_issue_management",
description: "위기 이슈 관리 - 위험·부정적 이슈를 조기에 포착하고 확산도를 분석하여 신속하고 효과적인 위기 이슈 대응 전략 수립에 활용",
arguments: [
{
name: "organization_or_brand",
description: "모니터링할 조직/브랜드명",
required: true
},
{
name: "risk_keywords",
description: "위기 관련 키워드들 (사고, 논란, 클레임 등)",
required: false
},
{
name: "alert_sensitivity",
description: "알림 민감도 (높음, 보통, 낮음)",
required: false
},
{
name: "response_priority",
description: "대응 우선순위 기준 (확산속도, 영향도, 심각도)",
required: false
}
]
},
{
name: "marketing_analysis",
description: "마케팅 분석 - 마케팅 요소(4P: Product, Price, Place, Promotion)에 대한 여론을 분석하여 마케팅 전략 수립·성과 평가에 활용",
arguments: [
{
name: "product_or_service",
description: "분석할 제품이나 서비스명",
required: true
},
{
name: "marketing_element",
description: "분석할 마케팅 요소 (제품, 가격, 유통, 프로모션, 전체)",
required: false
},
{
name: "campaign_period",
description: "마케팅 캠페인 기간",
required: false
},
{
name: "target_market",
description: "타겟 시장 또는 고객층",
required: false
}
]
},
{
name: "competitor_comparison_analysis",
description: "경쟁사 비교 분석 - 브랜드별 언급 점유율 분석을 통해 동종산업 내 현황을 파악하고, 강약점 분석을 통해 비교 우위 전략 수립에 활용",
arguments: [
{
name: "primary_brand",
description: "주요 분석 대상 브랜드",
required: true
},
{
name: "competitor_list",
description: "경쟁사 브랜드 목록 (쉼표로 구분)",
required: true
},
{
name: "comparison_metrics",
description: "비교 지표 (언급량, 점유율, 감성, 연관어, 전체)",
required: false
},
{
name: "industry_category",
description: "업종 카테고리 (선택사항)",
required: false
}
]
},
{
name: "product_analysis",
description: "상품 분석 - 온라인 상에 언급된 소비자들의 구매결정요소(Key Buying Factor)들을 분석하여 상품 개선·신상품 개발에 활용",
arguments: [
{
name: "product_name",
description: "분석할 상품명",
required: true
},
{
name: "analysis_focus",
description: "분석 초점 (구매요인, 만족도, 불만사항, 개선요구, 전체)",
required: false
},
{
name: "product_category",
description: "상품 카테고리 (전자제품, 식품, 의류, 화장품 등)",
required: false
},
{
name: "lifecycle_stage",
description: "제품 라이프사이클 단계 (출시, 성장, 성숙, 쇠퇴)",
required: false
}
]
},
{
name: "public_finance_analysis",
description: "공공·금융·기타 분석 - 정책에 대한 여론을 수렴하여 반영하거나, 투자자들의 심리 및 실시간 마켓 동향을 파악하는 등 다양한 분야에서 활용",
arguments: [
{
name: "analysis_subject",
description: "분석 대상 (정책명, 금융상품, 시장 등)",
required: true
},
{
name: "analysis_type",
description: "분석 유형 (정책여론, 투자심리, 시장동향, 규제반응)",
required: false
},
{
name: "stakeholder_group",
description: "이해관계자 그룹 (일반시민, 투자자, 기업, 전문가)",
required: false
},
{
name: "impact_scope",
description: "영향 범위 (국가적, 지역적, 업계별, 개인적)",
required: false
}
]
}
];
// === 통합 분석 프롬프트 ===
export const STRATEGIC_PROMPT_DEFINITIONS: PromptDefinition[] = [
{
name: "comprehensive_brand_monitoring",
description: "종합적 브랜드 모니터링 - 평판, 경쟁사 비교, 위기 감지를 통합한 전방위적 브랜드 분석",
arguments: [
{
name: "brand_name",
description: "모니터링할 브랜드명",
required: true
},
{
name: "monitoring_scope",
description: "모니터링 범위 (평판, 경쟁사, 위기, 전체)",
required: false
},
{
name: "alert_settings",
description: "알림 설정 (즉시, 일간, 주간)",
required: false
}
]
},
{
name: "strategic_market_analysis",
description: "전략적 시장 분석 - 시장 동향, 소비자 인사이트, 경쟁 환경을 종합한 전략 수립용 분석",
arguments: [
{
name: "market_or_industry",
description: "분석할 시장이나 업종",
required: true
},
{
name: "strategic_focus",
description: "전략적 초점 (신규진입, 시장확장, 포지셔닝, 혁신)",
required: false
},
{
name: "timeframe",
description: "분석 기간 및 예측 범위",
required: false
}
]
}
];
// === 모든 프롬프트 정의 통합 ===
export const ALL_PROMPT_DEFINITIONS: PromptDefinition[] = [
...BASIC_PROMPT_DEFINITIONS,
...EXTENDED_PROMPT_DEFINITIONS,
...STRATEGIC_PROMPT_DEFINITIONS
];
// === 카테고리별 프롬프트 분류 ===
export const PROMPT_CATEGORIES: PromptCategory[] = [
{
name: "기본 분석",
description: "소셜 미디어 기본 분석 프롬프트",
prompts: BASIC_PROMPT_DEFINITIONS
},
{
name: "TM2 전문 분석",
description: "TM2 특화 분석 시나리오 프롬프트",
prompts: EXTENDED_PROMPT_DEFINITIONS
},
{
name: "전략 분석",
description: "통합적이고 전략적인 분석 프롬프트",
prompts: STRATEGIC_PROMPT_DEFINITIONS
}
];
// === 기존 호환성을 위한 별칭 ===
export const PROMPT_DEFINITIONS = ALL_PROMPT_DEFINITIONS;
// === 유틸리티 함수들 ===
/**
* 모든 프롬프트 정의를 반환하는 함수
* @returns 모든 프롬프트 정의 배열
*/
export function getPromptDefinitions(): PromptDefinition[] {
return ALL_PROMPT_DEFINITIONS;
}
/**
* 특정 이름의 프롬프트를 찾는 함수
* @param name 프롬프트 이름
* @returns 프롬프트 정의 또는 undefined
*/
export function getPromptByName(name: string): PromptDefinition | undefined {
return ALL_PROMPT_DEFINITIONS.find(prompt => prompt.name === name);
}
/**
* 특정 카테고리의 프롬프트들을 반환하는 함수
* @param categoryName 카테고리 이름
* @returns 해당 카테고리의 프롬프트 배열
*/
export function getPromptsByCategory(categoryName: string): PromptDefinition[] {
const category = PROMPT_CATEGORIES.find(cat => cat.name === categoryName);
return category ? category.prompts : [];
}