Skip to main content
Glama

MLflow MCP Server

A Model Context Protocol (MCP) server that exposes MLflow experiment tracking and model registry operations as tools for AI assistants.

Table of Contents

Related MCP server: metaflow-mcp-server

Quickstart

The fastest way to get started is to add the server to your MCP client config. No local clone required.

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "mlflow": {
      "command": "uvx",
      "args": ["mlflow-mcp-server"],
      "env": {
        "MLFLOW_TRACKING_URI": "http://localhost:5000"
      }
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "mlflow": {
      "command": "uvx",
      "args": ["mlflow-mcp-server"],
      "env": {
        "MLFLOW_TRACKING_URI": "http://localhost:5000"
      }
    }
  }
}

OpenCode

Add to your opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mlflow": {
      "type": "local",
      "command": ["uvx", "mlflow-mcp-server"],
      "environment": {
        "MLFLOW_TRACKING_URI": "http://localhost:5000"
      }
    }
  }
}

Replace http://localhost:5000 with the URL of your MLflow tracking server.

Tools

Experiment Management

Tool

Description

get_experiment

Get experiment details by ID

get_experiment_by_name

Get experiment details by name

search_experiments

List and filter experiments with optional name matching and pagination

Run Management

Tool

Description

get_run

Get full run details including metrics, parameters, tags, and run type (parent/child/standalone)

get_experiment_runs

List runs for an experiment with pagination

Model Registry

Tool

Description

get_registered_models

Search and list registered models

get_model_versions

Browse model versions with filtering

create_registered_model

Create a new registered model with optional description and tags

create_model_version

Create a new model version from a run's artifacts

rename_registered_model

Rename an existing registered model

set_registered_model_alias

Assign an alias (e.g. champion, challenger) to a model version

delete_registered_model

Delete a registered model and all its versions

delete_model_version

Delete a specific model version

Example Prompts

Once configured, you can ask your AI assistant things like:

Exploring experiments and runs:

  • "List all experiments related to recommendation models"

  • "Show me the runs for experiment 12 and compare their metrics"

  • "Get the parameters and metrics for run abc123"

  • "Which runs in the fraud-detection experiment have the highest accuracy?"

Managing the model registry:

  • "Show me all registered models"

  • "Register a new model called churn-classifier with description 'Binary classifier for customer churn'"

  • "Create a new version of churn-classifier from run abc123"

  • "Set the champion alias on version 3 of churn-classifier"

  • "Rename the model old-name to new-name"

  • "Delete version 1 of churn-classifier"

Analysis and comparison:

  • "Compare the last 5 runs of the search-ranking experiment by NDCG and latency"

  • "What hyperparameters were used in the best-performing run of experiment 7?"

  • "List all model versions for recommendation-model and their aliases"

Configuration

Environment Variable

Default

Description

MLFLOW_TRACKING_URI

http://localhost:5000

URL of the MLflow tracking server

Installation (Development)

Prerequisites

  • Python 3.11+

  • uv

  • An MLflow tracking server

Setup

git clone https://github.com/yesid-lopez/mlflow-mcp-server.git
cd mlflow-mcp-server
uv sync

Running Locally

export MLFLOW_TRACKING_URI="http://localhost:5000"
uv run -m mlflow_mcp_server

The server communicates over stdio, which is the standard MCP transport for local tool servers.

Project Structure

mlflow_mcp_server/
├── __main__.py              # Entry point
├── server.py                # MCP server setup and tool registration
├── tools/
│   ├── experiment_tools.py  # Experiment search and retrieval
│   ├── run_tools.py         # Run details and listing
│   └── registered_models.py # Model registry CRUD operations
└── utils/
    └── mlflow_client.py     # MLflow client singleton

Adding New Tools

  1. Create a function in the appropriate file under tools/.

  2. Register it in server.py:

from mlflow_mcp_server.tools.your_module import your_function
mcp.add_tool(your_function)

Linting

uv run ruff check .
uv run ruff format --check .

License

MIT

Available Tools

7 tools
get_experimentC

Get experiment details

ParametersJSON Schema
NameRequiredDescriptionDefault
experiment_idYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get experiment details' implies a read operation, but it doesn't specify whether this requires authentication, has rate limits, returns partial or complete data, or what happens if the experiment_id doesn't exist. The description provides minimal behavioral context for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three words, with zero wasted language. While it's under-specified, it's not verbose or poorly structured. Every word serves a purpose, making it front-loaded and efficient in terms of word count.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 1 required parameter with 0% schema coverage, no annotations, no output schema, and multiple sibling tools, the description is inadequate. It doesn't explain what 'details' are returned, how to use the parameter, or how this differs from similar tools. For a read operation in a complex environment with many alternatives, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented parameter. The description doesn't mention the 'experiment_id' parameter at all, nor does it explain what format it expects or where to obtain valid IDs. With 1 required parameter that's completely undocumented in both schema and description, the description adds no value beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get experiment details' is a tautology that essentially restates the tool name 'get_experiment'. It doesn't specify what kind of details are retrieved or differentiate this tool from its siblings like 'get_experiment_by_name' or 'get_experiment_runs'. The description provides minimal value beyond the tool name itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_experiment_by_name' (which likely retrieves by name instead of ID) and 'get_experiment_runs' (which likely retrieves runs rather than experiment details), the description fails to help an agent choose between these options. No context or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_experiment_by_nameC

Get experiment details by name

ParametersJSON Schema
NameRequiredDescriptionDefault
experiment_nameYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states it 'gets' details without disclosing behavioral traits like read-only vs. destructive, authentication needs, rate limits, or response format. It's a minimal statement that doesn't add meaningful context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single, front-loaded sentence that states the core purpose without waste. It's appropriately sized for a simple tool, though this brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, 0% schema coverage, and no output schema, the description is incomplete. It doesn't address complexity, return values, or behavioral context needed for a tool with one parameter, making it inadequate for informed agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but adds no parameter semantics beyond implying 'experiment_name' is used. It doesn't explain format, constraints, or examples for the parameter, leaving it undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get experiment details by name' clearly states the verb ('Get') and resource ('experiment details'), but it's vague about what specific details are retrieved and doesn't differentiate from sibling tools like 'get_experiment' or 'search_experiments'. It's functional but lacks specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_experiment' or 'search_experiments'. It doesn't mention prerequisites, exclusions, or context for selection, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_experiment_runsC

Get all runs for an experiment

ParametersJSON Schema
NameRequiredDescriptionDefault
experiment_idNo226
tokenNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as whether this is a read-only operation, if it requires authentication (implied by 'token' parameter but not explained), rate limits, pagination, or what 'get' entails (e.g., returns list, errors). This leaves significant gaps for agent understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence 'Get all runs for an experiment', which is front-loaded and wastes no words. It efficiently conveys the core purpose without unnecessary elaboration, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters with 0% schema coverage, no annotations, no output schema, and sibling tools, the description is incomplete. It lacks details on parameter usage, return values, error handling, and differentiation from alternatives. For a tool with moderate complexity and poor structured support, this description is insufficient for reliable agent operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but adds no parameter information. It doesn't explain 'experiment_id' (e.g., format, source) or 'token' (e.g., authentication token, optional usage). With 2 undocumented parameters and no output schema, the description fails to provide necessary semantic context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get all runs for an experiment' clearly states the action (get) and resource (runs for an experiment), but it's vague about scope and doesn't distinguish from sibling tools like 'get_run' or 'search_experiments'. It specifies 'all runs' but lacks detail on what constitutes a 'run' or how results are presented.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites like authentication, compare to 'get_run' for single runs or 'search_experiments' for broader queries, or specify use cases like monitoring or analysis. The description alone offers no contextual direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_model_versionsD
ParametersJSON Schema
NameRequiredDescriptionDefault
model_nameNo
tokenNo

TDQS

D1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Tool has no description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness1/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Tool has no description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has no description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

Tool has no description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tool has no description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_registered_modelsD
ParametersJSON Schema
NameRequiredDescriptionDefault
model_nameNoThe name of the registered model to search for
tokenNoThe token to use for pagination

TDQS

D1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Tool has no description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness1/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Tool has no description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool has no description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Tool has no description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

Tool has no description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tool has no description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_runC

Get a run by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes

TDQS

C2.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states only the basic action ('Get a run by ID') without any information about permissions required, error handling, rate limits, or what happens if the run doesn't exist. This leaves critical behavioral traits undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just four words, front-loading the essential action and resource. There's no wasted language, making it efficient for quick understanding, though this brevity contributes to gaps in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, no output schema) and lack of annotations, the description is incomplete. It doesn't explain what a 'run' is, how it relates to other resources (e.g., experiments), or what data is returned. For a tool in a context with multiple sibling tools, more context is needed to ensure proper use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, meaning the parameter 'run_id' has no documentation in the schema. The description adds minimal semantics by implying the parameter is an ID for a run, but doesn't specify format, constraints, or where to obtain valid IDs. This insufficiently compensates for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get a run by ID' clearly states the action (get) and resource (run), but it's vague about what a 'run' represents in this context. It doesn't distinguish this tool from sibling tools like 'get_experiment_runs' or 'get_model_versions', leaving ambiguity about the specific resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_experiment_runs' (plural) and 'get_experiment' (singular), there's no indication whether this is for retrieving a single run versus a list, or how it relates to other tools in the server.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_experimentsC

List all experiments

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
tokenNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action ('List all experiments') without mentioning permissions, pagination, rate limits, or response format. This is a significant gap for a tool with two parameters and no output schema, making it hard for an agent to predict behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a single sentence, 'List all experiments', which is front-loaded and wastes no words. It efficiently conveys the core purpose without unnecessary elaboration, earning full marks for brevity and clarity in structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (2 parameters, no annotations, no output schema), the description is incomplete. It doesn't cover parameter usage, behavioral traits, or how to interpret results, making it inadequate for an agent to reliably invoke the tool. More context is needed to bridge the gaps in structured data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It adds no meaning beyond the schema, failing to explain what 'name' and 'token' parameters do (e.g., filtering by name or pagination token). This leaves both parameters ambiguous, reducing tool usability.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List all experiments' clearly states the verb ('List') and resource ('experiments'), but it's vague about scope and doesn't distinguish from siblings like 'get_experiment' or 'get_experiment_by_name'. It's adequate but lacks specificity about what 'all' means in context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_experiment_by_name' or 'get_experiment_runs'. The description implies a broad listing function, but it doesn't specify use cases, prerequisites, or exclusions, leaving the agent to guess based on tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedget_experiment
    • First observedget_experiment_by_name
    • First observedget_experiment_runs
    • First observedget_model_versions
    • First observedget_registered_models
    • First observedget_run
    • First observedsearch_experiments

TDQS

C2.5/5.0
Disambiguation4/5

Most tools have distinct purposes targeting different MLflow entities (experiments, runs, models), but 'get_experiment' and 'get_experiment_by_name' could cause confusion as they serve the same ultimate purpose through different lookup methods. The other tools clearly target different resources.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with 'get_' or 'search_' prefixes, using snake_case throughout. The naming is predictable and follows a clear convention across all seven tools.

Tool Count5/5

Seven tools is well-scoped for an MLflow server, covering key entities like experiments, runs, and models. The count feels appropriate—neither too sparse nor bloated—for the apparent domain scope.

Completeness3/5

The toolset provides good read/search coverage for experiments, runs, and models, but lacks any write operations (create, update, delete) or lifecycle management tools. This is a notable gap that will limit agent workflows to read-only scenarios.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    D
    quality
    D
    maintenance
    Enables AI assistants to perform MLOps workflows such as experiment tracking, model registry, dataset management, pipeline orchestration, and data lineage by wrapping DVC, MLflow, and Git.
    100
    1
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables LLM agents to query Weights & Biases experiments, including listing projects, runs, metrics, plotting metrics, and retrieving run details.
    5
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language management of the full ML lifecycle including experiments, model registration, deployment, and pipeline orchestration through a conversational agent.
    -

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/yesid-lopez/mlflow-mcp-server'

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