MLflow MCP Server
The MLflow MCP Server exposes MLflow experiment tracking and model registry operations as tools for AI assistants via the Model Context Protocol (MCP). It connects to any MLflow tracking server via the MLFLOW_TRACKING_URI environment variable and is compatible with clients like Claude Desktop, Cursor, and OpenCode.
Experiment Management:
Retrieve experiment details by ID (
get_experiment) or name (get_experiment_by_name)Search/list experiments with optional name filtering and pagination (
search_experiments)
Run Management:
Fetch full details of a run (metrics, parameters, tags) by ID (
get_run)List all runs for a given experiment with pagination (
get_experiment_runs)
Model Registry:
Search and list registered models with optional filtering and pagination (
get_registered_models)Browse model versions with filtering and pagination (
get_model_versions)Create new registered models with optional description and tags (
create_registered_model)Create new model versions from a run's artifacts (
create_model_version)Rename an existing registered model (
rename_registered_model)Assign aliases (e.g.,
champion,challenger) to model versions (set_registered_model_alias)Delete a registered model and all its versions (
delete_registered_model)Delete a specific model version (
delete_model_version)
Provides tools for interacting with MLflow experiments, runs, and registered models, enabling browsing of experiments, retrieving run details with metrics and parameters, and querying the model registry with filtering and pagination support.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MLflow MCP Servershow me all experiments containing 'recommendation' in the name"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 details by ID |
| Get experiment details by name |
| List and filter experiments with optional name matching and pagination |
Run Management
Tool | Description |
| Get full run details including metrics, parameters, tags, and run type (parent/child/standalone) |
| List runs for an experiment with pagination |
Model Registry
Tool | Description |
| Search and list registered models |
| Browse model versions with filtering |
| Create a new registered model with optional description and tags |
| Create a new model version from a run's artifacts |
| Rename an existing registered model |
| Assign an alias (e.g. |
| Delete a registered model and all its versions |
| 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 |
|
| URL of the MLflow tracking server |
Installation (Development)
Prerequisites
Python 3.11+
An MLflow tracking server
Setup
git clone https://github.com/yesid-lopez/mlflow-mcp-server.git
cd mlflow-mcp-server
uv syncRunning Locally
export MLFLOW_TRACKING_URI="http://localhost:5000"
uv run -m mlflow_mcp_serverThe 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 singletonAdding New Tools
Create a function in the appropriate file under
tools/.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 toolsget_experimentC
Get experiment details
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_name | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| experiment_id | No | 226 | |
| token | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | No | ||
| token | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| model_name | No | The name of the registered model to search for | |
| token | No | The token to use for pagination |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| token | No |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v0.1.0- First observed
get_experiment - First observed
get_experiment_by_name - First observed
get_experiment_runs - First observed
get_model_versions - First observed
get_registered_models - First observed
get_run - First observed
search_experiments
TDQS
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.
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.
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.
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
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
Your Databricks Lakehouse in natural language: run SQL on your SQL warehouses, track long-running qu
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
List datasets, schemas, run APL queries, and use prompts for exploration, anomalies, and monitoring.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Related MCP Servers
- AlicenseDqualityDmaintenanceEnables 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.1001MIT
- AlicenseAqualityCmaintenanceEnables coding agents to interact with Metaflow workflows, including querying flows, runs, tasks, logs, and artifacts across any Metaflow backend.24Apache 2.0
- AlicenseBqualityCmaintenanceEnables LLM agents to query Weights & Biases experiments, including listing projects, runs, metrics, plotting metrics, and retrieving run details.51MIT
- FlicenseNot gradedqualityCmaintenanceEnables natural language management of the full ML lifecycle including experiments, model registration, deployment, and pipeline orchestration through a conversational agent.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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