Skip to main content
Glama

set_secret

Store secrets with quantum-inspired features like time-based decay, environment-specific values, and organizational tags to prevent plaintext leaks in development workflows.

Instructions

Store a secret with optional quantum metadata: TTL (decay), environment state (superposition), description, tags.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyYesThe secret key name
valueYesThe secret value
scopeNoScope: global or projectglobal
projectPathNoProject root path for project-scoped secrets
envNoIf provided, sets the value for this specific environment (superposition)
ttlSecondsNoTime-to-live in seconds (quantum decay)
descriptionNoHuman-readable description
tagsNoTags for organization

Implementation Reference

  • The implementation of `setSecret` which handles creating, updating, and propagating entangled secrets in the keyring.
    export function setSecret(
      key: string,
      value: string,
      opts: SetSecretOptions = {},
    ): void {
      const scope = opts.scope ?? "global";
      const scopes = resolveScope({ ...opts, scope });
      const { service } = scopes[0];
      const source = opts.source ?? "cli";
    
      // Check if there's an existing envelope to preserve metadata
      const existing = readEnvelope(service, key);
    
      let envelope: QuantumEnvelope;
    
      if (opts.states) {
        envelope = createEnvelope("", {
          states: opts.states,
          defaultEnv: opts.defaultEnv,
          description: opts.description,
          tags: opts.tags,
          ttlSeconds: opts.ttlSeconds,
          expiresAt: opts.expiresAt,
          entangled: existing?.meta.entangled,
        });
      } else {
        envelope = createEnvelope(value, {
          description: opts.description,
          tags: opts.tags,
          ttlSeconds: opts.ttlSeconds,
          expiresAt: opts.expiresAt,
          entangled: existing?.meta.entangled,
        });
      }
    
      // Preserve access count from existing
      if (existing) {
        envelope.meta.createdAt = existing.meta.createdAt;
        envelope.meta.accessCount = existing.meta.accessCount;
      }
    
      writeEnvelope(service, key, envelope);
      logAudit({ action: "write", key, scope, source });
    
      // Propagate to entangled secrets
      const entangled = findEntangled({ service, key });
      for (const target of entangled) {
        try {
          const targetEnvelope = readEnvelope(target.service, target.key);
          if (targetEnvelope) {
            if (opts.states) {
              targetEnvelope.states = opts.states;
            } else {
              targetEnvelope.value = value;
            }
            targetEnvelope.meta.updatedAt = new Date().toISOString();
            writeEnvelope(target.service, target.key, targetEnvelope);
            logAudit({
              action: "entangle",
              key: target.key,
              scope: "global",
              source,
              detail: `propagated from ${key}`,
            });
          }
        } catch {
          // entangled target may not exist
        }
      }
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/I4cTime/quantum_ring'

If you have feedback or need assistance with the MCP directory API, please join our Discord server