Skip to main content
Glama
README.md
# kothar

[![kothar MCP server](https://glama.ai/mcp/servers/yahiaklk/kothar/badges/card.svg)](https://glama.ai/mcp/servers/yahiaklk/kothar)

Context-aware MCP server advisor. Tells you what to install for your specific project — and why.

## The problem

[Glama](https://glama.ai) has 19,000+ MCP servers. You have a project. Nobody bridges the gap.

LLMs asked directly hallucinate servers that don't exist and recommend from stale training data. Directories give you search, not advice.

kothar fills the **selection under context** gap: not "here are 19,000 options" but "for your specific project, right now, here's what you need and why."

## The two moments nobody is serving

**Project start:** "I'm building a Python data pipeline with DuckDB and FastAPI" → what do I install right now

**Mid-project:** "I just added an auth layer / I need to handle PDF ingestion" → what do I add now that I've reached this point

The second moment is more valuable. At project start, people can Google. Mid-project they're in flow.

## Three tools

```
recommend_for_project(description)
  → top MCP servers for your stack with rationale

recommend_for_next_step(current_stack, new_context)
  → what to add as your project evolves

explain_fit(server_name, project_description)
  → why a specific server fits your project
```

## Install

**Prerequisites:** [uv](https://docs.astral.sh/uv/)

```bash
git clone https://github.com/yahiaklk/kothar
cd kothar
uv sync
```

Build the index (first run, ~30s):

```bash
uv run python -m kothar.indexer
```

## Add to Claude Code

```bash
claude mcp add --scope user kothar -- uv run --directory /path/to/kothar python -m kothar.server
```

## Add to Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "kothar": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/kothar", "python", "-m", "kothar.server"]
    }
  }
}
```

## Usage

Once connected, ask your AI assistant:

```
recommend_for_project("Python FastAPI backend with PostgreSQL and JWT auth")

recommend_for_next_step("github,filesystem", "adding Stripe payments and PDF invoices")

explain_fit("postgres", "multi-tenant SaaS with row-level security")
```

## How it works

- Parses [awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers) (2000+ curated servers)
- Embeds descriptions with `all-MiniLM-L6-v2` (local, no API cost)
- Stores in DuckDB, queries with cosine similarity
- Template-based rationale — grounded in the registry, not hallucinated

## Rebuild the index

```bash
uv run python -m kothar.indexer --force
```

## Docker

Multi-stage image with the embedding model + DuckDB index baked in — no runtime network dependency.

```bash
docker build -t kothar:0.3.0 .
docker run --rm -i kothar:0.3.0   # stdio transport, for local MCP clients
```

Wire into Claude Desktop:

```json
{
  "mcpServers": {
    "kothar": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "kothar:0.3.0"]
    }
  }
}
```

Non-root user (`uid=10001`), pinned Python 3.12, deps resolved from `uv.lock`, model cached under `/app/.hf_cache` with `HF_HUB_OFFLINE=1` at runtime.

## Stack

Python · FastMCP · DuckDB · sentence-transformers · uv

## License

[MIT](LICENSE)

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: explaining a specific server, recommending for a multi-part goal, for a full project, or for next steps. No overlap.

Naming Consistency4/5

All names follow verb_noun pattern (explain_why, recommend_for_goal, etc.), but 'explain_why' uses 'why' as a noun, slightly deviating from standard action-object convention.

Tool Count5/5

Four tools cover the essential recommendation scenarios without redundancy. The count is well-scoped for the server's purpose.

Completeness4/5

The set covers main use cases: explaining, recommending for goals, projects, and next steps. Missing features like comparing or updating recommendations, but not critical.

Maintenance

ActivityNo data
ResponsivenessSyncing