Skip to content

MP012: inconsistent-verb-pattern

Tools in the same server should use the same verb for the same kind of action.

At a glance

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

What this rule checks

If most of your tools start with get_, a tool that starts with fetch_ is an outlier. The agent has to learn that get_ and fetch_ mean the same thing here, which costs attention. MP012 looks for leading verbs that are synonyms of a canonical verb used elsewhere in the same server.

The default synonym map:

Synonyms Canonical
fetch, retrieve, read, obtain, find, lookup get
remove, destroy, drop delete
make, new, add create
modify, change, edit, set update
enumerate list

If a tool uses fetch_post while another tool in the same server uses get_user, MP012 fires on the fetch_post tool.

Why it matters

Wang et al. (2026) section 4.3 measured the in-server discrimination cost of inconsistent verbs. Mixed verbs cost the agent extra reasoning to map synonyms to the same action. Consistent verbs reduce that cost.

Example: code that triggers this rule

@mcp.tool()
def get_user(uid: str) -> dict:
    ...

@mcp.tool()
def get_post(pid: str) -> dict:
    ...

@mcp.tool()
def fetch_comment(cid: str) -> dict:
    ...

The canonical verb across the server is get. fetch_comment is the outlier. MP012 fires on fetch_comment.

Example: how to fix it

@mcp.tool()
def get_comment(cid: str) -> dict:
    ...

Now all three tools share the same leading verb.

Configuration

MP012 has no knobs in v1. To extend the synonym map you would edit the source. To skip the rule:

[tool.mcpolish]
ignore = ["MP012"]

When to disable this rule

If your team uses verbs with subtly different meanings (e.g. get for cached, fetch for fresh), MP012 will fire even though you intended the distinction. Either keep the rule on and document the convention in your tool descriptions, or disable.

How the check works under the hood

For each tool, mcpolish splits the name on underscores and takes the first token as the verb. It maps each verb to its canonical form. It counts how often each canonical form is used in the server.

For any tool whose verb is a synonym (not already canonical) and whose canonical form is also used by at least one other tool, the rule fires.

A single-tool server is silent.

  • MP010 generic-tool-name: catches the verb being too short on its own.
  • MP011 redundant-prefix: removes the namespace prefix before MP012 looks at the verb.

References