# MCP tools

Live endpoint: `https://mcp.fulldatasets.com/mcp`. Setup: [Connect MCP](/docs/mcp).

Each tool is a thin pass-through to REST. Errors come back as the API JSON (`error.code`) inside the tool text.

Call **one** tool. Do not scrape HTML docs.

## `lookup_isbn`

Maps to `GET /v1/isbn/{isbn}`.

Use when the user (or a row) has an ISBN-10 or ISBN-13. Do not use `search_books` for an ISBN.

| Argument | Required | Notes |
|---|---|---|
| `isbn` | yes | Hyphens ok |

Returns a [book object](/docs/data-model). Prefer `contributors[].id` (`fds_au_…`) when you need to fetch or link an author.

## `resolve_book`

Maps to `POST /v1/match`.

Use when the user named a book and you need *the* edition. Take `candidates[0]`.

| Argument | Required | Notes |
|---|---|---|
| `title` | one of `title` or `isbn` | |
| `isbn` | one of `title` or `isbn` | Short-circuits to `exact_isbn` |
| `author` | no | Rank filter; not AND’d into FTS |
| `kind` | no | Prefer primary unless `graphic` / `any` |
| `limit` | no | Default `10`, max `25` |

## `search_authors`

Maps to `GET /v1/authors/search`.

Use for an author-only query. Do not put the name into `search_books`.

| Argument | Required | Notes |
|---|---|---|
| `q` | yes | Name or prefix |
| `limit` | no | Default `20` |

## `recommend_books`

Maps to `POST /v1/recommend`.

Content-similar works from seeds. Not “readers also liked.” Resolve messy titles with `resolve_book` first if you need to.

| Argument | Required | Notes |
|---|---|---|
| `seeds` | yes | `{ isbn }`, `{ id }`, or `{ title, author }` |
| `limit` | no | Default `10` |
| `kind` | no | Follows seed majority when omitted |
| `same_author` | no | `cap` or `prefer` |

## `get_book`

Maps to `GET /v1/books/{id}`.

| Argument | Required | Notes |
|---|---|---|
| `id` | yes | `fds_ed_…` |

## `get_work`

Maps to `GET /v1/works/{id}`.

| Argument | Required | Notes |
|---|---|---|
| `id` | yes | `fds_wk_…` |

Use when you already have a work id and want the work record / synopsis. Book tools already include the parent `description`.

## `search_books`

Maps to `GET /v1/books/search`.

Browse or filter. Not the first choice for a known title.

| Argument | Required | Notes |
|---|---|---|
| `q` | yes | Title-ish query. Not a genre name |
| `author` | no | Name filter after title match |
| `year` | no | Number |
| `language` | no | e.g. `eng` |
| `subject` | no | Exact raw OL tag |
| `genre` | no | Closed facet (`fantasy`, `science_fiction`, …) |
| `kind` | no | Default prefers primary |
| `limit` | no | Default `20`, max `100` |

## `get_changes`

Maps to `GET /v1/changes`.

| Argument | Required | Notes |
|---|---|---|
| `since` | yes | Cursor |
| `limit` | no | Default `100`, max `1000` |

Empty on release `2026-09.2`.

## Not exposed

| REST | Why |
|---|---|
| `GET /v1/authors/:id` | Use `search_authors` for names; call REST if you already have `fds_au_…` |
| Bulk parquet | Call REST [`/v1/datasets/books/releases/latest`](/docs/bulk) |
