TM2 기반의 썸트렌드(sometrend) MCP 서버 - 트렌드 분석 및 데이터 처리
npm install sometrend-mcp-server<<<<<<< README.md
TM2 기반의 썸트렌드 MCP 서버입니다.
TM2 API 서비스와 Model Context Protocol (MCP) 표준을 연결하는 프록시 서버입니다.
이 서버는 TM2(Sometrend) API의 다양한 텍스트 분석 기능을 MCP 클라이언트에서 쉽게 사용할 수 있도록 브리지 역할을 수행합니다.
- NPX 배포 완료: npx sometrend-mcp-server로 전 세계 즉시 사용 가능
- MCP v1.18.0 지원: 최신 Model Context Protocol 표준 완전 준수
- 간편한 설정: API 키 설정 후 바로 Claude Desktop에서 사용
- 하이브리드 리소스 프리로딩: 핵심 카테고리 데이터 메모리 캐시로 빠른 응답 (0ms)
- 메모리 최적화: 도구 설명 최적화로 약 50% 메모리 사용량 감소
- 14개 전문 프롬프트: 평판분석, 위기관리, 마케팅분석 등 비즈니스 시나리오 지원
- 프로덕션 레디: PM2 클러스터, Redis 캐시, MariaDB 통합으로 엔터프라이즈 수준 안정성
다음과 같은 다양한 이름으로 서버를 호출할 수 있습니다:
- "썸트렌드 MCP를 이용해서 분석해줘"
- "TM2 MCP를 이용해서 분석해줘"
- "sometrend MCP를 이용해서 분석해줘"
- 트렌드 분석 및 데이터 처리
- SNS 채널 관리 및 분석
- 카테고리 리소스 관리
- Runtime: Node.js (>= 18.0.0)
- Language: TypeScript 5.0.0
- Framework: @modelcontextprotocol/sdk 1.18.0 (최신)
- Transport: Server-Sent Events (SSE) + STDIO
- HTTP Server: Express.js 5.1.0
- HTTP Client: Axios 1.9.0
- Environment: dotenv 17.2.2
- Process Manager: PM2 6.0.10
- Caching: Redis 5.7.0 + 인메모리 하이브리드 캐시
- Database: MariaDB 3.4.5
- Logging: Winston 3.17.0
- Security: Express Rate Limit 8.1.0
bash
npx sometrend-mcp-server --setup
`$3
claude_desktop_config.json 파일에 추가:`json
{
"mcpServers": {
"sometrend": {
"command": "npx",
"args": ["sometrend-mcp-server"],
"env": {
"TM2_API_KEY": "your-api-key-here"
}
}
}
}
`$3
설정 완료 후 Claude Desktop을 재시작하세요.API 키 발급 문의:
biz@vaiv.kr---
📋 사전 요구사항 (개발용)
- Node.js 18.0.0 이상
- npm 패키지 매니저
- TM2 API 서버 접근 권한
🔧 개발자 설치 및 설정
$3
`bash
git clone
cd tm2_mcp_server_proxy
npm install
`$3
.env 파일을 생성하고 다음 설정을 추가하세요:
`env
TM2 API 키
TM2_API_KEY=your_api_key_here
API 타임아웃 (밀리초)
API_TIMEOUT=60000
TM2 서버 URL
TM2_BASE_URL=http://10.1.41.49:9292
`$3
#### SSE 모드 (Claude Desktop 원격 연결)
`bash
개발 모드
npm run dev프로덕션 빌드 및 실행
npm run build
npm start
`#### STDIO 모드 (로컬 MCP 클라이언트)
`bash
STDIO 모드로 실행
npm run start:stdio테스트 실행
npm test
`서버가 시작되면 다음과 같은 엔드포인트가 제공됩니다:
-
GET /sse: SSE 스트림 연결 (Claude Desktop용)
- POST /messages: MCP 메시지 처리
- GET /health: 서버 상태 확인
- GET /info: 서버 정보 및 사용법 📁 프로젝트 구조
`
tm2_mcp_server_proxy/
├── src/
│ ├── assets/ # 정적 리소스
│ │ ├── tm2-sm-categories.json
│ │ ├── tm2-sns-channels.json
│ │ └── tm2-tsn3-categories.json
│ ├── constants/ # 상수 정의
│ │ ├── analysis.constants.ts
│ │ ├── api-endpoints.constants.ts
│ │ ├── api-guide.constants.ts
│ │ ├── app-data.constants.ts
│ │ └── category-resource.constants.ts
│ ├── definitions/ # MCP 정의
│ │ ├── PromptDefinitions.ts
│ │ ├── ResourceDefinitions.ts
│ │ └── ToolDefinitions.ts
│ ├── services/ # 핵심 서비스
│ │ ├── CacheService.ts
│ │ ├── CategoryResourceService.ts
│ │ ├── PromptGeneratorService.ts
│ │ ├── PromptHandlerService.ts
│ │ ├── SnsChannelService.ts
│ │ └── TM2ApiClient.ts
│ ├── types/ # TypeScript 타입 정의
│ │ ├── analysis.ts
│ │ ├── index.ts
│ │ ├── prompts.ts
│ │ ├── resources.ts
│ │ └── tools.ts
│ ├── index.ts # 진입점
│ └── TM2Server.ts # 메인 서버 클래스
├── test/ # 테스트 파일
├── docs/ # 문서
├── .env # 환경 변수
├── package.json
└── tsconfig.json` 🎯 사용 예시
$3
1. 서버 시작:
`bash
npm run dev
`2. Claude Desktop 설정에서 MCP 서버 추가:
`json
{
"mcpServers": {
"sometrend": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sse", "http://localhost:3000/sse"]
}
}
}
`$3
`typescript
import { StdioServerTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { Client } from '@modelcontextprotocol/sdk/client/index.js';const transport = new StdioServerTransport({
command: 'node',
args: ['dist/index.js']
});
const client = new Client({
name: "sometrend-client",
version: "1.0.0"
}, {
capabilities: {}
});
await client.connect(transport);
` $3
`typescript
// 키워드 카테고리 분류
const result = await client.callTool({
name: "getKeywordCategory",
arguments: {
dataSource: "blog",
categoryType: "SM",
keyword: "스마트폰"
}
});// 연관어 분석
const associations = await client.callTool({
name: "getAssociationAnalysis",
arguments: {
dataSource: "blog",
categoryType: "TSN3",
keyword: "아이폰",
period: "1M"
}
});
` $3
`typescript
// 카테고리 정보 조회
const categories = await client.readResource({
uri: "tm2://categories/sm"
});// SNS 채널 정보 조회
const channels = await client.readResource({
uri: "tm2://channels/sns"
});
`$3
`typescript
// 평판 분석 프롬프트
const prompt = await client.getPrompt({
name: "reputation_analysis",
arguments: {
organization: "삼성전자",
analysis_period: "최근 3개월",
focus_area: "제품"
}
});// 위기 관리 프롬프트
const crisis = await client.getPrompt({
name: "crisis_issue_management",
arguments: {
organization_or_brand: "우리회사",
risk_keywords: "사고,논란,클레임",
alert_sensitivity: "높음"
}
});
` 📊 분석 기능 및 프롬프트
$3
| 카테고리 | 도구명 | 설명 |
|---------|------|------|
| 시스템 | getAvailableDataSources | 분석 가능한 데이터 소스 목록 |
| 시스템 | getAvailableSnsChannels | SNS 채널별 세부 정보 |
| 분류 | getKeywordCategory | 키워드 카테고리 자동 분류 |
| 분류 | getCategoryBatch | 다중 키워드 일괄 분류 |
| 분석 | getDocumentCount | 키워드별 문서량 분석 |
| 분석 | getBuzzAnalysis | 키워드 언급량 및 트렌드 분석 |
| 분석 | getAssociationAnalysis | 연관어 분석 |
| 분석 | getSentimentAnalysis | 감성 분석 |$3
| 카테고리 | 프롬프트명 | 비즈니스 활용 |
|---------|----------|-------------|
| 기본분석 | analyze_social_trend | 소셜미디어 트렌드 종합 분석 |
| 기본분석 | sentiment_analysis | 키워드 감성 분석 |
| 전문분석 | reputation_analysis | 브랜드 평판 및 이미지 분석 |
| 전문분석 | crisis_issue_management | 위기 감지 및 대응 전략 |
| 전문분석 | marketing_analysis | 마케팅 4P 요소 분석 |
| 전문분석 | competitor_comparison_analysis | 경쟁사 비교 분석 |
| 전문분석 | product_analysis | 상품 구매요인 분석 |
| 전략분석 | comprehensive_brand_monitoring | 통합 브랜드 모니터링 |⚙️ API 설정
$3
- Opinion Mining: 감정 극성 분석
- Emotion Analysis: 다차원 감정 분석
- Keyword Extraction: 핵심 키워드 추출
- Document Classification: 자동 문서 분류
- Summarization: 텍스트 요약
- Named Entity Recognition: 개체명 인식$3
$3
데이터 분석 요청을 구성하는 설정 인터페이스입니다.
$3
| 이름 | 타입 | 필수 | 설명 |
|------|------|------|------|
|
analysis_type | AnalysisCategory | ✅ | 수행할 분석의 카테고리 (예: 연관어 분석, 감성 분석 등) |
| apis_to_use | RecommendedApiType[] | ✅ | 사용할 API 목록 (추천되는 MCP API들) |
| parameters | Record | ✅ | 분석에 필요한 추가 파라미터 (동적으로 다양한 파라미터 입력 가능) |
| output_format | 'json' \| 'csv' \| 'xlsx' | ✅ | 결과 출력 포맷 |
| max_processing_time | number | ⛔ | (선택) 분석의 최대 처리 시간 (단위: 초) |
| enable_parallel_processing | boolean | ⛔ | (선택) 병렬 처리 활성화 여부 |$3
`ts
const config: AnalysisConfig = {
analysis_type: 'SENTIMENT',
apis_to_use: ['SENTIMENT_ANALYSIS', 'KEYWORD_EXTRACTION'],
parameters: {
keyword: 'AI 분석',
source: 'blog',
date_range: ['2025-06-01', '2025-06-07']
},
output_format: 'json',
max_processing_time: 60,
enable_parallel_processing: true
};` 🔧 개발 도구
`bash
개발 서버 실행 (SSE 모드)
npm run devSTDIO 모드 실행
npm run start:stdio빌드
npm run build프로덕션 실행
npm start테스트
npm test린트 및 타입 체크
npm run lint
npm run typecheck빌드 정리
npm run clean
`🚀 성능 최적화 기능
$3
- 핵심 데이터 캐싱: SM(13개), TSN3(16개) 카테고리 데이터를 서버 시작시 메모리 프리로드
- 즉시 응답: 캐시된 데이터는 0ms 응답 시간으로 초고속 처리
- 메모리 효율성: 필요한 데이터만 선택적으로 캐싱하여 메모리 사용량 최적화$3
- 도구 설명 간소화: 62KB → 약 30KB로 50% 메모리 사용량 감소
- AI 호환성 유지: 핵심 정보는 보존하여 AI의 정확한 도구 사용 보장
- 공통 상수 활용: 반복되는 설명을 상수로 추출하여 중복 제거 🐛 디버깅
$3
`
env DEBUG_MODE=true
` $3
`
bash npm run test
` $3
`
bash npm run inspector
` 📝 환경별 설정
$3
- 디버그 모드 활성화
- 짧은 타임아웃 설정
- 상세한 로깅$3
- 최적화된 설정
- 긴 타임아웃
- 필수 로그만 출력🔗 관련 링크
- Model Context Protocol
- MCP SDK Documentation
- Claude Desktop
- TM2 API 문서
- TypeScript 문서
📝 추가 정보
$3
`bash
curl http://localhost:3000/health
`$3
`bash
curl http://localhost:3000/info
`$3
서버 실행 시 다음과 같은 로그를 확인할 수 있습니다:
- CategoryResourceService 초기화 시작...: 리소스 프리로딩 시작
- 카테고리 데이터 프리로드 완료: SM (13개 항목): SM 카테고리 로드 완료
- 카테고리 데이터 프리로드 완료: TSN3 (16개 항목): TSN3 카테고리 로드 완료
- ✅ 서비스 초기화 및 리소스 프리로딩 완료: 모든 초기화 완료🏭 프로덕션 배포
$3
#### 1. 환경 설정
`bash
환경 설정 파일 생성
cp .env.example .env설정 파일 편집
nano .env
`#### 2. 프로덕션 서버 시작
`bash
프로덕션 모드로 시작 (클러스터 모드)
npm run prod:start또는 직접 스크립트 실행
./scripts/start.sh production
`#### 3. 서버 관리
`bash
서버 상태 확인
npm run prod:status서버 모니터링
npm run prod:monitor로그 확인
npm run prod:logs서버 재시작
npm run prod:restart서버 종료
npm run prod:stop
`#### 4. 스테이징 환경
`bash
스테이징 서버 시작
npm run staging:start스테이징 상태 확인
npm run staging:status스테이징 서버 종료
npm run staging:stop
`$3
#### 필수 구성요소
- Node.js: 18.0.0 이상
- Redis: 캐시 및 세션 관리
- MariaDB: 사용자 관리 및 API 사용 통계
- PM2: 프로세스 관리
#### 리소스 권장사항
- CPU: 2 코어 이상
- 메모리: 1GB 이상
- 디스크: 10GB 이상
- 네트워크: 1Gbps
#### 포트 설정
- 8000: MCP 서버 (SSE)
- 6379: Redis
- 3306: MariaDB
$3
#### API 키 관리
`bash
새 API 키 생성 (MariaDB에 추가)
INSERT INTO api_users (api_key, name, email, organization, rate_limit)
VALUES ('your-secure-api-key', 'User Name', 'user@company.com', 'Company', 1000);
`#### Rate Limiting
- 기본 제한: 15분당 100 요청
- SSE 연결: 5분당 10 연결
- 메시지: 1분당 30 메시지
#### 모니터링
`bash
실시간 상태 모니터링
./scripts/status.sh --watch헬스체크
./scripts/status.sh --health상세 정보
./scripts/status.sh --detailed
`$3
#### 로드밸런서 설정 (Nginx)
`nginx
upstream sometrend_mcp {
server localhost:8000;
server localhost:8001;
server localhost:8002;
}server {
listen 80;
server_name mcp.sometrend.com;
location / {
proxy_pass http://sometrend_mcp;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
`#### 다중 인스턴스 실행
`bash
포트별 인스턴스 시작
PORT=8000 ./scripts/start.sh production
PORT=8001 ./scripts/start.sh production
PORT=8002 ./scripts/start.sh production
``---
버전: v1.0.0
MCP 호환성: v1.18.0
프로덕션 준비: ✅ 완료
최종 업데이트: 2025-09-15
=======