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

# Tools over MCP

> What's exposed, how names map, and what it costs

## What's exposed

**800+ tools on the site.** If a tool page's **Builder** menu shows "MCP", an agent can call it.

The rest run entirely in the browser — webcam capture, some PDF and image editing — and have no server-side equivalent. Calling one returns `tool_not_allowed`, so an agent knows to stop retrying and send the user to the website.

## Name mapping

MCP tool names can't contain `/`, so nested slugs use a double underscore:

```
html-generator/button   →   html-generator__button
converters/color/hex-to-rgb   →   converters__color__hex-to-rgb
```

Flat slugs are unchanged.

## Finding and running a tool

A hosted session lists five tools, not all — see [the overview](/docs/mcp/overview) for why. Three calls get from "convert a CSV" to a result:

<Steps>
  <Step title="search_tools">
    ```json theme={"system"}
    { "query": "csv to json", "limit": 3 }
    ```

    Returns:

    ```json theme={"system"}
    {
      "tools": [
        {
          "name": "csv-to-json-converter",
          "title": "CSV to JSON Converter",
          "description": "Convert CSV data to JSON…",
          "credit_cost": 3
        }
      ]
    }
    ```
  </Step>

  <Step title="describe_tool">
    ```json theme={"system"}
    { "name": "csv-to-json-converter" }
    ```

    Returns:

    ```json theme={"system"}
    {
      "name": "csv-to-json-converter",
      "slug": "csv-to-json-converter",
      "title": "CSV to JSON Converter",
      "credit_cost": 3,
      "credit_cost_multiplier_field": null,
      "input_schema": {
        "type": "object",
        "required": ["ioCsvInput"],
        "properties": { "ioCsvInput": { "type": "string" } }
      },
      "output_schema": { "...": "..." },
      "docs_url": "https://iotools.cloud/tool/csv-to-json-converter/"
    }
    ```
  </Step>

  <Step title="run_tool">
    ```json theme={"system"}
    { "name": "csv-to-json-converter", "inputs": { "ioCsvInput": "a,b\n1,2" } }
    ```

    Charged 3 credits — exactly what `describe_tool` quoted.
  </Step>
</Steps>

Search and describe are free. Always describe before you run: field names aren't guessable.

`credit_cost_multiplier_field` names the input that multiplies the price on per-unit tools (`ioCount` on the name generators, at 2 credits a name). `null` for the flat-priced majority.

Connect to `?listing=full` to get all supported tools with their own schemas instead — worth it only if your client loads tools lazily. Either way a tool can be called by its own name directly.

Over REST the equivalents are [`GET /v1/tools/search`](/docs/api-reference) and `GET /v1/tools/list`.

## Inputs

Inputs use the same names as the REST API (`ioInputString`, `ioCase`, …), advertised through `describe_tool`'s `input_schema` — or, under `?listing=full`, through each tool's own `inputSchema`. They are the same object either way.

## Results

A successful call returns both text content and `structuredContent` — the same `outputs` object REST returns, so an agent can read fields by name.

Failures come back as an MCP error result carrying the [same error codes](/docs/concepts/errors) as REST, as `code: text`:

| `code`                 | Example text                                                                  |
| ---------------------- | ----------------------------------------------------------------------------- |
| `validation_error`     | `{"ioBase64String":"Required"}`                                               |
| `tool_not_allowed`     | `"Background Remover" is available on iotools.cloud but has no API endpoint.` |
| `insufficient_credits` | `0 remaining`                                                                 |

Parse the prefix up to the first colon — the text after it varies by code (a field map, a sentence, a short phrase) and isn't guaranteed stable.

## Checking your balance

Alongside the three above, hosted MCP sessions get two tools that aren't from the catalog. `get_credits` takes no arguments:

```json theme={"system"}
{
  "tier": "member",
  "metered": true,
  "credits": {
    "used": 412,
    "limit": 1000,
    "remaining": 588,
    "period": "month",
    "resets_at": "2026-08-01T00:00:00.000Z"
  },
  "rate_limit": { "requests_per_minute": 60 }
}
```

It **costs no credits**, so an agent can check whether it can afford an expensive tool without paying for the answer. It still takes your per-minute rate limit — use it before a batch, not on a loop.

It is not offered over the local stdio server, which runs on your own machine with no API key and no metering, and so has no balance to report.

## Reading your usage history

And the fifth, `get_usage` — also no arguments:

```json theme={"system"}
{
  "days": 30,
  "credits": {
    "used": 412,
    "limit": 1000,
    "remaining": 588,
    "period": "month",
    "resets_at": "2026-08-01T00:00:00.000Z"
  },
  "items": [
    { "day": "2026-07-28", "slug": "ai-writer", "title": "AI Writer",
      "surface": "api", "credits": 24, "runs": 1 },
    { "day": "2026-07-27", "slug": "case-converter", "title": "String Case Converter",
      "surface": "mcp", "credits": 3, "runs": 1 }
  ]
}
```

What the balance doesn't tell you is what it went on. No credits, last 30 days of spend — one row per tool per day per surface (`web`, `api`, `mcp`), so browser and REST use show up here too. Same stdio carve-out as `get_credits`.

`credits` is the same object `get_credits` returns, from the same builder, so the two can't quote different numbers — it's here because spend and balance answer each other's obvious follow-up. It's `null` only on an unmetered deployment. Use `get_credits` when the balance is all you want: it also carries your rate limit and per-plan credit floor.

Over REST, [`GET /v1/me/usage`](/docs/api-reference) returns the history alone — pair it with `GET /v1/me/credits` for the balance.

## Cost

Every tool call is metered and refunded on failure — see [Credits](/docs/concepts/credits) for the per-plan floor. `run_tool` costs the same as calling the tool directly: no surcharge, no discount. Listing is free, and so are `search_tools`, `describe_tool`, `get_credits` and `get_usage`.
