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

# Tools

> Every tool the Geoptie MCP server exposes, grouped by what it works on.

The server exposes 39 tools, one for each operation in the [API reference](/docs/api-reference): 20 that read and 19 that write.

You do not normally need tool names. Ask in plain English and your assistant picks the tool. This page is for writing a skill, debugging a workflow, or checking what the server can do before you connect it. For questions worth asking and the tool chains behind them, see [Recipes](/docs/mcp/recipes).

Every tool carries the standard MCP annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`), so a client can tell reads from writes and ask you before doing something that cannot be undone. Full argument schemas come from the server itself through `tools/list`, so they are always the live ones.

<Info>
  Almost every tool takes a `brand_id`. Start with `list_brands` to get the ids this key can reach, then pass one into the others.
</Info>

<Warning>
  Tools marked **costs money** run a model on your account. Their descriptions carry the per-minute and per-hour limits, and your assistant should ask you before calling one repeatedly.
</Warning>

## Brands

| Tool           | Access | What it does   |
| -------------- | ------ | -------------- |
| `get_brand`    | Read   | Get a brand    |
| `list_brands`  | Read   | List brands    |
| `create_brand` | Create | Create a brand |

## Prompts

| Tool                   | Access | What it does                           |
| ---------------------- | ------ | -------------------------------------- |
| `get_prompt`           | Read   | Get a prompt                           |
| `list_answers`         | Read   | Answers for a prompt                   |
| `list_prompt_mentions` | Read   | Brands mentioned in a prompt's answers |
| `list_prompts`         | Read   | List a brand's prompts                 |
| `track_prompts`        | Create | Start tracking prompts                 |
| `untrack_prompt`       | Delete | Stop tracking a prompt                 |
| `update_prompt`        | Update | Assign or clear a prompt's topic       |

## Visibility

| Tool                   | Access | What it does     |
| ---------------------- | ------ | ---------------- |
| `get_brand_visibility` | Read   | Brand visibility |

## Citations

| Tool                 | Access | What it does                          |
| -------------------- | ------ | ------------------------------------- |
| `get_citation_trend` | Read   | Citation trend for one domain or page |
| `list_citations`     | Read   | Citations for a brand                 |
| `list_cited_domains` | Read   | Most-cited domains                    |
| `list_cited_urls`    | Read   | Most-cited pages                      |

## Competitors

| Tool               | Access | What it does                      |
| ------------------ | ------ | --------------------------------- |
| `list_competitors` | Read   | Your brand versus its competitors |

## Topics

| Tool           | Access | What it does   |
| -------------- | ------ | -------------- |
| `list_topics`  | Read   | List topics    |
| `create_topic` | Create | Create a topic |
| `delete_topic` | Delete | Delete a topic |
| `rename_topic` | Update | Rename a topic |

## Recommendations

| Tool                       | Access | What it does                             |
| -------------------------- | ------ | ---------------------------------------- |
| `list_recommendations`     | Read   | List recommendations                     |
| `delete_recommendation`    | Delete | Delete a recommendation                  |
| `generate_recommendations` | Create | Generate recommendations **costs money** |
| `update_recommendation`    | Update | Complete, dismiss or restore             |

## Audit reports

| Tool                  | Access | What it does                 |
| --------------------- | ------ | ---------------------------- |
| `get_audit_report`    | Read   | Get an audit report          |
| `list_audit_reports`  | Read   | List audit reports           |
| `create_audit_report` | Create | Run an audit **costs money** |
| `delete_audit_report` | Delete | Delete an audit report       |

## Content generations

| Tool                | Access | What it does                                     |
| ------------------- | ------ | ------------------------------------------------ |
| `get_generation`    | Read   | Get a generation                                 |
| `list_generations`  | Read   | List generations                                 |
| `create_generation` | Create | Generate a brief **costs money**                 |
| `delete_generation` | Delete | Delete a generation                              |
| `generate_draft`    | Create | Write the article from its brief **costs money** |
| `update_generation` | Update | Update a generation                              |

## Content optimizations

| Tool                   | Access | What it does                                     |
| ---------------------- | ------ | ------------------------------------------------ |
| `get_optimization`     | Read   | Get an optimization                              |
| `list_optimizations`   | Read   | List optimizations                               |
| `create_optimization`  | Create | Analyse a page or pasted content **costs money** |
| `delete_optimization`  | Delete | Delete an optimization                           |
| `rescore_optimization` | Create | Re-score an optimization **costs money**         |

## Paging

List tools return one page and, when there is more, a `next_cursor`. Pass it back as `cursor` to get the next page. Nothing pages automatically: one tool call is one request, which is what keeps a runaway loop inside your rate limit.

`list_answers` returns 10 rows by default rather than the API's 100, because a hundred full AI answers is about 300KB and will not fit in an assistant's context. Raise `limit` if you need to and your client can take it.

## Errors

A failed tool call comes back as an error with the API's own reason, plus a request id you can quote to support. See [Errors](/docs/errors) for the full list of codes.

| You will see                | Meaning                                         | What to do                           |
| --------------------------- | ----------------------------------------------- | ------------------------------------ |
| `401 invalid_api_key`       | The key is unknown or revoked                   | Create a new key                     |
| `402 subscription_required` | The subscription is not active                  | Update billing in the dashboard      |
| `403 brand_scope_forbidden` | A brand-scoped key tried to reach another brand | Use a workspace key                  |
| `404 not_found`             | The id does not exist in this workspace         | Check it with the matching list tool |
| `429 endpoint_rate_limited` | Too many calls to this tool                     | Wait the stated number of seconds    |

If a response is too large to return, the server says so and tells you which argument to narrow. Nothing is truncated, so a short answer is never a silent one.
