---
title: "OpenSearch MCP server for AI agents - actionlake"
description: "Give Claude 594 OpenSearch actions through one MCP server: security, indices, ML, core. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/opensearch
updated: 2026-10-11
---

Connectors · Developer & infrastructure

# OpenSearch MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to OpenSearch and the rest of your systems. It gives your agent 594 OpenSearch actions (321 reads, 199 writes and 74 that wait for a confirmation) and holds the OpenSearch credential itself, so the agent never does. It paces OpenSearch's limits and records every call.

[Connect OpenSearch free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "opensearch.cat.nodes",
  intent: "check which OpenSearch account is connected"
}
# Get basic statistics about the performance of cluster nodes · read · 1 upstream call
```

- 594 actions in one signed file
- 321 read look, never change
- 199 write create and update
- 74 wait for a yes destructive, confirmed first

Set up

## Connect OpenSearch in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect OpenSearch.
   Username and secret. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `username` OpenSearch user name (an internal user of the security plugin, such as doadmin on DigitalOcean)
   - `password` That user's password
   - `host` Where your OpenSearch lives: your host
   ```
   account { op: "connections.requirements", service: "opensearch" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "opensearch.cat.nodes" }
   # get basic statistics about the performance of cluster nodes · read · 1 upstream call
   check { action: "opensearch.nodes.reload_secure_settings", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

OpenSearch at a glance

**Sign-in**

Username and secret. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.

**You provide**

`username` `password`

**Setup fields**

`host`

**Limits we pace to**

600 calls a minute, per connection

**API covered**

OpenSearch API spec 0.3.0 (OpenSearch 2.16.0+), at your OpenSearch instance's API base URL, which you enter when connecting

**Built from**

OpenSearch's documentation, read 1 October 2026[OpenAPI spec (GitHub)](https://github.com/opensearch-project/opensearch-api-specification/releases/download/main-latest/opensearch-openapi.yaml)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

Not cached: every read goes to the vendor

**Shared entities**

2, so ask can line OpenSearch up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in OpenSearch.

594 actions in 36 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **321** read look, never change
- **199** write create and update
- **74** destructive wait for a confirmation

1. ### Security
   77
   34 read · 34 write · 9 destructive
   Retrieve all internal users · Retrieve all internal users · Get all roles · Retrieve information about the specified internal user
2. ### Indices
   76
   41 read · 30 write · 5 destructive
   Get information about any matching indexes, aliases, and data streams · Create an index · Update an alias to point to a new index when the existing index is considered to be too large or too old · Update an alias to point to a new index when the existing index is considered to be too large or too old (by new index)
3. ### ML
   73
   33 read · 27 write · 13 destructive
   Register an agent · Get a model · Register a model · Register model metadata
4. ### Core
   54
   34 read · 14 write · 6 destructive
   Get information about the indexes and shards that a search request would be executed against · Get information about the indexes and shards that a search request would be executed against (by index) · Get the information about the capabilities of fields among multiple indexes · Get the information about the capabilities of fields among multiple indexes (by index)
5. ### LTR
   47
   19 read · 20 write · 8 destructive
   Create the default feature store · Create a model from an existing feature set in the default feature store · Create a model from an existing feature set in the default feature store (by store) · Create a new feature store with the specified name
6. ### Cat
   34
   34 read · 0 write · 0 destructive
   Get basic statistics about the performance of cluster nodes · Get information about custom node attributes · Get cluster-wide thread pool statistics per node · Get cluster-wide thread pool statistics per node (by thread pool patterns)
7. ### Cluster
   27
   17 read · 6 write · 4 destructive
   Get a list of pending cluster-level tasks, such as index creation, mapping updates, or new allocations · Get one or more component templates · Explain how shards are allocated in the current cluster and provides an explanation for why unassigned shards… · Get one or more component templates (by name)
8. ### Search relevance
   25
   14 read · 6 write · 5 destructive
   Get judgments · Get the search configurations · Create a judgment · Create a search configuration

**28 more areas · 181 actions**

- Ism **16**
- Nodes **15**
- Snapshot **14**
- Replication **11**
- Flow framework **10**
- KNN **10**
- Notifications **9**
- Geospatial **8**
- SM **8**
- Transforms **8**
- Ingest **7**
- Observability **7**
- Rollups **6**
- SQL **6**
- Query **5**
- WLM **5**
- Asynchronous search **4**
- List **4**
- Neural **4**
- PPL **4**
- Search pipeline **4**
- Tasks **4**
- Dangling indices **3**
- Ingestion **3**
- Security analytics **3**
- Insights **1**
- Remote store **1**
- Ubi **1**

Top actions

## The OpenSearch API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 166 of OpenSearch's 288 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `opensearch.cat.nodes` Get basic statistics about the performance of cluster nodes | Get basic statistics about the performance of cluster nodes | read | `infra.instance.list` 18 connectors |
| `opensearch.nodes.info` Get information about nodes in the cluster | Get information about nodes in the cluster | read | `infra.instance.list` 18 connectors |
| `opensearch.nodes.reload_secure_settings` Reload secure settings | Reload secure settings | write | `infra.instance.update` 15 connectors |
| `opensearch.cat.indices` List indices with health, document count and size | List indices with health, document count and size | read | `infra.search_index.list` 5 connectors |
| `opensearch.security.get_users` Retrieve all internal users | Retrieve all internal users | read | `identity.user.list` 474 connectors |
| `opensearch.security.get_users_legacy` Retrieve all internal users | Retrieve all internal users | read | `identity.user.list` 474 connectors |
| `opensearch.cat.snapshots` List all of the snapshots stored in a specific repository | List all of the snapshots stored in a specific repository | read | `infra.snapshot.list` 12 connectors |
| `opensearch.cat.snapshots_by_repository` List all of the snapshots stored in a specific repository (by repository) | List all of the snapshots stored in a specific repository (by repository) | read | `infra.snapshot.list` 12 connectors |
| `opensearch.security.get_roles` Get all roles | Get all roles | read | `identity.role.list` 184 connectors |
| `opensearch.security.authtoken` Get the authorization token for the current user | Get the authorization token for the current user | write | `identity.api_key.create` 100 connectors |
| `opensearch.security.generate_obo_token` Generate a `On-Behalf-Of` token for the current user | Generate a `On-Behalf-Of` token for the current user | write | `identity.api_key.create` 100 connectors |
| `opensearch.security.delete_user` Delete the specified internal user | Delete the specified internal user | destructive | `identity.user.delete` 253 connectors |

Try it

## Prompts to paste into Claude.

Each one names the OpenSearch actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Get basic statistics about the performance of cluster nodes in OpenSearch and tell me what stands out.
   calls `opensearch.cat.nodes`
2. Write write
   Reload secure settings in OpenSearch. Show me exactly what you will send before you save it.
   calls `opensearch.nodes.reload_secure_settings`

Governance for OpenSearch

## Destructive actions wait for a yes.

74 OpenSearch actions are destructive. The first 10:

- Delete the specified internal user `opensearch.security.delete_user`
- Delete the specified user `opensearch.security.delete_user_legacy`
- Delete a model `opensearch.ml.delete_model`
- Delete a snapshot `opensearch.snapshot.delete`
- Used to delete a particular model in the cluster `opensearch.knn.delete_model`
- Delete the specified role `opensearch.security.delete_role`
- Delete an agent `opensearch.ml.delete_agent`
- Delete a channel configuration `opensearch.notifications.delete_config`
- Delete multiple channel configurations `opensearch.notifications.delete_configs`
- Delete an index `opensearch.indices.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do opensearch.security.delete_user confirm_policy: **human**

Delete the specified internal user?

**intent:** the user asked me to delete the specified internal user

run suspended · waiting for a named person · key _opensearch-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "opensearch-agent",
  allowed_actions: ["opensearch.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "opensearch.security.delete_user", approver: "lead@example.com" },
    { match: "opensearch.security.delete_user_legacy", approver: "lead@example.com" },
    { match: "opensearch.ml.delete_model", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to OpenSearch only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What OpenSearch costs on actionlake.

Every OpenSearch action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call OpenSearch refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 594 OpenSearch actions
- 594 actions page each page of a long list is one call
- 0 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every OpenSearch action.

594 actions by area: the id your agent calls, what it does, and its effect.

**Security 77**

- `opensearch.security.get_roles` Get all roles read
- `opensearch.security.get_user` Retrieve information about the specified internal user read
- `opensearch.security.get_users` Retrieve all internal users read
- `opensearch.security.get_users_legacy` Retrieve all internal users read
- `opensearch.security.authinfo` Get or updates authentication information for the currently authenticated user read
- `opensearch.security.authtoken` Get the authorization token for the current user write
- and 71 more in this area

**Indices 76**

- `opensearch.indices.create` Create an index write
- `opensearch.indices.resolve_index` Get information about any matching indexes, aliases, and data streams read
- `opensearch.indices.rollover` Update an alias to point to a new index when the existing index is considered to be too large or too old write
- `opensearch.indices.rollover_by_new_index` Update an alias to point to a new index when the existing index is considered to be too large or too old (by new index) write
- `opensearch.indices.add_block` Add a block to an index write
- `opensearch.indices.analyze` Run the analysis process on a text and return the tokens breakdown of the text read
- and 70 more in this area

**ML 73**

- `opensearch.ml.get_model` Get a model read
- `opensearch.ml.register_agents` Register an agent write
- `opensearch.ml.register_model` Register a model write
- `opensearch.ml.register_model_meta` Register model metadata write
- `opensearch.ml.add_agentic_memory` Add agentic memory to a memory container write
- `opensearch.ml.create_connector` Create a standalone connector write
- and 67 more in this area

**Core 54**

- `opensearch.core.field_caps` Get the information about the capabilities of fields among multiple indexes read
- `opensearch.core.field_caps_by_index` Get the information about the capabilities of fields among multiple indexes (by index) read
- `opensearch.core.search_shards` Get information about the indexes and shards that a search request would be executed against read
- `opensearch.core.search_shards_by_index` Get information about the indexes and shards that a search request would be executed against (by index) read
- `opensearch.core.bulk` Index, update or delete many documents in one request write
- `opensearch.core.bulk_by_index` Index, update or delete many documents in one request (by index) write
- and 48 more in this area

**LTR 47**

- `opensearch.ltr.create_default_store` Create the default feature store write
- `opensearch.ltr.create_model_from_set` Create a model from an existing feature set in the default feature store write
- `opensearch.ltr.create_model_from_set_by_store` Create a model from an existing feature set in the default feature store (by store) write
- `opensearch.ltr.create_store` Create a new feature store with the specified name write
- `opensearch.ltr.add_features_to_set` Add features to an existing feature set in the default feature store write
- `opensearch.ltr.add_features_to_set_by_query` Add features to an existing feature set in the default feature store write
- and 41 more in this area

**Cat 34**

- `opensearch.cat.nodeattrs` Get information about custom node attributes read
- `opensearch.cat.nodes` Get basic statistics about the performance of cluster nodes read
- `opensearch.cat.thread_pool` Get cluster-wide thread pool statistics per node read
- `opensearch.cat.thread_pool_by_thread_pool_patterns` Get cluster-wide thread pool statistics per node (by thread pool patterns) read
- `opensearch.cat.aliases` Shows information about aliases currently configured to indexes, including filter and routing information read
- `opensearch.cat.aliases_by_name` Shows information about aliases currently configured to indexes, including filter and routing information (by name) read
- and 28 more in this area

**Cluster 27**

- `opensearch.cluster.allocation_explain` Explain how shards are allocated in the current cluster and provides an explanation for why unassigned shards… read
- `opensearch.cluster.get_component_template` Get one or more component templates read
- `opensearch.cluster.get_component_template_by_name` Get one or more component templates (by name) read
- `opensearch.cluster.pending_tasks` Get a list of pending cluster-level tasks, such as index creation, mapping updates, or new allocations read
- `opensearch.cluster.delete_component_template` Delete a component template destructive
- `opensearch.cluster.delete_decommission_awareness` Recommissions a decommissioned zone destructive
- and 21 more in this area

**Search relevance 25**

- `opensearch.search_relevance.get_judgments` Get judgments read
- `opensearch.search_relevance.get_search_configurations` Get the search configurations read
- `opensearch.search_relevance.put_judgments` Create a judgment write
- `opensearch.search_relevance.put_search_configurations` Create a search configuration write
- `opensearch.search_relevance.delete_experiments` Delete a specified experiment destructive
- `opensearch.search_relevance.delete_judgments` Delete a specified judgment destructive
- and 19 more in this area

**Ism 16**

- `opensearch.ism.change_policy` Update the managed index policy to a new policy write
- `opensearch.ism.change_policy_by_index` Update the managed index policy to a new policy (by index) write
- `opensearch.ism.get_policies` Get the policies read
- `opensearch.ism.put_policies` Create or updates policies write
- `opensearch.ism.add_policy` Add a policy to an index write
- `opensearch.ism.add_policy_by_index` Add a policy to an index (by index) write
- and 10 more in this area

**Nodes 15**

- `opensearch.nodes.info` Get information about nodes in the cluster read
- `opensearch.nodes.info_by_node_id_metric` Get information about nodes in the cluster (by node id, metric) read
- `opensearch.nodes.info_by_node_id_or_metric` Get information about nodes in the cluster (by node id or metric) read
- `opensearch.nodes.stats` Get statistical information about nodes in the cluster read
- `opensearch.nodes.reload_secure_settings` Reload secure settings write
- `opensearch.nodes.reload_secure_settings_by_node_id` Reload secure settings (by node id) write
- and 9 more in this area

**Snapshot 14**

- `opensearch.snapshot.create` Create a snapshot within an existing repository write
- `opensearch.snapshot.get` Get information about a snapshot read
- `opensearch.snapshot.status` Get information about the status of a snapshot read
- `opensearch.snapshot.status_by_repository` Get information about the status of a snapshot (by repository) read
- `opensearch.snapshot.cleanup_repository` Remove any stale data from a snapshot repository write
- `opensearch.snapshot.clone` Create a clone of all or part of a snapshot in the same repository as the original snapshot write
- and 8 more in this area

**Replication 11**

- `opensearch.replication.autofollow_stats` Get information about any auto-follow activity and any replication rules configured on the specified cluster read
- `opensearch.replication.create_replication_rule` Automatically starts the replication on indexes matching a specified pattern write
- `opensearch.replication.follower_stats` Get information about any follower (syncing) indexes on a specified cluster read
- `opensearch.replication.leader_stats` Get information about any replicated leader indexes on a specified cluster read
- `opensearch.replication.delete_replication_rule` Delete the specified replication rule destructive
- `opensearch.replication.pause` Pause the replication of the leader index write
- and 5 more in this area

**Flow framework 10**

- `opensearch.flow_framework.create` Create a new workflow template write
- `opensearch.flow_framework.get` Get a workflow template read
- `opensearch.flow_framework.get_status` Get the current workflow provisioning status read
- `opensearch.flow_framework.update` Update a workflow template that has not been provisioned write
- `opensearch.flow_framework.delete` Delete a workflow template destructive
- `opensearch.flow_framework.deprovision` Deprovision workflow's resources when you no longer need them destructive
- and 4 more in this area

**KNN 10**

- `opensearch.knn.get_model` Used to retrieve information about models present in the cluster read
- `opensearch.knn.search_models` Use an OpenSearch query to search for models in the index read
- `opensearch.knn.train_model` Create and train a model that can be used for initializing k-NN native library indexes during indexing write
- `opensearch.knn.train_model_by_model_id` Create and train a model that can be used for initializing k-NN native library indexes during indexing (by model id) write
- `opensearch.knn.delete_model` Used to delete a particular model in the cluster destructive
- `opensearch.knn.stats` Get information about the current status of the k-NN plugin read
- and 4 more in this area

**Notifications 9**

- `opensearch.notifications.create_config` Create channel configuration write
- `opensearch.notifications.get_config` Get a specific channel configuration read
- `opensearch.notifications.get_configs` Get multiple channel configurations with filtering read
- `opensearch.notifications.list_channels` List created notification channels read
- `opensearch.notifications.delete_config` Delete a channel configuration destructive
- `opensearch.notifications.delete_configs` Delete multiple channel configurations destructive
- and 3 more in this area

**Geospatial 8**

- `opensearch.geospatial.delete_ip2geo_datasource` Delete a specific IP2Geo data source destructive
- `opensearch.geospatial.get_ip2geo_datasource` Get one or more IP2Geo data sources, defaulting to returning all if no names specified read
- `opensearch.geospatial.get_ip2geo_datasource_by_name` Get one or more IP2Geo data sources, defaulting to returning all if no names specified (by name) read
- `opensearch.geospatial.put_ip2geo_datasource_settings` Update a specific IP2Geo data source write
- `opensearch.geospatial.geojson_upload_post` Use an OpenSearch query to upload `GeoJSON`, operation will fail if index exists write
- `opensearch.geospatial.geojson_upload_put` Use an OpenSearch query to upload `GeoJSON` regardless if index exists write
- and 2 more in this area

**SM 8**

- `opensearch.sm.create_policy` Create a snapshot management policy write
- `opensearch.sm.explain_policy` Explain the state of the snapshot management policy read
- `opensearch.sm.get_policies` Get all snapshot management policies with optional pagination and filtering read
- `opensearch.sm.get_policy` Get a specific snapshot management policy by name read
- `opensearch.sm.delete_policy` Delete a snapshot management policy destructive
- `opensearch.sm.start_policy` Start a snapshot management policy write
- and 2 more in this area

**Transforms 8**

- `opensearch.transforms.delete` Delete an index transform destructive
- `opensearch.transforms.explain` Get the status and metadata of a transform job read
- `opensearch.transforms.get` Get the status and metadata of a transform job read
- `opensearch.transforms.search` Get the details of all transform jobs read
- `opensearch.transforms.preview` Get a preview of what a transformed index would look like read
- `opensearch.transforms.put` Create an index transform, or update a transform if `if_seq_no` and `if_primary_term` are provided write
- and 2 more in this area

**Ingest 7**

- `opensearch.ingest.delete_pipeline` Delete an ingest pipeline destructive
- `opensearch.ingest.get_pipeline` Get an ingest pipeline read
- `opensearch.ingest.get_pipeline_by_id` Get an ingest pipeline (by id) read
- `opensearch.ingest.processor_grok` Get a list of built-in grok patterns read
- `opensearch.ingest.put_pipeline` Create or updates an ingest pipeline write
- `opensearch.ingest.simulate` Simulate an ingest pipeline with example documents read
- and 1 more in this area

**Observability 7**

- `opensearch.observability.create_object` Create a new observability object write
- `opensearch.observability.get_object` Get specific observability object specified by ID read
- `opensearch.observability.list_objects` Get list of all observability objects read
- `opensearch.observability.update_object` Update an existing observability object write
- `opensearch.observability.delete_object` Delete specific observability object specified by ID destructive
- `opensearch.observability.delete_objects` Delete specific observability objects specified by ID or a list of IDs destructive
- and 1 more in this area

**Rollups 6**

- `opensearch.rollups.delete` Delete an index rollup job configuration destructive
- `opensearch.rollups.explain` Get the execution status information for an index rollup job read
- `opensearch.rollups.get` Get an index rollup job configuration by ID read
- `opensearch.rollups.put` Create or updates an index rollup job configuration write
- `opensearch.rollups.start` Start the execution of an index rollup job write
- `opensearch.rollups.stop` Stop the execution of an index rollup job write

**SQL 6**

- `opensearch.sql.close` Close an open cursor to free server-side resources destructive
- `opensearch.sql.explain` Get the execution plan for a SQL or PPL query read
- `opensearch.sql.query` Query indices with SQL read
- `opensearch.sql.settings` Update SQL plugin settings in the OpenSearch cluster configuration write
- `opensearch.sql.get_stats` Get performance metrics for the SQL plugin read
- `opensearch.sql.post_stats` Get filtered performance metrics for the SQL plugin read

**Query 5**

- `opensearch.query.datasource_retrieve` Get a specific data source by name read
- `opensearch.query.datasources_create` Create a new query data source write
- `opensearch.query.datasources_list` Get a list of all available data sources read
- `opensearch.query.datasources_update` Update an existing query data source write
- `opensearch.query.datasource_delete` Delete a specific data source by name destructive

**WLM 5**

- `opensearch.wlm.create_query_group` Create a new query group and sets the resource limits for the new query group write
- `opensearch.wlm.get_query_group` Get the specified query group read
- `opensearch.wlm.get_query_group_by_name` Get the specified query group (by name) read
- `opensearch.wlm.update_query_group` Update the specified query group write
- `opensearch.wlm.delete_query_group` Delete the specified query group destructive

**Asynchronous search 4**

- `opensearch.asynchronous_search.delete` Delete any responses from an asynchronous search destructive
- `opensearch.asynchronous_search.get` Get partial responses from an asynchronous search read
- `opensearch.asynchronous_search.search` Run an asynchronous search write
- `opensearch.asynchronous_search.stats` Monitors any asynchronous searches that are `running`, `completed`, or `persisted` read

**List 4**

- `opensearch.list.indices` List indices with health, document count and size, page by page read
- `opensearch.list.indices_by_index` List indices with health, document count and size, page by page (by index) read
- `opensearch.list.shards` Get paginated details of shard allocation on nodes read
- `opensearch.list.shards_by_index` Get paginated details of shard allocation on nodes (by index) read

**Neural 4**

- `opensearch.neural.stats` Get information about the current status of the neural-search plugin read
- `opensearch.neural.stats_by_node_id` Get information about the current status of the neural-search plugin (by node id) read
- `opensearch.neural.stats_by_node_id_stat` Get information about the current status of the neural-search plugin (by node id, stat) read
- `opensearch.neural.stats_by_stat` Get information about the current status of the neural-search plugin (by stat) read

**PPL 4**

- `opensearch.ppl.explain` Get the execution plan for a PPL query read
- `opensearch.ppl.get_stats` Get performance metrics for the PPL plugin read
- `opensearch.ppl.post_stats` Get filtered performance metrics for the PPL plugin read
- `opensearch.ppl.query` Query indices with PPL (piped processing language) read

**Search pipeline 4**

- `opensearch.search_pipeline.delete` Delete the specified search pipeline destructive
- `opensearch.search_pipeline.get` Get information about a specified search pipeline read
- `opensearch.search_pipeline.get_by_id` Get information about a specified search pipeline (by id) read
- `opensearch.search_pipeline.put` Create or replaces the specified search pipeline write

**Tasks 4**

- `opensearch.tasks.cancel` Cancel a task, if it can be cancelled through an API destructive
- `opensearch.tasks.cancel_by_task_id` Cancel a task, if it can be cancelled through an API (by task id) destructive
- `opensearch.tasks.get` Get information about a task read
- `opensearch.tasks.list` Get a list of tasks read

**Dangling indices 3**

- `opensearch.dangling_indices.delete_dangling_index` Delete the specified dangling index destructive
- `opensearch.dangling_indices.import_dangling_index` Import the specified dangling index write
- `opensearch.dangling_indices.list_dangling_indices` Get all dangling indexes read

**Ingestion 3**

- `opensearch.ingestion.get_state` Use this API to retrieve the ingestion state for a given index read
- `opensearch.ingestion.pause` Use this API to pause ingestion for a given index write
- `opensearch.ingestion.resume` Use this API to resume ingestion for the given index write

**Security analytics 3**

- `opensearch.security_analytics.get_alerts` Retrieve alerts related to a specific detector type or detector ID read
- `opensearch.security_analytics.get_findings` Retrieve findings related to a specific detector type or detector ID read
- `opensearch.security_analytics.search_finding_correlations` List correlations for a finding read

**Insights 1**

- `opensearch.insights.top_queries` Get the top queries based on the given metric type (latency, CPU, or memory) read

**Remote store 1**

- `opensearch.remote_store.restore` Restore from remote store write

**Ubi 1**

- `opensearch.ubi.initialize` Initialize the UBI indexes write

This index shows a sample of each area. All 594 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The OpenSearch MCP server, answered.

**Is there an OpenSearch MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 594 OpenSearch actions across security, indices, ML and core, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by OpenSearch.

**What do I need to connect OpenSearch?**

OpenSearch user name (an internal user of the security plugin, such as doadmin on DigitalOcean) and That user's password. Plus your host. The free call account { op: "connections.requirements", service: "opensearch" } lists exactly what to paste.

**Can an AI agent delete or change things in OpenSearch?**

Only if its key allows it, and only with an explicit confirmation. 74 OpenSearch actions are destructive, including delete the specified internal user, delete the specified user and delete a model. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my OpenSearch API limit?**

actionlake paces every call to the limits in the OpenSearch service file: 600 calls a minute per connection.

**What does an OpenSearch action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (594 OpenSearch actions page). Cache hits, searches, dry runs and calls OpenSearch refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which OpenSearch API does it cover?**

The OpenSearch API spec 0.3.0 (OpenSearch 2.16.0+) at your OpenSearch instance's API base URL, which you enter when connecting. It is built from OpenSearch's documentation as read on 1 October 2026. 594 actions in 36 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my OpenSearch data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. OpenSearch responses are not cached. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your OpenSearch credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like OpenSearch

Shares the most action names with

- [Elasticsearch 68](https://actionlake.com/connectors/elasticsearch)
- [Vercel 30](https://actionlake.com/connectors/vercel)
- [Postman 22](https://actionlake.com/connectors/postman)
- [Splunk Platform 14](https://actionlake.com/connectors/splunk-platform)
- [MongoDB Atlas 13](https://actionlake.com/connectors/mongodb-atlas)
- [Graylog 12](https://actionlake.com/connectors/graylog)

Joins with, on shared entities

- [NetBox 1](https://actionlake.com/connectors/netbox)
- [DigitalOcean 1](https://actionlake.com/connectors/digitalocean)
- [Appwrite Cloud 1](https://actionlake.com/connectors/appwrite-cloud)
- [Metabase 1](https://actionlake.com/connectors/metabase)
- [Vultr 1](https://actionlake.com/connectors/vultr)
- [Tableau 1](https://actionlake.com/connectors/tableau)

Browse

- [All Developer & infrastructure connectors](https://actionlake.com/connectors/category/developer-and-infrastructure)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by OpenSearch; the name is the vendor's own. Counts are from the OpenSearch service file, version 1.0.0.

## Give your agent OpenSearch today.

[Connect OpenSearch free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/opensearch
More: https://actionlake.com/llms.txt
