## TL;DR
A 500 on a filtered query is usually the filter, not the server: the filter string's syntax, an attribute the server version does not support in that position, or a metric name needing quoting breaks the server's parser, which reports a generic 500. Simplify the filter step by step, one clause at a time, and quote attribute names exactly as the API documentation for your server version shows.

```text
experiment tracking server error 500 failed to query runs with filter 'metrics.accuracy > 0.9'
```

## Use this when
- The run or call fails with this symptom: experiment tracking server error 500 when querying runs with a metric filter.
- You are working on querying runs from a tracking server with a metric filter and the failure repeats on the same run or configuration.
- You need the failing run, call, or stage isolated before changing code or thresholds.

## Not for this skill when
- A proven server bug on a valid filter, where the fix is a server upgrade.
- The error text names a different tool, stage, or root cause. Match the verbatim error first and use that skill.

## Steps
1. Reproduce with the simplest possible query, no filter, to confirm the server answers at all. Verify: the unfiltered query succeeds
2. Add filter clauses one at a time until the 500 returns, isolating the offending clause. Verify: the breaking clause is identified
3. Check that clause against the installed server version's filter grammar: attribute quoting, comparator support, and metric versus param namespaces. Verify: the clause's incompatibility is named
4. Rewrite the clause in the supported form, or filter client-side for that condition, and rerun the full query. Verify: the complete query returns the intended runs

## Variant phrasings
### tracking server 500 filter metrics accuracy query
The verbatim phrasing.
### mlflow search runs 500 filter syntax error fix
The filter-syntax phrasing.
### experiment server query filter fails 500 isolate clause
The isolation phrasing.

Compatibility: Experiment tracking server query APIs and filter syntax

## Why it happens
Filter strings are parsed server-side into query plans, and parser failures surface as bare 500s with no clause-level detail. Because the grammar varies across versions, a filter that worked before an upgrade, or in documentation for another version, can be the entire problem.

## Edge cases / pitfalls
- Metric names with spaces or slashes need the quoting form your version expects; this is the most common single-clause break.
- Client-side filtering over a paged export is a sound fallback for one-off analyses.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_cuQEIDxQG2C2Ugks7eAGhg
