๐Ÿš€ Quick Start

Get from zero to your first governed request in under 5 minutes. This guide covers SOHO tier for both MCP Fortress and PAT Fortress.

Prerequisites

  • For MCP Fortress: Claude Team or Enterprise subscription, admin access to at least one SaaS tool
  • For PAT Fortress: Claude API access with a Personal Access Token
  • Both: Valid email address for Kestra Labs account

MCP Fortress Quick Start

1

Create Kestra Labs Account

Navigate to admin.kestralabs.com/signup and create your account. Takes ~1 minute.

2

Choose Tier & User Pack

In the Billing dashboard, select your tier (SOHO starts at $3/user/month per product, or $5/user/month for both) and confirm your pack size.

3

Add Your First Connector

Go to Vault โ†’ Add Connector. Select a SaaS tool (e.g., Zendesk), paste credentials, and click Save & Test. Takes ~2 minutes.

4

Configure Role Policies

Go to Policy Radar โ†’ Add Role. Toggle allowed/denied actions for your team role (e.g., allow list_tickets, deny delete_ticket). Takes ~1 minute.

5

Copy & Configure MCP Endpoint

From the dashboard, copy your MCP endpoint and add it to Claude's settings:

{
  "mcpServers": {
    "kestralabs": {
      "url": "https://gateway.kestralabs.com/v1/mcp",
      "headers": {
        "x-api-key": "your_org_api_key"
      }
    }
  }
}
6

Test It

Open Claude and try: "List my open Zendesk tickets." Your first governed request is live!

PAT Fortress Quick Start

1

Create Kestra Labs Account

If you don't have one already, go to admin.kestralabs.com/signup (~1 minute).

2

Choose Tier & User Pack

In Billing, select your tier (SOHO is $3/user/month per product, or $5/user/month for both).

3

Add Your Claude PAT

Go to Vault โ†’ Add PAT. Paste your Claude Personal Access Token, set a label (e.g., "Production"), choose allowed models, and set a spend cap. Click Save & Encrypt.

4

Get PAT Fortress Endpoint

Copy your PAT Fortress endpoint from the dashboard:

https://pat.kestralabs.com/v1
5

Update Your Application

Point your app at PAT Fortress instead of api.anthropic.com:

# Before (direct Claude API)
client = Anthropic(api_key="sk-ant-your-real-key")

# After (through PAT Fortress)
client = Anthropic(
    api_key="your_org_api_key",
    base_url="https://pat.kestralabs.com/v1"
)

โœ“ Success! Your developers never see the real Claude PAT. They authenticate with your org API key. PAT Fortress handles the rest, routing, policy enforcement, spend tracking, and request logging.

What Happens Behind the Scenes

Both MCP Fortress and PAT Fortress follow the same five-layer security flow:

  1. Identity Layer: Kestra Labs validates your org API key and user context (SSO token if applicable).
  2. Device Layer (Zero Trust only): Kestra Labs checks device compliance via your MDM provider (Intune, Jamf, Workspace ONE, or Google Endpoint).
  3. Credential Layer: Encrypted credentials are retrieved from the Vault.
  4. Policy Layer: Role permissions and conditional rules (rate limits, IP restrictions, time windows) are enforced.
  5. Access Layer: For MCP Fortress, the SaaS API is called and responses are parsed. For PAT Fortress, the request is proxied to Claude and logged.

๐Ÿ”Œ MCP Fortress Setup

MCP Connectors are secure, credential-backed integrations to your SaaS tools. Configure them once in the Vault, then control who can use them via Policy Radar.

Credential Types by Tier

SOHO Credential Storage
Plain text credentials stored in database. Suitable for development and testing environments. Credentials are encrypted in transit via TLS 1.3.
BANK Credential Storage
AES-256 encryption at rest with service-managed keys. Credentials decrypted only when a connector is called. Audit trail logs all access.
ZERO TRUST Credential Storage
BYOE (Bring Your Own Encryption) with customer-managed HSM keys. Credentials never decrypted server-side. Device posture required before access.

Adding a Connector

  1. Navigate to Vault โ†’ Connectors in the admin dashboard.
  2. Click Add Connector.
  3. Select a SaaS tool from the catalog (Zendesk, Slack, GitHub, Jira, Salesforce, etc.).
  4. Enter your credentials (API key, username/password, OAuth token, or app credentials).
  5. Click Test Connection to validate. Kestra Labs makes a test API call to the SaaS tool.
  6. If the test passes, click Save & Deploy. The connector is now ACTIVE.

Connector Lifecycle

Status Description Actions Available
ACTIVE Ready to serve requests. Users can call tools on this connector. Edit, Test, Rotate, Disable, Delete
OFFLINE Connector is temporarily unreachable (API down, network issue, credentials expired). Retry, Edit, Rotate, Delete
PENDING Connector was just created; test is in progress. Retry, Delete
KILLED Connector was manually disabled by an admin (e.g., due to detected abuse or credential compromise). Rotate, Delete, Re-enable

Testing a Connector

After adding a connector, always run a test. Kestra Labs validates that:

  • Credentials are correct and not expired
  • The target SaaS API is reachable and responding
  • Basic permissions are granted (e.g., read access for test calls)

Test results appear in seconds. If the test fails, check credentials and try again.

โš  Bank Tier: Encryption Key Setup If using Bank tier, you must configure a service-managed encryption key in Settings โ†’ Encryption Keys. This key rotates automatically every 90 days. Kestra Labs handles the rotation; no action required from you.

Connector Tools

Once a connector is active, Kestra Labs automatically exposes its available tools to Claude. For example, a Zendesk connector exposes:

  • list_tickets(status, assignee)
  • get_ticket(id)
  • create_ticket(subject, description, priority)
  • update_ticket(id, status, comment)

Which tools Claude can access is controlled by Policy Radar roles and conditional rules.

๐Ÿ”‘ PAT Fortress Setup

PAT Fortress is a transparent proxy to the Claude Messages API. Your developers point their apps at pat.kestralabs.com instead of api.anthropic.com. Kestra Labs holds the real Claude PAT and enforces policies.

Adding a Claude PAT

  1. Navigate to Vault โ†’ PAT Keys in the admin dashboard.
  2. Click Add PAT Key.
  3. Paste your Claude Personal Access Token. Copy it directly from Claude.ai's settings.
  4. Configure controls:
    • Label: A friendly name (e.g., "Production PAT", "Dev PAT", "Research PAT")
    • Model Allowlist: Select which Claude models this PAT can access. For example, allow only claude-sonnet-4-5-20250929 and deny claude-opus-4-20250115 if desired. Leave blank to allow all models.
    • Max Tokens per Request: Hard limit on output tokens (e.g., 4000). Requests exceeding this are rejected.
    • Monthly Spend Cap: Budget limit in USD. When exceeded, requests are denied until the next month.
  5. Click Save & Encrypt. PAT is encrypted and stored according to your tier.

PAT Lifecycle

Status Meaning Serving Requests?
ACTIVE PAT is ready to handle requests. Yes
ROTATED This PAT was replaced by a new one. 48-hour overlap window allows existing client apps to use the old key before it expires. Yes (for 48 hours)
REVOKED Permanently disabled (e.g., security incident, manual revocation). No

How Developers Use It

From the developer's perspective, PAT Fortress is a drop-in replacement for api.anthropic.com. The integration is simple:

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "org_api_key_from_kestra_labs",
  baseURL: "https://pat.kestralabs.com/v1",
});

const message = await client.messages.create({
  model: "claude-sonnet-4-5-20250929",
  max_tokens: 1024,
  messages: [
    { role: "user", content: "Hello!" },
  ],
});

console.log(message);

Everything else, request body format, response structure, streaming, tool use, remains identical to the Claude API. Developers don't need to learn a new API.

What Gets Logged

Unlike MCP Fortress (which logs policy decisions only), PAT Fortress logs the full request and response:

  • Every prompt sent to Claude
  • Every response received from Claude
  • Token usage (input/output counts)
  • Model, timestamp, user/org, IP address
  • Spend per request

All logs are archived to encrypted object storage with server-side encryption. This is critical for SOC 2 Type II audits and compliance evidence.

Usage Visibility

PAT Fortress gives admins visibility into how Claude API keys are being used, but Kestra Labs does not bill for token usage. Your Claude API costs are between your organization and Anthropic. The Settings โ†’ PAT Usage dashboard shows per-PAT metrics:

  • Request count (total and per-model breakdown)
  • Estimated spend based on Anthropic's published rates (for budget planning only)
  • Distance to spend cap

Spend caps are a governance feature, they let admins prevent runaway costs by capping how much a given PAT key can consume. Set up email alerts when approaching your cap (e.g., at 80%).

โœ“ Transparent Proxy: PAT Fortress doesn't modify request or response bodies. The response your app receives is exactly what Claude sent, with no added metadata. We only add headers (e.g., x-kestra-request-id) for tracing.

๐Ÿ‘ค SSO & SCIM

Centralize identity management for Kestra Labs. Use SSO to log in via your corporate directory, and SCIM to automatically provision and deprovision users.

Supported Identity Providers

  • Microsoft Entra ID (Azure AD): SAML 2.0 and OIDC
  • Okta: SAML 2.0 and OIDC
  • Generic SAML 2.0: Any IdP supporting SAML 2.0
  • Generic OIDC: Any IdP supporting OpenID Connect

SAML 2.0 Configuration

To configure SAML 2.0 SSO, you'll need:

  1. Go to Settings โ†’ Identity & Access โ†’ SAML 2.0 in the admin dashboard.
  2. Copy the following Kestra Labs identifiers:
    • Entity ID: urn:kestralabs:saml
    • ACS URL: https://auth.kestralabs.com/saml/acs
    • Single Logout URL: https://auth.kestralabs.com/saml/sls
  3. Provide these to your IdP admin. They'll create an Enterprise Application and give you:
    • Signing certificate (X.509)
    • Sign-in URL
    • IdP Entity ID
  4. Paste the IdP metadata into Kestra Labs. Click Save & Test.
  5. Test SSO by logging out and visiting admin.kestralabs.com/login. You'll be redirected to your IdP.

SCIM 2.0 Provisioning

SCIM automatically syncs users and groups from your IdP to Kestra Labs. When a user is added to a group in Entra ID or Okta, they're automatically created in Kestra Labs with the corresponding role.

Enable SCIM in Settings โ†’ Identity & Access โ†’ SCIM:

  1. Copy the SCIM endpoint and API bearer token.
  2. Configure in your IdP:
    • SCIM Endpoint: https://api.kestralabs.com/scim/v2/org_xxx
    • Authorization: Bearer <token>
    • Content-Type: application/scim+json
  3. Test the connection. Your IdP will POST a test request to verify the endpoint.
  4. Enable user provisioning. New users added to the group will be synced to Kestra Labs in real-time.

Important Notes

โ„น SSO applies to both products: Once you configure SSO, it applies to both MCP Fortress and PAT Fortress. Users log in once to the admin portal and can access both products. For Bank and Zero Trust tiers, SSO is mandatory for Kestra Labs portal access.

โ„น SCIM group mapping: SCIM syncs users and group membership. In Kestra Labs, groups are mapped to roles. E.g., "Engineering" group โ†’ "Engineer" role, "Finance" โ†’ "Finance" role. Configure mappings in Settings after enabling SCIM.

๐Ÿ›ก๏ธ Policy Configuration

Policies control who can access what. Configure them visually in the admin dashboard, no JSON required. Kestra Labs supports role-based access control (RBAC) with conditional rules for advanced scenarios.

Three-Layer Policy Architecture

Layer 1: Connector/API Toggle
Enable or disable an entire connector or API. If disabled, no one can use it, regardless of role.
Layer 2: Role Permissions
Assign roles to users. Each role has allow/deny lists for specific actions (e.g., list_tickets, create_ticket, delete_ticket).
Layer 3: Conditional Rules
Add time-based, rate-limiting, IP-based, or custom attribute rules. Evaluated at request time.

Role Setup

To create a new role:

  1. Go to Policy Radar โ†’ Roles.
  2. Click Add Role.
  3. Enter a name (e.g., "Support Agent", "Engineer", "Finance Manager").
  4. For each connector or API, toggle allowed actions. Use this table format:
Policy Radar: Role Editor
Policy Radar โ€บ Roles โ€บ Edit Permissions
๐ŸŽซ
Zendesk
4 actions
list_tickets
View tickets and their metadata
Allow
create_ticket
Create new support tickets
Allow
update_ticket
Edit existing ticket fields
Allow
delete_ticket
Permanently remove tickets
Deny
Destructive
๐Ÿ“Š
Accounting
2 actions
read_ledger
View financial records
Deny
create_invoice
Generate new invoices
Deny
3 Allowed
3 Denied

After creating the role, assign it to users in Settings โ†’ Users & Groups.

Conditional Rules

Enhance role policies with conditional rules. Configure them in Policy Radar โ†’ Conditional Rules:

Policy Radar: Conditional Rules
๐Ÿ•
Time Window
Monโ€“Fri, 9:00 AM โ€“ 5:00 PM EST
Restrict connector access to business hours only. Requests outside this window are automatically denied.
โšก
Rate Limit
Max 10 calls / hour per user
Cap requests per user or role to prevent runaway AI usage. Triggers user.overage webhook when exceeded.
๐ŸŒ
IP Restriction
192.168.1.0/24, 10.0.0.0/8
Allow requests only from approved corporate IP ranges or VPN. Blocks all requests from unknown networks.
๐Ÿท๏ธ
Custom Attribute
department == "Engineering"
Match against user attributes synced from your IdP (department, location, security clearance level).

For MCP Fortress: PII Redaction

PII redaction is specific to MCP Fortress (not available for PAT Fortress, which logs full requests). Enable in Policy Radar โ†’ PII Redaction:

Policy Radar: PII Redaction
Email Addresses
user@domain.com โ†’ โ–ˆโ–ˆโ–ˆโ–ˆ@โ–ˆโ–ˆโ–ˆโ–ˆ.โ–ˆโ–ˆโ–ˆ
Phone Numbers
+1-555-123-4567 โ†’ +โ–ˆ-โ–ˆโ–ˆโ–ˆ-โ–ˆโ–ˆโ–ˆ-โ–ˆโ–ˆโ–ˆโ–ˆ
Social Security Numbers
123-45-6789 โ†’ โ–ˆโ–ˆโ–ˆ-โ–ˆโ–ˆ-โ–ˆโ–ˆโ–ˆโ–ˆ
Credit Card Numbers
4111-1234-5678-9012 โ†’ โ–ˆโ–ˆโ–ˆโ–ˆ-โ–ˆโ–ˆโ–ˆโ–ˆ-โ–ˆโ–ˆโ–ˆโ–ˆ-โ–ˆโ–ˆโ–ˆโ–ˆ
Custom Patterns Bank / Zero Trust
/MRN-\d{8}/gi โ†’ MRN-โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ
  • Email addresses: Toggle to redact email@domain patterns
  • Phone numbers: Toggle to redact +1-555-123-4567 patterns
  • Social Security numbers: Toggle to redact XXX-XX-#### patterns
  • Credit card numbers: Toggle to redact card patterns
  • Custom patterns: (Bank/Zero Trust only) Enter regex patterns for domain-specific PII

When enabled, Kestra Labs strips matching patterns from API responses before returning them to Claude. This is logged in the audit trail.

โ„น Change Log: Every policy change (role created, rule added, PII setting toggled) is logged in Settings โ†’ Change Log. This is an immutable audit trail, perfect for compliance audits and incident response.

๐Ÿ“ก API Reference

Integrate Kestra Labs programmatically. Use the Gateway APIs to route requests, or the Admin API to manage configuration.

MCP Fortress Gateway API

Endpoint

POST https://gateway.kestralabs.com/v1/mcp

Authentication

Include your org API key in the request header:

x-api-key: org_xxxxxx

Request Format

MCP Fortress accepts MCP JSON-RPC 2.0 requests. Tool names follow the connector__action pattern:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "zendesk__list_tickets",
    "arguments": { "status": "open" }
  }
}

Response Format

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"tickets\": [{\"id\": 123, \"subject\": \"Login Bug\", \"status\": \"open\"}]}"
      }
    ]
  }
}

Error Response

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Policy denied",
    "data": {
      "reason": "Tool 'zendesk__close_ticket' is denied for your role"
    }
  }
}

PAT Fortress Gateway API

Endpoint

POST https://pat.kestralabs.com/v1/messages

Authentication

All tiers require the org API key. Bank and Zero Trust tiers also require an Entra ID bearer token for identity verification:

# SOHO tier (API key only)
x-api-key: org_xxxxxx

# Bank / Zero Trust tiers (API key + Entra ID required)
x-api-key: org_xxxxxx
Authorization: Bearer <entra_id_token>

Request Format

Identical to the Claude Messages API:

{
  "model": "claude-sonnet-4-5-20250929",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "What is 2+2?"
    }
  ]
}

Response Format

Identical to Claude API (transparent proxy):

{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "2+2 equals 4."
    }
  ],
  "model": "claude-sonnet-4-5-20250929",
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 10,
    "output_tokens": 5
  }
}

Policy Denial Error (MCP & PAT)

If a policy denies access:

{
  "error": {
    "type": "policy_denied",
    "message": "Access denied: model 'claude-sonnet' is not in your allowlist",
    "code": 403
  }
}

Admin API

Base URL

https://admin.kestralabs.com/api/v1

Authentication

Obtain a identity token (JWT) via /auth/token (username/password or SSO). Include in Authorization header:

Authorization: Bearer <jwt_token>

Existing Endpoints (MCP & Shared)

Method Endpoint Description
GET /connectors List all MCP connectors for this org
POST /connectors Create a new connector
PUT /connectors/{id} Update connector (name, label, enabled)
DELETE /connectors/{id} Delete a connector
GET /roles List all roles in this org
POST /roles Create a new role
PUT /roles/{id} Update role permissions
GET /audit List audit log entries (paginated)
GET /metering/usage Get current month usage and spend

New PAT Endpoints

Method Endpoint Description
GET /pat-keys List all PAT keys for this org
POST /pat-keys Create a new PAT key
PUT /pat-keys/{id} Update PAT (label, model allowlist, spend cap)
DELETE /pat-keys/{id} Revoke a PAT key (permanent)
GET /pat-keys/{id}/usage Get usage stats for a PAT (spend, requests, models)

New Device Endpoints (Zero Trust)

Method Endpoint Description
GET /devices List cached devices and their compliance status
POST /devices/check Force a posture check for a device (bypasses cache)

Webhook Events

Kestra Labs can send webhook events to your infrastructure. Configure in Settings โ†’ Webhooks. Supported events:

Event Trigger
request.denied A request was denied by policy (MCP or PAT)
connector.killed A connector was killed due to detected abuse or error
connector.error A connector returned an error on a request
user.overage A user exceeded their rate limit or quota
credential.expiring A credential is expiring soon (7 days notice)
anomaly.detected Anomaly detection flagged unusual activity
pat.spend_cap_reached A PAT key reached its monthly spend cap
pat.model_blocked A model was blocked by a PAT's allowlist
device.noncompliant A device failed posture check (Zero Trust only)

๐Ÿ–ฅ๏ธ Admin Dashboard

The admin dashboard is your central hub for monitoring, configuring, and managing both MCP Fortress and PAT Fortress. All features are accessible via the web UI, no CLI or API calls required.

Status Board

The main landing page gives you a single-glance overview of your entire Kestra Labs deployment:

Kestra Labs: Dashboard
๐Ÿ“Š Status Board
๐Ÿ›ก๏ธ Policy Radar
๐Ÿ“ก Traffic Feed
๐Ÿ” Vault
๐Ÿ“‹ Change Log
๐Ÿ’ณ Billing
๐ŸŽซ Support Tickets
โš™๏ธ Settings
MCP Connectors
5 All Active
PAT Keys
3 Active 1 Expiring
Users
4 of 5 seats
Month-to-Date Spend
$127.40 Projected: $312
MCP Connectors
๐ŸŽซ
Zendesk
4 tools ยท 142 calls today
๐Ÿ’ฌ
Slack
3 tools ยท 89 calls today
๐Ÿ™
GitHub
6 tools ยท 67 calls today
๐Ÿ“Š
Accounting
2 tools ยท 23 calls today
๐Ÿ“‹
Jira
5 tools ยท 51 calls today
PAT Keys
prod-engineering
Models: claude-sonnet-4-5 ยท Cap: $500/mo ยท Spend: $89.20
17.8%
prod-support
Models: claude-haiku-4-5 ยท Cap: $200/mo ยท Spend: $34.60
17.3%
staging-test Expires in 5 days
Models: all ยท Cap: $50/mo ยท Spend: $3.60
7.2%

Policy Radar

Visual policy configuration for both MCP Fortress and PAT Fortress. See the Policies & RBAC section for the full interactive GUI showing roles, conditional rules, and PII redaction.

Traffic Feed

Real-time request stream showing every MCP and PAT request as it happens, think of it like a security camera feed for your AI traffic:

Kestra Labs: Traffic Feed
Live
14:32:08
MCP
zendesk__list_tickets
sarah.chen@company.com
โœ“ Allowed
124ms
14:31:55
MCP
zendesk__delete_ticket
sarah.chen@company.com
โœ— Denied
Role: Support Agent, action not permitted
14:31:42
PAT
claude-sonnet-4-5 ยท 1,247 tokens
mike.ross@company.com
โœ“ Allowed
$0.019 ยท 340ms
14:31:29
MCP
github__list_issues
dev-bot@company.com
โœ“ Allowed
98ms
14:31:12
PAT
claude-opus-4-20250115
intern@company.com
โœ— Denied
Model not in allowlist for key: prod-support
14:30:58
MCP
slack__send_message
sarah.chen@company.com
โœ“ Allowed
156ms

Vault

Secure credential management with two tabs: one for MCP Connector credentials, one for Claude PAT keys:

Kestra Labs: Vault
๐ŸŽซ
Zendesk
API Key ยท Last rotated: Feb 12, 2026 ยท 4 tools exposed
Support Agent Engineer
Active
๐Ÿ’ฌ
Slack
OAuth Token ยท Last rotated: Mar 1, 2026 ยท 3 tools exposed
Support Agent Engineer
Active
๐Ÿ™
GitHub
App Credentials ยท Last rotated: Jan 28, 2026 ยท 6 tools exposed
Engineer
Active
๐Ÿ“Š
Accounting Credential expires in 7 days
API Key ยท Last rotated: Dec 5, 2025 ยท 2 tools exposed
Finance Manager
Expiring

Change Log

Immutable audit trail of every admin action, who changed what and when. Searchable and exportable for compliance audits:

Kestra Labs: Change Log
Today, 2:15 PM
admin@company.com
Updated Role: Support Agent
delete_ticket: Allow โ†’ delete_ticket: Deny
Today, 11:30 AM
admin@company.com
Created PAT Key: staging-test
Models: all ยท Spend cap: $50/mo
Yesterday, 4:45 PM
admin@company.com
Added Conditional Rule: Rate Limit
Max 10 calls/hour per user on Zendesk connector
Mar 1, 9:00 AM
admin@company.com
Rotated Connector: Slack
OAuth token refreshed ยท Previous credential invalidated

Billing

Subscription and usage management: view your tier, user pack, invoices, and payment method. See the Billing & Usage section for full details.

Device Registry (Zero Trust Only)

Cached device posture results, see the Device Posture section for the full device registry interface.

Support Tickets

Need help? Submit a support ticket directly from your dashboard, no email required. Every ticket is tracked, prioritized, and routed to the right team automatically.

Kestra Labs: Support Tickets
Your Tickets 3 open ยท 12 resolved
Ticket Subject Category Priority Status
#1047 SSO federation failing for new SCIM group SSO / SCIM Medium In Progress
#1044 Connector timeout on GitHub after OAuth refresh Connectors High In Progress
#1041 Need SOC 2 evidence export for Q1 audit Compliance Medium Waiting
#1038 How to configure per-connector spend caps Billing Low Resolved
Submit a New Ticket
Category
Select category...
Priority
Select priority...
Subject
Brief description of the issue...
Description
Steps to reproduce, expected behavior, screenshots...
Attach files: screenshots, logs, HAR exports
๐Ÿ”Œ
Connectors
Setup, OAuth, timeouts
๐Ÿ‘ค
SSO / SCIM
Federation, provisioning
๐Ÿ›ก๏ธ
Policy / Access
Permissions, rules, roles
๐Ÿ’ณ
Billing
Invoices, seats, tiers
Response Times
Critical (P1): 1-hour response, 4-hour resolution target
High (P2): 4-hour response, 1-business-day resolution
Medium (P3): 1-business-day response
Low (P4): 2-business-day response

Zero Trust tier customers get priority routing, your tickets go to the front of the queue.
What to Include
Help us help you faster, include these when submitting:

1. Steps to reproduce the issue
2. Expected vs. actual behavior
3. Screenshots or screen recordings
4. Browser console logs (if applicable)
5. Affected connector or product name

Tickets with reproduction steps are resolved 3x faster on average.

๐Ÿ’ณ Billing & Usage

Simple, transparent pricing for MCP Fortress and PAT Fortress. Purchase individually or bundle both for a discount.

Pricing Tiers

Starter
SOHO
2 โ€“ 5 users
Per product
$3/user/mo
Bundle both
$5/user/mo
Save 17% with bundle
Most Popular
Bank
5 โ€“ 150 users
Per product
$5/user/mo
Bundle both
$8/user/mo
Save 20% with bundle
Enterprise
Zero Trust
150+ users
Custom
Contact sales for pricing
Volume discounts available

๐Ÿ’ก Bundle & Save: Get both MCP Fortress + PAT Fortress together. Start with one product and add the other anytime, your existing configuration carries over and the bundle discount applies automatically.

How Users Are Counted

๐Ÿ‘ค What counts as a user?

Anyone who can access Kestra Labs via SSO or credentials. Users are managed in Settings โ†’ Users & Groups, you must invite or provision users before they can access either product.

Users are counted against your tier's pack size. A SOHO tier holds 2โ€“5 users. A Bank tier holds 5โ€“150.

๐Ÿ”— Bundle users count once

If a user accesses both MCP Fortress and PAT Fortress, they count as one seat at the bundle rate, not two separate seats.

Example: 60 bundle + 5 MCP-only + 3 PAT-only = 68 total seats, not 128.

Overage Pricing

If you exceed your pack size, overage users are billed at 1.25ร— the standard rate. Think of it like a cell plan, stay in your data cap and you're fine, go over and you pay a premium per extra unit.

SOHO single product
$3.75
per overage user/mo
base $3 ร— 1.25
Bank single product
$6.25
per overage user/mo
base $5 ร— 1.25
Bank bundle
$10.00
per overage user/mo
base $8 ร— 1.25

Zero Trust: Overage pricing is negotiated with your account manager.

Billing Cycle & Pro-Rata

Your billing cycle starts on the date you signed up. All user additions mid-cycle are pro-rated, you only pay for the days remaining. Think of it like a gym membership: add a family member halfway through the month, pay half-price for that first month, full price going forward.

Example: Mixed-Product Scenario (Bank Tier)

Billing cycle starts on the 15th. Here's how the invoice builds:

Event Date Users Product Rate Charge
Sign-up Jan 15 60 MCP + PAT $8/user/mo $480.00
Add users Jan 25 5 MCP only $5/user/mo $16.94
Add users Feb 1 3 PAT only $5/user/mo $6.77
Invoice total (Jan 15 โ†’ Feb 14) $503.71

Next full cycle (Feb 15 โ†’ Mar 14), assuming no changes: 60 ร— $8 + 5 ร— $5 + 3 ร— $5 = $520.00/mo.

Bundle Pricing Auto-Applies

The bundle discount is per-user, not per-account. If a single-product user later adds the other product, their rate automatically drops to the bundle rate. No admin action needed.

MCP-only user adds PAT
$5 + $5 = $10 โ†’ $8 bundle

Pro-rated credit of $2/user/mo applied immediately.

PAT-only user adds MCP
$5 + $5 = $10 โ†’ $8 bundle

Pro-rated credit of $2/user/mo applied immediately.

Payment & Invoicing

๐Ÿ“… Billing Cycle
Monthly, on the date you signed up. If you signed up on the 15th, you're billed on the 15th of each month.
๐Ÿ’ณ Payment Methods
Credit card (via Stripe) for all tiers. Wire transfer available for Bank and Zero Trust tiers.
๐Ÿ“„ Invoices
Available in Billing โ†’ Invoices. Exported as PDF with itemized per-user costs and tax details.
๐Ÿšช Cancellation
Cancel anytime. No long-term contracts. Service continues through the end of your current billing period.

๐Ÿ“ฑ Device Posture

Device posture checks are a Zero Trust tier feature. Before any credential is accessed, Kestra Labs verifies the requesting device is compliant, managed, and encrypted.

Overview

Identity alone is not sufficient in a zero-trust model. Even if a user is authenticated, their device might be compromised, outdated, or unmanaged. Device posture adds a second layer of verification:

  1. Device Identity: Extract device ID from Entra ID token claims
  2. Compliance Check: Query your MDM provider for device state
  3. Access Decision: Grant or deny credential access based on device compliance
  4. Caching: Cache results for 15 minutes to reduce API calls

Supported Providers

Microsoft Intune
Checks device compliance policies, MDM enrollment status, and device security settings from Azure. Requires Entra ID integration.
Apple Jamf
Checks macOS and iOS device compliance, encryption status, and patch level from Jamf Pro. Requires API credentials.
VMware Workspace ONE
Checks device enrollment, compliance rules, and security profiles from Workspace ONE UEM (formerly AirWatch). Supports Windows, macOS, iOS, and Android. Requires API key + tenant URL.
Google Endpoint Management
Checks device compliance for Chromebooks, Android, and managed desktop devices via Google Workspace. Requires Google Workspace admin delegation and API access.

What Gets Checked

Device posture validation checks the following:

  • MDM-Managed: Is the device enrolled in your MDM provider (Intune, Jamf, Workspace ONE, or Google Endpoint)?
  • Disk Encryption: Is the device's disk encrypted (BitLocker on Windows, FileVault on macOS, dm-crypt on Linux, Chrome OS verified boot)?
  • OS Version: Is the OS up-to-date (within N minor versions of latest release)?
  • Jailbroken/Rooted: Is the device jailbroken (iOS) or rooted (Android)?
  • Compliance Policy: Does the device pass the organization's compliance policy as reported by your MDM provider?

Setup: Intune Integration

  1. In Kestra Labs, go to Settings โ†’ Device Posture โ†’ Intune.
  2. Click Connect to Intune. You'll be redirected to Azure consent screen.
  3. Grant Kestra Labs permission to read device compliance state. This requires a Global Administrator in your Entra ID tenant.
  4. Return to Kestra Labs. The connection is established.
  5. Optionally configure Compliance Rules: Set which compliance policies trigger access denial. E.g., "If device compliance policy = 'Failed', deny access."
  6. Click Save & Test. Kestra Labs will query Intune for a sample device.

Setup: Jamf Integration

  1. In Jamf Pro, create an API user (e.g., "Kestra Labs") with read-only device access.
  2. Copy the API username and password.
  3. In Kestra Labs, go to Settings โ†’ Device Posture โ†’ Jamf.
  4. Enter your Jamf instance URL (e.g., myjamf.jamfcloud.com), username, and password.
  5. Click Test Connection. Kestra Labs queries Jamf to verify credentials.
  6. Optionally configure Compliance Rules: E.g., "If encrypted != true, deny access."
  7. Click Save.

Setup: Workspace ONE Integration

  1. In Workspace ONE UEM console, navigate to Groups & Settings โ†’ System โ†’ Advanced โ†’ API โ†’ REST API and enable API access.
  2. Create an API key and note your tenant URL (e.g., as123.awmdm.com).
  3. In Kestra Labs, go to Settings โ†’ Device Posture โ†’ Workspace ONE.
  4. Enter your tenant URL, API key, and admin credentials.
  5. Click Test Connection. Kestra Labs queries Workspace ONE for a sample device.
  6. Optionally configure Compliance Rules: Map Workspace ONE compliance policies to Kestra Labs access decisions.
  7. Click Save.

Setup: Google Endpoint Management

  1. In Google Admin Console, go to Security โ†’ API Controls โ†’ Domain-wide Delegation.
  2. Add a new client ID for Kestra Labs with the scope https://www.googleapis.com/auth/admin.directory.device.mobile.readonly.
  3. In Kestra Labs, go to Settings โ†’ Device Posture โ†’ Google Endpoint.
  4. Click Connect to Google Workspace. You'll be redirected to Google OAuth consent.
  5. Grant Kestra Labs permission to read device management data. Requires Super Admin role.
  6. Click Save & Test. Kestra Labs queries Google Endpoint for a sample device.

How It Works at Request Time

When a user makes a request (MCP or PAT):

  1. Identity Check: Kestra Labs validates the user's org API key and Entra ID token.
  2. Device Extraction: Kestra Labs extracts the device ID from the Entra ID token claims (e.g., deviceid claim).
  3. Cache Lookup: Check if this device was validated in the last 15 minutes (database TTL). If yes, allow or deny immediately.
  4. Posture Check: If not cached, call your configured MDM provider's API to fetch device state.
  5. Compliance Evaluation: Evaluate the device against your compliance rules.
  6. Decision: If compliant, allow the request and cache the result for 15 minutes. If not, deny and return a device_noncompliant error.

Device Registry Dashboard

The Device Registry (in Settings โ†’ Device Posture) shows all cached devices:

Device ID User OS Compliance Status Last Check Actions
device-abc123 alice@company.com Windows 11 Build 22621 โœ“ PASS 5 minutes ago Force Re-check
device-def456 bob@company.com macOS 14.2 โœ— FAIL 2 minutes ago Force Re-check

Force Re-check bypasses the 15-minute cache and immediately re-validates the device. Useful after a user reboots, updates, or installs security patches.

Error Handling

If a device fails posture check:

{
  "error": {
    "type": "device_noncompliant",
    "message": "Device failed compliance check: Encryption status is 'None'",
    "device_id": "device-def456"
  }
}

The user should:

  1. Update their device (install OS updates, enable encryption, etc.)
  2. Wait for the device to re-check with your MDM provider (can take 5โ€“30 minutes)
  3. Retry the request. If the device is now compliant, the request succeeds.

โ„น SOHO & Bank Tiers: Device posture is not available. Identity validation only. Zero Trust tier adds the device layer for true zero-trust security.