En este tutorial práctico, construiremos un servidor MCP (protocolo de contexto modelo) que permita que Claude Desktop obtenga un sentimiento de noticias y ganancias y mudanzas diarias a través del API Alphavantage. Dado que la mayoría de los LLM no pueden acceder directamente a los datos financieros en tiempo real, esta solución utiliza MCP para proporcionar información en tiempo real.
Expondremos dos herramientas de nuestro servidor:
- get_news_sentiment
- get_top_movers
Caminemos por cada paso.
Paso 1: Configuración del entorno
Primero configuraremos nuestro entorno y comenzaremos con la instalación del Administrador de paquetes UV. Para Mac o Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Para Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Luego crearemos un nuevo directorio de proyectos e inicializaremos con UV
uv init stockNews
cd stockNews
Ahora podemos crear y activar un entorno virtual. Para Mac o Linux:
uv venv
source .venv/bin/activate
Para Windows:
uv venv
.venv\Scripts\activate
Ahora instalaremos las dependencias requeridas
uv add mcp httpx python-dotenv
Paso 3: Configuración de las variables de entorno
Ahora crearemos un archivo .env que contiene la clave API para Alphavantage. Para generar una clave API gratuita:
Ahora, cree un archivo .env y agregue la siguiente línea:
ALPHA_VANTAGE_API_KEY = your_api_key
Paso 4: Implementar el servidor MCP e integrar Alphavantage
Primero crea un stocknews.py Archivo en el directorio que creamos y agregue los siguientes fragmentos de código:
Importar paquetes y configurar la instancia:
Primero importaremos los paquetes necesarios y configuraremos la instancia para usar la API
from typing import Any
import os
import httpx
from mcp.server.fastmcp import FastMCP
from dotenv import load_dotenv
# Load .env variables
load_dotenv()
API_KEY = os.getenv("ALPHA_VANTAGE_API_KEY")
# Initialize FastMCP server
mcp = FastMCP("alpha-finance")
# Constants
BASE_URL = "https://www.alphavantage.co/query"
Funciones auxiliares
A continuación, agregemos nuestras funciones auxiliares para consultar los datos de Alphavantage.
async def call_alpha_vantage(endpoint: str, params: dict[str, Any]) -> dict[str, Any] | None:
"""Generic async caller to Alpha Vantage."""
params["apikey"] = API_KEY
params["function"] = endpoint
async with httpx.AsyncClient() as client:
try:
response = await client.get(BASE_URL, params=params, timeout=30.0)
response.raise_for_status()
return response.json()
except Exception:
return None
Implementación de la ejecución de la herramienta
El controlador de ejecución de la herramienta es responsable de ejecutar la lógica de cada herramienta.
@mcp.tool()
async def get_news_sentiment(ticker: str) -> str:
"""Get news sentiment data for a stock ticker.
Args:
ticker: Stock ticker symbol (e.g., MSFT, AAPL)
"""
data = await call_alpha_vantage("NEWS_SENTIMENT", {"tickers": ticker.upper()})
if not data or "feed" not in data:
return "Couldn't retrieve news sentiment."
articles = data["feed"][:3]
result = []
for item in articles:
result.append(f"""
📰 {item['title']}
Summary: {item['summary']}
Source: {item['source']} | Published: {item['time_published']}
""")
return "\n---\n".join(result)
@mcp.tool()
async def get_top_movers() -> str:
"""Get top gainers and losers from the stock market.
No arguments required.
"""
data = await call_alpha_vantage("TOP_GAINERS_LOSERS", {})
if not data:
return "Couldn't retrieve top movers."
gainers = data.get("top_gainers", [])[:3]
losers = data.get("top_losers", [])[:3]
result = "**Top Gainers**\n"
result += "\n".join([
f"{g['ticker']} ({g.get('change_percentage', 'N/A')})"
for g in gainers
])
result += "\n\n**Top Losers**\n"
result += "\n".join([
f"{l['ticker']} ({l.get('change_percentage', 'N/A')})"
for l in losers
])
return result
Ejecutando el servidor
Finalmente, inicializar y ejecutar el servidor:
if __name__ == "__main__":
mcp.run(transport="stdio")
Ahora probaremos nuestro servidor desde un host MCP existente, Claude para escritorio.
Paso 5: Prueba del servidor
Primero, asegúrese de tener Claude para escritorio instalado. Si no, descargue e instale la última versión de la fuente oficial. Si ya lo tiene, asegúrese de que esté actualizado.
A continuación, deberá configurar Claude para conectarse con su servidor MCP. Para hacer esto, abra el archivo Claude_desktop_config.json ubicado en el directorio de Claude utilizando cualquier editor de texto. Si el archivo no existe, continúe y cree manualmente.
Para macOS/Linux:
{
"mcpServers": {
"stockNews": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/stockNews",
"run",
"stockNews.py"
]
}
}
}
Para Windows:
{
"mcpServers": {
"stockNews": {
"command": "uv",
"args": [
"--directory",
"C:\\ABSOLUTE\\PATH\\TO\\PARENT\\FOLDER\\stockNews",
"run",
"stockNews.py"
]
}
}
}
Esta configuración deja Claude para escritorio saber que:
- Hay un servidor MCP llamado “StockNews”.
- Debe iniciarse utilizando el siguiente comando:
UV –Directory/Absolute/Path/To/Parent/Folder/Stocknews Run StockNews.py
Una vez que haya agregado esto a su archivo de configuración, Guarde el archivo y reinicie Claude para el escritorio para aplicar los cambios.
Prueba con comandos
Para confirmar que Claude para escritorio ha reconocido las dos herramientas de su servidor StockNews, busque el Icono de martillo En la interfaz Claude: este icono indica el acceso a la herramienta.
Después de hacer clic en el icono de martillo, debería ver dos herramientas en la lista:
Podemos probar el servidor ejecutando las siguientes indicaciones:
- ¿Cuál es el sentimiento de noticias para Apple?
- ¿Quiénes son los principales ganadores y perdedores del mercado de valores?
Cuando le haces una pregunta a Claude:
- El cliente envía su consulta a Claude.
- Claude revisa las herramientas disponibles (Como get_news_sentiment o get_top_movers) y determina cuál (s) usar en función de su pregunta.
- La herramienta seleccionada se ejecuta a través del servidor MCP Configuraste anteriormente.
- La herramienta devuelve los resultados Volver a Claude.
- Claude usa esos resultados para elaborar una respuesta del lenguaje natural.
- La respuesta final se le muestra en la interfaz de chat.
Este flujo perfecto es lo que permite a Claude interactuar con los datos en tiempo real de una manera estructurada y controlada.
Conclusión:
Nuestro servidor de Stock Insights basado en MCP extiende las capacidades de Claude Desktop al habilitar la recuperación de datos financieros en tiempo real. Al integrar la API Alphavantage con un servidor MCP personalizado, los usuarios pueden obtener un sentimiento de noticias en vivo y rastrear los principales mudanzas del mercado directamente a través de Claude. Esta configuración faculta a los usuarios con ideas de acciones oportunas y procesables, todas dentro de una interfaz de conversación, haciendo que el análisis financiero sea más eficiente, contextual e interactivo.