klanex

Reliable async execution for agent tool calls: schema gating, retries, idempotency, audit trail.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
74%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,078Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.84% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "klanex": {
      "command": "npx",
      "args": [
        "klanex-mcp"
      ]
    }
  }
}

Runnable packages

npmklanex-mcp0.1.0stdio

Remote endpoints

https://api.klanexai.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡execute(url, method, headers, connection_id, seal_url, ...)

Submit an HTTP call to a third-party API for reliable asynchronous execution. klanex validates the payload (optionally against payload_schema), stores credentials encrypted, executes with automatic retries/backoff/circuit breakers, and keeps an audit trail — you submit once and never retry transient failures yourself. Call this instead of making a direct HTTP request whenever the call has side effects (payments, messages, tickets, writes) or the target may be flaky. Prefer connection_id over headers for credentials. Always set idempotency_key for side-effecting calls so resubmitting can never double-execute. Set wait_seconds to block for the result; otherwise poll get_execution with the returned execution_id.

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "absolute http(s) URL of the target endpoint"
    },
    "method": {
      "type": "string",
      "description": "HTTP method: GET, POST, PUT, PATCH, or DELETE (default POST)"
    },
    "headers": {
      "type": "object",
      "description": "request headers, typically third-party credentials; encrypted at rest and never readable back. Prefer connection_id so secrets never pass through your context",
      "additionalProperties": {
        "type": "string"
      }
    },
    "connection_id": {
      "type": "string",
      "description": "ID of a stored credential connection (con_...) to authenticate the call; see list_connections"
    },
    "seal_url": {
      "type": "boolean",
      "description": "set true when the URL itself is a secret (webhook URL, presigned URL); it is encrypted and reads back redacted"
    },
    "timeout_ms": {
      "type": "integer",
      "description": "per-attempt timeout in milliseconds (default 30000)"
    },
    "payload": {
      "description": "JSON body to send to the target"
    },
    "payload_schema": {
      "description": "JSON Schema to validate payload against before anything executes; mismatches are rejected synchronously with a correction hint"
    },
    "max_attempts": {
      "type": "integer",
      "description": "maximum delivery attempts, 1-10 (default 5)"
    },
    "idempotency_key": {
      "type": "string",
      "description": "stable key (max 255 chars) making this submit safe to retry; the same key returns the original execution instead of creating a new one. Always set this for side-effecting calls"
    },
    "requires_approval": {
      "type": "boolean",
      "description": "pause for a human approve/reject decision before anything executes; use for destructive or high-stakes actions"
    },
    "wait_seconds": {
      "type": "integer",
      "description": "block up to this many seconds (max 55) for a terminal result instead of returning immediately after queueing"
    }
  },
  "required": [
    "url"
  ],
  "additionalProperties": false
}
🟢get_execution(execution_id)

Fetch the current state of an execution by ID: status (PENDING_APPROVAL|QUEUED|RUNNING|RETRYING|SUCCEEDED|FAILED), attempts, the target response on success, or a classified error on failure. Retryable failures need no action from you — klanex is still retrying. Header values always read back REDACTED.

Input Schema

{
  "type": "object",
  "properties": {
    "execution_id": {
      "type": "string",
      "description": "the execution ID (exe_...)"
    }
  },
  "required": [
    "execution_id"
  ],
  "additionalProperties": false
}
🟢get_usage

Report the account's plan and execution usage for the current calendar month: used, included_executions, remaining, and whether overage is allowed. Check this before large batches to avoid hitting a hard quota.

Input Schema

{
  "type": "object",
  "additionalProperties": false
}
🟢list_connections

List the account's stored credential connections (token vault). Reference a ready connection by its ID in execute's connection_id instead of passing raw headers — the credential is injected at execution time and never passes through your context. Secrets are never returned.

Input Schema

{
  "type": "object",
  "additionalProperties": false
}
🟢list_executions(status, since, until, limit, cursor)

List this account's executions, newest first, optionally filtered by status or a created_at time range. Returns next_cursor when a page is full; pass it back as cursor for the next page.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "description": "filter by status: QUEUED, RUNNING, RETRYING, SUCCEEDED, or FAILED"
    },
    "since": {
      "type": "string",
      "description": "only executions created at or after this RFC3339 timestamp"
    },
    "until": {
      "type": "string",
      "description": "only executions created before this RFC3339 timestamp"
    },
    "limit": {
      "type": "integer",
      "description": "page size, 1-100 (default 20)"
    },
    "cursor": {
      "type": "string",
      "description": "opaque next_cursor value from a previous page"
    }
  },
  "additionalProperties": false
}
⚪replay_execution(execution_id)

Re-run a terminal (SUCCEEDED or FAILED) execution as a brand-new execution: same target, byte-exact original payload, same sealed credentials, fresh attempt counter. This is the outage-recovery path — failed calls can be re-executed without regenerating the payload. Each call creates a new execution (deliberately not idempotent).

Input Schema

{
  "type": "object",
  "properties": {
    "execution_id": {
      "type": "string",
      "description": "the execution ID (exe_...)"
    }
  },
  "required": [
    "execution_id"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools