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

# Meilisearch

> Connect Meilisearch to your Atako agents — 13 read and 7 write actions.

Let your agents search and manage your Meilisearch instance — run searches (including facets and multi-index), read, add, update and delete documents, create indexes, tune index settings and follow asynchronous tasks.

## Connection

* **Authentication**: API key.
* **Required settings**:
  * **Meilisearch instance URL** — Host of your instance, without https\:// or trailing slash. Meilisearch Cloud: Project → Overview, e.g. ms-xxxx.par.meilisearch.io. Self-hosted: a public HTTPS domain on the default port.

> [!NOTE]
>
> Meilisearch Cloud: open your project → Settings → API Keys and copy the Default Admin API Key (or the Default Read-Only Admin API Key for an agent that only reads) — never the Master Key. Self-hosted: create a key with POST /keys using your master key and give it only the actions you need (e.g. search, documents.*, indexes.*, settings.*, tasks.*, stats.get, version). Then enter the instance URL host (Cloud: Project → Overview, e.g. ms-xxxx.par.meilisearch.io).
>
> See [Meilisearch's documentation](https://www.meilisearch.com/docs/reference/api/authorization).

## Read actions (13)

| Action | Description |
| - | - |
| `facet_search` | Search among the values of one facet (read-only, not a write) — e.g. autocomplete of a category. Arguments: index\_uid (string), facetName (string, attribute listed in filterableAttributes), facetQuery (string, text to match in facet values; omit for all), q (string, restrict to documents matching this query), filter (string or array), matchingStrategy ("last"\|"all"\|"frequency"). Returns \{ facetHits: \[\{ value, count }] }. |
| `get_document` | Get one document by its primary-key value. Arguments: index\_uid (string), document\_id (string, the primary-key value; digits, letters, "-" and "\_"), fields (array of strings, attributes to return, optional). |
| `get_documents` | List documents of an index (read-only, not a write; uses POST /documents/fetch). Arguments: index\_uid (string), limit (integer 1-1000, default 20), offset (integer >= 0), fields (array of strings, attributes to return), ids (array of strings, document ids), filter (string or array, attributes must be in filterableAttributes), sort (array of "attr:asc\|desc"). Returns \{ results, offset, limit, total }. |
| `get_index` | Get one index (uid, primaryKey, createdAt, updatedAt). Argument: index\_uid (string, from list\_indexes). |
| `get_index_stats` | Get the statistics of one index: number of documents, indexing state and the distribution of fields. Argument: index\_uid (string). |
| `get_settings` | Get all settings of an index (searchable/filterable/sortable/displayed attributes, ranking rules, stop words, synonyms, typo tolerance, faceting, pagination…). Argument: index\_uid (string). The embedders block is not returned. |
| `get_stats` | Get global statistics: database size and, for each index, its number of documents and whether it is being indexed. No arguments. |
| `get_task` | Get one task: status ("enqueued", "processing", "succeeded", "failed", "canceled"), type, details and, when failed, the error. Argument: task\_id (integer >= 0, the taskUid returned by a write action). Poll until the status is final. |
| `get_version` | Get the Meilisearch version of the instance (commitSha, commitDate, pkgVersion). No arguments. Also checks the API key. |
| `list_indexes` | List indexes (uid, primaryKey, createdAt, updatedAt) with pagination. Returns \{ results, offset, limit, total }. |
| `list_tasks` | List tasks (most recent first) with optional filters. Arguments (all optional): statuses (array of "enqueued"\|"processing"\|"succeeded"\|"failed"\|"canceled"), types (array of strings, e.g. "documentAdditionOrUpdate", "documentDeletion", "settingsUpdate", "indexCreation"), indexUids (array of strings), uids (array of integers, task uids), limit (integer 1-1000, default 20), from (integer, task uid to start from). Returns \{ results, total, limit, from, next }. |
| `multi_search` | Run several searches (read-only, not a write) in one call, possibly on different indexes. Argument: queries (array of 1-20 objects, each \{ indexUid: string, q?, filter?, sort?, limit?, offset?, page?, hitsPerPage?, attributesToRetrieve?, attributesToSearchOn?, facets?, matchingStrategy?, rankingScoreThreshold?, hybrid? } with the same types as the search action). Returns \{ results: \[one search result per query, with indexUid] }. |
| `search` | Run a search (read-only, not a write) in one index. Arguments: index\_uid (string), q (string query), filter (string or array), sort (array of "attr:asc\|desc"), limit (integer), offset (integer), page/hitsPerPage (integers), attributesToRetrieve (array of strings), attributesToSearchOn (array of strings), facets (array of strings), matchingStrategy ("last"\|"all"\|"frequency"), rankingScoreThreshold (number 0-1), hybrid (\{ embedder, semanticRatio }). Returns \{ hits, query, processingTimeMs, estimatedTotalHits \| totalHits, facetDistribution? }. |

## Write actions (7)

| Action | Description |
| - | - |
| `add_or_replace_documents` | Add documents, REPLACING any existing document with the same primary key entirely. Arguments: index\_uid (string; created on the fly if it does not exist), documents (array of 1-500 JSON objects, each with the primary-key field), primaryKey (string, optional, only used when the index has none yet). Asynchronous: answers 202 with \{ taskUid, indexUid, status: "enqueued" }; follow it with get\_task (taskUid) until status is "succeeded" or "failed". |
| `add_or_update_documents` | Add documents, or UPDATE (merge) the fields of existing documents with the same primary key, keeping their other fields. Arguments: index\_uid (string; created on the fly if it does not exist), documents (array of 1-500 JSON objects, each with the primary-key field), primaryKey (string, optional, only used when the index has none yet). Asynchronous: answers 202 with \{ taskUid, indexUid, status: "enqueued" }; follow it with get\_task (taskUid) until status is "succeeded" or "failed". |
| `cancel_tasks` | Cancel enqueued or processing tasks matching the filters (already finished tasks are untouched). At least one filter is required. Arguments: uids (array of integers, task uids), statuses (array of "enqueued"\|"processing"), types (array of strings, e.g. "documentAdditionOrUpdate"), indexUids (array of strings). Answers with a taskCancelation task: follow it with get\_task. |
| `create_index` | Create an index. Arguments: uid (string, letters/digits/"-"/"\_", 1-400 characters), primaryKey (string, optional: the document field used as unique id; inferred from the first documents when omitted). Asynchronous: answers 202 with \{ taskUid, indexUid, status: "enqueued" }; follow it with get\_task (taskUid) until status is "succeeded" or "failed". |
| `delete_document` | Delete ONE document by its primary-key value. Arguments: index\_uid (string), document\_id (string, the primary-key value; digits, letters, "-" and "\_"). Asynchronous: answers 202 with \{ taskUid, indexUid, status: "enqueued" }; follow it with get\_task (taskUid) until status is "succeeded" or "failed". |
| `delete_documents_by_filter` | Delete every document matching a filter. The filter is REQUIRED (there is no "delete all"). Arguments: index\_uid (string), filter (string or array; attributes must be in filterableAttributes, e.g. "status = archived"). Asynchronous: answers 202 with \{ taskUid, indexUid, status: "enqueued" }; follow it with get\_task (taskUid) until status is "succeeded" or "failed". |
| `update_settings` | Update index settings (only the given keys change; null resets a key to its default). Re-indexes the documents when searchable/filterable/ranking settings change. Arguments: index\_uid (string), then any of: searchableAttributes (array of strings), displayedAttributes (array of strings), filterableAttributes (array of strings), sortableAttributes (array of strings), rankingRules (array of strings), stopWords (array of strings), synonyms (object: word -> array of strings), distinctAttribute (string), typoTolerance (object \{ enabled?: boolean, minWordSizeForTypos?: \{ oneTypo?: integer, twoTypos?: integer }, disableOnWords?: array of strings, disableOnAttributes?: array of strings }), pagination (object \{ maxTotalHits: integer }), faceting (object \{ maxValuesPerFacet?: integer, sortFacetValuesBy?: object word -> "alpha"\|"count" }), searchCutoffMs (integer), dictionary (array of strings), separatorTokens (array of strings), nonSeparatorTokens (array of strings). At least one setting is required. Asynchronous: answers 202 with \{ taskUid, indexUid, status: "enqueued" }; follow it with get\_task (taskUid) until status is "succeeded" or "failed". |

## Permissions

Every action above must be explicitly granted to an agent before it can be used. See [Permissions](https://docs.atako.ai/integrations/permissions.md) for the grant model and [Security](https://docs.atako.ai/integrations/security.md) for how credentials are protected.

***

*Last reviewed against the provider API: October 2026.*


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.