Skip to main content
ClaudeWave
MCP ServersOfficial Registry2 stars0 forks● PythonMITUpdated today
ClaudeWave Trust Score
85/100
✓ Trusted
Passed
  • ✓Open-source license (MIT)
  • ✓Actively maintained (<30d)
  • ✓Topics declared
  • ✓Documented (README)
Flags
  • !No description
Last scanned: 10/18/2026
Install in Claude Code / Claude Desktop
Method: UVX (Python) · model-finder-mcp
Claude Code CLI
claude mcp add evalharness -- uvx model-finder-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "evalharness": {
      "command": "uvx",
      "args": ["model-finder-mcp"],
      "env": {
        "ANTHROPIC_API_KEY": "<anthropic_api_key>",
        "GEMINI_API_KEY": "<gemini_api_key>",
        "OPENAI_API_KEY": "<openai_api_key>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
ANTHROPIC_API_KEYGEMINI_API_KEYOPENAI_API_KEY
Use cases

MCP Servers overview

<p align="center">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/Abhiindigloo/EvalHarness/main/assets/readme-hero-dark.png">
    <img alt="Model Finder: a field of test results across sixteen candidate models ordered by cost, with the cheapest model that passes the threshold marked in vermilion" src="https://raw.githubusercontent.com/Abhiindigloo/EvalHarness/main/assets/readme-hero-light.png" width="100%">
  </picture>
</p>

<p align="center">
  <a href="https://github.com/Abhiindigloo/EvalHarness/actions/workflows/test.yml"><img alt="tests" src="https://github.com/Abhiindigloo/EvalHarness/actions/workflows/test.yml/badge.svg"></a>
  <img alt="Python 3.9+" src="https://img.shields.io/badge/python-3.9%2B-1c1b19?labelColor=f3f0e8">
  <img alt="dependencies: none" src="https://img.shields.io/badge/dependencies-none-1c1b19?labelColor=f3f0e8">
  <img alt="MCP: local stdio" src="https://img.shields.io/badge/MCP-local%20stdio-cd462a?labelColor=f3f0e8">
  <a href="LICENSE"><img alt="license MIT" src="https://img.shields.io/badge/license-MIT-1c1b19?labelColor=f3f0e8"></a>
</p>

<p align="center">
  <b>Find the cheapest AI model that passes your own tests, and keep it that way.</b><br>
  <sub>Claude · Gemini · OpenAI · Bedrock · Vertex AI · local models — published by Indigloo</sub>
</p>

<p align="center">
  <a href="#install">Install</a> &nbsp;·&nbsp;
  <a href="#how-it-works">How it works</a> &nbsp;·&nbsp;
  <a href="#mcp-tools">MCP tools</a> &nbsp;·&nbsp;
  <a href="#quick-start">Quick start</a> &nbsp;·&nbsp;
  <a href="PRIVACY.md">Privacy</a> &nbsp;·&nbsp;
  <a href="SECURITY.md">Security</a>
</p>

<!-- mcp-name: co.indigloo/model-finder -->

> [!NOTE]
> **Runs locally.** Model Finder is a set of four Agent Skills plus a local MCP server (`mcp/server.py`, Python 3.9+ standard library, no dependencies). The server makes no network calls, needs no API keys, never writes files and never sends anything to Indigloo. Only the eval script and the router it generates call model providers, with your own keys, when you run them.

## How it works

```mermaid
flowchart LR
    A["Audit<br/><sub>models and SDKs in your repo</sub>"] --> B["Draft evals<br/><sub>from your prompts, PII dropped</sub>"]
    B --> C["Evaluate<br/><sub>your keys · pass rate · latency · cost</sub>"]
    C --> D["Rank<br/><sub>cost per passing answer</sub>"]
    D --> E["Route<br/><sub>cheapest first, escalate on failure</sub>"]
    F["Size<br/><sub>weights + KV cache vs your GPU</sub>"] -.-> C
    classDef step fill:#f3f0e8,stroke:#1c1b19,color:#1c1b19;
    classDef pick fill:#f3f0e8,stroke:#cd462a,color:#cd462a;
    class A,B,C,E,F step;
    class D pick;
```

| Skill | What it does |
|---|---|
| `find-model` | Recommends models across Claude, Gemini, OpenAI, cloud, and local options for your task, budget, and route, including coding subtasks in an IDE. |
| `eval-models` | Runs your examples against shortlisted models and measures pass rate, latency, and billed cost with your own keys. |
| `route-models` | Builds a cheapest-first routing setup: a standalone router with quality guards plus a LiteLLM config. |
| `size-local-model` | Estimates memory for weights and KV cache and compares it with your hardware. |

Advisory only: nothing is deployed, your active model is never changed, and data goes only to providers you configure and approve. Personal data and secrets are blocked before sending by default; see [DATA-PROTECTION.md](DATA-PROTECTION.md) for how this maps to India's DPDP Act.

## Install

Requires Python 3.9+ on your PATH as `python3` (see [Windows](#windows)). Nothing to `pip install`.

| Client | Command | Skills | MCP tools |
|---|---|:-:|---|
| **Claude Code** | `/plugin marketplace add Abhiindigloo/EvalHarness` then `/plugin install model-finder@model-finder` | ✅ | ✅ via `.mcp.json` |
| **OpenAI Codex CLI** | `codex plugin marketplace add Abhiindigloo/EvalHarness` then `codex plugin add model-finder@model-finder` | ✅ | ✅ via `mcp.json` (Agent Plugins format, runs `./mcp/server.py`). Codex gives the server no workspace, so the agent passes the project path |
| **GitHub Copilot CLI** | `copilot plugin marketplace add Abhiindigloo/EvalHarness` then `copilot plugin install model-finder@model-finder` | ✅ | ✅ via `mcp.json` |
| **Gemini CLI** | `gemini extensions install https://github.com/Abhiindigloo/EvalHarness` | ✅ | ✅ via `gemini-extension.json` |
| **Cursor** | Install from the Cursor marketplace or cursor.directory once listed. Until then, clone into `~/.cursor/plugins/local/model-finder` and reload the window | ✅ | ✅ via `mcp.json` or `.cursor-plugin/plugin.json` → `.mcp.json` |
| **Any MCP client, from PyPI** | `uvx model-finder-mcp` (published by the release workflow; see [Releases](#releases)) | — | ✅ |
| **VS Code, JetBrains, Windsurf, others** | Add the server to the client's MCP settings ([manual setup](#manual-mcp-setup)) | — | ✅ |
| **Other Agent Skills clients** | Copy `skills/<name>/` into the client's skills directory | ✅ | — |

Gemini CLI only starts extension MCP servers in folders you have trusted; it asks the first time you open a project.

### Manual MCP setup

<details>
<summary><b>VS Code</b> — <code>.vscode/mcp.json</code> (top-level key is <code>servers</code>)</summary>

```json
{
  "servers": {
    "model-finder": {
      "type": "stdio",
      "command": "python3",
      "args": ["/absolute/path/to/EvalHarness/mcp/server.py"],
      "env": { "MODEL_FINDER_ROOT": "${workspaceFolder}" }
    }
  }
}
```
</details>

<details>
<summary><b>Cursor</b> — <code>.cursor/mcp.json</code> in your project, or <code>~/.cursor/mcp.json</code></summary>

```json
{
  "mcpServers": {
    "model-finder": {
      "command": "python3",
      "args": ["/absolute/path/to/EvalHarness/mcp/server.py"],
      "env": { "MODEL_FINDER_ROOT": "${workspaceFolder}" }
    }
  }
}
```
</details>

<details>
<summary><b>JetBrains, Windsurf, Claude Desktop and others</b> — <code>mcpServers</code></summary>

If the client has no workspace variable, write the project path:

```json
{
  "mcpServers": {
    "model-finder": {
      "command": "python3",
      "args": ["/absolute/path/to/EvalHarness/mcp/server.py"],
      "env": { "MODEL_FINDER_ROOT": "/absolute/path/to/your/project" }
    }
  }
}
```
</details>

Clone the repo once and replace `/absolute/path/to/EvalHarness`. Repository tools read only inside the workspace: the roots your client shares over MCP, else `MODEL_FINDER_ROOT`, else the server's working directory. A filesystem root or home directory is refused.

### Windows

Codex, Copilot CLI and Cursor start the server as `./mcp/server.py`, which relies on its `#!/usr/bin/env python3` line; on Windows use the manual setup or `uvx model-finder-mcp`. If `python3` is not on your PATH, the MCP server will not start. Install Python from python.org (tick "Add python.exe to PATH") and either create a `python3` alias or use the manual setup with `"command": "py"` and `"args": ["-3", "C:/path/to/EvalHarness/mcp/server.py"]`.

## MCP tools

Ten read-only tools, so the same features work as tools in every supported IDE:

| Tool | What it does |
|---|---|
| `modelfinder_audit_models` | Lists AI model IDs and SDKs in your repo with file:line locations, routes and hard-coded IDs |
| `modelfinder_draft_eval_examples` | Drafts eval examples from prompt files and fixtures, dropping anything with personal data or secrets |
| `modelfinder_create_eval_config` · `modelfinder_validate_eval_config` | Builds and checks an eval config: call count, env var names, unpriced models, guard verdict |
| `modelfinder_check_output` | Tests a reply against eval checks or routing guards |
| `modelfinder_rank_eval_results` | Ranks results by cost per passing answer, with the cost/reliability cascade |
| `modelfinder_generate_routing` | Returns routing.json and a LiteLLM config from eval results |
| `modelfinder_estimate_cost` | Monthly token cost and cost per accepted result |
| `modelfinder_estimate_memory` | Local memory for weights and KV cache |
| `modelfinder_scan_sensitive_data` | Personal-data and secrets scan (categories and counts only) |

Every tool returns a readable markdown summary by default and the full result as structured JSON (`response_format: "json"` puts the JSON in the text too). Large results are paginated (`limit`, `offset`, `has_more`, `next_offset`), `modelfinder_audit_models` can filter by provider family or hard-coded IDs, and unknown arguments are rejected with the list of valid ones. The server never opens a network connection, never reads API keys and never writes files. Only `eval_models.py` and the generated `router.py` call model providers, with your keys, when you run them.

## Quick start

In your IDE, ask: *"Audit which AI models this repo uses, then draft evals from our prompts and test whether a cheaper model passes."* The assistant uses the MCP tools to audit and draft, agrees checks with you, and asks before the paid run.

From a terminal:

```bash
cp skills/eval-models/assets/example-config.json my-eval.json   # fill in verified model IDs and prices
export ANTHROPIC_API_KEY=... GEMINI_API_KEY=... OPENAI_API_KEY=...
python3 skills/eval-models/scripts/repo_scan.py audit .            # what the repo uses
python3 skills/eval-models/scripts/repo_scan.py examples .         # draft examples from prompt files
python3 skills/eval-models/scripts/eval_models.py my-eval.json --dry-run
python3 skills/eval-models/scripts/eval_models.py my-eval.json --out results
python3 skills/route-models/scripts/make_routing.py --results results/results.json --guards guards.json --out routing
python3 routing/router.py routing/routing.json "your prompt"
```

**Size a local model:**

```bash
python3 skills/size-local-model/scripts/estimate_memory.py --params-b 8.03 --bits 16 \
  --layers 32 --kv-heads 8 --head-dim 128 --context 8192 --available-gib 24
```

## Tests

```bash
python3 -m unittest discover -s tests -v
agent-skillsclaude-code-plugingemini-cli-extensionllm-evaluationllm-model-selectionmcpmcp-server

What people ask about EvalHarness

What is Abhiindigloo/EvalHarness?

+

Abhiindigloo/EvalHarness is mcp servers for the Claude AI ecosystem with 2 GitHub stars.

How do I install EvalHarness?

+

You can install EvalHarness by cloning the repository (https://github.com/Abhiindigloo/EvalHarness) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is Abhiindigloo/EvalHarness safe to use?

+

Our security agent has analyzed Abhiindigloo/EvalHarness and assigned a Trust Score of 85/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.

Who maintains Abhiindigloo/EvalHarness?

+

Abhiindigloo/EvalHarness is maintained by Abhiindigloo. The last recorded GitHub activity is dated 2026-10-18, with 1 open issues.

Are there alternatives to EvalHarness?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy EvalHarness to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: Abhiindigloo/EvalHarness
[![Featured on ClaudeWave](https://claudewave.com/api/badge/abhiindigloo-evalharness)](https://claudewave.com/repo/abhiindigloo-evalharness)
<a href="https://claudewave.com/repo/abhiindigloo-evalharness"><img src="https://claudewave.com/api/badge/abhiindigloo-evalharness" alt="Featured on ClaudeWave: Abhiindigloo/EvalHarness" width="320" height="64" /></a>

More MCP Servers

EvalHarness alternatives