Skip to content

MCP tool reference

For the complete documentation index see: llms.txt

All documentation pages available in markdown.

The Aerospike Voyager MCP server exposes 23 tools to AI coding agents, organized by category. The Read Only and Full Access columns indicate which access profile allows each tool.

Parameters in italics are optional. Every parameter is passed as a JSON field on the tool call.

Prerequisites

  • The MCP server started. See Setup.
  • You have at least one saved cluster connection.

Response shape

Tools that return data include two complementary views in the MCP response:

  • content[0].text: a formatted, human-readable rendering. Most MCP clients (Claude Desktop, Cursor) display this to the user.
  • structuredContent: the same data as a JSON object. AI agents that support structured content can consume this directly without parsing text.

structuredContent is present on get_record, create_record, update_record, query, the five browse tools (get_cluster_summary, list_namespaces, get_namespace_stats, list_sets, get_nodes), and the two info tools (execute_info, execute_info_on_node). Every connection tool, plus record_exists, delete_record, delete_bin, and truncate_set, return text only.

Example (get_record):

{
"content": [{
"type": "text",
"text": "Record:\n Key: user8 (string) | Digest: 00d8... | Partition: 2048 | Node: BB9C5F97288A0D6\n Generation: 1 | TTL: namespace default\n\n Bins (7):\n active [bool ] false\n age [int ] 43\n ..."
}],
"structuredContent": {
"key": "user8",
"keyType": "string",
"digest": "00d8362e4cac83f58f538f81d8d8a3f8ec8fbacc",
"node": "BB9C5F97288A0D6",
"partitionId": 2048,
"generation": 1,
"expiration": 0,
"bins": {
"active": { "type": "bool", "value": false },
"age": { "type": "int", "value": 43 },
...
}
}
}

Connection management

ToolDescriptionParametersRead OnlyFull Access
list_connectionsList all saved connectionsnoneYesYes
get_connectionGet details of a specific connectionconnectionIdYesYes
create_connectionCreate a new cluster connectionname, hosts, port, username, password, authMode, tlsName, caCert, clientCert, clientKey, insecureTLS, timeout, loginTimeout, useServicesAlternateNoYes
update_connectionUpdate an existing connectionconnectionId, plus any field accepted by create_connection. Omitted fields keep their current valueNoYes
delete_connectionDelete a saved connectionconnectionIdNoYes
connectConnect to a saved clusterconnectionIdYesYes
disconnectDisconnect from a clusterconnectionIdYesYes
test_connectionTest connectivity to a cluster without saving ithosts, port, username, password, authMode, tlsName, caCert, clientCert, clientKey, timeout, loginTimeoutYesYes

hosts is a comma-separated seed list in host:port form, for example 192.168.1.1:3000,10.0.0.2:3000. Certificates and keys are supplied as standard base64-encoded PEM, encoding the whole file including the BEGIN and END markers.

authMode accepts internal (default), external, and pki on every tool that takes it. external requires a TLS configuration (caCert, clientCert, or tlsName) and both username and password. pki requires clientCert and clientKey and takes no username or password.

The connection must be disconnected before update_connection succeeds. To clear a string field, pass an empty string. Omitting a field leaves the stored value unchanged. The update is a read-modify-write that is not atomic, so concurrent updates to the same connection can overwrite each other.

Cluster browsing

ToolDescriptionParametersRead OnlyFull Access
get_cluster_summaryGet cluster name, server versions, cluster size, namespace names, and per-node metadata. Lightweight, with no record counts or storage usageconnectionIdNoYes
list_namespacesList all namespaces in the connected cluster with aggregated stats: master object count, memory and device storage, replication factor, per-node breakdownconnectionIdYesYes
get_namespace_statsGet the same aggregated stats for a single namespaceconnectionId, namespaceNoYes
list_setsList all sets in a namespace with their object counts, storage usage, and tombstonesconnectionId, namespaceYesYes
get_nodesGet cluster node names, host addresses, and build versionsconnectionIdYesYes

Record operations

ToolDescriptionParametersRead OnlyFull Access
get_recordRead a record by key or digestconnectionId, namespace, set, id, idType, policyYesYes
record_existsCheck if a record existsconnectionId, namespace, set, id, idTypeYesYes
queryScan or filter records, paginated (see Query pagination)connectionId, namespace, set, expression, values, indexHintBin, pageToken, policyYesYes
create_recordCreate a new recordconnectionId, namespace, set, key, keyType, bins, policyNoYes
update_recordUpdate the named bins of an existing recordconnectionId, namespace, set, digest, bins, policyNoYes
delete_recordDelete a recordconnectionId, namespace, set, id, idType, policyNoYes
delete_binDelete a bin from a recordconnectionId, namespace, set, digest, binName, policyNoYes
truncate_setRemove all records from a setconnectionId, namespace, setNoYes

Addressing a record

get_record, record_exists, and delete_record take an idType that says how to read id:

idTypeid holdsNotes
keyA string user keyThe default identity for a record written with a bare key.
intkeyAn integer user keyA decimal integer within the signed 64-bit range. Hexadecimal, floating-point, and exponent forms are rejected with a validation error. A decimal value outside the signed 64-bit range returns no record rather than a validation error.
digestA 40-character hex digestAddresses the record whichever key type wrote it.

Both idType and keyType accept key (string) and intkey (integer). String and integer keys work on reads, exists checks, deletes, and creates. create_record has no digest option because a digest is a one-way hash and would create a record whose user key could never be recovered.

A string user key and an integer user key with the same digits are different records, because Aerospike hashes the user key’s type into the digest. An agent that knows only the digits can try both. update_record and delete_bin identify the record by digest, which you get from a get_record or query response.

The policy object

The optional policy object carries the Aerospike client policy for the call. Read policies accept fields such as totalTimeout, socketTimeout, maxRetries, replicaPolicy, readModeAP, and readModeSC. Write policies accept recordExistsAction, generationPolicy, generation, commitLevel, expiration, durableDelete, and sendKey.

Every enumerated policy value is lower camelCase. Upper snake case values such as EXPECT_GEN_EQUAL are rejected. The default column is the value Voyager applies when the field is omitted, taken from its policy preferences:

FieldAccepted valuesDefault
recordExistsActionupdate, updateOnly, replace, replaceOnly, createOnlyupdate
generationPolicynone, expectGenEqual, expectGenGTnone
commitLevelall, masterall
replicaPolicymaster, masterProles, sequence, preferRack, randomsequence
readModeAPone, allone
readModeSCsession, linearize, allowReplica, allowUnavailablesession

Use generationPolicy: "expectGenEqual" with generation for optimistic locking, and durableDelete: true for durable deletes. For example:

{ "generationPolicy": "expectGenEqual", "generation": 4 }

Cluster info

ToolDescriptionParametersRead OnlyFull Access
execute_infoRun one or more info commands on the clusterconnectionId, commandsNoYes
execute_info_on_nodeRun one or more info commands on a specific nodeconnectionId, node, commandsNoYes

commands is an array of info command strings, for example ["namespaces", "build"]. node is a node name from get_nodes.

Query pagination

The query tool paginates results automatically. Defaults and limits:

  • Default page size: 20 records
  • Maximum page size: 256 records (set via policy.maxRecords)
  • Pagination cursor: the server returns a nextPageToken in structuredContent when more records are available. Pass it as the pageToken argument on the next call to fetch the next page.
  • Text signal: the human-readable summary includes “(more pages available)” when additional pages exist.

The nextPageToken is a large hex-encoded binary cursor (typically 50+ KB). Store it verbatim; do not truncate or modify.

Filter with the optional expression argument, which takes an Aerospike Expression Language expression such as $.age > 30 or $.city == "NYC". Omit it for a plain query. Use values to supply placeholder values for parameterized expressions. Use indexHintBin to name the bin for secondary-index selection, or omit it to let the server discover available indexes automatically.

Supported bin types

Write operations (create_record, update_record) accept bins as typed BinInput objects:

{ "name": "age", "type": "int", "value": 30 }

Supported type values for writes: int, float, string, bool, blob, list, map, geo.

Read responses can also return hyperloglog bins, which are read-only and cannot be written through Voyager.

Errors

Errors are returned with isError: true in the MCP result. The text content is a human-readable message that includes a short summary, additional detail where relevant, and remediation guidance.

Common error categories:

  • Profile-blocked: the active access profile does not allow the tool. The response body is blocked by active profile.
  • Validation errors (for example [VOY-C018] Auth mode unsupported): parameters failed server-side checks. The error text opens with the code and title, followed by the message and, where present, server code, remediation, and a docs link.
  • Internal errors, such as an unhealthy connection.
  • Query timeouts or cancellations. Narrow the filter or add a secondary index.

Next steps