Control what agents can read from object storage.

Put an S3-compatible policy and audit boundary between agent credentials and your bucket.

01 / Available

Use your bucket

Bring your bucket.

Keep your storage. Govern the data path.

Connect S3-compatible storage and apply a versioned WebAssembly pipeline to supported writes and processed reads. Each operation is bound to the policy revision that ran.

  • Built-in or custom Wasm policy
  • Protected matching for joins
  • Client-held hybrid encryption keys
Get started
02 / Available

Use managed storage

Skip the bucket.

Add storage without losing policy control.

Managed object storage with the same workspace credentials, pipelines, and transaction history. Use MCP or S3; 1 GiB per workspace is included.

  • 1 GiB per workspace
  • MCP or S3
  • Policy and transaction history

Policy enforcement

One policy revision per operation

Supported writes run before storage; processed reads run before bytes reach the agent context. Both bind execution to the exact pipeline revision.

ReadAgents see the view you allow. The raw object stays in storage.

WriteApply protection before the object reaches storage.

Live pipeline

Try it out

See the difference between the original record, the view an agent receives, and a protected value that remains usable for matching.

[
  {
    "email": "alice@example.com",
    "card": "4111••••1111"
  },
  {
    "email": "alice@example.com",
    "card": "4111••••1111"
  }
]
[
  {
    "email": "[redacted]",
    "card": "[redacted]"
  },
  {
    "email": "[redacted]",
    "card": "[redacted]"
  }
]
[
  {
    "email": "join_8f3d",
    "card": "join_c4a9"
  },
  {
    "email": "join_8f3d",
    "card": "join_c4a9"
  }
]

Original record

Two records begin with the same private details.

Agent-safe view

Maskura redacts the fields that should not enter agent context.

Protected matching

Same source values become the same keys for matching.

Access controls

A bucket grant is not a field-level decision

Apply policy to the representation an agent receives, not only to the object key it can request.

Bind access to exact policy code

Each protected operation resolves one immutable pipeline revision. Component digests, configuration, limits, byte counts, fuel, and duration follow the execution evidence.

Keep matching data usable

Deterministic AES-SIV protects selected values while preserving equality, so joins and deduplication can work without exposing the original field.

Keep decryption keys with the client

Hybrid X25519 + ML-KEM-768 encapsulation protects recoverable fields. Only the public key crosses the boundary; decryption remains in the client.

Run open, sandboxed policy components

Compose built-in or custom Wasm components through a public WIT contract. Fresh instances run with bounded memory, fuel, deadlines, and no storage or credential access.

Choose storage independently

Use Maskura-managed storage or connect an S3-compatible provider. Policy stays at the access boundary instead of inside one storage vendor.

Use existing S3 and MCP clients

Point an existing S3 client at Maskura, or use the open-source maskura-mcp server. Both enter through the same data path.

Format coverage

Policies for structured object data

Text records, schema-aware Avro OCF objects, columnar Parquet and Lance files, and Iceberg tables run through format-specific pipelines.

Available now

JSONL, JSON, CSV, TSV, plain text, and Avro OCF are selected by Content-Type and can be processed on write and read.

New! Format adapters

New! Lance and Parquet bring schema-aware columnar processing (each behind a default-off gate), and the Iceberg table layer applies one consistent policy across every file of a table. Other unsupported binary objects remain raw S3 passthrough.

Deployment limits

Limits are enforced before processing and vary by path and format.

Read the limits and streaming details

Clients + tools

Examples

Use the same S3-compatible gateway from your CLI, application code, or local MCP server. Writes run the configured pipeline; processed reads opt in with x-maskura-process: read.

Maskura speaks the S3 API — point any S3 client at the gateway. PII is redacted before it lands in your bucket.

# Maskura credentials retain the s4_ and s4s_ prefixes for compatibility
export AWS_ACCESS_KEY_ID=s4_your_access_key
export AWS_SECRET_ACCESS_KEY=s4s_your_secret_key
export AWS_ENDPOINT_URL=https://api.maskura.dev

# Write an object — email + card are detected and redacted in transit
aws s3 cp customer.json s3://my-bucket/customer.json \
  --endpoint-url $AWS_ENDPOINT_URL

# Or with curl (header auth)
curl -X PUT https://api.maskura.dev/my-bucket/contact.json \
  -H "x-maskura-access-key: s4_your_access_key" \
  -H "x-maskura-secret-key: s4s_your_secret_key" \
  -H "Content-Type: application/json" \
  --data-binary '{"email":"alice@example.com","card":"4111111111111111"}'

# Read it back — stored object is redacted
curl https://api.maskura.dev/my-bucket/contact.json \
  -H "x-maskura-access-key: s4_your_access_key" \
  -H "x-maskura-secret-key: s4s_your_secret_key"

Use boto3 with a Maskura API key as SigV4 credentials and point it at the gateway endpoint.

pip install boto3

import boto3

s3 = boto3.client(
    "s3",
    endpoint_url="https://api.maskura.dev",
    aws_access_key_id="s4_your_access_key",
    aws_secret_access_key="s4s_your_secret_key",
    region_name="us-east-1",
)

# Write through Maskura.
s3.put_object(
    Bucket="my-bucket",
    Key="customer.json",
    ContentType="application/json",
    Body=b'{"email":"alice@example.com","card":"4111111111111111"}',
)

# Read the stored representation.
stored = s3.get_object(Bucket="my-bucket", Key="customer.json")
print(stored["Body"].read().decode())

Install the public stdio server, create an MCP token in the dashboard, and register the command with your MCP client. Full details are in docs/mcp.md.

cargo install --git https://github.com/231self/maskura maskura-mcp

// claude_desktop_config.json, .cursor/mcp.json, or equivalent
{
  "mcpServers": {
    "maskura": {
      "command": "maskura-mcp",
      "env": {
        "MASKURA_GATEWAY_URL": "https://api.maskura.dev",
        "MASKURA_MCP_TOKEN": "maskura_mcp_your_token"
      }
    }
  }
}

# Available tools:
# maskura_put_object, maskura_get_object, maskura_list_objects, maskura_delete_object
# Legacy s4_* tools and s4-mcp remain aliases during the transition.

Open source · Apache-2.0

The enforcement data plane is public.

The repository contains Maskura’s self-hosted S3 data plane, content-addressed Wasm runtime, official plugins, CLI, local MCP server, SDKs, and storage adapters. Hosted Maskura adds workspace identity, versioned policy management, audit history, billing, managed operations, and optional managed storage. See the exact boundary or inspect the source .