Skip to main content
Glama
JooSeunghyeon

kookmin-stock

Agente de Acciones MCP Kookmin

Tarea de la Universidad Kookmin · "Elevar el impacto con Hermes + servidor MCP hecho a medida"

Adjuntamos un servidor MCP hecho a medida al agente Hermes de recomendación de acciones nacionales creado en la tarea anterior para demostrar cómo cambia la calidad del trabajo mediante 3 experimentos.

🎯 ¿Qué contiene?

Producto

Ruta

Descripción

Servidor MCP (normal)

src/mcp_stock/server.py

FastMCP stdio, 6 tipos de herramientas

Servidor MCP (versión rota)

src/mcp_stock/server_broken.py

Descripción incorrecta / tiempo de espera / respuesta vacía

Demo de funcionamiento de 30s

src/experiments/exp1_demo.py

Salida de secuencia para grabación

Comparación de resultados exp ②

src/experiments/exp2_quality.py

Comparación NO MCP / GOOD / BROKEN

Comparación de patrones exp ③

src/experiments/exp3_orchestration.py

Single / Planner+Executor / Parallel

Material de presentación (spec)

slides/slides.md

Pegar tal cual en otra IA para generar PPT

Productos resultantes

results/exp2_*, results/exp3_*

Tablas, CSV y registros generados automáticamente

⚙️ Instalación

Python 3.10+ (entorno de prueba 3.13).

python -m venv .venv
source .venv/bin/activate
pip install -e .

▶️ Ejecución

# 1) MCP 서버 검증 (서버는 stdio라 호스트가 붙어야 의미 있음 — Ctrl+C로 종료)
python -m mcp_stock.server

# 2) 30초 동작 데모 (실제로 돌려서 녹화)
python -m experiments.exp1_demo
#  또는 ./demo/record_demo.sh

# 3) 실험 ② 성공/실패 비교 → results/exp2_* 자동 생성
python -m experiments.exp2_quality

# 4) 실험 ③ Orchestration 토큰 비교 → results/exp3_* 자동 생성
python -m experiments.exp3_orchestration

🎥 Grabación de demo de 30 segundos

Las acciones por código de tiempo están organizadas en demo/demo_script.md. La ruta más sencilla:

./demo/record_demo.sh         # QuickTime/Cmd+Shift+5 로 화면 녹화하면서 실행
./demo/record_demo.sh --asciinema   # 텍스트 캡처 (asciinema 필요)

🧪 Experimento ① — Servidor MCP (6 tipos de herramientas)

Herramienta

Entrada

Salida

get_market_overview(date)

'today' / YYYY-MM-DD

{kospi:{close, changePct, tradingValueKrw}, kosdaq:{...}}

get_top_gainers(market, top_n)

KOSPI/KOSDAQ, 1..50

N acciones principales

get_stock_quote(ticker)

Código o nombre en coreano

close / changePct / volume / per / pbr

get_recent_news(query, top_n)

Palabra clave o nombre de acción

Titular + positivityScore

get_fundamentals(ticker)

Código o nombre en coreano

per / pbr / eps / bps / roe

recommend_buys(market, top_n, criteria)

KOSPI/KOSDAQ

scoreBreakdown + rationale

Datos: Fuente única de rastreo de Naver Finance (src/mcp_stock/sources/naver.py). Gratuito, no requiere clave.

  • Índice: JSON de polling.finance.naver.com/api/realtime/domestic/index/{KOSPI|KOSDAQ}

  • Mayores ganancias/pérdidas: HTML de finance.naver.com/sise/sise_rise.naver?sosok={0|1}

  • Detalles de acciones / PER·EPS·PBR·Dividendos: finance.naver.com/item/main.naver?code=... (etiquetas de énfasis estables como id="_per")

  • Noticias por acción: finance.naver.com/item/news_news.naver?code=...

  • Funcionamiento seguro con instantánea de respaldo automática en caso de días festivos o cambios en la página de Naver.

🧪 Experimento ② — Comparación de calidad de resultados de éxito/fallo de herramientas

exp2_quality.py ejecuta la misma pregunta del usuario en tres entornos y genera automáticamente tablas y registros de fallos.

  • (a) NO MCP — 0 herramientas. El LLM responde solo con datos de entrenamiento → alucinaciones, falta de fundamento.

  • (b) GOOD MCP — Servidor personalizado normal. 12 llamadas a herramientas, cita 4 palabras clave positivas.

  • (c) BROKEN MCP — Según la definición de server_broken.py:

    • Descripción de get_top_gainers escrita incorrectamente como "mayores caídas" → selección errónea del modelo

    • get_recent_news genera TimeoutError después de time.sleep(5)

    • get_fundamentals devuelve un dict vacío

Resultados:

  • results/exp2_quality_table.md — Tabla comparativa

  • results/exp2_failure_logs.md — Traza de llamadas fallidas + cuerpo de respuesta

  • results/exp2_summary.json — Estadísticas originales

🧪 Experimento ③ — 3 patrones de orquestación

Patrón

Descripción

Características de tokens

Características de tiempo de respuesta

Single

Acumulación de resultados de herramientas en un bucle

Tokens de entrada ↑↑

Más lento

Planner + Executor

El planificador solo crea la secuencia de llamadas y el ejecutor solo resume los resultados

Tokens de entrada ↓

Intermedio

Parallel sub-agents

Ejecución simultánea de sub-agentes KOSPI / KOSDAQ / NEWS

Tokens de entrada ↓↓

Más rápido

Resultados:

  • results/exp3_benchmark.csv — CSV ancho para crear gráficos de barras

  • results/exp3_pattern_table.md — Tabla + reflexión

  • results/exp3_summary.json — Traza completa por patrón

🤖 Integración LLM — Hermes / Otros hosts

Este repositorio fue creado para que los tokens y trazas salgan mediante simulación determinista incluso sin claves de API de LLM. Para conectarlo a Hermes / Claude Desktop / Cursor reales:

1) Usar como host de Hermes (ejecutar experimentos ②③ con un LLM real)

Solo es necesario completar _callHermes() en src/experiments/runner/hermes_runner.py.

# TODO(user): replace this body with the real Hermes call.
import httpx
response = httpx.post(self.endpoint, headers=..., json=...)
return response.json()

Después de configurar las variables de entorno HERMES_ENDPOINT, HERMES_API_KEY, reemplace la instancia de AgentRunner con HermesRunner().

2) Usar solo herramientas en Claude Desktop / Cursor

Agregar a claude_desktop_config.json de Claude Desktop o a la configuración MCP de Cursor:

{
  "mcpServers": {
    "kookmin-stock": {
      "command": "python",
      "args": ["-m", "mcp_stock.server"],
      "cwd": "/path/to/Kookmin-University-MCP",
      "env": { "PYTHONPATH": "/path/to/Kookmin-University-MCP/src" }
    }
  }
}

📑 Crear PPT

Simplemente pegue slides/slides.md en otra IA. Ejemplo de prompt:

El siguiente markdown es la especificación de 12 diapositivas para una presentación de 5 minutos. Por favor, crea diapositivas de PowerPoint por cada encabezado # Slide N. Los bloques ### Visual deben representarse preferiblemente como diagramas mermaid o tablas tal cual, y los ### Speaker Notes deben colocarse en el área de notas de la diapositiva.

📤 Flujo de entrega

  1. Actualizar resultados con python -m experiments.exp2_quality && python -m experiments.exp3_orchestration

  2. Grabar demo de 30s con ./demo/record_demo.shdemo/demo.mov

  3. GitHub push (registrar la URL del repositorio en el README y en la diapositiva 6)

  4. Enviar URL de GitHub + slides + video de demo al correo kts123@kookmin.ac.kr (fecha límite 14/5 23:59:59)

📁 Árbol de directorios

.
├── README.md
├── pyproject.toml / requirements.txt
├── demo/
│   ├── demo_script.md
│   └── record_demo.sh
├── results/                 # 자동 생성
├── slides/slides.md
└── src/
    ├── mcp_stock/
    │   ├── server.py
    │   ├── server_broken.py
    │   ├── data/ticker_map.py
    │   ├── sources/naver.py        # 네이버 금융 크롤러 (단일 데이터 소스)
    │   └── tools/{market, quote, news, fundamentals, recommend}.py
    ├── experiments/
    │   ├── exp1_demo.py
    │   ├── exp2_quality.py
    │   ├── exp3_orchestration.py
    │   └── runner/{agent_base, mock_runner, hermes_runner}.py
    └── utils/{logger, token_counter}.py

🛟 Solución de problemas

Síntoma

Causa

Respuesta

naver detail fetch failed for XXXXXX

La acción no está en la página de Naver o la estructura cambió

Uso de instantánea de respaldo automática — funcionamiento normal

httpx.ConnectError

Red desconectada

Todas las herramientas funcionan de forma segura con instantáneas de respaldo

Caracteres coreanos ilegibles

Fuente de terminal

Se recomienda D2 Coding / Pretendard / SF Mono

Llamada en día festivo/fin de semana

No es día hábil

La API de polling devuelve el último precio de cierre tal cual

Install Server
F
license - not found
A
quality
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/JooSeunghyeon/Kookmin-University-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server