suggest_similar
Retrieve catalog names similar to a given name, using difflib and substring matching, up to a specified limit.
Instructions
Return up to limit catalog names close to name (difflib + substring).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- echolon/mcp/server.py:167-170 (handler)MCP tool handler for 'suggest_similar' — registered as a FastMCP server tool, delegates to _catalog.suggest_similar.
@server.tool() def suggest_similar(name: str, limit: int = 5) -> list[str]: """Return up to ``limit`` catalog names close to ``name`` (difflib + substring).""" return _catalog.suggest_similar(name, limit=limit) - echolon/mcp/server.py:167-170 (registration)Tool registered with FastMCP via @server.tool() decorator in build_server()
@server.tool() def suggest_similar(name: str, limit: int = 5) -> list[str]: """Return up to ``limit`` catalog names close to ``name`` (difflib + substring).""" return _catalog.suggest_similar(name, limit=limit) - Core implementation of suggest_similar — uses difflib.get_close_matches (cutoff=0.6) and substring fallback to find similar indicator names from the catalog.
def suggest_similar(name: str, limit: int = 5) -> list[str]: """Return up to ``limit`` catalog names that are close matches to ``name``. Primary: ``difflib.get_close_matches`` with ``cutoff=0.6`` (handles typos). Fallback: substring containment — if the query contains a catalog name, or a catalog name contains the query, surface those too. Catches cases like ``"fake_rsi"`` → suggest ``"rsi"`` that difflib misses because the length mismatch drags the similarity ratio below the cutoff. """ if not name: return [] q = name.lower() keys = list(_CATALOG.keys()) ranked = difflib.get_close_matches(q, keys, n=limit, cutoff=0.6) ranked_set = set(ranked) if len(ranked) < limit: for k in keys: if k in q or q in k: if k not in ranked_set: ranked.append(k) ranked_set.add(k) if len(ranked) >= limit: break return ranked[:limit] - Function signature defines the schema: name (str), limit (int, default 5), returns list[str]
def suggest_similar(name: str, limit: int = 5) -> list[str]: