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¶
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:
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.
Related rules¶
- 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¶
- Wang et al., 2026. arXiv:2602.18914, section 4.3.