# MCP server loads but the agent never calls the tool

> A server can load while the tool stays uncalled. A short description, or one that only repeats the name, is one place to look.

Page date 2026-10-17. Rules version `2026-10-17.1`. The HTML page, which includes the same checker, is [here](https://agentghostedme.com/mcp-server-loads-but-the-agent-never-calls-it.html).

On 2026-10-13, [@waldekm](https://x.com/waldekm/status/2109907029963780339) wrote: "My MCP server loads but the agent never calls it." Toolcard recorded that sentence on 2026-10-17. It is the only verbatim quote Toolcard uses from the post.

Toolcard's own summary of the note, already on the homepage, is to write the name and description in the words developers use. The post states no character count. 40 is Toolcard's cutoff.

These checks read the name and the description in the request. A loaded server is outside what a check can see. An empty `findings` list means these checks did not fire. It does not mean the tool is good, and it does not mean an agent will call it.

## What the description checks flag

Finding `thin-description` fires when the description is omitted or shorter than 40 characters after trimming. Finding `description-echoes-name` fires when every remaining word in the description is already in the name. Letter case and `_` do not count as a difference, so `Lookup invoice` echoes `lookup_invoice`.

Before that comparison, Toolcard drops these words: a, an, the, to, of, and, or, for, in, on. `Lookup the invoice` is 18 characters and still returns both `thin-description` and `description-echoes-name`.

The name check is separate. `getUser` with "Get a user" is endpoint-shaped and also returns `endpoint-shaped-name`. That finding is explained on [MCP tools mapped 1:1 onto a REST API](https://agentghostedme.com/mcp-tools-mapped-1-to-1-onto-a-rest-api.md).

This table is `POST /v1/check` on this server on 2026-10-17. Each body included one input property, so the schema checks stayed quiet. `lookup_invoice` is not endpoint-shaped. "Omitted" means the JSON had no description field.

| Name | Description | Characters | Finding ids |
| --- | --- | --- | --- |
| `lookup_invoice` | omitted | not sent | `thin-description` |
| `lookup_invoice` | Lookup invoice | 14 | `thin-description`, `description-echoes-name` |
| `lookup_invoice` | Find a bill by its number. | 26 | `thin-description` |
| `lookup_invoice` | Find a bill by the number on this form. | 39 | `thin-description` |
| `lookup_invoice` | Find a bill by the number on a tax form. | 40 | none |
| `lookup_invoice` | Lookup invoice lookup invoice lookup invoice. | 45 | `description-echoes-name` |
| `lookup_invoice` | Find a bill from the number printed on the PDF. | 47 | none |
| `getUser` | Get a user | 10 | `endpoint-shaped-name`, `thin-description`, `description-echoes-name` |

The 45-character row only repeats the name. It passes the character cutoff and still returns `description-echoes-name`. The 40-character row returns `findings: []`. A description can clear this cutoff and still be a weak description. Toolcard does not treat that result as approval.

## Check

`lookup_invoice` with the description "Lookup invoice" returns `shape: not-endpoint-shaped` and finding ids `thin-description` and `description-echoes-name`. `stored` is false.

```
curl -s -X POST https://agentghostedme.com/v1/check \
  -H 'content-type: application/json' \
  -d '{"name":"lookup_invoice","description":"Lookup invoice","inputSchema":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}'
```

`lookup_invoice` with "Find a bill from the number printed on the PDF." is 47 characters. It returns `shape: not-endpoint-shaped` and `findings: []`. Toolcard does not treat that result as approval.

Choosing which parameters to expose is a separate question. It is answered on [Picking the right subset of parameters](https://agentghostedme.com/picking-the-right-subset-of-parameters.md).

Whether an agent later called the tool is a separate report. `POST /v1/outcomes` stores the name, a SHA-256 of the description if you sent one, and `called` or `ignored`. The [public summary](https://agentghostedme.com/v1/outcomes/summary) is counts only.

Rule list: [GET /v1/rules](https://agentghostedme.com/v1/rules). Home: [Toolcard](https://agentghostedme.com/).

Toolcard is not affiliated with the people or the projects cited.

[Privacy](https://agentghostedme.com/privacy.html) · [Terms](https://agentghostedme.com/terms.html)
