Skip to main content
Glama

pscale_key_publish

DestructiveIdempotent

Derive an X25519+Ed25519 keypair from your secret + handle (Argon2id). Publish the public half at passport position 9 of the federated passport block "passport:". Private half is never stored. Same secret + handle always produces the same keys. Passport block must exist at the beach first. Rotation requires proof of prior key ownership (prior_secret OR signature). Defaults to https://beach.happyseaurchin.com; pass agent_id to publish at a different beach.

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": {
      "handle": "<handle>",
      "secret": "<secret>"
    },
    "name": "pscale_key_publish"
  }
}

Input Schema

NameRequiredDescriptionDefault
latchNoTHE SWITCH (proposals/2026-11-05-the-derived-latch.md §5). "derived" moves this handle's latches at this beach off the word onto the latch derived from it, so no beach is sent the word again: the marker at passport 9.3 first, then the passport, then every block named for the handle, each probed with no key first so an open block is never latched; run again, it also moves the blocks this session was refused at. "word" runs the same steps back. secret is the word that derives the halves at 9 (or, for a holder whose latch was another key, that key, with the word as enc_secret). A switched handle changes its word only with latch "derived" and prior_secret, since every latch moves with it.
handleYesYour bare-name handle. Used as the Argon2id derivation salt AND as the discriminator in the passport block name ("passport:<handle>") at the beach. Must match an existing passport block.
secretYesWrite-authority for the passport block (proves you may write position 9). Also the fallback keypair seed when enc_secret is omitted. Never stored.
agent_idNoURL of the beach hosting the passport. Defaults to https://beach.happyseaurchin.com. The passport block name is "passport:<handle>" per the role-with-handle convention.
signatureNoRotation only: precomputed base64 Ed25519 sig over "pscale_key_rotation:{handle}:{new_x25519_b64}:{new_ed25519_b64}", made with the prior secret key.
enc_secretNoKeypair seed (Argon2id with handle) — the published PUBLIC half derives from this; the private half is never stored, and enc_secret itself is never sent to the beach. Falls back to secret. Use the SAME enc_secret you use for grain/self encryption, or your published key will not match your ciphertext.
prior_secretNoRotation only: the PRIOR encryption secret (it derived the currently-published keypair). Server derives the prior keypair and signs the rotation message internally.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / latch
      Added value: +{
      +  "description": "THE SWITCH (proposals/2026-11-05-the-derived-latch.md §5). \"derived\" moves this handle's latches at this beach off the word onto the latch derived from it, so no beach is sent the word again: the marker at passport 9.3 first, then the passport, then every block named for the handle, each probed with no key first so an open block is never latched; run again, it also moves the blocks this session was refused at. \"word\" runs the same steps back. secret is the word that derives the halves at 9 (or, for a holder whose latch was another key, that key, with the word as enc_secret). A switched handle changes its word only with latch \"derived\" and prior_secret, since every latch moves with it.",
      +  "enum": [
      +    "derived",
      +    "word"
      +  ],
      +  "type": "string"
      +}
  2. First observed

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already flag destructiveHint=true and idempotentHint=true; the description usefully adds that derivation is deterministic (same secret + handle yields the same keys), that the private half is never stored, and that rotation requires proof of prior ownership. What it does not disclose is the destructive edge itself: whether publishing silently overwrites an existing key at position 9, and what error results when a key exists and no proof is supplied. That omission matters for a tool annotated as destructive.

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

Conciseness4/5

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

Front-loaded with the core action and derivation method, then prerequisites, rotation, and beach default in a logical sequence. Dense but nearly every sentence carries operational information; only the 'Private half is never stored' / 'same secret + handle' pair could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, fully documented schema with no output schema, the description covers derivation, storage policy, preconditions, rotation proof, and endpoint defaults. The remaining gap is the return value (what a successful publish or rotation yields), which an agent must infer since no output schema exists.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description earns more by explaining cross-parameter relationships the schema does not: prior_secret and signature are alternatives ('OR') for rotation, and agent_id re-targets the beach rather than being a mere URL field. It adds the determinism guarantee tying secret/handle to stable output.

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

Purpose5/5

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

States a concrete verb and resource: derive an X25519+Ed25519 keypair from secret + handle via Argon2id and publish the public half at passport position 9 of 'passport:<handle>'. The scope (position 9, federated passport block) is precise enough that an agent knows exactly what side effect to expect, and no sibling tool overlaps with this operation.

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?

Preconditions and branches are spelled out: the passport block must already exist at the beach, rotation requires prior_secret OR signature, and agent_id switches beaches. It stops short of naming when *not* to call it or pointing to an alternative path (e.g., how to create the passport block first), so it is clear context rather than a full decision rule.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.