Skip to content

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.

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
  • 594actionsin one signed file
  • 321readlook, never change
  • 199writecreate and update
  • 74wait for a yesdestructive, 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.

    • usernameOpenSearch user name (an internal user of the security plugin, such as doadmin on DigitalOcean)
    • passwordThat user's password
    • hostWhere 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 callcheck { 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
usernamepassword
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 2026OpenAPI spec (GitHub)
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.

  • 321readlook, never change
  • 199writecreate and update
  • 74destructivewait 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.

ActionWhat it doesEffectSame name in
opensearch.cat.nodesGet basic statistics about the performance of cluster nodesGet basic statistics about the performance of cluster nodesreadinfra.instance.list18 connectors
opensearch.nodes.infoGet information about nodes in the clusterGet information about nodes in the clusterreadinfra.instance.list18 connectors
opensearch.nodes.reload_secure_settingsReload secure settingsReload secure settingswriteinfra.instance.update15 connectors
opensearch.cat.indicesList indices with health, document count and sizeList indices with health, document count and sizereadinfra.search_index.list5 connectors
opensearch.security.get_usersRetrieve all internal usersRetrieve all internal usersreadidentity.user.list474 connectors
opensearch.security.get_users_legacyRetrieve all internal usersRetrieve all internal usersreadidentity.user.list474 connectors
opensearch.cat.snapshotsList all of the snapshots stored in a specific repositoryList all of the snapshots stored in a specific repositoryreadinfra.snapshot.list12 connectors
opensearch.cat.snapshots_by_repositoryList all of the snapshots stored in a specific repository (by repository)List all of the snapshots stored in a specific repository (by repository)readinfra.snapshot.list12 connectors
opensearch.security.get_rolesGet all rolesGet all rolesreadidentity.role.list184 connectors
opensearch.security.authtokenGet the authorization token for the current userGet the authorization token for the current userwriteidentity.api_key.create100 connectors
opensearch.security.generate_obo_tokenGenerate a `On-Behalf-Of` token for the current userGenerate a `On-Behalf-Of` token for the current userwriteidentity.api_key.create100 connectors
opensearch.security.delete_userDelete the specified internal userDelete the specified internal userdestructiveidentity.user.delete253 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. Readread

    Get basic statistics about the performance of cluster nodes in OpenSearch and tell me what stands out.

    callsopensearch.cat.nodes

  2. Writewrite

    Reload secure settings in OpenSearch. Show me exactly what you will send before you save it.

    callsopensearch.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 useropensearch.security.delete_user
  • Delete the specified useropensearch.security.delete_user_legacy
  • Delete a modelopensearch.ml.delete_model
  • Delete a snapshotopensearch.snapshot.delete
  • Used to delete a particular model in the clusteropensearch.knn.delete_model
  • Delete the specified roleopensearch.security.delete_role
  • Delete an agentopensearch.ml.delete_agent
  • Delete a channel configurationopensearch.notifications.delete_config
  • Delete multiple channel configurationsopensearch.notifications.delete_configs
  • Delete an indexopensearch.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.

doopensearch.security.delete_userconfirm_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: "[email protected]" },    { match: "opensearch.security.delete_user_legacy", approver: "[email protected]" },    { match: "opensearch.ml.delete_model", approver: "[email protected]" }  ]}
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.

  • 1upstream call per actionall 594 OpenSearch actions
  • 594actions pageeach page of a long list is one call
  • 0reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every OpenSearch action.

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

Security77
  • opensearch.security.get_rolesGet all rolesread
  • opensearch.security.get_userRetrieve information about the specified internal userread
  • opensearch.security.get_usersRetrieve all internal usersread
  • opensearch.security.get_users_legacyRetrieve all internal usersread
  • opensearch.security.authinfoGet or updates authentication information for the currently authenticated userread
  • opensearch.security.authtokenGet the authorization token for the current userwrite
  • and 71 more in this area
Indices76
  • opensearch.indices.createCreate an indexwrite
  • opensearch.indices.resolve_indexGet information about any matching indexes, aliases, and data streamsread
  • opensearch.indices.rolloverUpdate an alias to point to a new index when the existing index is considered to be too large or too oldwrite
  • opensearch.indices.rollover_by_new_indexUpdate 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_blockAdd a block to an indexwrite
  • opensearch.indices.analyzeRun the analysis process on a text and return the tokens breakdown of the textread
  • and 70 more in this area
ML73
  • opensearch.ml.get_modelGet a modelread
  • opensearch.ml.register_agentsRegister an agentwrite
  • opensearch.ml.register_modelRegister a modelwrite
  • opensearch.ml.register_model_metaRegister model metadatawrite
  • opensearch.ml.add_agentic_memoryAdd agentic memory to a memory containerwrite
  • opensearch.ml.create_connectorCreate a standalone connectorwrite
  • and 67 more in this area
Core54
  • opensearch.core.field_capsGet the information about the capabilities of fields among multiple indexesread
  • opensearch.core.field_caps_by_indexGet the information about the capabilities of fields among multiple indexes (by index)read
  • opensearch.core.search_shardsGet information about the indexes and shards that a search request would be executed againstread
  • opensearch.core.search_shards_by_indexGet information about the indexes and shards that a search request would be executed against (by index)read
  • opensearch.core.bulkIndex, update or delete many documents in one requestwrite
  • opensearch.core.bulk_by_indexIndex, update or delete many documents in one request (by index)write
  • and 48 more in this area
LTR47
  • opensearch.ltr.create_default_storeCreate the default feature storewrite
  • opensearch.ltr.create_model_from_setCreate a model from an existing feature set in the default feature storewrite
  • opensearch.ltr.create_model_from_set_by_storeCreate a model from an existing feature set in the default feature store (by store)write
  • opensearch.ltr.create_storeCreate a new feature store with the specified namewrite
  • opensearch.ltr.add_features_to_setAdd features to an existing feature set in the default feature storewrite
  • opensearch.ltr.add_features_to_set_by_queryAdd features to an existing feature set in the default feature storewrite
  • and 41 more in this area
Cat34
  • opensearch.cat.nodeattrsGet information about custom node attributesread
  • opensearch.cat.nodesGet basic statistics about the performance of cluster nodesread
  • opensearch.cat.thread_poolGet cluster-wide thread pool statistics per noderead
  • opensearch.cat.thread_pool_by_thread_pool_patternsGet cluster-wide thread pool statistics per node (by thread pool patterns)read
  • opensearch.cat.aliasesShows information about aliases currently configured to indexes, including filter and routing informationread
  • opensearch.cat.aliases_by_nameShows information about aliases currently configured to indexes, including filter and routing information (by name)read
  • and 28 more in this area
Cluster27
  • opensearch.cluster.allocation_explainExplain how shards are allocated in the current cluster and provides an explanation for why unassigned shards…read
  • opensearch.cluster.get_component_templateGet one or more component templatesread
  • opensearch.cluster.get_component_template_by_nameGet one or more component templates (by name)read
  • opensearch.cluster.pending_tasksGet a list of pending cluster-level tasks, such as index creation, mapping updates, or new allocationsread
  • opensearch.cluster.delete_component_templateDelete a component templatedestructive
  • opensearch.cluster.delete_decommission_awarenessRecommissions a decommissioned zonedestructive
  • and 21 more in this area
Search relevance25
  • opensearch.search_relevance.get_judgmentsGet judgmentsread
  • opensearch.search_relevance.get_search_configurationsGet the search configurationsread
  • opensearch.search_relevance.put_judgmentsCreate a judgmentwrite
  • opensearch.search_relevance.put_search_configurationsCreate a search configurationwrite
  • opensearch.search_relevance.delete_experimentsDelete a specified experimentdestructive
  • opensearch.search_relevance.delete_judgmentsDelete a specified judgmentdestructive
  • and 19 more in this area
Ism16
  • opensearch.ism.change_policyUpdate the managed index policy to a new policywrite
  • opensearch.ism.change_policy_by_indexUpdate the managed index policy to a new policy (by index)write
  • opensearch.ism.get_policiesGet the policiesread
  • opensearch.ism.put_policiesCreate or updates policieswrite
  • opensearch.ism.add_policyAdd a policy to an indexwrite
  • opensearch.ism.add_policy_by_indexAdd a policy to an index (by index)write
  • and 10 more in this area
Nodes15
  • opensearch.nodes.infoGet information about nodes in the clusterread
  • opensearch.nodes.info_by_node_id_metricGet information about nodes in the cluster (by node id, metric)read
  • opensearch.nodes.info_by_node_id_or_metricGet information about nodes in the cluster (by node id or metric)read
  • opensearch.nodes.statsGet statistical information about nodes in the clusterread
  • opensearch.nodes.reload_secure_settingsReload secure settingswrite
  • opensearch.nodes.reload_secure_settings_by_node_idReload secure settings (by node id)write
  • and 9 more in this area
Snapshot14
  • opensearch.snapshot.createCreate a snapshot within an existing repositorywrite
  • opensearch.snapshot.getGet information about a snapshotread
  • opensearch.snapshot.statusGet information about the status of a snapshotread
  • opensearch.snapshot.status_by_repositoryGet information about the status of a snapshot (by repository)read
  • opensearch.snapshot.cleanup_repositoryRemove any stale data from a snapshot repositorywrite
  • opensearch.snapshot.cloneCreate a clone of all or part of a snapshot in the same repository as the original snapshotwrite
  • and 8 more in this area
Replication11
  • opensearch.replication.autofollow_statsGet information about any auto-follow activity and any replication rules configured on the specified clusterread
  • opensearch.replication.create_replication_ruleAutomatically starts the replication on indexes matching a specified patternwrite
  • opensearch.replication.follower_statsGet information about any follower (syncing) indexes on a specified clusterread
  • opensearch.replication.leader_statsGet information about any replicated leader indexes on a specified clusterread
  • opensearch.replication.delete_replication_ruleDelete the specified replication ruledestructive
  • opensearch.replication.pausePause the replication of the leader indexwrite
  • and 5 more in this area
Flow framework10
  • opensearch.flow_framework.createCreate a new workflow templatewrite
  • opensearch.flow_framework.getGet a workflow templateread
  • opensearch.flow_framework.get_statusGet the current workflow provisioning statusread
  • opensearch.flow_framework.updateUpdate a workflow template that has not been provisionedwrite
  • opensearch.flow_framework.deleteDelete a workflow templatedestructive
  • opensearch.flow_framework.deprovisionDeprovision workflow's resources when you no longer need themdestructive
  • and 4 more in this area
KNN10
  • opensearch.knn.get_modelUsed to retrieve information about models present in the clusterread
  • opensearch.knn.search_modelsUse an OpenSearch query to search for models in the indexread
  • opensearch.knn.train_modelCreate and train a model that can be used for initializing k-NN native library indexes during indexingwrite
  • opensearch.knn.train_model_by_model_idCreate and train a model that can be used for initializing k-NN native library indexes during indexing (by model id)write
  • opensearch.knn.delete_modelUsed to delete a particular model in the clusterdestructive
  • opensearch.knn.statsGet information about the current status of the k-NN pluginread
  • and 4 more in this area
Notifications9
  • opensearch.notifications.create_configCreate channel configurationwrite
  • opensearch.notifications.get_configGet a specific channel configurationread
  • opensearch.notifications.get_configsGet multiple channel configurations with filteringread
  • opensearch.notifications.list_channelsList created notification channelsread
  • opensearch.notifications.delete_configDelete a channel configurationdestructive
  • opensearch.notifications.delete_configsDelete multiple channel configurationsdestructive
  • and 3 more in this area
Geospatial8
  • opensearch.geospatial.delete_ip2geo_datasourceDelete a specific IP2Geo data sourcedestructive
  • opensearch.geospatial.get_ip2geo_datasourceGet one or more IP2Geo data sources, defaulting to returning all if no names specifiedread
  • opensearch.geospatial.get_ip2geo_datasource_by_nameGet one or more IP2Geo data sources, defaulting to returning all if no names specified (by name)read
  • opensearch.geospatial.put_ip2geo_datasource_settingsUpdate a specific IP2Geo data sourcewrite
  • opensearch.geospatial.geojson_upload_postUse an OpenSearch query to upload `GeoJSON`, operation will fail if index existswrite
  • opensearch.geospatial.geojson_upload_putUse an OpenSearch query to upload `GeoJSON` regardless if index existswrite
  • and 2 more in this area
SM8
  • opensearch.sm.create_policyCreate a snapshot management policywrite
  • opensearch.sm.explain_policyExplain the state of the snapshot management policyread
  • opensearch.sm.get_policiesGet all snapshot management policies with optional pagination and filteringread
  • opensearch.sm.get_policyGet a specific snapshot management policy by nameread
  • opensearch.sm.delete_policyDelete a snapshot management policydestructive
  • opensearch.sm.start_policyStart a snapshot management policywrite
  • and 2 more in this area
Transforms8
  • opensearch.transforms.deleteDelete an index transformdestructive
  • opensearch.transforms.explainGet the status and metadata of a transform jobread
  • opensearch.transforms.getGet the status and metadata of a transform jobread
  • opensearch.transforms.searchGet the details of all transform jobsread
  • opensearch.transforms.previewGet a preview of what a transformed index would look likeread
  • opensearch.transforms.putCreate an index transform, or update a transform if `if_seq_no` and `if_primary_term` are providedwrite
  • and 2 more in this area
Ingest7
  • opensearch.ingest.delete_pipelineDelete an ingest pipelinedestructive
  • opensearch.ingest.get_pipelineGet an ingest pipelineread
  • opensearch.ingest.get_pipeline_by_idGet an ingest pipeline (by id)read
  • opensearch.ingest.processor_grokGet a list of built-in grok patternsread
  • opensearch.ingest.put_pipelineCreate or updates an ingest pipelinewrite
  • opensearch.ingest.simulateSimulate an ingest pipeline with example documentsread
  • and 1 more in this area
Observability7
  • opensearch.observability.create_objectCreate a new observability objectwrite
  • opensearch.observability.get_objectGet specific observability object specified by IDread
  • opensearch.observability.list_objectsGet list of all observability objectsread
  • opensearch.observability.update_objectUpdate an existing observability objectwrite
  • opensearch.observability.delete_objectDelete specific observability object specified by IDdestructive
  • opensearch.observability.delete_objectsDelete specific observability objects specified by ID or a list of IDsdestructive
  • and 1 more in this area
Rollups6
  • opensearch.rollups.deleteDelete an index rollup job configurationdestructive
  • opensearch.rollups.explainGet the execution status information for an index rollup jobread
  • opensearch.rollups.getGet an index rollup job configuration by IDread
  • opensearch.rollups.putCreate or updates an index rollup job configurationwrite
  • opensearch.rollups.startStart the execution of an index rollup jobwrite
  • opensearch.rollups.stopStop the execution of an index rollup jobwrite
SQL6
  • opensearch.sql.closeClose an open cursor to free server-side resourcesdestructive
  • opensearch.sql.explainGet the execution plan for a SQL or PPL queryread
  • opensearch.sql.queryQuery indices with SQLread
  • opensearch.sql.settingsUpdate SQL plugin settings in the OpenSearch cluster configurationwrite
  • opensearch.sql.get_statsGet performance metrics for the SQL pluginread
  • opensearch.sql.post_statsGet filtered performance metrics for the SQL pluginread
Query5
  • opensearch.query.datasource_retrieveGet a specific data source by nameread
  • opensearch.query.datasources_createCreate a new query data sourcewrite
  • opensearch.query.datasources_listGet a list of all available data sourcesread
  • opensearch.query.datasources_updateUpdate an existing query data sourcewrite
  • opensearch.query.datasource_deleteDelete a specific data source by namedestructive
WLM5
  • opensearch.wlm.create_query_groupCreate a new query group and sets the resource limits for the new query groupwrite
  • opensearch.wlm.get_query_groupGet the specified query groupread
  • opensearch.wlm.get_query_group_by_nameGet the specified query group (by name)read
  • opensearch.wlm.update_query_groupUpdate the specified query groupwrite
  • opensearch.wlm.delete_query_groupDelete the specified query groupdestructive
Asynchronous search4
  • opensearch.asynchronous_search.deleteDelete any responses from an asynchronous searchdestructive
  • opensearch.asynchronous_search.getGet partial responses from an asynchronous searchread
  • opensearch.asynchronous_search.searchRun an asynchronous searchwrite
  • opensearch.asynchronous_search.statsMonitors any asynchronous searches that are `running`, `completed`, or `persisted`read
List4
  • opensearch.list.indicesList indices with health, document count and size, page by pageread
  • opensearch.list.indices_by_indexList indices with health, document count and size, page by page (by index)read
  • opensearch.list.shardsGet paginated details of shard allocation on nodesread
  • opensearch.list.shards_by_indexGet paginated details of shard allocation on nodes (by index)read
Neural4
  • opensearch.neural.statsGet information about the current status of the neural-search pluginread
  • opensearch.neural.stats_by_node_idGet information about the current status of the neural-search plugin (by node id)read
  • opensearch.neural.stats_by_node_id_statGet information about the current status of the neural-search plugin (by node id, stat)read
  • opensearch.neural.stats_by_statGet information about the current status of the neural-search plugin (by stat)read
PPL4
  • opensearch.ppl.explainGet the execution plan for a PPL queryread
  • opensearch.ppl.get_statsGet performance metrics for the PPL pluginread
  • opensearch.ppl.post_statsGet filtered performance metrics for the PPL pluginread
  • opensearch.ppl.queryQuery indices with PPL (piped processing language)read
Search pipeline4
  • opensearch.search_pipeline.deleteDelete the specified search pipelinedestructive
  • opensearch.search_pipeline.getGet information about a specified search pipelineread
  • opensearch.search_pipeline.get_by_idGet information about a specified search pipeline (by id)read
  • opensearch.search_pipeline.putCreate or replaces the specified search pipelinewrite
Tasks4
  • opensearch.tasks.cancelCancel a task, if it can be cancelled through an APIdestructive
  • opensearch.tasks.cancel_by_task_idCancel a task, if it can be cancelled through an API (by task id)destructive
  • opensearch.tasks.getGet information about a taskread
  • opensearch.tasks.listGet a list of tasksread
Dangling indices3
  • opensearch.dangling_indices.delete_dangling_indexDelete the specified dangling indexdestructive
  • opensearch.dangling_indices.import_dangling_indexImport the specified dangling indexwrite
  • opensearch.dangling_indices.list_dangling_indicesGet all dangling indexesread
Ingestion3
  • opensearch.ingestion.get_stateUse this API to retrieve the ingestion state for a given indexread
  • opensearch.ingestion.pauseUse this API to pause ingestion for a given indexwrite
  • opensearch.ingestion.resumeUse this API to resume ingestion for the given indexwrite
Security analytics3
  • opensearch.security_analytics.get_alertsRetrieve alerts related to a specific detector type or detector IDread
  • opensearch.security_analytics.get_findingsRetrieve findings related to a specific detector type or detector IDread
  • opensearch.security_analytics.search_finding_correlationsList correlations for a findingread
Insights1
  • opensearch.insights.top_queriesGet the top queries based on the given metric type (latency, CPU, or memory)read
Remote store1
  • opensearch.remote_store.restoreRestore from remote storewrite
Ubi1
  • opensearch.ubi.initializeInitialize the UBI indexeswrite

This index shows a sample of each area. All 594 actions, with their inputs and prices, are in the 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.

Give your agent OpenSearch today.

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