← MCP Security Catalog

kysigned-mcp 11addffe05f6ff043de78fdd9d1f1cc5d4804e65

source_git · kychee-com/kysigned · latest release

Verified with no proven findings
Security result
7
Observed tools
Version rating
100
Change risk

Independent inventory

Observed 2026-08-25T08:45:59.178Z using mcpSecurity-inventory. Protocol 2025-06-18.

ToolCategoryRisk
check_envelope_statusCheck a signing envelope: per-signer signing status and times, plus each signer's delivery_status (pending / delivered / undeliverable — whether the signing-request email reached them, distinct from whether they signed). Accepts EITHER the ambient KYSIGNED_AUTHORIZATION creator key OR a per-envelope tracking_token (ktt_…, returned by every create — F-30.7): the token needs NO API key and reads exactly its own envelope, so the no-key wallet path polls through the same tool it created with. An explicit tracking_token wins over the ambient key.
Input schema
{
  "type": "object",
  "properties": {
    "envelope_id": {
      "type": "string",
      "minLength": 1,
      "description": "The envelope ID to check"
    },
    "tracking_token": {
      "type": "string",
      "description": "Envelope-scoped read-only observer token (ktt_…) from the create result — no API key needed."
    }
  },
  "required": [
    "envelope_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "title": "Check envelope status",
  "readOnlyHint": true,
  "openWorldHint": true
}
create_envelopeCreate a new signing envelope. Sends a PDF to one or more signers (max 20); at completion every party receives a sealed evidence-bundle PDF. Provide EXACTLY ONE of pdf_base64 (≤ ~3 MB) or pdf_url (any size, fetched server-side). Consumes a creator credit and emails each signer.
Input schema
{
  "type": "object",
  "properties": {
    "document_name": {
      "type": "string",
      "description": "Human-readable name for the document"
    },
    "pdf_base64": {
      "type": "string",
      "description": "Base64-encoded PDF, ≤ ~3 MB raw (synchronous-invoke body cap). For larger documents use pdf_url."
    },
    "pdf_url": {
      "type": "string",
      "format": "uri",
      "description": "https URL the service fetches the PDF from server-side (the large-document escape)."
    },
    "signers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Signer email address"
          },
          "name": {
            "type": "string",
            "description": "Signer display name"
          }
        },
        "required": [
          "email",
          "name"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "1–20 signers (email + display name)"
    },
    "message": {
      "type": "string",
      "description": "Optional message included in the signing-request email"
    },
    "expiry_days": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "Days until the envelope expires unsigned (omit for the operator default)."
    },
    "callback_url": {
      "type": "string",
      "format": "uri",
      "description": "https completion-webhook URL; the 201 returns callback_secret once for verifying deliveries."
    },
    "auto_close": {
      "type": "boolean",
      "description": "false = manual seal (call seal after all signers sign) rather than auto-distribute."
    }
  },
  "required": [
    "document_name",
    "signers"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "title": "Create envelope",
  "readOnlyHint": false,
  "destructiveHint": false,
  "openWorldHint": true
}
create_envelope_x402Create a signing envelope PAYING PER ENVELOPE from the local run402 wallet via x402 — no API key and no kysigned account needed (the payment itself establishes the creator record for creator_email). This tool SPENDS REAL FUNDS: it pays the operator's live per-envelope price (read from the x402 route's challenge; kysigned.com: $0.25 USDC on Base mainnet). Safety order: it first runs the FREE preflight validation, then checks the wallet balance, and only then pays — an invalid request or short balance never triggers a charge. Retries are safe: the spending-intent idempotency key (yours, or a generated one returned in the result) replays the same envelope without paying twice. The payer resolves once from: an explicit allowance file (KYSIGNED_RUN402_ALLOWANCE_PATH), an embedder-injected opaque signer (KMS/HSM), or the host-local run402 allowance wallet (`run402 init`); its key is never a tool argument and never appears in output. On success the result carries the payment receipt and a tracking block whose ktt_ token polls this envelope with NO account (pass it to check_envelope_status as tracking_token); creator_email sign-in stays available for the dashboard.
Input schema
{
  "type": "object",
  "properties": {
    "creator_email": {
      "type": "string",
      "format": "email",
      "description": "REQUIRED deliverable address that becomes the creator record: creation/completion mail and the evidence bundle land there, and signing in with it later (magic link) opens the dashboard for this envelope."
    },
    "document_name": {
      "type": "string",
      "description": "Human-readable name for the document"
    },
    "pdf_base64": {
      "type": "string",
      "description": "Base64-encoded PDF, ≤ ~3 MB raw (synchronous-invoke body cap). For larger documents use pdf_url."
    },
    "pdf_url": {
      "type": "string",
      "format": "uri",
      "description": "https URL the service fetches the PDF from server-side (the large-document escape)."
    },
    "signers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email",
            "description": "Signer email address"
          },
          "name": {
            "type": "string",
            "description": "Signer display name"
          }
        },
        "required": [
          "email",
          "name"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "maxItems": 20,
      "description": "1–20 signers (email + display name)"
    },
    "message": {
      "type": "string",
      "description": "Optional message included in the signing-request email"
    },
    "expiry_days": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "Days until the envelope expires unsigned (omit for the operator default)."
    },
    "callback_url": {
      "type": "string",
      "format": "uri",
      "description": "https completion-webhook URL; the 201 returns callback_secret once for verifying deliveries."
    },
    "auto_close": {
      "type": "boolean",
      "description": "false = manual seal (call seal after all signers sign) rather than auto-distribute."
    },
    "idempotency_key": {
      "type": "string",
      "maxLength": 256,
      "description": "Your spending-intent key: a retry with the same key replays the same envelope without paying twice. Omitted → one is generated and returned as spending_intent_key."
    }
  },
  "required": [
    "creator_email",
    "document_name",
    "signers"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "title": "Create envelope (wallet-paid)",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
list_envelopesList the envelopes you (the authenticated creator) have sent, with each one's status.
Input schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {}
}
Annotations
{
  "title": "List envelopes",
  "readOnlyHint": true,
  "openWorldHint": true
}
send_reminderSend a reminder email to all pending signers on an envelope.
Input schema
{
  "type": "object",
  "properties": {
    "envelope_id": {
      "type": "string",
      "minLength": 1,
      "description": "The envelope ID"
    }
  },
  "required": [
    "envelope_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "title": "Send reminder",
  "readOnlyHint": false,
  "destructiveHint": false,
  "openWorldHint": true
}
void_envelopeVoid an active envelope. Cancels all pending signing requests and notifies signers. Irreversible.
Input schema
{
  "type": "object",
  "properties": {
    "envelope_id": {
      "type": "string",
      "minLength": 1,
      "description": "The envelope ID to void"
    }
  },
  "required": [
    "envelope_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "title": "Void envelope",
  "readOnlyHint": false,
  "destructiveHint": true,
  "openWorldHint": true
}
wallet_statusReport the payer's payment readiness for wallet-paid envelope creation: payer provenance (source kind + public address + network — never key material), asset, on-chain balance (read resiliently across independent RPC providers), the live per-envelope price (read from the x402 route's own challenge), and whether the balance covers it — when short, a structured QR-ready fund_wallet action (ERC-681 payment URI for exactly the shortfall). Read-only — never creates, spends, or initiates an on-chain transaction. Needs no API key: the wallet-paid path works without KYSIGNED_AUTHORIZATION. The payer resolves once from: an explicit allowance file (KYSIGNED_RUN402_ALLOWANCE_PATH), an embedder-injected opaque signer, or the host-local run402 allowance (`run402 init`); its key is never a tool argument and never appears in output.
Input schema
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {}
}
Annotations
{
  "title": "Wallet status",
  "readOnlyHint": true,
  "openWorldHint": true
}

Resources 0

Resource templates 0

Prompts 0

Changes from previous version

Compared with initial baseline using full_baseline.

RiskChangeSubject
No material changes recorded.

Confirmed vulnerabilities

SeverityFindingAdvisory
No confirmed vulnerability is published for this version.

Provenance

Artifact SHA-256: b1185c79d00d851af8ee28bfc37df600eee2a9929bd618a2194ef55bab022b03

Scanner: mcp-proof-engine 0.1.0.

Let’s talk about MCP security.

Share your details and our security team will contact you.