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/mcpdo { 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.
- 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 - 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 passwordhostWhere your OpenSearch lives: your host
account { op: "connections.requirements", service: "opensearch" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates 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
Security
7734 read · 34 write · 9 destructive
Retrieve all internal users · Retrieve all internal users · Get all roles · Retrieve information about the specified internal user
Indices
7641 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)
ML
7333 read · 27 write · 13 destructive
Register an agent · Get a model · Register a model · Register model metadata
Core
5434 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)
LTR
4719 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
Cat
3434 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)
Cluster
2717 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)
Search relevance
2514 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.nodesGet basic statistics about the performance of cluster nodes | Get basic statistics about the performance of cluster nodes | read | infra.instance.list18 connectors |
opensearch.nodes.infoGet information about nodes in the cluster | Get information about nodes in the cluster | read | infra.instance.list18 connectors |
opensearch.nodes.reload_secure_settingsReload secure settings | Reload secure settings | write | infra.instance.update15 connectors |
opensearch.cat.indicesList indices with health, document count and size | List indices with health, document count and size | read | infra.search_index.list5 connectors |
opensearch.security.get_usersRetrieve all internal users | Retrieve all internal users | read | identity.user.list474 connectors |
opensearch.security.get_users_legacyRetrieve all internal users | Retrieve all internal users | read | identity.user.list474 connectors |
opensearch.cat.snapshotsList all of the snapshots stored in a specific repository | List all of the snapshots stored in a specific repository | read | infra.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) | read | infra.snapshot.list12 connectors |
opensearch.security.get_rolesGet all roles | Get all roles | read | identity.role.list184 connectors |
opensearch.security.authtokenGet the authorization token for the current user | Get the authorization token for the current user | write | identity.api_key.create100 connectors |
opensearch.security.generate_obo_tokenGenerate a `On-Behalf-Of` token for the current user | Generate a `On-Behalf-Of` token for the current user | write | identity.api_key.create100 connectors |
opensearch.security.delete_userDelete the specified internal user | Delete the specified internal user | destructive | identity.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.
- Readread
Get basic statistics about the performance of cluster nodes in OpenSearch and tell me what stands out.
calls
opensearch.cat.nodes - Writewrite
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.
Delete the specified internal user?
intent: the user asked me to delete the specified internal user
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]" } ]}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
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 rolesreadopensearch.security.get_userRetrieve information about the specified internal userreadopensearch.security.get_usersRetrieve all internal usersreadopensearch.security.get_users_legacyRetrieve all internal usersreadopensearch.security.authinfoGet or updates authentication information for the currently authenticated userreadopensearch.security.authtokenGet the authorization token for the current userwrite- and 71 more in this area
Indices76
opensearch.indices.createCreate an indexwriteopensearch.indices.resolve_indexGet information about any matching indexes, aliases, and data streamsreadopensearch.indices.rolloverUpdate an alias to point to a new index when the existing index is considered to be too large or too oldwriteopensearch.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)writeopensearch.indices.add_blockAdd a block to an indexwriteopensearch.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 modelreadopensearch.ml.register_agentsRegister an agentwriteopensearch.ml.register_modelRegister a modelwriteopensearch.ml.register_model_metaRegister model metadatawriteopensearch.ml.add_agentic_memoryAdd agentic memory to a memory containerwriteopensearch.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 indexesreadopensearch.core.field_caps_by_indexGet the information about the capabilities of fields among multiple indexes (by index)readopensearch.core.search_shardsGet information about the indexes and shards that a search request would be executed againstreadopensearch.core.search_shards_by_indexGet information about the indexes and shards that a search request would be executed against (by index)readopensearch.core.bulkIndex, update or delete many documents in one requestwriteopensearch.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 storewriteopensearch.ltr.create_model_from_setCreate a model from an existing feature set in the default feature storewriteopensearch.ltr.create_model_from_set_by_storeCreate a model from an existing feature set in the default feature store (by store)writeopensearch.ltr.create_storeCreate a new feature store with the specified namewriteopensearch.ltr.add_features_to_setAdd features to an existing feature set in the default feature storewriteopensearch.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 attributesreadopensearch.cat.nodesGet basic statistics about the performance of cluster nodesreadopensearch.cat.thread_poolGet cluster-wide thread pool statistics per nodereadopensearch.cat.thread_pool_by_thread_pool_patternsGet cluster-wide thread pool statistics per node (by thread pool patterns)readopensearch.cat.aliasesShows information about aliases currently configured to indexes, including filter and routing informationreadopensearch.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…readopensearch.cluster.get_component_templateGet one or more component templatesreadopensearch.cluster.get_component_template_by_nameGet one or more component templates (by name)readopensearch.cluster.pending_tasksGet a list of pending cluster-level tasks, such as index creation, mapping updates, or new allocationsreadopensearch.cluster.delete_component_templateDelete a component templatedestructiveopensearch.cluster.delete_decommission_awarenessRecommissions a decommissioned zonedestructive- and 21 more in this area
Search relevance25
opensearch.search_relevance.get_judgmentsGet judgmentsreadopensearch.search_relevance.get_search_configurationsGet the search configurationsreadopensearch.search_relevance.put_judgmentsCreate a judgmentwriteopensearch.search_relevance.put_search_configurationsCreate a search configurationwriteopensearch.search_relevance.delete_experimentsDelete a specified experimentdestructiveopensearch.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 policywriteopensearch.ism.change_policy_by_indexUpdate the managed index policy to a new policy (by index)writeopensearch.ism.get_policiesGet the policiesreadopensearch.ism.put_policiesCreate or updates policieswriteopensearch.ism.add_policyAdd a policy to an indexwriteopensearch.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 clusterreadopensearch.nodes.info_by_node_id_metricGet information about nodes in the cluster (by node id, metric)readopensearch.nodes.info_by_node_id_or_metricGet information about nodes in the cluster (by node id or metric)readopensearch.nodes.statsGet statistical information about nodes in the clusterreadopensearch.nodes.reload_secure_settingsReload secure settingswriteopensearch.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 repositorywriteopensearch.snapshot.getGet information about a snapshotreadopensearch.snapshot.statusGet information about the status of a snapshotreadopensearch.snapshot.status_by_repositoryGet information about the status of a snapshot (by repository)readopensearch.snapshot.cleanup_repositoryRemove any stale data from a snapshot repositorywriteopensearch.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 clusterreadopensearch.replication.create_replication_ruleAutomatically starts the replication on indexes matching a specified patternwriteopensearch.replication.follower_statsGet information about any follower (syncing) indexes on a specified clusterreadopensearch.replication.leader_statsGet information about any replicated leader indexes on a specified clusterreadopensearch.replication.delete_replication_ruleDelete the specified replication ruledestructiveopensearch.replication.pausePause the replication of the leader indexwrite- and 5 more in this area
Flow framework10
opensearch.flow_framework.createCreate a new workflow templatewriteopensearch.flow_framework.getGet a workflow templatereadopensearch.flow_framework.get_statusGet the current workflow provisioning statusreadopensearch.flow_framework.updateUpdate a workflow template that has not been provisionedwriteopensearch.flow_framework.deleteDelete a workflow templatedestructiveopensearch.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 clusterreadopensearch.knn.search_modelsUse an OpenSearch query to search for models in the indexreadopensearch.knn.train_modelCreate and train a model that can be used for initializing k-NN native library indexes during indexingwriteopensearch.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)writeopensearch.knn.delete_modelUsed to delete a particular model in the clusterdestructiveopensearch.knn.statsGet information about the current status of the k-NN pluginread- and 4 more in this area
Notifications9
opensearch.notifications.create_configCreate channel configurationwriteopensearch.notifications.get_configGet a specific channel configurationreadopensearch.notifications.get_configsGet multiple channel configurations with filteringreadopensearch.notifications.list_channelsList created notification channelsreadopensearch.notifications.delete_configDelete a channel configurationdestructiveopensearch.notifications.delete_configsDelete multiple channel configurationsdestructive- and 3 more in this area
Geospatial8
opensearch.geospatial.delete_ip2geo_datasourceDelete a specific IP2Geo data sourcedestructiveopensearch.geospatial.get_ip2geo_datasourceGet one or more IP2Geo data sources, defaulting to returning all if no names specifiedreadopensearch.geospatial.get_ip2geo_datasource_by_nameGet one or more IP2Geo data sources, defaulting to returning all if no names specified (by name)readopensearch.geospatial.put_ip2geo_datasource_settingsUpdate a specific IP2Geo data sourcewriteopensearch.geospatial.geojson_upload_postUse an OpenSearch query to upload `GeoJSON`, operation will fail if index existswriteopensearch.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 policywriteopensearch.sm.explain_policyExplain the state of the snapshot management policyreadopensearch.sm.get_policiesGet all snapshot management policies with optional pagination and filteringreadopensearch.sm.get_policyGet a specific snapshot management policy by namereadopensearch.sm.delete_policyDelete a snapshot management policydestructiveopensearch.sm.start_policyStart a snapshot management policywrite- and 2 more in this area
Transforms8
opensearch.transforms.deleteDelete an index transformdestructiveopensearch.transforms.explainGet the status and metadata of a transform jobreadopensearch.transforms.getGet the status and metadata of a transform jobreadopensearch.transforms.searchGet the details of all transform jobsreadopensearch.transforms.previewGet a preview of what a transformed index would look likereadopensearch.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 pipelinedestructiveopensearch.ingest.get_pipelineGet an ingest pipelinereadopensearch.ingest.get_pipeline_by_idGet an ingest pipeline (by id)readopensearch.ingest.processor_grokGet a list of built-in grok patternsreadopensearch.ingest.put_pipelineCreate or updates an ingest pipelinewriteopensearch.ingest.simulateSimulate an ingest pipeline with example documentsread- and 1 more in this area
Observability7
opensearch.observability.create_objectCreate a new observability objectwriteopensearch.observability.get_objectGet specific observability object specified by IDreadopensearch.observability.list_objectsGet list of all observability objectsreadopensearch.observability.update_objectUpdate an existing observability objectwriteopensearch.observability.delete_objectDelete specific observability object specified by IDdestructiveopensearch.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 configurationdestructiveopensearch.rollups.explainGet the execution status information for an index rollup jobreadopensearch.rollups.getGet an index rollup job configuration by IDreadopensearch.rollups.putCreate or updates an index rollup job configurationwriteopensearch.rollups.startStart the execution of an index rollup jobwriteopensearch.rollups.stopStop the execution of an index rollup jobwrite
SQL6
opensearch.sql.closeClose an open cursor to free server-side resourcesdestructiveopensearch.sql.explainGet the execution plan for a SQL or PPL queryreadopensearch.sql.queryQuery indices with SQLreadopensearch.sql.settingsUpdate SQL plugin settings in the OpenSearch cluster configurationwriteopensearch.sql.get_statsGet performance metrics for the SQL pluginreadopensearch.sql.post_statsGet filtered performance metrics for the SQL pluginread
Query5
opensearch.query.datasource_retrieveGet a specific data source by namereadopensearch.query.datasources_createCreate a new query data sourcewriteopensearch.query.datasources_listGet a list of all available data sourcesreadopensearch.query.datasources_updateUpdate an existing query data sourcewriteopensearch.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 groupwriteopensearch.wlm.get_query_groupGet the specified query groupreadopensearch.wlm.get_query_group_by_nameGet the specified query group (by name)readopensearch.wlm.update_query_groupUpdate the specified query groupwriteopensearch.wlm.delete_query_groupDelete the specified query groupdestructive
Asynchronous search4
opensearch.asynchronous_search.deleteDelete any responses from an asynchronous searchdestructiveopensearch.asynchronous_search.getGet partial responses from an asynchronous searchreadopensearch.asynchronous_search.searchRun an asynchronous searchwriteopensearch.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 pagereadopensearch.list.indices_by_indexList indices with health, document count and size, page by page (by index)readopensearch.list.shardsGet paginated details of shard allocation on nodesreadopensearch.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 pluginreadopensearch.neural.stats_by_node_idGet information about the current status of the neural-search plugin (by node id)readopensearch.neural.stats_by_node_id_statGet information about the current status of the neural-search plugin (by node id, stat)readopensearch.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 queryreadopensearch.ppl.get_statsGet performance metrics for the PPL pluginreadopensearch.ppl.post_statsGet filtered performance metrics for the PPL pluginreadopensearch.ppl.queryQuery indices with PPL (piped processing language)read
Search pipeline4
opensearch.search_pipeline.deleteDelete the specified search pipelinedestructiveopensearch.search_pipeline.getGet information about a specified search pipelinereadopensearch.search_pipeline.get_by_idGet information about a specified search pipeline (by id)readopensearch.search_pipeline.putCreate or replaces the specified search pipelinewrite
Tasks4
opensearch.tasks.cancelCancel a task, if it can be cancelled through an APIdestructiveopensearch.tasks.cancel_by_task_idCancel a task, if it can be cancelled through an API (by task id)destructiveopensearch.tasks.getGet information about a taskreadopensearch.tasks.listGet a list of tasksread
Dangling indices3
opensearch.dangling_indices.delete_dangling_indexDelete the specified dangling indexdestructiveopensearch.dangling_indices.import_dangling_indexImport the specified dangling indexwriteopensearch.dangling_indices.list_dangling_indicesGet all dangling indexesread
Ingestion3
opensearch.ingestion.get_stateUse this API to retrieve the ingestion state for a given indexreadopensearch.ingestion.pauseUse this API to pause ingestion for a given indexwriteopensearch.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 IDreadopensearch.security_analytics.get_findingsRetrieve findings related to a specific detector type or detector IDreadopensearch.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.