Skip to main content
Glama
rawtreedb

RawTree MCP Server

Official
by rawtreedb

Create Cluster

create-cluster

Purpose: Provision a new RawTree dedicated cluster in an organization.

Instructions

Purpose: Provision a new RawTree dedicated cluster in an organization.

Returns: The newly created cluster, including its ID, lifecycle status, and initial resources. Provisioning continues asynchronously after the request is accepted; use get-cluster to check progress.

Behavior: The cluster starts at minimumSize and can vertically autoscale per replica up to maximumSize. The replica count remains fixed. s3Storage is optional: omit it to use RawTree-managed storage. When provided, it configures customer-owned data and backup destinations through a customer IAM role. Destination paths are optional; data and backups (each with a bucket), plus roleArn are required inside s3Storage. s3StorageAccess contains the immutable externalId and resourceTag for this cluster's S3 storage access. The API generates omitted values independently using secure UUIDs, but requires an explicit s3StorageAccess.externalId for custom S3 matching the customer IAM trust policy. The MCP client forwards optional identity values without generating them. Tag eligible customer buckets and IAM roles with rawtree.com/cluster=. Database operations reuse this saved identity automatically.

Auth: The RawTree API requires a user access token with organization admin access. Authorization is enforced by the API.

Safety: When selecting a region, first call list-regions and use the same regionId for list-cluster-sizes, verify-cluster-s3-access and create-cluster. You MUST first call list-cluster-sizes, then confirm the exact organization, region, name, replica count, minimum per-replica size, maximum per-replica size, vertical autoscaling behavior, and idle timeout with the user. If idleTimeoutMinutes is omitted, explain that the server default will apply. For one replica, warn that the cluster has no redundancy. If s3Storage is provided, first call verify-cluster-s3-access with the identical configuration and confirm the data and backup buckets, optional paths, role ARN, and External ID. Pass the same s3StorageAccess.externalId to verification and creation. Never reuse a successful verification after changing s3StorageAccess.externalId or any s3Storage field. Confirm any explicitly supplied identity values with the user; generated values are returned with the cluster.

Reliability: This operation is not idempotent. If the response is ambiguous, call list-clusters to reconcile by organization and name before retrying.

Input Schema

NameRequiredDescriptionDefault
nameYesURL-friendly cluster name using letters, numbers, '_' or '-'.
regionIdNoRegion ID returned by list-regions. Use the same region for sizes, S3 verification and creation. Omit for the default backend.
replicasYesNumber of cluster replicas.
s3StorageNoOptional customer-owned S3 configuration. Omit to use RawTree-managed storage. Verify the identical configuration with verify-cluster-s3-access before creation.
maximumSizeYesMaximum vertical autoscaling size returned by list-cluster-sizes. Must be at or above minimumSize in the returned catalog.
minimumSizeYesInitial and minimum vertical autoscaling size returned by list-cluster-sizes.
organizationYesOrganization in which to create the cluster.
s3StorageAccessNoCreation-only S3 storage identity overrides. Omit to let the API generate values. Custom storage requires externalId matching verification.
idleTimeoutMinutesNoMinutes of inactivity before automatically pausing. Use 0 to disable idling. Omit to use the server default.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changedv0.4.2
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / databaseS3Access
      Removed value: -{
      -  "description": "Optional independent per-database S3 capability. It may be supplied without s3Storage. Apply the databaseBucketTag to each customer-owned database bucket; if s3Storage is also supplied, externalId must match.",
      -  "properties": {
      -    "databaseBucketTag": {
      -      "description": "Lowercase tag value applied to every customer-owned database bucket as rawtree.com/cluster=<value>.",
      -      "maxLength": 256,
      -      "minLength": 1,
      -      "pattern": "^[a-z0-9][a-z0-9-]*$",
      -      "type": "string"
      -    },
      -    "externalId": {
      -      "description": "External ID used by customer IAM role trust policies. It must exactly match the cluster S3 storage External ID when both are configured.",
      -      "maxLength": 1224,
      -      "minLength": 2,
      -      "pattern": "^[A-Za-z0-9_+=,.@:/-]+$",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "externalId",
      -    "databaseBucketTag"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / properties / regionId
      Added value: +{
      +  "description": "Region ID returned by list-regions. Use the same region for sizes, S3 verification and creation. Omit for the default backend.",
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • addedInput schema / properties / s3Storage / additionalProperties
      Added value: +false
    • addedInput schema / properties / s3Storage / properties / backups / additionalProperties
      Added value: +false
    • changedInput schema / properties / s3Storage / properties / backups / description
      Previous value: -"Customer-owned bucket and optional key prefix for backups."New value: +"Destination for backups."
    • addedInput schema / properties / s3Storage / properties / backups / properties / bucket / description
      Added value: +"Customer-owned S3 bucket."
    • addedInput schema / properties / s3Storage / properties / backups / properties / path / description
      Added value: +"Optional object-key prefix; defaults to the bucket root."
    • addedInput schema / properties / s3Storage / properties / data / additionalProperties
      Added value: +false
    • changedInput schema / properties / s3Storage / properties / data / description
      Previous value: -"Customer-owned bucket and optional key prefix for data."New value: +"Destination for table data."
    • addedInput schema / properties / s3Storage / properties / data / properties / bucket / description
      Added value: +"Customer-owned S3 bucket."
    • addedInput schema / properties / s3Storage / properties / data / properties / path / description
      Added value: +"Optional object-key prefix; defaults to the bucket root."
    • removedInput schema / properties / s3Storage / properties / externalId
      Removed value: -{
      -  "description": "External ID required by the IAM role trust policy. It must exactly match the value configured in AWS.",
      -  "maxLength": 1224,
      -  "minLength": 2,
      -  "pattern": "^[A-Za-z0-9_+=,.@:/-]+$",
      -  "type": "string"
      -}
    • changedInput schema / properties / s3Storage / properties / roleArn / description
      Previous value: -"ARN of the customer IAM role that RawTree may assume to access the configured buckets."New value: +"ARN of the customer IAM role RawTree may assume."
    • changedInput schema / properties / s3Storage / required
      Previous value: -[
      -  "data",
      -  "backups",
      -  "roleArn",
      -  "externalId"
      -]New value: +[
      +  "data",
      +  "backups",
      +  "roleArn"
      +]
    • addedInput schema / properties / s3StorageAccess
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Creation-only S3 storage identity overrides. Omit to let the API generate values. Custom storage requires externalId matching verification.",
      +  "properties": {
      +    "externalId": {
      +      "description": "Immutable S3 storage External ID. The API generates it when omitted for managed storage; required for custom storage.",
      +      "maxLength": 1224,
      +      "minLength": 2,
      +      "pattern": "^[A-Za-z0-9_+=,.@:/-]+$",
      +      "type": "string"
      +    },
      +    "resourceTag": {
      +      "description": "Immutable rawtree.com/cluster tag value for S3 storage access. Generated by the API when omitted.",
      +      "maxLength": 256,
      +      "minLength": 1,
      +      "pattern": "^[a-z0-9][a-z0-9-]*$",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Addedv0.3.2

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare write/non-idempotent/non-destructive; the description goes far beyond that by disclosing asynchronous provisioning after acceptance, fixed replica count with vertical autoscaling between minimumSize and maximumSize, required admin token, non-idempotency with a retry-reconciliation protocol, and specific safety warnings (single-replica no redundancy, verification invalidation on identity change). This is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The labeled sections (Purpose/Returns/Behavior/Auth/Safety/Reliability) front-load the essentials and each section carries distinct, decision-relevant content. It is long and occasionally restates schema facts (paths optional, required s3Storage children), which costs a point, but the length is justified by a 9-parameter provisioning tool with a multi-step prerequisite chain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the return payload (ID, lifecycle status, initial resources) and the async follow-up path. Auth, safety workflow, identity generation, and failure reconciliation are all covered — an agent has everything required to invoke this correctly and safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema baseline is already satisfied; the description still adds real meaning beyond it — when to omit s3Storage, the externalId generation rule vs the requirement for custom storage, the required-vs-optional split inside s3Storage, and the resourceTag tagging convention for buckets and roles. It stops short of enumerating every field, but the added semantics are substantive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Provision a new RawTree dedicated cluster in an organization") and is clearly distinguishable from siblings like update-cluster, get-cluster and create-database. An agent knows exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names prerequisites and sequencing (list-regions → list-cluster-sizes → verify-cluster-s3-access → create-cluster), names the alternatives for progress checking (get-cluster) and reconciliation (list-clusters), and specifies when s3Storage should be supplied vs omitted. Nothing about when to use this path is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.