Skip to content

MP010: generic-tool-name

Tool names like search, get, or run carry no information.

At a glance

Category naming
Default severity warning
Auto-fixable no
LLM-gated no
Stable since v0.1.0

What this rule checks

mcpolish keeps a built-in list of words that, on their own, do not tell an agent what the tool does. The default list:

search, query, get, list, fetch, run, do, call, execute,
process, handle, request, send, load, save, update, delete,
create, read, write, go

If a tool's name (lowercased) is exactly one of these words, MP010 fires.

Why it matters

Wang et al. (2026) section 4.3 catalogued the "low-information name" smell. Their controlled experiment showed an 8.8 percentage point increase in wrong-tool selection (p<0.001) when a tool used a single-verb name. The agent has nothing to disambiguate search from another server's search except the descriptions, which is the wrong place to do that work.

Example: code that triggers this rule

@mcp.tool()
def search(q: str) -> list:
    """Use this when the user wants to find an item. Returns a list of ids."""
    return [q]

MP010 fires because search is on the generic list.

Example: how to fix it

@mcp.tool()
def search_memories(query: str) -> list:
    """Use this when the user wants to find a stored memory.

    Args:
        query: Search terms. Example: "kubernetes".

    Returns: a list of matching memory ids.
    """
    return [query]

The name now carries information about what is being searched.

Configuration

[tool.mcpolish.MP010]
allow = ["search"]            # whitelist this one
extra = ["dispatch", "invoke"]  # extend the generic list

allow removes a name from the generic list for this project. extra adds names that mcpolish does not flag by default.

When to disable this rule

If your server's only tool genuinely is the canonical search (and your namespace provides full context), whitelist via allow. Disable globally only if your team's naming convention is intentionally short across the board.

How the check works under the hood

For each tool, mcpolish lowercases the name and compares it to the union of the built-in list and extra, minus allow. Exact match fires the rule.

Multi-word names like search_notes do not match because the lookup is on the whole name, not on tokens.

  • MP011 redundant-prefix: namespace prefixes that bloat without adding information.
  • MP013 name-collision-cross-server: when your name collides with public servers.

References