> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mcp-assistant.in/llms.txt
> Use this file to discover all available pages before exploring further.

# April 25, 2026

> Release notes for mcp-ts v1.5.2: Tool Router search upgrades including direct tool selection, required terms, and a smarter relevance scoring model.

## New features

### Direct tool selection

The [`mcp_search_tool_bm25`](/core-concepts/meta-tools) meta-tool now supports a `select:<name>` syntax that bypasses the search index entirely. When the LLM already knows which tool it wants, `select:github_create_issue` returns the exact tool description instantly — no ranking, no token overhead from irrelevant matches.

### Required terms in search

You can now force a search to only return tools containing specific words by prefixing them with `+`. For example, `+slack send` guarantees that only Slack tools are returned, even when other tools use the word "send" more frequently. This makes it easier to scope discovery to a specific integration.

### Smarter search scoring

The BM25 index now boosts results when a search term matches (or is a substring of) a tool's `serverName` or `name`. Tools strictly related to a specific integration — like querying for "neon" or "apify" — now float to the top instead of getting buried under unrelated tools that merely mention the word in their parameters.

See the [Meta-Tools reference](/core-concepts/meta-tools) for the full search syntax.

## Bug fixes

* **Exact-match results respect `topK`** — The tool index no longer returns more results than requested when a query has exact name matches.
* **Required-term embeddings** — Normalized the query text used for embeddings when required terms are present, so semantic search ranks results consistently with the rest of the index.
* **Not-found tools surfaced in select mode** — When `select:<name>` can't find a tool, the error is now returned to the caller with the originating `serverId` instead of being silently dropped.
* **Error flag on full failure** — When every tool fails to resolve in a select call, the response now correctly sets `isError=true` so clients can handle it properly.
