MLflow MCP
Servidor MCP de MLflow para seguimiento de experimentos de ML con consultas avanzadas, comparación de ejecuciones, acceso a artefactos y registro de modelos.
Documentación
Servidor MLflow MCP
Un servidor Model Context Protocol (MCP) que permite a los LLMs interactuar con servidores de tracking de MLflow. Consulta experimentos, analiza ejecuciones, compara métricas, gestiona el registro de modelos y promueve modelos a producción — todo mediante lenguaje natural.
Características
- Gestión de Experimentos: Listar, buscar y filtrar experimentos
- Análisis de Ejecuciones: Consultar ejecuciones, comparar métricas, encontrar los mejores modelos
- Métricas y Parámetros: Obtener historiales de métricas, comparar parámetros entre ejecuciones
- Artefactos: Explorar y descargar artefactos de ejecuciones
- Soporte para LoggedModel: Buscar y recuperar entidades LoggedModel de MLflow 3
- Registro de Modelos: Gestión completa del registro — registrar, etiquetar, alias, etapas y promover modelos
- Acciones de Escritura y Eliminación: Etiquetar, alias, registrar, promover y eliminar ejecuciones/experimentos/modelos
- Prompts MCP: Flujos de trabajo guiados integrados para tareas comunes
- Paginación: Paginación basada en offset para explorar grandes conjuntos de resultados
Instalación
Usando uvx (Recomendado)
# Run directly without installation
uvx mlflow-mcp
# Or install globally
pip install mlflow-mcp
Desde el Código Fuente
git clone https://github.com/kkruglik/mlflow-mcp.git
cd mlflow-mcp
uv sync
uv run mlflow-mcp
Configuración
Claude Desktop
Añade a tu archivo de configuración de Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"mlflow": {
"command": "uvx",
"args": ["mlflow-mcp"],
"env": {
"MLFLOW_TRACKING_URI": "http://localhost:5000"
}
}
}
}
Claude Code (a nivel de proyecto)
Añade .mcp.json a la raíz de tu proyecto:
{
"mcpServers": {
"mlflow": {
"command": "uvx",
"args": ["mlflow-mcp"],
"env": {
"MLFLOW_TRACKING_URI": "http://localhost:5000"
}
}
}
}
Servidor Autenticado
Para servidores MLflow con autenticación, añade las credenciales al bloque env:
{
"mcpServers": {
"mlflow": {
"command": "uvx",
"args": ["mlflow-mcp"],
"env": {
"MLFLOW_TRACKING_URI": "https://mlflow.company.com",
"MLFLOW_TRACKING_USERNAME": "your-username",
"MLFLOW_TRACKING_PASSWORD": "your-password"
}
}
}
}
Para Databricks o autenticación basada en tokens, usa MLFLOW_TRACKING_TOKEN en su lugar:
{
"mcpServers": {
"mlflow": {
"command": "uvx",
"args": ["mlflow-mcp"],
"env": {
"MLFLOW_TRACKING_URI": "https://mlflow.company.com",
"MLFLOW_TRACKING_TOKEN": "your-token"
}
}
}
}
Variables de Entorno
| Variable | Requerida | Descripción |
|---|---|---|
MLFLOW_TRACKING_URI | Sí | URL del servidor de tracking de MLflow, p. ej. http://127.0.0.1:5000 |
MLFLOW_TRACKING_USERNAME | No | Nombre de usuario de autenticación básica HTTP (autenticación integrada de MLflow) |
MLFLOW_TRACKING_PASSWORD | No | Contraseña de autenticación básica HTTP (autenticación integrada de MLflow) |
MLFLOW_TRACKING_TOKEN | No | Token Bearer (configuraciones de Databricks o basadas en tokens) |
Herramientas
Experimentos
| Herramienta | Descripción |
|---|---|
get_experiments() | Listar todos los experimentos |
search_experiments(filter_string, order_by, max_results) | Filtrar y ordenar experimentos |
get_experiment_by_name(name) | Obtener experimento por nombre |
get_experiment_metrics(experiment_id) | Descubrir todas las claves de métricas únicas |
get_experiment_params(experiment_id) | Descubrir todas las claves de parámetros únicas |
get_experiment_tags(experiment_id) | Descubrir todas las claves de etiquetas únicas usadas en las ejecuciones |
set_experiment_tag(experiment_id, key, value) | Etiquetar un experimento |
delete_experiment(experiment_id) | Eliminar un experimento (se mueve a la etapa de eliminados) |
Ejecuciones
| Herramienta | Descripción |
|---|---|
get_runs(experiment_id, limit, offset, order_by) | Listar ejecuciones con detalles completos, ordenación y paginación |
get_run(run_id) | Obtener información detallada de la ejecución incluyendo métricas, parámetros, etiquetas, URI de artefactos y entradas de datasets |
get_parent_run(run_id) | Obtener la ejecución padre para ejecuciones anidadas |
query_runs(experiment_id, query, limit, offset, order_by) | Filtrar ejecuciones, p. ej. "metrics.accuracy > 0.9" |
search_runs_by_tags(experiment_id, tags, limit, offset) | Encontrar ejecuciones por clave/valor de etiqueta |
set_run_tag(run_id, key, value) | Etiquetar una ejecución |
delete_run(run_id) | Eliminar una ejecución (se mueve a la etapa de eliminados) |
Métricas y Parámetros
| Herramienta | Descripción |
|---|---|
get_run_metrics(run_id) | Obtener todas las métricas de una ejecución |
get_run_metric(run_id, metric_name) | Obtener el historial completo de métricas con pasos |
Artefactos
| Herramienta | Descripción |
|---|---|
get_run_artifacts(run_id, path) | Listar artefactos, admite exploración de subdirectorios |
get_run_artifact(run_id, artifact_path) | Descargar un archivo de artefacto |
get_artifact_content(run_id, artifact_path) | Leer el contenido del artefacto como texto/JSON |
Análisis y Comparación
| Herramienta | Descripción |
|---|---|
get_best_run(experiment_id, metric, ascending) | Encontrar la mejor ejecución por métrica |
compare_runs(experiment_id, run_ids) | Comparación de ejecuciones lado a lado |
Modelos Registrados (MLflow 3)
| Herramienta | Descripción |
|---|---|
search_logged_models(experiment_ids, filter_string, order_by, max_results) | Buscar modelos registrados por métricas/parámetros/etiquetas |
get_logged_model(model_id) | Obtener detalles completos de un modelo registrado |
Registro de Modelos
| Herramienta | Descripción |
|---|---|
get_registered_models() | Listar todos los modelos registrados |
get_registered_model(name) | Detalles completos del modelo incluyendo versiones y alias |
get_model_versions(model_name) | Obtener todas las versiones de un modelo |
get_model_version(model_name, version) | Obtener detalles de la versión con métricas |
get_model_version_by_alias(name, alias) | Obtener versión por alias, p. ej. "champion" |
get_latest_versions(name, stages) | Obtener las últimas versiones por etapa |
register_model(model_name, model_uri, tags) | Registrar un modelo en el registro |
update_model_version(name, version, description) | Actualizar la descripción de la versión |
set_registered_model_tag(name, key, value) | Etiquetar un modelo registrado |
set_model_alias(name, alias, version) | Asignar un alias a una versión del modelo |
delete_model_alias(name, alias) | Eliminar un alias de un modelo |
copy_model_version(src_model_name, src_version, dst_model_name) | Promover una versión a otro modelo registrado |
transition_model_version_stage(name, version, stage) | Transición a Staging/Production/Archived (obsoleto desde MLflow 2.9, usa alias en su lugar) |
delete_model_version(name, version) | Eliminar una versión del modelo |
delete_registered_model(name) | Eliminar un modelo registrado y todas sus versiones |
Salud
| Herramienta | Descripción |
|---|---|
health() | Verificar la conectividad del servidor |
Prompts
Flujos de trabajo guiados integrados disponibles como comandos de barra en Claude:
| Prompt | Descripción |
|---|---|
compare_runs_by_ids | Comparar ejecuciones específicas lado a lado |
find_best_run | Encontrar y analizar la mejor ejecución en un experimento por métrica |
promote_best_model | De extremo a extremo: encontrar el mejor modelo → registrar → etiquetar → alias → promover |
audit_mlflow_setup | Auditar la configuración de MLflow contra las mejores prácticas de la industria — puntúa 7 categorías del 1 al 10 y produce una hoja de ruta de mejora priorizada |
Ejemplos de Uso
Explorar experimentos y ejecuciones
"Muéstrame todos los experimentos. ¿Cuáles se actualizaron recientemente?"
"¿Qué métricas y parámetros se registran en el experimento 'fraud-detection'?"
"Obtén las 10 mejores ejecuciones en 'fraud-detection' ordenadas por test/f1. Muéstrame los parámetros que más difieren entre las 3 mejores."
"Encuentra todas las ejecuciones etiquetadas con model_type=lightgbm y compara sus puntuaciones de recall."
Analizar una ejecución de entrenamiento
"Muéstrame los detalles completos de la ejecución abc123 — métricas, parámetros y artefactos."
"Grafica la curva de pérdida de entrenamiento para la ejecución abc123." (Claude obtiene el historial de métricas y renderiza un gráfico)
"Esta ejecución tiene un padre — muéstrame la ejecución padre y compara sus métricas."
Encontrar y registrar el mejor modelo
"Encuentra el mejor modelo registrado en el experimento 'fraud-detection' por test/recall. Regístralo como 'fraud-classifier' con una etiqueta selection_metric."
"¿Qué modelo registrado en los experimentos 1 y 2 tiene la puntuación F1 más alta en el conjunto de validación?"
"Registra el modelo de la ejecución abc123 en la ruta de artefacto 'model/' como 'my-classifier'."
Gestionar el registro de modelos
"Muéstrame todas las versiones de 'fraud-classifier' con sus alias y etapas."
"Establece el alias champion en la versión 3 de fraud-classifier."
"Actualiza la descripción de fraud-classifier v3 para explicar con qué dataset fue entrenado."
"Copia fraud-classifier v3 a un modelo separado 'fraud-classifier-prod' como entrada de producción."
Auditar tu configuración de MLflow
"Audita mi configuración de MLflow"
(Activa el prompt integrado audit_mlflow_setup — Claude explora experimentos, ejecuciones, artefactos y el registro de modelos, luego puntúa cada área contra las mejores prácticas de Google/Databricks)
Ejemplo de salida
| Category | Score | Top Issue |
|----------------------|--------|------------------------------------------------|
| Experiment Org | 5/10 | Flat namespace, no dot-notation hierarchy |
| Parameter Logging | 7/10 | No parent-child nesting for tuning sweeps |
| Metric Logging | 6/10 | Only final values logged, no training curves |
| Tagging Strategy | 5/10 | Params duplicated as tags; stale test_tag |
| Artifact Management | 2/10 | No log_model(); artifacts on local disk |
| Model Registry | 3/10 | Duplicate prod models instead of aliases |
| Reproducibility | 3/10 | No git SHA; no mlflow.log_input() datasets |
| Mean Score | 4.4/10| |
Top 3 improvements:
1. Call log_model() and move artifact store to S3/GCS
2. Add git SHA tag + mlflow.log_input() for dataset tracking
3. Consolidate registry to one model entry with @champion alias
Flujo de trabajo de promoción de extremo a extremo
"Encuentra el mejor modelo en 'fraud-detection' por test/recall, regístralo como 'fraud-classifier', etiquétalo con el framework y el tipo de problema, y establécelo como champion. Pregúntame antes de copiar a producción."
(Esto se asigna directamente al prompt integrado promote_best_model)
Depuración
Usa MCP Inspector para explorar herramientas, llamarlas con entradas personalizadas e inspeccionar respuestas crudas — sin involucrar un LLM.
Paquete publicado:
npx @modelcontextprotocol/inspector uvx mlflow-mcp
Código fuente local:
npx @modelcontextprotocol/inspector uv run --project /path/to/mlflow-mcp mlflow-mcp
Establece MLFLOW_TRACKING_URI en el panel de entorno del Inspector, o pásalo en línea:
MLFLOW_TRACKING_URI=http://127.0.0.1:5000 npx @modelcontextprotocol/inspector uvx mlflow-mcp
Requisitos
- Python >=3.10
- MLflow >=3.4.0
- Acceso a un servidor de tracking de MLflow
Licencia
Licencia MIT - consulta el archivo LICENSE para más detalles.
Contribuciones
¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request.