Token导航 LogoToken导航TokenDH.com
MCP Stock Agent logo
金融服务stdio官方级别未说明来源级核验

MCP Stock Agent

MCP Server

一个基于多代理AI技术的股票分析系统,通过5个专业AI代理分析韩国股票,并通过Slack发送买入信号。

工具数

6

提示词数

0

GitHub Stars

0

资源数

0
金融数据Python金融科技

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

YongjunJeong

提供方

YongjunJeong

最后核验

2026/5/17 20:22

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python -m venv .venv && source .venv/bin/activate

详细介绍

MCP Stock Agent-多代理AI股票分析系统

5个专家AI代理分析韩国股票,并将收购信号发送到Slack的自动化系统。 基于模型上下文协议(MCP)的工具层,Gemini 2.5 Flash LLM,Slack Socket Mode, SQLite分析历史数据库、运行时监视列表管理等产品组合项目。

______________________________________________________________________

演示

项目分析

사용자: @봇 삼성전자

봇:     🔍 `005930` 분석 중... (5개 전문가 Agent 실행)

        ⚠️ 삼성전자 (005930) 멀티에이전트 분석
        ─────────────────────────────────────
        현재가: 74,200 KRW          전일 대비: -0.93%
        S&P500: 소폭 하락 (-0.43%)   VIX: ✅ 안정 (VIX 19.9)
        ─────────────────────────────────────
        📊 Final Score: 58.7/100 — 관망
        `█████░░░░░` 58.7점
        ↑ *전 분석(1일 전) 대비 +12.5점*  `관망 유지`

        📈 기술적 분석  (×30%)    📋 펀더멘털 분석 (×35%)
        `████████ ` 75점           `██░░░░░░` 25점

        🌐 매크로 분석  (×20%)    📰 감성 분석     (×15%)
        `████░░░░` 55점            `████░░░░` 60점
        ─────────────────────────────────────
        🏦 PM 종합 의견
        기술적 분석상 박스권 돌파를 시도하며 MACD 상승 모멘텀이
        긍정적이나, 펀더멘털 고평가(PER 15배 이상)와 Stress Zone
        환율(1,441원)이 외국인 이탈 리스크를 높이고 있습니다.
        전일 대비 기술적 점수가 +18점 상향된 주요 원인은 거래량
        급증과 함께 20일선 상향 돌파가 확인됐기 때문입니다...

        💰 ⏳ 관망 중 — 진입 시나리오
        진입가: 70,000원 이하       보유기간: 중기 3~6개월
        1차 목표가: 82,000원 (+17%)  2차 목표가: 92,000원 (+31%)
        🛑 손절기준: 67,000원 (-4%, 120일선 하방 이탈 시)

管理手表列表

사용자: @봇 워치리스트
봇:     📋 워치리스트 (3개)
        • `005930`
        • `000660`
        • `035420`

사용자: @봇 추가 035720
봇:     ✅ `035720` 워치리스트에 추가됐습니다.

사용자: @봇 히스토리 005930
봇:     [ 005930 분석 히스토리 ]
        ─────────────────────────────
        `03-01 21:00`  *58.7점*  관망     Tech:75 Fund:25 Macro:55 Sent:60
        `03-01 10:00`  *46.2점*  관망     Tech:57 Fund:15 Macro:55 Sent:50
        `02-28 15:00`  *71.5점*  ★매수   Tech:75 Fund:70 Macro:65 Sent:74

사용자: @봇 제거 035720
봇:     🗑️ `035720` 워치리스트에서 제거됐습니다.

______________________________________________________________________

完整体系结构

┌──────────────────────────────────────────────────────────────────────┐
│                      Slack Bot (Socket Mode)                          │
│                                                                      │
│  @봇 삼성전자          → 종목 파싱    → 분석 트리거                         │
│  @봇 추가/제거/워치리스트 → 워치리스트  → DB CRUD                           │
│  @봇 히스토리 005930   → 히스토리    → DB 조회 후 포맷                      │
│  결과: Block Kit 카드 (↑↓ Memory 델타 배지 포함)                           │
└────────────────────────┬─────────────────────────────────────────────┘
                         │ 분석 요청
                         ▼
┌──────────────────────────────────────────────────────────────────────┐
│                        PM Agent (종합 판단)                             │
│                                                                      │
│  ① 분석 시작 전  →  이전 기록 조회 (Memory Layer)                          │
│  ② 4개 에이전트 실행 후  →  Delta 계산 (점수 변화량·신호 전환)                 │
│  ③ Gemini 프롬프트에 Delta 컨텍스트 주입                                   │
│  ④ 분석 완료 후  →  결과를 analysis_history에 자동 저장                     │
│                                                                      │
│  Final_Score = Tech×0.30 + Fund×0.35 + Macro×0.20 + Sent×0.15        │
│                                                                      │
│  Safety Brake: USD/KRW ≥ 1,450 AND 3일 ROC > 1%                      │
│  → buy_signal 강제 False, Final Score 상한 35점                         │
└──────┬───────────┬──────────────┬──────────────┬────────────────────┘
       │           │              │              │
       ▼           ▼              ▼              ▼
  Technical    Fundamental      Macro        Sentiment
  Agent        Agent            Agent        Agent
  ───────────  ───────────      ──────────   ──────────
  RSI·MACD     PER·EPS·PBR     USD/KRW      기업 뉴스
  볼린저밴드   BPS·배당         VIX·S&P500   감성 분석
  차트 패턴    Naver스크래핑    외국인수급    (매크로 제외)
       │           │              │              │
       └───────────┴──────────────┴──────────────┘
                              │
                              ▼
        ┌─────────────────────────────────────────────┐
        │           MCP Tool 레이어 (6개 도구)            │
        │  price │ technical │ pattern │ fundamental  │
        │  sentiment │ macro                          │
        └──────────────────┬──────────────────────────┘
                           │
             ┌─────────────┴─────────────┐
             ▼                           ▼
       데이터 소스                 Gemini 2.5 Flash
       ──────────────             ──────────────────
       pykrx (KRX OHLCV)         에이전트당 1회 호출
       Naver Finance API         thinking_budget=0
       Frankfurter (환율)         temperature=0.3
       yfinance (미국 시장)        max_output_tokens=1024

┌──────────────────────────────────────────────────────────────────────┐
│                     SQLite DB (aiosqlite)                             │
│                                                                      │
│  watchlist          analysis_history                                 │
│  ───────────────    ────────────────────────────────────             │
│  ticker (PK)        id, ticker, analyzed_at (UTC ISO)                │
│  added_at           final_score, buy_signal, signal_text             │
│                     score_tech/fund/macro/sent                       │
│                                                                      │
│  ← Slack Bot 읽기/쓰기 (워치리스트 CRUD)                                  │
│  ← APScheduler 읽기 (매 스캔마다 최신 목록 조회)                            │
│  ← PM Agent 읽기/쓰기 (Memory Layer + 분석 결과 저장)                     │
│  Docker named volume (stock_agent_data) → 재시작 후에도 보존             │
└──────────────────────────────────────────────────────────────────────┘

┌──────────────────────────────────────────────────────────────────────┐
│                  APScheduler (장중 자동 스캔)                            │
│  평일 09:00 ~ 15:00 KST, 매 시간 정각                                    │
│  DB에서 워치리스트 실시간 조회 → 전 종목 분석                                 │
│  Final Score ≥ 70 → Slack 채널 자동 알림 (매수 신호)                       │
└──────────────────────────────────────────────────────────────────────┘

______________________________________________________________________

代理设计

为什么分成5个代理?

如果在一个提示下放入所有分析 波斯纳冲突发生。 “把握买入时机的图表分析师”和“现金流保守主义价值投资者”对同一个项目有冲突意见。 分离Agent时,将独立于各自的区域进行判断,PM Agent将明确地综合共识和不一致。

代理Persona权重主要指标

Technical 20年工作经验图表分析师×30%RSI(14)、MACD(12/26/9)、Bolinser Band(20,2)σ),成交量比率,双底、逆头和单肩图案 |基础|保守价值投资者|×35%| PER、EPS、PBR、BPS、股息收益率(Naver Finance Scraping)| | Macro |全球宏观策略师|×20%| USD/KRW速度,VIX,S&P500,NASDAQ,KOSPI,外国人供求| Sentiment市场心理专家×15%企业新闻感性(不包括宏观新闻,只关注企业话题) | 项目经理 |对冲基金投资组合经理|综合|综合4个报告→最终意见+具体投资策略|

权重设计依据

Fundamental 35%  — 기업 내재가치가 장기 수익의 핵심
Technical   30%  — 매수 타이밍과 단기 모멘텀
Macro       20%  — 환율·외국인 수급이 한국 증시 방향의 핵심 변수
Sentiment   15%  — 노이즈가 많아 의도적으로 낮은 비중

收购信号阈值

Final Score ≥ 70  →  🚨 매수 신호 (Slack 알림 발송)
Final Score 55–69 →  ⚠️ 관망 (진입 조건 시나리오 제공)
Final Score  str:
    if Path("/app/data").exists():      # Docker 환경
        return "/app/data/stock_agent.db"
    Path("./data").mkdir(exist_ok=True) # 로컬 개발
    return "./data/stock_agent.db"

自动种子首次运行

启动应用程序时 init_db() 呼叫→ watchlist 如果表格为空 WATCHLIST_KR 解析并自动插入环境变量。以后通过Slack命令添加/删除也不会在重新启动时初始化。

Docker数据持久性

# docker-compose.yml
volumes:
  - stock_agent_data:/app/data   # named volume

volumes:
  stock_agent_data:
    driver: local

docker compose down --volumes 在容器重新启动和重新构建时也会保留数据库,除非明确运行。

______________________________________________________________________

管理Slack手表列表

命令完整列表

@봇 삼성전자               회사명으로 종목 분석
@봇 005930                종목코드로 분석
@봇 하이닉스 분석해줘       자연어 입력 가능
@봇 카카오 사도 돼?         자연어 입력 가능

@봇 워치리스트              현재 워치리스트 목록 조회
@봇 추가 005930            종목 추가
@봇 추가 카카오             회사명으로도 추가 가능
@봇 제거 005930            종목 제거 (삭제도 동의어)
@봇 삭제 035420            동의어 지원
@봇 히스토리 005930        최근 5회 분석 기록 조회

@봇 도움                   전체 사용법 안내

运行时反映

APScheduler在每次扫描运行时都会在DB中查看新的手表列表。因此 使用Slack添加和删除项目后,将立即反映在下一次正点扫描中可以,无需重新启动应用程序。

# scheduler/cron.py — 모듈 레벨 상수 대신 매번 DB 조회
async def _run_watchlist_scan() -> None:
    watchlist = await get_watchlist()   # 실시간 반영
    for ticker in watchlist:
        result = await run_full_analysis(ticker)
        ...

______________________________________________________________________

确定关键设计

1.将模型上下文协议(MCP)作为工具层

데이터 수집 책임 (MCP Tools)  ≠  분석·판단 책임 (Agents)

我们将所有数据域分离为MCP Tool,而不是将数据收集代码放在代理内部。 数据源替换(例如pykrx→其他API)可以不触碰代理代码。 共享同一个Python运行时,因此可以直接调用它,而无需网络开销。

2.汇率速度(Velocity)优先分析

不是单纯的“1400韩元以上=危险”, 结合速度和级别的非线性风险模型已成功应用。

[환율 위험 구간]
1,380 ~ 1,399원  →  New Normal Zone  (위험 가중치 ×1.0)
1,400 ~ 1,449원  →  Stress Zone      (위험 가중치 ×2.5)
1,450원 이상     →  Panic Zone       (위험 가중치 ×5.0)

[속도 경보 — Velocity Alert]
3일 ROC > 1%                 →  패닉 셀링 전조 경보
5일 MA 대비 3% 이상 이격     →  단기 급등 경보

[Safety Brake — 매수 강제 차단]
USD/KRW ≥ 1,450 AND 3일 ROC > 1%
→ buy_signal = False 강제
→ Final Score 상한 35점

判别韩元单独弱势:USD/KRW上升+JPY/USD下降(日元走强)同时发生时 不是全球美元走强 韩国固有内部风险判断为。

3.宏与感性域分离

常见错误:如果在新闻感性分析中包括汇率和美联储新闻,宏信号将被双重统计。

# Sentiment Agent 시스템 프롬프트
"환율, 금리, 글로벌 증시, 지정학적 리스크 등 매크로 이슈는
 분석하지 마세요. 기업 고유의 사건·제품·실적에만 집중하세요."

4.结构化LLM输出解析

PM Agent在自由格式报告的末尾 可解析的战略块输出。

STRATEGY_START
진입가: 73,000~75,000원 (분할매수 권장)
목표가1: 85,000원 (+15%)
목표가2: 95,000원 (+27%)
손절기준: 69,000원 (-8%, 60일선 하방 이탈 시)
보유기간: 중기 3~6개월
STRATEGY_END

之所以选择Regex解析而不是JSON,是因为LLM经常在令牌压力的情况下生成JSON语法错误。

5.VIX恐惧指数联动

VIX  None:
    try:
        ...  # DB 저장
    except Exception as e:
        logger.warning(f"히스토리 저장 실패 (무시됨): {e}")
        # 절대 예외 전파 안 함 — DB 오류가 분석 응답을 막아선 안 됨

隔离数据库层故障,以避免影响主分析管道。

______________________________________________________________________

项目结构

mcp-stock-agent/
│
├── agents/                         # AI 에이전트 레이어
│   ├── gemini_client.py            # Gemini 2.5 Flash 공유 클라이언트
│   ├── technical_agent.py          # RSI · MACD · BB · 차트 패턴 분석
│   ├── fundamental_agent.py        # PER · EPS · PBR · BPS 가치 분석
│   ├── macro_agent.py              # 환율 · VIX · KOSPI · 외국인 수급 분석
│   ├── sentiment_agent.py          # 기업 뉴스 감성 분석 (매크로 제외)
│   └── pm_agent.py                 # 종합 판단 · Safety Brake · Memory Layer · 투자 전략
│
├── db/                             # DB 레이어 (SQLite + aiosqlite)
│   ├── __init__.py
│   └── database.py                 # init_db · watchlist CRUD · 분석 히스토리 저장/조회
│
├── mcp_server/                     # MCP Tool 레이어
│   ├── server.py                   # MCP 서버 (6개 도구, stdio transport)
│   └── tools/
│       ├── price.py                # OHLCV 데이터 (pykrx)
│       ├── technical.py            # 기술적 지표 (pandas-ta)
│       ├── pattern.py              # 차트 패턴 감지 (numpy 선형회귀)
│       ├── fundamental.py          # 재무 지표 (Naver Finance 스크래핑)
│       ├── sentiment.py            # 뉴스 감성 (Naver 모바일 JSON API)
│       └── macro.py                # 매크로 지표 (Frankfurter · Naver · yfinance)
│
├── slack/
│   └── bot.py                      # Socket Mode 봇 · Block Kit UI · 워치리스트 명령 · Memory 델타 표시
│
├── scheduler/
│   └── cron.py                     # APScheduler · 워치리스트 DB 조회 · 매수 신호 알림
│
├── data/                           # 런타임 DB (gitignore, Docker named volume 사용)
│   └── stock_agent.db              # 자동 생성 — 커밋하지 않음
│
├── main.py                         # 진입점 (init_db → 스케줄러 → Slack Bot)
├── requirements.txt
├── Dockerfile                      # 멀티스테이지 빌드 (builder + runtime)
├── docker-compose.yml              # named volume · 환경변수 주입 · 로그 순환
├── .env.example                    # 환경변수 템플릿
└── .gitignore

______________________________________________________________________

技术堆栈

区域技术选择原因
AI/LLMGemini 2.5 Flash免费套餐,100万代币上下文,快速
代理协议MCP(Anthropic)工具模式标准化,代理-工具分离
Slack联动slack-bolt(Socket Mode)无需公开URL,基于WebSocket

调度程序APScheduler asyncio本机,cron语法支持 |DB|SQLite+aiosqlite|无服务器、asyncio非阻塞I/O、无外部依赖性| |汇率数据| Frankfurter API |免费,ECB标准,无需API密钥 |美国市场yfinance免费收集S&P500、NASDAQ、VIX |韩国市场| pykrx+Naver Finance | OHLCV+财务指标(由pykrx财务API不稳定→Naver剪裁取代)| 使用异步HTTP aiohttp asyncio.gather并行收集数据 技术指标pandas-ta RSI、MACD、博林杰乐队 |模式检测| numpy |双底、反导肩、三角收敛(基于线性回归)| |容器| docker+docker-compose | ARM/AMD64多阶段构建|

______________________________________________________________________

数据源和限制

数据源免费限制 |-------|------|------|------| |韩国股票OHLCVpykrx(KRX)| T+1延迟 |韩国财务指标| Naver Finance(描述)| pykrx财务API服务器故障取代 |新闻感性| Naver Mobile JSON API |仅限韩语新闻 |USD/KRW,JPY/USD|Frankfurter(ECB)| ECB公告标准,每日延迟 |标准普尔500、纳斯达克、VIX/yfinance(Yahoo Finance)|非正式API,可间歇性限制 |KOSPI,KOSDAQ|Naver Mobile API|实时(延迟15分钟)| |外国人供求Naver Finance(Scraping)|只提供每日统计

______________________________________________________________________

安装和运行

设置环境变量(通用)

cp .env.example .env
# .env 파일을 열어 실제 키 입력
GEMINI_API_KEY=AIza...
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-...
SLACK_CHANNEL_ID=C...
WATCHLIST_KR=005930,000660,035420   # 첫 실행 시 DB 시드로 사용
SIGNAL_THRESHOLD_STRONG=70

方法1-Docker(建议)

git clone https://github.com/YongjunJeong/mcp-stock-agent.git
cd mcp-stock-agent
cp .env.example .env   # 실제 키 입력

docker compose up -d           # 백그라운드 실행
docker compose logs -f         # 실시간 로그
docker compose down            # 종료 (DB 데이터 보존)
docker compose down --volumes  # 종료 + DB 완전 삭제

方法2-直接运行Python(用于本地开发)

git clone https://github.com/YongjunJeong/mcp-stock-agent.git
cd mcp-stock-agent
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env   # 실제 키 입력

python main.py
# → data/stock_agent.db 자동 생성
# → Slack Bot (Socket Mode) + APScheduler 동시 시작

______________________________________________________________________

计分示例

삼성전자 (005930) — 2026-03-01 기준

기술적 분석:    75/100 × 0.30 = 22.5점   (MACD 상승, 박스권 돌파 시도)
펀더멘털:       15/100 × 0.35 =  5.3점   (PER 15배↑, 배당수익률 낮음)
매크로:         55/100 × 0.20 = 11.0점   (Stress Zone 환율 1,441원, VIX 안정)
감성:           50/100 × 0.15 =  7.5점   (중립적 뉴스 흐름)
                                ──────
Final Score:                    46.2점  →  관망 (임계값: 70점)

目录标签

目录标签

金融数据Python金融科技股票分析本地部署AI代理自动化交易韩国股市

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

6

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP