# Tool reference

> Every MCP tool, grouped the way an agent works through them, with what each costs.

Source: https://docs.indexzero.site/tools



The MCP server exposes <ToolCount /> tools. They are the same operations the dashboard runs, so anything you can do by clicking, an agent can do by calling. This section documents each tool's arguments, defaults, cost, and behaviour.

<ToolGroups />

## Conventions shared by every tool [#conventions-shared-by-every-tool]

**`projectId`.** Every tool except `whoami`, `list_projects`, and `create_project` takes a `projectId`. Get it from `list_projects`. It scopes the call, supplies the default domain and market, and attributes credit spend. A project id that does not belong to the workspace fails with `Project <id> not found in this workspace.` whether it exists or not.

**Market defaults.** Tools that take `locationCode` (a location code; 2840 is the United States) and `languageCode` (an ISO code such as `en`) fall back to the project's market when you omit them. Pass them to research a different country without changing the project.

**Domain defaults.** Domain and backlink tools take an optional `domain`. When omitted they analyse the project's own domain; pass a competitor's to compare. Domains are bare (`example.com`), with no protocol or path.

**Limits.** Tools that return rows take an optional `limit` with a stated maximum and default. Rows beyond the limit are not returned, and the tool says how many it dropped.

**Cost.** Each tool's description says whether it costs credits. Free tools are marked read-only in their annotations. See [How credits work](/credits).

**Results.** Every result carries the full rows as a text table and as structured content, plus `_meta` with the organization and project ids, a dashboard deep link where relevant, and for paid calls the credits charged and remaining. Missing values render as `—`, booleans as `yes`/`no`, decimals to two places.

**Errors.** Failures come back as tool results marked as errors with a code, a message, and a hint. See [Errors](/reference/errors).

## Free versus paid [#free-versus-paid]

| Free (no provider spend)                                                                                        | Costs credits                                                                                 |
| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| `whoami`, `list_projects`, `create_project`                                                                     | `research_keywords`, `get_keyword_metrics`                                                    |
| `save_keywords`, `list_saved_keywords`                                                                          | `get_domain_overview`, `get_ranked_keywords`, `get_domain_top_pages`, `find_serp_competitors` |
| `get_rank_tracker`, `estimate_rank_tracker_cost`, `add_rank_tracking_keywords`, `remove_rank_tracking_keywords` | `get_backlinks_overview`, `get_backlinks_profile`                                             |
| `get_audit_status`, `get_audit_issues`, `get_audit_pages`                                                       | `search_local_businesses`, `get_local_serp_results`, `get_google_business_questions`          |
| All Search Console, Google Analytics, and PostHog tools                                                         | `run_rank_tracker`, `run_site_audit`                                                          |
|                                                                                                                 | `get_brand_visibility`, `run_ai_prompt`                                                       |

## Asynchronous tools [#asynchronous-tools]

Two tools start work and return before it finishes:

* `run_site_audit` returns an `auditId`. Poll `get_audit_status` until it reports `completed`, then read `get_audit_issues` and `get_audit_pages`.
* `run_rank_tracker` returns a `runId`. Poll `get_rank_tracker` for positions.

Both run the same background workflows the dashboard uses, so a run started by an agent shows up in the app with live progress.
