Skip to main content
Glama
@proof-holdings/mcp-server

@proof-holdings/mcp-server

Official

get_approval_channel_keys

Read-only

Fetch encryption keys for an approval channel to seal or verify confirmation messages, with private-key access limited by permissions.

Instructions

Get the encryption keypair for an approval channel. With hitl:read it returns the public key, encrypted private key, KDF salt, and key ID (kid). A key holding confirmations:create without hitl:read receives only public_key and kid — what a confirmation message is sealed to, never the private-key material.

ACCESS: needs a Proof account. Set PROOF_API_KEY and restart this server, then call this tool again. start_login does NOT open this tool.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "hitl_id": "<hitl_id>"
    },
    "name": "get_approval_channel_keys"
  }
}

Input Schema

NameRequiredDescriptionDefault
hitl_idYesApproval channel ID

Output Schema

NameRequiredDescriptionDefault
kidYesThe key id: lowercase hex SHA-256 of the public key's SPKI DER
dek_ivNo
dek_tagNo
kdf_saltNoThe salt the wrapping key is derived with. Absent for a key holding `confirmations:create` without `hitl:read`.
public_keyYesThe RSA public key (SPKI PEM) messages are sealed to. Null means the stored key material could not be read: a degraded state to report, not "no key yet" (a config with no keypair answers 404 `no_keypair`).
wrapped_dekNoThe per-config data key wrapped under the master key; null for a keypair stored before it existed. Absent for a requester key, as are the five fields below.
backup_dek_ivNo
backup_dek_tagNo
backup_wrapped_dekNoThe same data key wrapped under the recovery key; null until recovery is set up
encrypted_private_keyNoThe private key as stored, wrapped client-side. Absent for a key holding `confirmations:create` without `hitl:read`.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.10.0

TDQS

A4.1/5.0
Behavior4/5

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

The readOnlyHint=true annotation is consistent with the read framing, and the description adds genuinely non-obvious behavior: return payload varies by permission, with hitl:read yielding public key, encrypted private key, KDF salt and kid, while confirmations:create alone yields only public_key and kid. It explains the security implication ('what a confirmation message is sealed to, never the private-key material'). It does not cover error cases, such as a channel with no keys provisioned.

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

Conciseness5/5

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

Front-loaded with the purpose, followed by the permission-dependent return behavior, and closing with a separately labeled ACCESS block. Every sentence carries information the agent cannot get from the schema or annotations — no filler.

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?

An output schema exists, yet the description still adds value by explaining that the response shape is permission-dependent rather than fixed. Combined with the explicit prerequisite setup and the negative start_login condition, an agent has everything needed to call this correctly or to fail for the right reason.

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

Parameters3/5

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

Schema description coverage is 100% for the single hitl_id parameter, and the description adds no meaning beyond the schema's 'Approval channel ID' wording. Baseline 3 applies when the schema already carries the parameter documentation.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Get the encryption keypair for an approval channel.' Combined with the conditional return-shape explanation, an agent knows exactly what this tool retrieves. It does not, however, distinguish itself from near-siblings like get_hitl_keys or delete/upload_approval_channel_keys, so a 4 rather than a 5.

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

Usage Guidelines4/5

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

Strong access guidance: it states the tool needs a Proof account, requires PROOF_API_KEY plus a restart, and explicitly notes that start_login does NOT unlock it — a useful negative condition that prevents a common wrong path. It stops short of saying when to prefer this over get_hitl_keys or the upload/delete key siblings.

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

Deploy Server

Other Tools