Skip to main content
Glama

q-ring

The first quantum-inspired keyring built specifically for AI coding agents.

NPM Version Docs MCP Tools License

Stop pasting API keys into plain-text .env files or wrestling with clunky secret managers. q-ring securely anchors your credentials to your OS's native vault (macOS Keychain, Linux Secret Service, Windows Credential Vault) and supercharges them with mechanics from quantum physics.

📖 View the Official Documentation for a complete CLI reference, MCP prompt cookbooks, and architecture details.

Why q-ring?

  • Superposition: Store one key with multiple states (dev/staging/prod) that collapse based on context.

  • Entanglement: Link keys across projects so rotating one automatically updates them all.

  • Tunneling: Create ephemeral, in-memory secrets that self-destruct after a set time or read count.

  • Teleportation: Securely pack and share AES-256-GCM encrypted secret bundles.

  • Seamless AI Integration: 44 built-in MCP tools for native use in Cursor, Kiro, and Claude Code.

🚀 Installation

q-ring is designed to be installed globally so it's available anywhere in your terminal. Pick your favorite package manager:

# pnpm (recommended)
pnpm add -g @i4ctime/q-ring

# npm
npm install -g @i4ctime/q-ring

# yarn
yarn global add @i4ctime/q-ring

# Homebrew (macOS / Linux)
brew install i4ctime/tap/qring

Related MCP server: Vaulted MCP Server

⚡ Quick Start

# 1️⃣ Store a secret (prompts securely if value is omitted)
qring set OPENAI_API_KEY sk-...

# 2️⃣ Retrieve it anytime
qring get OPENAI_API_KEY

# 3️⃣ List all keys (values are never shown)
qring list

# 4️⃣ Generate a cryptographic secret and save it
qring generate --format api-key --prefix "sk-" --save MY_KEY

# 5️⃣ Run a full health scan
qring health

Quantum Features

Superposition — One Key, Multiple Environments

A single secret can hold different values for dev, staging, and prod simultaneously. The correct value resolves based on your current context.

# Set environment-specific values
qring set API_KEY "sk-dev-123" --env dev
qring set API_KEY "sk-stg-456" --env staging
qring set API_KEY "sk-prod-789" --env prod

# Value resolves based on context
QRING_ENV=prod qring get API_KEY   # → sk-prod-789
QRING_ENV=dev  qring get API_KEY   # → sk-dev-123

# Inspect the quantum state
qring inspect API_KEY

Wavefunction Collapse — Smart Environment Detection

q-ring auto-detects your environment without explicit flags. Resolution order:

  1. --env flag

  2. QRING_ENV environment variable

  3. NODE_ENV environment variable

  4. Git branch heuristics (main/master → prod, develop → dev)

  5. .q-ring.json project config

  6. Default environment from the secret

# See what environment q-ring detects
qring env

# Project config (.q-ring.json)
echo '{"env": "staging", "branchMap": {"release/*": "staging"}}' > .q-ring.json

Quantum Decay — Secrets with TTL

Secrets can have a time-to-live. Expired secrets are blocked from reads. Stale secrets (75%+ lifetime) trigger warnings.

# Set a secret that expires in 1 hour
qring set SESSION_TOKEN "tok-..." --ttl 3600

# Set with explicit expiry
qring set CERT_KEY "..." --expires "2026-06-01T00:00:00Z"

# Health check shows decay status
qring health

Observer Effect — Audit Everything

Every secret read, write, and delete is logged with a tamper-evident hash chain. Access patterns are tracked for anomaly detection.

# View audit log
qring audit
qring audit --key OPENAI_KEY --limit 50

# Detect anomalies (burst access, unusual hours, chain tampering)
qring audit --anomalies

# Verify audit chain integrity
qring audit:verify

# Export audit log
qring audit:export --format json --since 2026-03-01
qring audit:export --format csv --output audit-report.csv

Quantum Noise — Secret Generation

Generate cryptographically strong secrets in common formats.

qring generate                          # API key (default)
qring generate --format password -l 32  # Strong password
qring generate --format uuid            # UUID v4
qring generate --format token           # Base64url token
qring generate --format hex -l 64       # 64-byte hex
qring generate --format api-key --prefix "sk-live-" --save STRIPE_KEY

Entanglement — Linked Secrets

Link secrets across projects. When you rotate one, all entangled copies update automatically.

# Entangle two secrets
qring entangle API_KEY API_KEY_BACKUP

# Now updating API_KEY also updates API_KEY_BACKUP
qring set API_KEY "new-value"

# Unlink entangled secrets
qring disentangle API_KEY API_KEY_BACKUP

Tunneling — Ephemeral Secrets

Create secrets that exist only in memory. They never touch disk. Optional TTL and max-read self-destruction.

# Create an ephemeral secret (returns tunnel ID)
qring tunnel create "temporary-token-xyz" --ttl 300 --max-reads 1

# Read it (self-destructs after this read)
qring tunnel read tun_abc123

# List active tunnels
qring tunnel list

Teleportation — Encrypted Sharing

Pack secrets into AES-256-GCM encrypted bundles for secure transfer between machines.

# Pack secrets (prompts for passphrase)
qring teleport pack --keys "API_KEY,DB_PASS" > bundle.txt

# On another machine: unpack (prompts for passphrase)
cat bundle.txt | qring teleport unpack

# Preview without importing
qring teleport unpack <bundle> --dry-run

Import — Bulk Secret Ingestion

Import secrets from .env files directly into q-ring. Supports standard dotenv syntax including comments, quoted values, and escape sequences.

# Import all secrets from a .env file
qring import .env

# Import to project scope, skipping existing keys
qring import .env --project --skip-existing

# Preview what would be imported
qring import .env --dry-run

Selective Export

Export only the secrets you need using key names or tag filters.

# Export specific keys
qring export --keys "API_KEY,DB_PASS,REDIS_URL"

# Export by tag
qring export --tags "backend"

# Combine with format
qring export --keys "API_KEY,DB_PASS" --format json

Secret Search and Filtering

Filter qring list output by tag, expiry state, or key pattern.

# Filter by tag
qring list --tag backend

# Show only expired secrets
qring list --expired

# Show only stale secrets (75%+ decay)
qring list --stale

# Glob pattern on key name
qring list --filter "API_*"

Project Secret Manifest

Declare required secrets in .q-ring.json and validate project readiness with a single command.

# Validate project secrets against the manifest
qring check

# See which secrets are present, missing, expired, or stale
qring check --project-path /path/to/project

Env File Sync

Generate a .env file from the project manifest, resolving each key from q-ring with environment-aware superposition collapse.

# Generate to stdout
qring env:generate

# Write to a file
qring env:generate --output .env

# Force a specific environment
qring env:generate --env staging --output .env.staging

Secret Liveness Validation

Test if a secret is actually valid with its target service. q-ring auto-detects the provider from key prefixes (sk- → OpenAI, ghp_ → GitHub, etc.) or accepts an explicit provider name.

# Validate a single secret
qring validate OPENAI_API_KEY

# Force a specific provider
qring validate SOME_KEY --provider stripe

# Validate all secrets with detectable providers
qring validate --all

# Only validate manifest-declared secrets
qring validate --all --manifest

# List available providers
qring validate --list-providers

Built-in providers: OpenAI, Stripe, GitHub, AWS (format check), Generic HTTP.

Output:

  ✓ OPENAI_API_KEY   valid    (openai, 342ms)
  ✗ STRIPE_KEY       invalid  (stripe, 128ms) — API key has been revoked
  ⚠ AWS_ACCESS_KEY   error    (aws, 10002ms) — network timeout
  ○ DATABASE_URL     unknown  — no provider detected

Hooks — Callbacks on Secret Change

Register webhooks, shell commands, or process signals that fire when secrets are created, updated, or deleted. Supports key matching, glob patterns, tag filtering, and scope constraints.

# Run a shell command when a secret changes
qring hook add --key DB_PASS --exec "docker restart app"

# POST to a webhook on any write/delete
qring hook add --key API_KEY --url "https://hooks.example.com/rotate"

# Trigger on all secrets tagged "backend"
qring hook add --tag backend --exec "pm2 restart all"

# Signal a process when DB secrets change
qring hook add --key-pattern "DB_*" --signal-target "node"

# List all hooks
qring hook list

# Remove a hook
qring hook remove <id>

# Enable/disable
qring hook enable <id>
qring hook disable <id>

# Dry-run test a hook
qring hook test <id>

Hooks are fire-and-forget: a failing hook never blocks secret operations. The hook registry is stored at ~/.config/q-ring/hooks.json.

SSRF protection: HTTP hook URLs targeting private/loopback IP ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, ::1, fc00::/7) are blocked by default. DNS resolution is checked before the request is sent. To allow hooks targeting local services (e.g. during development), set the environment variable Q_RING_ALLOW_PRIVATE_HOOKS=1.

Configurable Rotation

Set a rotation format per secret so the agent auto-rotates with the correct value shape.

# Store a secret with rotation format metadata
qring set STRIPE_KEY "sk-..." --rotation-format api-key --rotation-prefix "sk-"

# Store a password with password rotation format
qring set DB_PASS "..." --rotation-format password

Secure Execution & Auto-Redaction

Run commands with secrets securely injected into the environment. All known secret values are automatically redacted from stdout and stderr to prevent leaking into terminal logs or agent transcripts. Exec profiles restrict which commands may be run.

# Execute a deployment script with secrets injected
qring exec -- npm run deploy

# Inject only specific tags
qring exec --tags backend -- node server.js

# Run with a restricted profile (blocks curl/wget/ssh, 30s timeout)
qring exec --profile restricted -- npm test

Codebase Secret Scanner

Migrating a legacy codebase? Quickly scan directories for hardcoded credentials using regex heuristics and Shannon entropy analysis.

# Scan current directory
qring scan .

Output:

  ✗ src/db/connection.js:12
    Key:     DB_PASSWORD
    Entropy: 4.23
    Context: const DB_PASSWORD = "..."

Composite / Templated Secrets

Store complex connection strings that dynamically resolve other secrets. If DB_PASS rotates, DB_URL is automatically correct without manual updates.

qring set DB_USER "admin"
qring set DB_PASS "supersecret"
qring set DB_URL "postgres://{{DB_USER}}:{{DB_PASS}}@localhost/mydb"

# Resolves embedded templates automatically
qring get DB_URL 
# Output: postgres://admin:supersecret@localhost/mydb

User Approvals (Zero-Trust Agent)

Protect sensitive production secrets from being read autonomously by the MCP server without explicit user approval. Each approval token is HMAC-verified, scoped, reasoned, and time-limited.

# Mark a secret as requiring approval
qring set PROD_DB_URL "..." --requires-approval

# Temporarily grant MCP access for 1 hour with a reason
qring approve PROD_DB_URL --for 3600 --reason "deploying v2.0"

# List all approvals with verification status
qring approvals

# Revoke an approval
qring approve PROD_DB_URL --revoke

Just-In-Time (JIT) Provisioning

Instead of storing static credentials, configure q-ring to dynamically generate short-lived tokens on the fly when requested (e.g. AWS STS, generic HTTP endpoints).

# Store the STS role configuration
qring set AWS_TEMP_KEYS '{"roleArn":"arn:aws:iam::123:role/AgentRole", "durationSeconds":3600}' --jit-provider aws-sts

# Resolving the secret automatically assumes the role and caches the temporary token
qring get AWS_TEMP_KEYS

Project Context for AI Agents

A safe, redacted overview of the project's secrets, configuration, and state. Designed to be fed into an AI agent's system prompt without ever exposing secret values.

# Human-readable summary
qring context

# JSON output (for MCP / programmatic use)
qring context --json

Secret-Aware Linter

Scan specific files for hardcoded secrets with optional auto-fix. When --fix is used, detected secrets are replaced with process.env.KEY references and stored in q-ring.

# Lint files for hardcoded secrets
qring lint src/config.ts src/db.ts

# Auto-fix: replace hardcoded values and store in q-ring
qring lint src/config.ts --fix

# Scan entire directory with auto-fix
qring scan . --fix

Agent Memory

Encrypted, persistent key-value store that survives across AI agent sessions. Useful for remembering rotation history, project decisions, or context.

# Store a memory
qring remember last_rotation "Rotated STRIPE_KEY on 2026-03-21"

# Retrieve it
qring recall last_rotation

# List all memories
qring recall

# Forget
qring forget last_rotation

Pre-Commit Secret Scanning

Install a git pre-commit hook that automatically blocks commits containing hardcoded secrets.

# Install the hook
qring hook:install

# Uninstall
qring hook:uninstall

Secret Analytics

Analyze usage patterns and get optimization suggestions for your secrets.

qring analyze

Output includes most accessed secrets, unused/stale secrets, scope optimization suggestions, and rotation recommendations.

Service Setup Wizard

Quickly set up a new service integration with secrets, manifest entries, and hooks in one command.

# Create secrets for a new Stripe integration
qring wizard stripe --keys STRIPE_KEY,STRIPE_SECRET --provider stripe --tags payment

# With a hook to restart the app on change
qring wizard myservice --hook-exec "pm2 restart app"

Governance Policy

Define project-level governance rules in .q-ring.json to control which MCP tools can be used, which keys are accessible, and which commands can be executed. Policy is enforced at both the MCP server and keyring level.

# View the active policy
qring policy

# JSON output
qring policy --json

Example policy in .q-ring.json:

{
  "policy": {
    "mcp": {
      "denyTools": ["delete_secret"],
      "deniedKeys": ["PROD_DB_PASSWORD"],
      "deniedTags": ["production"]
    },
    "exec": {
      "denyCommands": ["curl", "wget", "ssh"],
      "maxRuntimeSeconds": 30
    },
    "secrets": {
      "requireApprovalForTags": ["production"],
      "maxTtlSeconds": 86400
    }
  }
}

Exec Profiles

Restrict command execution with named profiles that control allowed commands, network access, timeouts, and environment sanitization.

# Run with the "restricted" profile (blocks curl, wget, ssh; 30s timeout)
qring exec --profile restricted -- npm test

# Run with the "ci" profile (5min timeout, allows network)
qring exec --profile ci -- npm run deploy

# Default: unrestricted
qring exec -- echo "hello"

Built-in profiles: unrestricted, restricted (no network tools, 30s limit), ci (5min limit, blocks destructive commands).

Tamper-Evident Audit

Every audit event includes a SHA-256 hash of the previous event, creating a tamper-evident chain. Verify integrity and export logs in multiple formats.

# Verify the entire audit chain
qring audit:verify

# Export as JSON
qring audit:export --format json --since 2026-03-01

# Export as CSV
qring audit:export --format csv --output audit-report.csv

Team & Org Scopes

Extend beyond global and project scopes with team and org scopes for shared secrets across groups. Resolution order: project → team → org → global (most specific wins).

# Store a secret in team scope
qring set SHARED_API_KEY "sk-..." --team my-team

# Store in org scope
qring set ORG_LICENSE "lic-..." --org acme-corp

# Resolution cascades: project > team > org > global
qring get API_KEY --team my-team --org acme-corp

Issuer-Native Rotation

Attempt provider-native secret rotation (for providers that support it) or fall back to local generation.

# Rotate via the detected provider
qring rotate STRIPE_KEY

# Force a specific provider
qring rotate API_KEY --provider openai

CI Secret Validation

Batch-validate all secrets against their providers in a CI-friendly mode. Returns a structured pass/fail report with exit code 1 on failure.

# Validate all secrets (CI mode)
qring ci:validate

# JSON output for pipeline parsing
qring ci:validate --json

Agent Mode — Autonomous Monitoring

A background daemon that continuously monitors secret health, detects anomalies, and optionally auto-rotates expired secrets.

# Start the agent
qring agent --interval 60 --verbose

# With auto-rotation of expired secrets
qring agent --auto-rotate

# Single scan (for CI/cron)
qring agent --once

Quantum Status Dashboard — Live Monitoring

Launch a real-time dashboard in your browser that turns the entire quantum subsystem into one glanceable page. The dashboard is a single self-contained HTML page served locally — no dependencies, no cloud, no config — and streams updates every 5 seconds via Server-Sent Events while preserving search input and scroll position across ticks.

What you get:

  • KPI strip — total secrets, detected environment, protected count, active approvals, hooks, 24-hour reads, and live anomaly count.

  • Health summary — donut chart of healthy / stale / expired / no-decay secrets plus per-scope counts (global / project / team / org).

  • Environment — wavefunction collapse details: detected env, source, branch, and any project context.

  • Manifest.q-ring.json summary with declared / required / missing / expired / stale keys.

  • Policy — at-a-glance view of MCP, exec, and secret policies (allow/deny tools, deny keys/tags, allow/deny commands, approval & rotation requirements).

  • Secrets table — searchable, sortable view of every secret (key, scope, env, type, decay, tags, last read), with quick chips for expired, stale, and protected filters. Press / to focus the search box.

  • Quantum cards — decay timers, superposition states, entanglement pairs, and active quantum tunnels.

  • Approvals & hooks — live list of valid (and tampered) approval grants and every registered hook with its match summary.

  • Agent memory — count of encrypted memory keys persisted at ~/.config/q-ring/agent-memory.enc.

  • Anomaly alerts — burst reads, off-hours access, tampered audit chain, and other suspicious patterns.

  • Audit log (24h) — filterable feed with action chips (read/write/delete/export), source chips (cli/mcp/hook/agent), and a free-text filter.

Top-bar controls let you pause SSE updates (handy while reading the audit feed), refresh on demand, or jump to the raw JSON snapshot at /api/status. Keyboard shortcuts: / focus secrets search · P pause · R refresh.

# Open the dashboard (auto-launches your browser)
qring status

# Specify a custom port
qring status --port 4200

# Don't auto-open the browser
qring status --no-open

MCP Server

q-ring includes a full MCP server with 44 tools for AI agent integration.

Core Tools

Tool

Description

get_secret

Retrieve with superposition collapse + observer logging

list_secrets

List keys with quantum metadata, filterable by tag/expiry/pattern

set_secret

Store with optional TTL, env state, tags, rotation format

delete_secret

Remove a secret

has_secret

Boolean check (respects decay)

export_secrets

Export as .env/JSON with optional key and tag filters

import_dotenv

Parse and import secrets from .env content

check_project

Validate project secrets against .q-ring.json manifest

env_generate

Generate .env content from the project manifest

Quantum Tools

Tool

Description

inspect_secret

Full quantum state (states, decay, entanglement, access count)

detect_environment

Wavefunction collapse — detect current env context

generate_secret

Quantum noise — generate and optionally save secrets

entangle_secrets

Link two secrets for synchronized rotation

disentangle_secrets

Remove entanglement between two secrets

Tunneling Tools

Tool

Description

tunnel_create

Create ephemeral in-memory secret

tunnel_read

Read (may self-destruct)

tunnel_list

List active tunnels

tunnel_destroy

Immediately destroy

Teleportation Tools

Tool

Description

teleport_pack

Encrypt secrets into a portable bundle

teleport_unpack

Decrypt and import a bundle

Validation Tools

Tool

Description

validate_secret

Test if a secret is valid with its target service (OpenAI, Stripe, GitHub, etc.)

list_providers

List all available validation providers

Hook Tools

Tool

Description

register_hook

Register a shell/HTTP/signal callback on secret changes

list_hooks

List all registered hooks with match criteria and status

remove_hook

Remove a registered hook by ID

Execution & Scanning Tools

Tool

Description

exec_with_secrets

Run a shell command securely with secrets injected, auto-redacted output, and exec profile enforcement

scan_codebase_for_secrets

Scan a directory for hardcoded secrets using regex heuristics and entropy analysis

lint_files

Lint specific files for hardcoded secrets with optional auto-fix

AI Agent Tools

Tool

Description

get_project_context

Safe, redacted overview of project secrets, environment, manifest, and activity

agent_remember

Store a key-value pair in encrypted agent memory (persists across sessions)

agent_recall

Retrieve from agent memory, or list all stored keys

agent_forget

Delete a key from agent memory

analyze_secrets

Usage analytics: most accessed, stale, unused, and rotation recommendations

Observer & Health Tools

Tool

Description

audit_log

Query access history

detect_anomalies

Scan for unusual access patterns

verify_audit_chain

Verify tamper-evident hash chain integrity

export_audit

Export audit events in jsonl, json, or csv format

health_check

Full health report

status_dashboard

Launch the quantum status dashboard (SSE) — live KPIs, health, secrets table, manifest, policy, approvals, hooks, agent memory, anomalies, and audit feed

agent_scan

Run autonomous agent scan

Governance & Policy Tools

Tool

Description

check_policy

Check if an action (tool use, key read, exec) is allowed by project policy

get_policy_summary

Get a summary of the project's governance policy configuration

rotate_secret

Attempt issuer-native rotation via detected or specified provider

ci_validate_secrets

CI-oriented batch validation of all secrets with structured pass/fail report

Cursor / Kiro Configuration

Add to .cursor/mcp.json or .kiro/mcp.json:

If q-ring is installed globally (e.g. pnpm add -g @i4ctime/q-ring):

{
  "mcpServers": {
    "q-ring": {
      "command": "qring-mcp"
    }
  }
}

If using a local clone:

{
  "mcpServers": {
    "q-ring": {
      "command": "node",
      "args": ["/path/to/quantum_ring/dist/mcp.js"]
    }
  }
}

Claude Code Configuration

Add to ~/.claude/claude_desktop_config.json:

Global install:

{
  "mcpServers": {
    "q-ring": {
      "command": "qring-mcp"
    }
  }
}

Local clone:

{
  "mcpServers": {
    "q-ring": {
      "command": "node",
      "args": ["/path/to/quantum_ring/dist/mcp.js"]
    }
  }
}

Editor Plugins

The q-ring repo ships three first-party editor packs — each one adds rules/steering, agents, commands, skills, hooks, and the MCP connector to its host editor.

Plugin

Editor

Highlights

cursor-plugin/

Cursor

3 rules, 5 skills, 2 agents, 8 slash commands, 3 hooks, MCP autoconnect

kiro-plugin/

Kiro

Official Power layout: POWER.md, root mcp.json, steering/, hooks/; or flatten with plugin:sync:kiro

claude-code-plugin/

Claude Code

CLAUDE.md memory, project .mcp.json, 2 subagents, 8 slash commands, 5 skills, 3 hook scripts

Cursor Plugin

The q-ring Cursor Plugin brings quantum secret management directly into your IDE with rules, skills, agents, commands, hooks, and a built-in MCP connector.

Component

What it does

3 Rules

Always-on guidance: never hardcode secrets, use q-ring for all ops, warn about .env files

5 Skills

Auto-triggered by context: secret management, scanning, rotation, project onboarding, exec-with-secrets

2 Agents

security-auditor (proactive monitoring) and secret-ops (day-to-day assistant)

8 Commands

/qring:scan-secrets, /qring:health-check, /qring:rotate-expired, /qring:setup-project, /qring:teleport-secrets, /qring:dashboard, /qring:exec-safe, /qring:analyze

3 Hooks

afterFileEdit (lint scan), sessionStart (project context), beforeShellExecution (.env guard)

MCP Connector

Auto-connects to qring-mcp via stdio — all 44 tools available

Install from the Cursor marketplace or see cursor-plugin/README.md for manual setup.

Kiro Plugin (Power)

The kiro-plugin/ directory is a Kiro Power per Create powers: POWER.md (metadata, onboarding, steering map), root mcp.json (MCP server must match the server name referenced in the power), and steering/ for workflows. Install from Kiro → PowersAdd power from Local Path and select kiro-plugin, or publish the folder on GitHub and use Add power from GitHub.

Always-on steering blocks hardcoded secrets and routes everything through q-ring; manual steering files act as agent personas (#qring-secret-ops, #qring-security-auditor), skill packs, and slash-style commands (#qring-cmd-scan-secrets, etc.). Optional hooks live in hooks/ for copy into .kiro/hooks/.

# Alternative: flatten into ~/.kiro (settings + steering + hooks)
pnpm run plugin:sync:kiro

# Or scope to a single project
pnpm run plugin:sync:kiro -- /path/to/your/project/.kiro

See kiro-plugin/README.md for the full breakdown.

Claude Code Plugin

For Claude Code, q-ring ships a CLAUDE.md memory file, a project-scoped .mcp.json, two subagents (secret-ops, security-auditor), eight slash commands (/qring-scan-secrets, /qring-health-check, …), five skills, and three hooks (post-edit lint reminder, pre-Bash .env guard, session-start context primer).

# Install into the current project ($PWD)
pnpm run plugin:sync:claude

# Install agents/commands/skills/hooks at user scope (~/.claude)
pnpm run plugin:sync:claude -- --user

# Or target a specific project
pnpm run plugin:sync:claude -- /path/to/your/project

Existing CLAUDE.md, .mcp.json, or .claude/settings.json files are never silently overwritten — the script writes a <filename>.qring-template next to them so you can merge by hand. Pass --force to overwrite.

See claude-code-plugin/README.md for the full breakdown.

Architecture

qring CLI ─────┐
               ├──▶ Core Engine ──▶ @napi-rs/keyring ──▶ OS Keyring
MCP Server ────┘       │
                       ├── Envelope (quantum metadata)
                       ├── Scope Resolver (global / project / team / org)
                       ├── Collapse (env detection + branchMap globs)
                       ├── Observer (tamper-evident audit chain)
                       ├── Policy (governance-as-code engine)
                       ├── Noise (secret generation)
                       ├── Entanglement (cross-secret linking)
                       ├── Validate (provider-based liveness + rotation)
                       ├── Hooks (shell/HTTP/signal callbacks)
                       ├── Import (.env file ingestion)
                       ├── Exec (profile-restricted injection + redaction)
                       ├── Scan (codebase entropy heuristics)
                       ├── Provision (JIT ephemeral credentials)
                       ├── Approval (HMAC-verified zero-trust tokens)
                       ├── Context (safe redacted project view)
                       ├── Linter (secret-aware code scanning)
                       ├── Memory (encrypted agent persistence)
                       ├── Tunnel (ephemeral in-memory)
                       ├── Teleport (encrypted sharing)
                       ├── Agent (autonomous monitor + rotation)
                       └── Dashboard (live status via SSE)

Project Config (.q-ring.json)

Optional per-project configuration:

{
  "env": "dev",
  "defaultEnv": "dev",
  "branchMap": {
    "main": "prod",
    "develop": "dev",
    "staging": "staging",
    "release/*": "staging",
    "feature/*": "dev"
  },
  "secrets": {
    "OPENAI_API_KEY": { "required": true, "description": "OpenAI API key", "format": "api-key", "prefix": "sk-", "provider": "openai" },
    "DATABASE_URL": { "required": true, "description": "Postgres connection string", "validationUrl": "https://api.example.com/health" },
    "SENTRY_DSN": { "required": false, "description": "Sentry error tracking" }
  },
  "policy": {
    "mcp": {
      "denyTools": ["delete_secret"],
      "deniedKeys": ["PROD_DB_PASSWORD"],
      "deniedTags": ["production"]
    },
    "exec": {
      "denyCommands": ["curl", "wget"],
      "maxRuntimeSeconds": 60
    }
  }
}
  • branchMap supports glob patterns with * wildcards (e.g., release/* matches release/v1.0)

  • secrets declares the project's required secrets — use qring check to validate, qring env:generate to produce a .env file

  • provider associates a liveness validation provider with a secret (e.g., "openai", "stripe", "github") — use qring validate to test

  • validationUrl configures the generic HTTP provider's endpoint for custom validation

  • policy defines governance rules for MCP tool gating, key access restrictions, exec allowlists, and secret lifecycle requirements

Contributing

  • Run pnpm run lint, pnpm run typecheck, and pnpm run test:ci before opening a PR.

  • Tests or sandboxes can point the audit log elsewhere with QRING_AUDIT_DIR (directory is created if missing); default is ~/.config/q-ring/audit.jsonl.

  • Optional local pre-commit: qring hook:install (uses this package’s precommit hook when qring is on your PATH).

  • After changing one of the editor plugins:

    • Cursor: pnpm run plugin:sync copies cursor-plugin/ to ~/.cursor/plugins/local/my-plugin (or pass a custom path).

    • Kiro: pnpm run plugin:sync:kiro copies kiro-plugin/mcp.json~/.kiro/settings/mcp.json, plus steering/ and hooks/ (or pass a project .kiro path). Prefer adding kiro-plugin/ as a Power from the Powers panel instead.

    • Claude Code: pnpm run plugin:sync:claude copies claude-code-plugin/ into the current directory (or pass a project path; add --user to install at ~/.claude/).

  • See also docs/cli-mcp-parity.md.

📜 License

AGPL-3.0 - Free to use, modify, and share. Any derivative work or hosted service must release its source code under the same license.

Available Tools

44 tools
agent_forgetA
DestructiveIdempotent

[agent] Permanently delete a single key from encrypted agent memory. Use to retract obsolete or misremembered context; prefer overwriting via agent_remember when you just want to update the value, and use delete_secret for actual credentials (which never live in agent memory). Destructive: there is no recycle bin. Returns 'Forgot "KEY"' on success or a not-found error if the key was already absent.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesMemory key to delete.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: there is no recycle bin, deletion is permanent, what the success string looks like, and that an already-absent key yields a not-found error rather than a silent success.

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?

Three sentences, front-loaded with the destructive action and its scope, then the routing guidance, then the return contract. Every clause earns its place; 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?

With no output schema, the description usefully documents the return contract ('Forgot "KEY"' / not-found error), and for a one-parameter destructive tool the combination of annotations plus the permanent/no-recycle-bin note is fully sufficient.

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 coverage is 100% for the single 'key' parameter, so the schema already carries the meaning. The description adds only 'from encrypted agent memory' as scope context, with no key-format or naming-convention guidance. Baseline 3 applies when the schema does the work.

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 specific verb and resource ('Permanently delete a single key from encrypted agent memory') and explicitly distinguishes itself from the two most confusable siblings, agent_remember and delete_secret. An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('retract obsolete or misremembered context') and when-not-to-use, naming both alternatives with the condition that selects each (agent_remember for value updates, delete_secret for real credentials). Nothing is left to inference.

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

agent_recallA
Read-onlyIdempotent

[agent] Read a value from encrypted agent memory, or list every stored key when no specific key is supplied. Use at the start of an agent loop to rehydrate prior context, or to look up a single remembered fact; prefer get_project_context for a redacted overview of secrets and get_secret for actual credential values. Read-only. With a key argument: returns JSON { ok, data: { key, value } } or a not-found error. Without key: returns a JSON listing of every stored key (no values), or 'Agent memory is empty'.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoMemory key to read. Omit to list every stored key (without values).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so 'Read-only' is redundant. However, with no output schema, the description adds real value by specifying the return shapes ({ ok, data: { key, value } } vs. a key listing with no values), the not-found error path, and the 'Agent memory is empty' state.

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-loads the core verb and dual mode, then layers usage and return details efficiently. Dense but every clause carries information; only the redundant 'Read-only' line could be trimmed against the annotations.

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?

With no output schema, the description fully covers what the tool returns and its error/empty states, and it names the siblings to use for credential or overview needs. An agent has everything required to select and call it correctly.

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% and the single `key` parameter is documented there, so the baseline is 3. The description restates that omitting key lists keys without values, adding little beyond the schema's own wording.

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 specific verb (read) and resource (encrypted agent memory) and covers both modes: value lookup with a key and key listing without one. It is immediately distinguishable from siblings like agent_remember and agent_forget, and the dual behavior is unambiguous.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('start of an agent loop to rehydrate prior context', 'look up a single remembered fact') and routes to alternatives ('prefer get_project_context for a redacted overview of secrets and get_secret for actual credential values'). Both the trigger and the exclusions are stated.

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

agent_rememberA
DestructiveIdempotent

[agent] Persist a non-secret key/value note in encrypted, on-disk agent memory that survives across MCP sessions. Use to record stable agent context — last rotation date for a key, the user's deployment preferences, decisions taken in earlier sessions; do NOT use this to store secrets (use set_secret instead) and prefer chat scratchpad for purely transient state. Mutates the encrypted memory store. Idempotent: rewriting the same key with a new value simply overwrites. Returns 'Remembered "KEY"' on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesMemory key (free-form string). Convention: lowercase dotted namespaces, e.g. 'project.lastDeploy'.
valueYesPlain-string value to store. JSON-stringify structured data on the caller side if needed.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=true), and the description adds context beyond them: persistence across MCP sessions, encrypted on-disk storage, that overwriting the same key destroys the prior value, and the exact success return string.

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-loads purpose, then usage constraints, then behavioral notes; every clause carries information (persistence, secrecy exclusion, idempotency, return value) with 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?

A two-parameter, no-output-schema tool whose full behavioral contract — storage location, persistence, mutation semantics, return value, and correct-vs-wrong usage — is stated, leaving nothing an agent needs to call it correctly.

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% and both parameters are documented there, including a naming convention. The description adds no syntax or format detail for key/value, so the baseline of 3 applies.

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?

Names a specific verb and resource ('Persist a non-secret key/value note in encrypted, on-disk agent memory') and immediately distinguishes itself from set_secret and the chat scratchpad, so an agent can identify it without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use examples ('last rotation date for a key', 'deployment preferences', 'decisions taken in earlier sessions'), an explicit when-not ('do NOT use this to store secrets'), and names the alternative tools (`set_secret`, chat scratchpad) with the condition that selects each.

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

agent_scanA
Destructive

[agent] Run a multi-project health pass that gathers decay status, audit anomalies, and .q-ring.json manifest gaps across one or more project paths and (optionally) auto-rotates expired secrets with freshly generated values. Use as the canonical 'agent maintenance loop' across a portfolio of repos; prefer health_check for a single read-only scope, detect_anomalies for audit-only triage, and check_project for a single-project manifest check. With autoRotate=false (default) this is read-only. With autoRotate=true it OVERWRITES expired secret values in the keyring with generated replacements — credential changes that may break upstream integrations until they are propagated. Subject to tool policy. Returns a JSON report of per-project findings and any rotations performed.

ParametersJSON Schema
NameRequiredDescriptionDefault
autoRotateNoIf true, replace expired secrets with newly generated values (using each secret's `rotationFormat`/`rotationPrefix`). Only enable when intentional rotation is desired — this is destructive on the upstream side.
projectPathsNoList of absolute project roots to scan. Defaults to `[server.cwd]` when omitted.

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses that autoRotate=false (default) is read-only, that autoRotate=true OVERWRITES expired secret values with generated replacements, and that this may break upstream integrations until propagated. It also flags 'Subject to tool policy' and describes the return payload, adding real behavioral context over the destructiveHint/readOnlyHint flags.

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?

The sentence is long but front-loads the core action and scoping, then layers alternatives and the destructive caveat. Density is high with little filler, though the single-sentence structure is heavy and could be broken up.

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?

Without an output schema, the description still states what is returned ('a JSON report of per-project findings and any rotations performed'). Combined with the safety, scope, and alternative guidance, an agent has everything needed to call this correctly.

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 adds meaning beyond the schema: it clarifies that autoRotate's default keeps the call read-only and that enabling it is destructive on the upstream side, reinforcing the schema's own note. projectPaths defaults are already documented in the schema, so the gain is modest.

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 specific verb and resource ('multi-project health pass' gathering decay status, audit anomalies, manifest gaps) with an explicit optional mutation mode. It names the sibling tools it is not (health_check, detect_anomalies, check_project) and the scoping difference, so an agent can distinguish it without opening schemas.

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

Usage Guidelines5/5

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

Explicitly frames itself as the canonical 'agent maintenance loop' for a portfolio of repos, then routes the agent to three alternatives with the condition that selects each ('single read-only scope', 'audit-only triage', 'single-project manifest check'). When-to-use and when-to-use-something-else are both covered.

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

analyze_secretsA
Read-onlyIdempotent

[agent] Cross-reference the secrets in scope with recent audit events to produce a usage profile and rotation/retirement suggestions. Use as a quarterly hygiene check or as input to a planner that decides what to rotate or delete; prefer health_check for decay-only triage and audit_log to inspect access timelines for one key. Read-only; uses the most recent ~500 audit events. Returns JSON { total, expired, stale, neverAccessed: [...], noRotationFormat: [...], mostAccessed: [{ key, reads }] }. neverAccessed and noRotationFormat are good candidates for cleanup or for adding rotation hints.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds meaningful context beyond them: the read-only nature plus the specific data window ('most recent ~500 audit events'). It does not mention rate limits or refresh/ordering semantics, so it stops short of a 5.

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 purpose, then usage, then return shape. It is dense but each sentence carries weight; the single long final section is slightly packed but not wasteful.

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?

For a read-only analysis tool with 100% schema coverage and no output schema, the description supplies the missing return shape ('{ total, expired, stale, neverAccessed... }'), the data window, and guidance on interpreting results, which is everything an agent needs to select and call it correctly.

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%, so all four parameters are already fully documented in the schema (scope enum, orgId, teamId, projectPath with conditions). The description only alludes to 'secrets in scope' and adds no syntax beyond the schema, so the baseline 3 applies.

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?

The description states a specific verb+resource ('cross-reference the secrets in scope with recent audit events') and the concrete output ('usage profile and rotation/retirement suggestions'). It is clearly distinguishable from siblings like health_check and audit_log.

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

Usage Guidelines5/5

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

Explicit when-to-use ('quarterly hygiene check or input to a planner') plus named alternatives and the conditions that select them ('prefer health_check for decay-only triage and audit_log to inspect access timelines for one key'). Nothing is left to inference.

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

audit_logA
Read-onlyIdempotent

[audit] Query the q-ring audit log — a tamper-evident record of every read/write/delete touching a secret. Use to investigate 'who accessed KEY recently?' or to feed an agent the access timeline for a specific credential; prefer detect_anomalies for automated unusual-pattern detection and health_check for decay-state-plus-anomalies in one call. Read-only. Returns one line per event in chronological order, formatted timestamp | action | key | [scope] | env:NAME | detail. Returns 'No audit events found' when the filter matches nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoLimit to events touching this exact key. Omit for the full log.
agentNoLimit to events stamped with this agent label (clientInfo name@version). Omit for all agents.
limitNoMaximum events to return, newest first. Defaults to 20. Increase for deeper investigations.
actionNoLimit to a single action verb (e.g. 'read' to see only reads). Omit for all actions.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered by structured data. The description nevertheless adds the tamper-evident nature, chronological one-line-per-event format, and the exact empty-result string. It doesn't mention pagination behavior, which is a minor remaining gap.

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?

Two dense sentences with no wasted words; the core definition leads, then usage routing, then behavioral details. Slightly packed but well front-loaded and every sentence earns its place.

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?

Complete for a read-only filtered-list tool with no output schema: it defines scope, routes to two alternatives, declares read-only, specifies the return line format and the empty-result message. An agent has everything needed to call and interpret it correctly.

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% and each parameter already documents omit-for-all semantics, so the schema does the heavy lifting. The description adds only the example 'read' for the action filter, which is marginal value. Baseline 3 is appropriate when the schema is fully documented.

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 specific verb (Query) and resource (the q-ring audit log), and immediately characterizes it as 'a tamper-evident record of every read/write/delete touching a secret'. The bracket prefix '[audit]' and the framing make it unmistakably distinct from siblings like export_audit, verify_audit_chain, or detect_anomalies.

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

Usage Guidelines5/5

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

Gives concrete when-to-use examples ('who accessed KEY recently?', feeding an access timeline) and explicitly routes to alternatives: 'prefer detect_anomalies for automated unusual-pattern detection and health_check for decay-state-plus-anomalies'. Names two siblings and the condition selecting each.

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

check_policyA
Read-onlyIdempotent

[policy] Ask whether a single intended action would be allowed by the project's .q-ring.json policy without actually performing it. Use as a dry-run before calling a potentially-blocked tool, attempting to read a sensitive key, or invoking exec_with_secrets with a non-trivial command; prefer get_policy_summary for a one-shot overview of the entire policy. Read-only. Returns JSON { allowed, reason?, policySource } describing the decision. Returns an error 'Missing required parameter for the selected action type' if the matching argument for the chosen action is not supplied.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoSecret key name to evaluate. Required when `action` is 'key_read'.
actionYesWhich policy surface to query. 'tool' = MCP tool gate (needs `toolName`); 'key_read' = secret read gate (needs `key`); 'exec' = exec_with_secrets command gate (needs `command`).
commandNoCommand to evaluate against the exec allowlist/denylist. Required when `action` is 'exec'.
toolNameNoTool id to evaluate, e.g. 'rotate_secret'. Required when `action` is 'tool'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so 'Read-only' adds little; the real value is the disclosed return shape `{ allowed, reason?, policySource }` and the documented error 'Missing required parameter for the selected action type'. It could go further on performance or resolution nuances, but it meaningfully extends beyond annotations.

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-loads the core purpose, then usage guidance, then return/error behavior in a logical order. Slightly dense with a few overlapping clauses (the redundant 'Read-only' plus the long error sentence), but every sentence carries information.

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?

No output schema exists, yet the description supplies the return shape and the key error case, and the routing to `get_policy_summary` closes the main sibling-selection gap. An agent has everything needed to call this correctly.

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%, so each parameter and its action-specific requirement is already fully documented in the schema. The description only restates that the matching argument must be supplied for the chosen `action`, adding no new syntax or format detail beyond the schema baseline.

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 specific verb and resource: ask whether a single intended action would be allowed by the project's `.q-ring.json` policy without performing it. It explicitly distinguishes itself from the sibling `get_policy_summary` by contrasting a single-action dry-run with a whole-policy overview.

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

Usage Guidelines5/5

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

Gives concrete when-to-use triggers (before calling a potentially-blocked tool, reading a sensitive key, or invoking `exec_with_secrets` with a non-trivial command) and names the alternative (`get_policy_summary`) with the condition that selects it. Nothing is left to inference.

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

check_projectA
Read-onlyIdempotent

[project] Compare the keys declared in the project's .q-ring.json manifest against what is actually present in the keyring. Use as the canonical 'is this project ready to run' gate before starting a dev server, deploying, or onboarding a teammate; prefer health_check for a scope-wide decay sweep (no manifest), and agent_scan for multi-project scans with optional auto-rotation. Read-only; does not mutate the keyring or audit log materially beyond a 'list' read. Returns JSON { total, present, missing, expired, stale, ready, secrets: [...] } where ready is true only when nothing is missing or expired. Errors with 'No secrets manifest found in .q-ring.json' if the project has no manifest.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this while adding genuinely new context: it does not mutate the keyring or audit log beyond a 'list' read, and it documents the exact error when no manifest exists. It stops short of describing pagination or the semantics of every returned field, but adds meaningful behavior beyond the annotations.

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 purpose, then routing guidance, behavior, and return shape in that order. It is dense and effective; slightly long, but each sentence carries distinct information rather than restating the name.

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?

Covers purpose, usage, safety profile, return payload shape (including the meaning of `ready`), and the failure case. With annotations covering read-only safety and the return values described inline in the absence of an output schema, an agent has everything needed to call it correctly.

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% and the single `projectPath` parameter is fully documented in the schema, so the baseline is 3. The description adds no format or default detail beyond what the schema already provides.

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 specific verb and resource: comparing keys declared in the project's `.q-ring.json` manifest against the actual keyring. It explicitly distinguishes itself from `health_check` (scope-wide decay sweep, no manifest) and `agent_scan` (multi-project scans), so an agent can select it without opening other schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use context ('is this project ready to run' gate before dev server, deploy, or onboarding) and names the two alternatives with the conditions that select them. Nothing is left to inference.

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

ci_validate_secretsA
Read-onlyIdempotent

[validation] Validate every accessible secret in the requested scope against its detected provider in a single batch and return a structured pass/fail report. Use as a CI gate ('do all our credentials still work before deploy?') or as a pre-rotation health pass; prefer validate_secret for a single key. Side effects: one outbound request per validatable secret (cost scales with N). Reads each secret value (records 'read' audit events). Returns JSON { total, valid, invalid, results: [...] } listing per-key status, provider, and error messages where applicable. Returns 'No secrets to validate' if nothing in scope has a provider mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing cost scaling ('one outbound request per validatable secret'), audit side effects ('records read audit events'), the exact JSON return shape, and the 'No secrets to validate' empty-scope case. This is rich behavioral context an agent cannot get from the annotations.

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 core action and scope, then usage, then side effects, then return contract. Every sentence carries distinct information with 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?

For a four-param, zero-required tool with no output schema, the description supplies the return structure, side-effect cost, audit implications, and empty-result behavior — everything needed to invoke it correctly.

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% and the schema already documents orgId/scope/teamId/projectPath and their conditional requirements. The description only alludes to 'the requested scope' without adding format or constraint detail, so the baseline of 3 applies.

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 specific verb and resource ('Validate every accessible secret ... against its detected provider in a single batch') plus the output artifact. It explicitly differentiates itself from the sibling validate_secret for single-key use.

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

Usage Guidelines5/5

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

Gives two concrete use cases (CI gate before deploy, pre-rotation health pass) and names the alternative tool with the condition that selects it ('prefer validate_secret for a single key'). No inference required.

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

delete_secretA
DestructiveIdempotent

[secrets] Permanently remove a secret value (and all its env states) from the keyring for the given scope. Use when a credential is being retired or was created in error; prefer disentangle_secrets to break a sync link without erasing values, remove_hook to detach lifecycle callbacks, and tunnel_destroy for ephemeral tunnels. Destructive and not undoable from q-ring (no built-in trash). Writes a 'delete' event to the audit log and fires matching hooks. Returns 'Deleted "KEY"' on success or a not-found error if the key did not exist in the requested scope. Subject to tool policy.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesExact secret key name to delete. Example: 'OLD_API_KEY'.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint/readOnlyHint/idempotent, but the description adds substantial value beyond them: no undo and no built-in trash, all env states removed, an audit-log 'delete' event is written, matching hooks fire, and it is subject to tool policy. This is exactly the behavioral context a mutation tool needs.

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 destructive action and constraint, then routing, then side effects, then return values. Dense but every sentence earns its place; slightly long, keeping it just below a 5.

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?

No output schema exists, yet the description supplies the return contract ('Deleted "KEY"' or a not-found error), the side effects (audit event, hooks), and the irreversibility caveat. Complete for a 5-parameter destructive tool.

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%, so every parameter (key, scope, orgId, teamId, projectPath) is already documented in the schema. The description reinforces scope-based behavior ('for the given scope', not-found 'in the requested scope') but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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 specific verb+resource ('Permanently remove a secret value ... from the keyring for the given scope'), scopes it, and explicitly distinguishes itself from three siblings by naming conditions under which each alternative is preferred. An agent can select this over disentangle_secrets/remove_hook/tunnel_destroy without opening any schema.

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

Usage Guidelines5/5

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

Gives both when-to-use ('credential is being retired or was created in error') and when-not-to-use with named alternatives and their selecting conditions (disentangle_secrets for breaking sync links without erasing, remove_hook for callbacks, tunnel_destroy for ephemeral tunnels). Nothing is left to inference.

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

detect_anomaliesA
Read-onlyIdempotent

[audit] Scan the audit history for suspicious access patterns — burst reads of the same key, off-hours access, and other heuristics. Use as a quick triage signal when investigating a single key or before letting an agent rotate credentials; prefer health_check for a scope-wide decay+anomaly summary, and agent_scan for multi-project JSON reports with optional auto-rotation. Read-only; never mutates secrets or the audit log. Returns one line per finding formatted [type] description, or 'No anomalies detected' when the log looks clean.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoIf provided, narrow the scan to this exact key. Omit to scan across every key in the audit log.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so the safety profile is largely covered; the description still reinforces 'Read-only; never mutates secrets or the audit log' and discloses the output shape ('one line per finding formatted [type] description', or a clean-log message). It could say more about scan cost or log-window limits, but it goes well beyond the annotations.

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?

Three dense sentences with the '[audit]' tag and the core action front-loaded, followed by routing guidance and the return contract. Slightly packed but every clause earns its place; 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?

With no output schema, the description compensates by specifying the return format and the empty-case message, and it covers routing and safety. An agent has everything needed to call and interpret this tool correctly.

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 coverage is 100% and the single 'key' parameter is fully documented in the schema (narrow-to-key vs scan-all), so the description adds no syntax or format detail beyond it. Baseline 3 is correct when the schema does the heavy lifting.

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 specific verb and resource ('Scan the audit history') and enumerates the concrete patterns detected ('burst reads of the same key, off-hours access'). It also explicitly distinguishes itself from siblings health_check and agent_scan, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('quick triage signal when investigating a single key or before letting an agent rotate credentials') and names two alternatives with the conditions that select them (health_check for scope-wide decay+anomaly summary, agent_scan for multi-project JSON with auto-rotation). No inference required.

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

detect_environmentA
Read-onlyIdempotent

[project] Resolve which environment slug (e.g. 'dev', 'staging', 'prod') the current invocation should collapse to. Use before reading secrets when you want to mirror the same env q-ring would auto-pick (e.g. to log it, or to pass through to another tool); prefer passing an explicit env to get_secret/env_generate when you already know which env you want. Read-only; checks the QRING_ENV env var, NODE_ENV, the project's .q-ring.json, and the current git branch in priority order. Returns JSON { env, source } (e.g. { env: 'dev', source: 'NODE_ENV' }), or a plain message indicating that no env could be detected.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, non-destructive, closed-world. The description adds specific detection sources in priority order (QRING_ENV, NODE_ENV, .q-ring.json, git branch) and the return format, which are valuable behavioral details beyond annotations.

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?

The description is front-loaded with the core purpose, then usage guidance, detection logic, and return format. Each sentence contributes necessary information without redundancy.

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?

Given the tool's detection complexity and the absence of an output schema, the description fully explains the resolution process, priority order, and return values. No critical information is missing for an agent to invoke it correctly.

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%, so the schema already fully documents the single optional projectPath parameter. The description adds no additional parameter meaning, so the baseline of 3 applies.

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?

The description states a specific verb 'Resolve' and resource 'environment slug', and clarifies it detects the env the invocation should collapse to. It distinguishes itself from sibling tools like get_secret and env_generate by suggesting when to prefer those instead.

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

Usage Guidelines5/5

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

Explicitly says to use before reading secrets to mirror the auto-picked env, and to prefer passing explicit env to get_secret/env_generate when known. This gives clear when-to-use and when-to-use-alternative guidance.

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

disentangle_secretsA
Idempotent

[secrets] Break the sync link between two previously entangled keys so future rotations no longer propagate. Use when one of the keys is being retired or should diverge intentionally; pair with delete_secret if you also want to erase one of the values, and use entangle_secrets to recreate the link. Mutates only metadata; the current values remain untouched. Safe and idempotent — running on a pair that was never linked returns success without effect. Subject to tool policy. Returns 'Disentangled: SOURCE </> TARGET'.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceKeyYesFirst key in the previously linked pair.
targetKeyYesSecond key in the previously linked pair.
sourceScopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
targetScopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
sourceProjectPathNoProject root for sourceKey when sourceScope='project'.
targetProjectPathNoProject root for targetKey when targetScope='project'.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare non-read-only, idempotent, non-destructive, but the description goes beyond them by specifying that only metadata mutates and values stay untouched, that running on an unlinked pair succeeds with no effect, and that the operation is subject to tool policy. It even names the exact return string.

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?

Four short sentences, front-loaded with the core action, then eligibility, alternatives, mutation scope, and idempotency. No filler; each sentence carries distinct information.

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?

For a metadata-only mutation with no output schema, the description covers when to use it, what changes, what does not change, idempotency, and the return value, leaving no practical gap for an agent to call it correctly.

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%, so sourceKey/targetKey and the scope/path parameters are already documented. The description adds no additional parameter semantics (e.g., whether sourceKey and targetKey may be swapped), so the baseline 3 applies.

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 precise verb+resource ('Break the sync link between two previously entangled keys') plus the downstream consequence ('future rotations no longer propagate'), which distinguishes it from entangle_secrets and delete_secret without needing the schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use triggers (retiring a key, intentional divergence) and names the two alternatives that select different behaviors: delete_secret for erasing values and entangle_secrets for recreating the link. Nothing is left to inference.

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

entangle_secretsA
Idempotent

[secrets] Link two keys (across the same or different scopes) so future writes/rotations of either propagate the same value to the other. Use when one logical credential lives under multiple names (e.g. STRIPE_SECRET_KEY global and project) and should never drift; prefer set_secret for unrelated values, and reverse the link with disentangle_secrets (does not delete values). Mutates only the metadata of both envelopes — the values themselves are not changed by this call. Idempotent: re-running on an already-entangled pair is a no-op. Subject to tool policy. Returns a short confirmation: 'Entangled: SOURCE <-> TARGET'.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceKeyYesFirst secret key in the pair. Example: 'STRIPE_SECRET_KEY'.
targetKeyYesSecond secret key to keep in lockstep with the source.
sourceScopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
targetScopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
sourceProjectPathNoProject root for sourceKey when sourceScope='project'. Defaults to the server cwd.
targetProjectPathNoProject root for targetKey when targetScope='project'. Defaults to the server cwd.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare idempotentHint, destructiveHint=false, and readOnlyHint=false, but the description adds meaningful non-structured context: it mutates only envelope metadata (values untouched), is subject to tool policy, and returns a specific confirmation string. The idempotency claim duplicates the annotation rather than extending it, keeping this just below a top score.

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?

The core action and routing guidance are front-loaded, and most sentences earn their place. Slightly dense with multiple parenthetical asides, but nothing is wasteful.

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?

Despite no output schema, the description states the return value explicitly, covers mutation scope, idempotency, and the sibling-based reversal path. An agent has everything needed to invoke it correctly.

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%, so all six parameters are already documented in the schema, including scope semantics and projectPath defaults. The description adds no new parameter-level detail, so the baseline 3 applies.

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 specific verb and resource ('Link two keys') and clarifies scope ('across the same or different scopes') plus the propagation semantics. An agent can immediately distinguish this from set_secret and disentangle_secrets, which are named directly.

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

Usage Guidelines5/5

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

Explicitly states when to use it (one logical credential under multiple names that should never drift), names the preferred alternative for unrelated values (set_secret), and points to the reverse operation (disentangle_secrets) with the note that it does not delete values.

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

env_generateA
Read-onlyIdempotent

[project] Render a complete .env file body from the project's .q-ring.json manifest, resolving each declared key from the keyring. Use when a build step or local runtime needs a real .env materialized on disk and you want exactly the keys the manifest declares; prefer export_secrets when you want every key in scope (manifest-agnostic) and exec_with_secrets to inject secrets into a child process without writing them to a file. Reads values (records 'read' audit events) and collapses superposition for the requested env. Returns the raw .env text, with # MISSING (required): KEY / # EXPIRED: KEY / # STALE: KEY warnings appended as comments. Missing keys appear as commented-out # KEY= placeholders so the file remains a valid drop-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoEnvironment slug used to collapse superposition when a secret has multiple per-env states. Examples: 'dev', 'staging', 'prod'. If omitted, the secret's defaultEnv is used.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover read-only, idempotent, non-destructive, closed-world. The description adds substantial behavioral detail beyond that: it records 'read' audit events, collapses superposition for the requested env, describes return value format (raw `.env` text), and details warning/placeholder behavior for MISSING/EXPIRED/STALE keys so the file remains valid.

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?

Three sentences, front-loaded with the core operation, then usage guidance with alternatives, then behavioral details. Every sentence earns its place with no redundancy.

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?

Complete for a tool with no output schema and full schema coverage: it explains purpose, usage, audit behavior, env-collapse semantics, and exactly what the returned text contains including warning markers and placeholder formats.

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%, so both parameters are well-documented by the schema itself. The description mentions the env and project concepts in narrative context but adds no syntax or format beyond what the schema provides. Baseline 3 is appropriate.

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?

Specific verb and resource: 'Render a complete `.env` file body from the project's `.q-ring.json` manifest, resolving each declared key from the keyring.' It clearly distinguishes itself from siblings export_secrets and exec_with_secrets by naming them and their differing behavior.

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

Usage Guidelines5/5

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

Explicit when-to-use ('when a build step or local runtime needs a real `.env` materialized on disk') and when-to-prefer-alternatives ('prefer `export_secrets` when you want every key in scope... and `exec_with_secrets` to inject secrets into a child process without writing them to a file').

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

exec_with_secretsA
Destructive

[exec] Run a child shell command with project secrets injected as environment variables and any leaked secret values redacted from captured stdout/stderr before they return to the agent. Use to let an agent run a script that needs credentials (npm run db:migrate, terraform plan, vercel deploy) without ever putting plaintext values in the chat; prefer env_generate if you need to write a .env file to disk and validate_secret for upstream liveness checks. Spawns a real child process — has whatever side effects the command itself causes (writes, network, exec). Subject to BOTH tool policy and exec policy (allowlist/denylist). Returns a text body with Exit code: N then STDOUT: and STDERR: blocks; both streams are scrubbed against the secret values that were injected.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoPositional arguments passed to `command`. Example: ['run', 'db:migrate']. Each element is passed verbatim with no extra shell parsing.
keysNoWhitelist of exact key names to inject. Omit to inject every secret in scope (subject to `tags`).
tagsNoInject only secrets carrying at least one of these tags. Combinable with `keys` as an AND filter.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
commandYesExecutable name or full command to run. Example: 'pnpm', 'node', '/usr/bin/env'. Must be allowed by exec policy.
profileNoExec sandbox profile. 'restricted' (default) denies network-tool binaries (curl, wget, ssh, scp, nc, netcat, ncat) AND common interpreters/shells (python, node, deno, bun, perl, ruby, php, sh, bash, zsh) — since those could otherwise egress the injected secrets — strips proxy env vars, and caps runtime at 30s. It still is NOT a real OS sandbox (it does not restrict PATH, and some allowed binary could in principle make network calls); for genuinely untrusted commands use OS-level isolation (containers, network namespaces). 'ci' allows network and interpreters with a 300s cap and blocks a few destructive commands; 'unrestricted' inherits the full server environment. Define a custom profile in .q-ring.json to allow specific interpreters with secrets.restricted
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations mark it destructive/openWorld, but the description adds the crucial context that is not in structured fields: it spawns a real child process with the command's own side effects, it is subject to BOTH tool policy and exec policy (allowlist/denylist), and both output streams are scrubbed against injected values. That is exactly the behavioral detail an agent needs before invoking a destructive executor.

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 verb and both key behaviors, and every sentence carries a distinct fact (use cases, alternatives, side effects, policy, return format). It is on the long side with some dense clauses, but no sentence is 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?

No output schema exists, and the description compensates by specifying the return format (`Exit code: N`, then `STDOUT:`/`STDERR:` blocks) and stating the scrubbing applies to both streams. Side effects, policy gating, and secret scope are all covered, so nothing an agent needs to invoke correctly is missing.

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%, so the schema already documents all nine parameters including the security-relevant `profile` semantics. The description adds redaction and policy context but does not extend param meaning beyond the schema, so the baseline 3 is appropriate.

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 specific verb (run) and resource (child shell command) plus the two defining mechanisms: secret injection as env vars and redaction of leaked values from stdout/stderr. It explicitly distinguishes itself from siblings env_generate and validate_secret, so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Gives concrete use scenarios (`npm run db:migrate`, `terraform plan`, `vercel deploy`) and a when-not: use `env_generate` to write a .env to disk and `validate_secret` for liveness checks. Both alternatives and their selecting conditions are named explicitly.

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

export_auditA
Read-onlyIdempotent

[audit] Export the audit log as a portable text artifact suitable for archiving or feeding into another SIEM/analyzer. Use for compliance exports, after-the-fact investigations, or to hand the trail to a non-MCP consumer; prefer audit_log for an in-conversation tail and verify_audit_chain to confirm integrity before exporting. Read-only. Returns the rendered text directly (no JSON wrapper). 'jsonl' is one event per line; 'json' is a single array; 'csv' is a header row plus events. Time filters are applied to the event timestamps before formatting.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoInclusive lower bound on event timestamp, ISO 8601. Example: '2026-04-01T00:00:00Z'. Omit for no lower bound.
untilNoInclusive upper bound on event timestamp, ISO 8601. Omit for now/no upper bound.
formatNoOutput format. 'jsonl' (default) is most stream-friendly; 'json' is a single array; 'csv' is spreadsheet-friendly.jsonl

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotent/destructive=false, so 'Read-only' adds little; however, the description adds real context: output is returned as rendered text with no JSON wrapper, and time filters are applied to event timestamps before formatting. Those behavior nuances are not expressible in the annotations.

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?

Well front-loaded: the core action and artifact lead, followed by routing guidance, safety, return shape, and format semantics. Slightly dense and mildly overlaps the enum descriptions in the schema, but no sentence is wasted.

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?

There is no output schema, but the description compensates by describing the return (rendered text, no JSON wrapper) and format-specific rendering. Combined with annotations covering safety, an agent has everything needed to invoke it correctly.

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 baseline is 3, but the description adds meaning by spelling out the concrete shape of each format ('jsonl' one event per line, 'json' a single array, 'csv' a header row plus events) and clarifying filter-then-format ordering, which the schema does not state.

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 specific verb+resource (export the audit log) and the artifact type (portable text, no JSON wrapper). It explicitly names the sibling alternatives `audit_log` and `verify_audit_chain`, so an agent can differentiate without opening any schema.

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

Usage Guidelines5/5

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

Explicitly enumerates when to use it (compliance exports, after-the-fact investigations, handing off to a non-MCP consumer) and when to prefer alternatives (`audit_log` for an in-conversation tail, `verify_audit_chain` to confirm integrity first). This is a textbook when/when-not/alternative routing.

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

export_secretsA
Read-onlyIdempotent

[secrets] Render multiple secrets as a single .env or JSON document for piping into another tool or file. Use to materialize secrets for a one-off export or copy; prefer env_generate when you want output driven by the project's .q-ring.json manifest, and teleport_pack for an encrypted bundle to share between machines. Reads values (collapses superposition for the requested env) and writes one 'export' event per included secret to the audit log. Returns the rendered text directly (no JSON wrapper). Returns an error if no secrets matched the filters. Values are surfaced in plaintext — handle with care.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoEnvironment slug used to collapse superposition when a secret has multiple per-env states. Examples: 'dev', 'staging', 'prod'. If omitted, the secret's defaultEnv is used.
keysNoWhitelist of exact key names to include. If omitted, every key in scope is considered (subject to `tags`).
tagsNoInclude only secrets tagged with at least one of these tags. Combined with `keys` as an AND filter when both are supplied.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
formatNo'env' renders KEY="value" lines suitable for a .env file; 'json' renders an object keyed by secret name. Defaults to 'env'.env
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: it reads values and collapses per-env superposition, writes one 'export' audit event per included secret, returns raw text with no JSON wrapper, errors when no secrets match, and surfaces plaintext values. Annotations only cover the safety profile; the description supplies the audit-write side effect, output shape, and error condition.

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 core action, then alternatives, then behavioral traits and caveats. Though multi-sentence, every sentence carries distinct information (alternatives, audit side effects, return shape, error case, plaintext warning) with no redundancy.

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?

With no output schema, the description correctly explains the return value ('returns the rendered text directly, no JSON wrapper') as well as the failure mode. Combined with the alternative routing and behavioral disclosure, an agent has everything needed to call and interpret it.

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% and all eight parameters are documented there, so the schema does the heavy lifting. The description reinforces superposition collapsing for `env` and format behavior, but adds little syntax or format detail beyond what the schema already provides. Baseline 3 is appropriate.

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 specific verb and resource ('Render multiple secrets as a single .env or JSON document') and clarifies the goal ('for piping into another tool or file'). It explicitly distinguishes itself from env_generate and teleport_pack, so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Names the use case ('one-off export or copy') and then gives explicit alternatives with the conditions that select them: env_generate when output is driven by the .q-ring.json manifest, teleport_pack for an encrypted shareable bundle. This is exactly the when/when-not/alternatives guidance the dimension asks for.

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

generate_secretA
Destructive

[secrets] Generate a cryptographically random secret using Node's CSPRNG and optionally store it in the keyring in one step. Use to create new credentials that you control (signing keys, internal tokens, passwords); for issuer-issued credentials (Stripe/OpenAI etc.) use rotate_secret to ask the upstream provider for a fresh key, and use set_secret for values you already have in hand. If saveAs is provided this mutates the keyring (one 'write' event) and returns a summary like 'Generated and saved as "KEY" (FORMAT, ~N bits entropy)'. Without saveAs the call is read-only and returns JSON { ok, data: { value } } containing the freshly generated string.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
formatNoOutput shape. 'hex' / 'base64' / 'alphanumeric' = raw random string of `length` characters; 'uuid' = RFC4122 v4; 'api-key' / 'token' = random alphanumeric with optional `prefix`; 'password' = mixed-case alphanumeric with symbols. Defaults to 'api-key'.api-key
lengthNoNumber of characters (or bytes for hex/base64) to generate. Ignored for 'uuid'. Defaults to a sensible per-format value (e.g. 32 for api-key).
prefixNoLiteral prefix prepended to the random portion. Only meaningful for 'api-key' and 'token'. Example: 'sk-' or 'svc_'.
saveAsNoIf provided, store the generated value at this key name in the keyring (one mutation). Omit to just return the value without persisting.
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=true; the description adds value beyond them by clarifying that the call is read-only without `saveAs`, mutates with one 'write' event when `saveAs` is set, and describing both return shapes. It does not state whether `saveAs` overwrites an existing keyring entry, which is a relevant destructive-behavior gap.

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 purpose, then usage guidance, then behavioral detail. It is fairly long but every sentence carries information; minor redundancy between the intro's 'optionally store' and the later `saveAs` explanation.

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?

Despite no output schema, the description documents both return modes (a summary string with `saveAs`, JSON `{ ok, data: { value } }` without). With zero required parameters, 100% schema coverage, and clear mutation semantics, an agent has everything needed to call it correctly.

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%, so the schema already fully documents all 8 parameters including formats, scopes, and defaults. The description reinforces `saveAs` semantics but adds little syntax or meaning beyond what the schema provides; baseline 3 applies.

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 specific verb (generate) and resource (cryptographically random secret), names the mechanism (Node's CSPRNG), and clarifies the optional store step. It also actively distinguishes itself from `rotate_secret` and `set_secret`, so an agent can pick correctly without opening sibling schemas.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('credentials that you control'), when to prefer `rotate_secret` (issuer-issued credentials), and when to prefer `set_secret` (values already in hand). Alternatives and their selecting conditions are named outright.

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

get_policy_summaryA
Read-onlyIdempotent

[policy] Return a high-level summary of the project's .q-ring.json governance policy — counts of allow/deny rules for tools, key reads, exec commands, plus approval and rotation requirements. Use to orient an agent (or the user) on what guardrails are active before attempting policy-restricted actions; prefer check_policy for a precise per-action verdict. Read-only. Returns pretty-printed JSON; missing policy file returns an empty/default summary rather than an error so callers can branch on the counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds behavior beyond that: pretty-printed JSON output and, notably, that a missing policy file returns an empty/default summary rather than an error so callers can branch on counts — a non-obvious error-handling contract that usefully informs invocation.

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?

Purpose is front-loaded, followed by usage/alternative routing and then behavioral notes. Every sentence carries distinct, non-redundant information with no padding.

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?

Despite having no output schema, the description explains the return shape (pretty-printed JSON with allow/deny counts) and the missing-file fallback, which is exactly the return-value context an agent needs. Nothing required to call it correctly is missing.

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 coverage is 100% for the single `projectPath` parameter, and the schema already documents the absolute-path semantics and the CWD default. The description adds no further parameter-level detail, so the baseline of 3 applies.

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 specific verb and resource ('Return a high-level summary of the project's `.q-ring.json` governance policy') and enumerates the contents (allow/deny rule counts for tools, key reads, exec commands, approval/rotation requirements). It also names the sibling it is not ('prefer `check_policy` for a precise per-action verdict'), so an agent can distinguish it without opening schemas.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('to orient an agent... before attempting policy-restricted actions') and when to prefer the alternative ('prefer `check_policy` for a precise per-action verdict'). The routing condition between summary vs. per-action verdict is fully spelled out.

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

get_project_contextA
Read-onlyIdempotent

[agent] Return a single redacted snapshot of everything an AI agent typically wants to know about this project: secrets present (keys + metadata only), detected env, manifest declarations, configured providers, registered hooks, and recent audit activity. Use this as the very first call in a session to orient the agent before it asks for any individual secret; prefer list_secrets for a flat key listing, check_project for manifest-vs-keyring drift, and audit_log for a deeper access trail. Read-only and value-safe — no plaintext secret values are ever included. Returns a single pretty-printed JSON document; shape is intentionally broad and may grow over time, so read defensively.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it explicitly states no plaintext secret values are ever returned, the return is pretty-printed JSON, and the shape is intentionally broad and may grow, advising defensive reading. It doesn't cover access/auth requirements or rate limits, keeping it short of a 5.

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?

The description is front-loaded with the core purpose, then usage, then safety, then return shape. It is dense but each sentence carries distinct information. It runs slightly long with the enumeration of snapshot contents, but nothing is redundant.

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?

For a read-only, no-output-schema, zero-required-param aggregate tool, the description covers purpose, usage routing, exclusions, safety guarantees, and return-shape expectations. An agent has everything needed to call it correctly and interpret the response defensively.

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 schema already documents every parameter with examples, enums, and scope-dependency rules. The description adds no parameter-level detail, so baseline would be 3; it earns a 4 only because it establishes the session-orientation frame and value-safety scope that give the parameters their intended context.

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?

The description opens with a specific verb-resource pair ('Return a single redacted snapshot') and enumerates the exact contents (secrets present, detected env, manifest declarations, providers, hooks, audit activity). It explicitly distinguishes itself from siblings list_secrets, check_project, and audit_log, so an agent can route correctly without inspecting schemas.

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

Usage Guidelines5/5

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

It states the precise usage condition ('Use this as the very first call in a session to orient the agent') and gives three named alternatives with the condition that selects each. There is no ambiguity about when this tool is preferred over the alternatives.

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

get_secretA
Read-onlyIdempotent

[secrets] Read the plaintext value of a single secret from the q-ring keyring. Use when an agent needs the actual credential to call an external API or inject into a runtime; prefer inspect_secret to see metadata only, has_secret for presence-only checks, and exec_with_secrets to run a command without exposing the value to chat. Side effects: collapses superposition (selects the per-env state) and writes a 'read' event to the audit log (observer effect). Subject to project tool/key policy and may be denied with a 'Policy Denied' message. Returns JSON { ok, data: { key, value } } on success or an error message if missing/blocked.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoEnvironment slug used to collapse superposition when a secret has multiple per-env states. Examples: 'dev', 'staging', 'prod'. If omitted, the secret's defaultEnv is used.
keyYesExact secret key name as stored in the keyring (case-sensitive). Example: 'OPENAI_API_KEY'.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that it collapses superposition, writes a 'read' audit event, is subject to policy that may return 'Policy Denied', and returns a specific JSON shape. These are non-obvious behavioral traits the annotations (readOnly/idempotent/non-destructive) do not convey.

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 purpose followed by alternatives and side effects; every sentence earns its place. It is dense but not padded, though slightly long for a read tool.

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?

Despite no output schema, the description supplies the return contract ('Returns JSON { ok, data: { key, value } }') and error behavior, plus policy and audit side effects. An agent has everything needed to call and interpret this tool.

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%, so all six parameters are already well documented in the schema. The description adds only the general notion of per-env superposition, which the env schema field already explains. Baseline 3 is appropriate when the schema carries the load.

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 specific verb and resource ('Read the plaintext value of a single secret') and immediately distinguishes itself from siblings by naming inspect_secret, has_secret, and exec_with_secrets. An agent knows exactly what this tool returns without opening the schema.

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

Usage Guidelines5/5

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

Explicitly states the trigger condition ('when an agent needs the actual credential to call an external API or inject into a runtime') and routes to the right alternative for each other need (metadata, presence check, indirect execution). This is textbook when/when-not guidance.

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

has_secretA
Read-onlyIdempotent

[secrets] Check whether a secret exists in the requested scope without reading the value. Use as a cheap precondition before reading or writing — for example, to skip prompting the user for a key that is already configured. Prefer inspect_secret when you also need metadata. Read-only; does not record a 'read' in the audit log. Decay-aware: returns 'false' for expired secrets even though the value is still in the store. Returns the literal text 'true' or 'false'.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesExact secret key name. Example: 'GITHUB_TOKEN'.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Adds traits annotations cannot convey: it does not record a 'read' in the audit log, and it is decay-aware, returning 'false' for expired secrets while the value remains in the store. These are non-obvious behaviors that materially affect how an agent interprets the result.

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-loads the core purpose, then layers usage, alternative routing, and behavioral caveats in tight sentences. Every sentence earns its place with no redundancy.

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?

With no output schema, the description compensates by specifying the return format ('the literal text true or false') and the decay caveat. For a boolean existence check, nothing an agent needs to call or interpret it is missing.

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%, so the schema already documents key, scope, orgId, teamId, and projectPath in detail. The description only references 'the requested scope' and adds no syntax or format meaning beyond the schema, so the baseline 3 applies.

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 specific verb+resource ('Check whether a secret exists') with an explicit scope qualifier ('in the requested scope without reading the value'). This distinguishes it clearly from get_secret and inspect_secret, so an agent can select it without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use ('cheap precondition before reading or writing... to skip prompting the user for a key that is already configured') and names the alternative with its selecting condition ('Prefer inspect_secret when you also need metadata'). Both the use case and the sibling routing are spelled out.

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

health_checkA
Read-onlyIdempotent

[health] Run a single read-only sweep over every secret in the requested scope and report counts of healthy/stale/expired secrets plus any current audit anomalies. Use as the default 'is everything OK?' command for an agent or operator; prefer check_project to validate manifest compliance specifically, detect_anomalies for audit-only triage, and agent_scan for multi-project JSON output or optional auto-rotation. Read-only — never writes. Returns a multi-line text summary: header counts (Total / Healthy / Stale / Expired / No decay / Anomalies), then per-secret EXPIRED: / STALE: issue lines, then per-anomaly [type] description lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description reinforces it with 'Read-only — never writes' and, more valuably, discloses the return shape in detail since no output schema exists. It doesn't add permission/auth or rate-limit context, so it stops short of a 5.

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?

The purpose is front-loaded, followed by alternatives and then return behavior, with no wasted sentences. The return-format enumeration is the longest part but earns its place because no output schema exists; it is slightly dense but well ordered.

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?

Given four optional params, a 100%-covered schema, and no output schema, the description supplies exactly the missing piece: the structure of the multi-line text summary (header counts, EXPIRED/STALE lines, anomaly lines). An agent has everything needed to call and interpret it.

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% and the schema itself documents orgId, teamId, projectPath, and the scope enum with defaults and required-when conditions. The description adds no parameter-level detail, so this is the baseline 3 where structured fields do the heavy lifting.

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?

The description states a specific verb and resource ('Run a single read-only sweep over every secret') plus the exact output content (healthy/stale/expired counts and audit anomalies). It actively distinguishes itself from siblings by naming check_project, detect_anomalies, and agent_scan and the conditions that separate them.

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

Usage Guidelines5/5

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

It explicitly positions the tool as the default 'is everything OK?' command, then routes agents to alternatives with reasons: check_project for manifest compliance, detect_anomalies for audit-only triage, agent_scan for multi-project JSON or auto-rotation. This is exactly the when/when-not/alternatives coverage the dimension rewards.

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

import_dotenvA
Idempotent

[secrets] Parse standard dotenv-formatted text and store each key/value pair into the keyring in one batch. Use when migrating an existing .env file into q-ring or onboarding a new project; prefer set_secret for a single key, and teleport_unpack to import an encrypted bundle. Mutates the keyring (one write per parsed key) and emits a 'write' audit event for each. Supports comments, single/double quotes, and \n escapes. Returns a multiline summary listing imported keys and any skipped (existing) keys; in dryRun mode no writes happen and the same summary is produced for review.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
dryRunNoIf true, parse and report what would happen but do not write to the keyring. Useful for previewing imports before committing.
contentYesRaw .env file content as a single string (newline-separated KEY=VALUE lines, comments allowed).
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.
skipExistingNoIf true, leave already-present keys untouched and add them to the 'skipped' list instead of overwriting.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), and the description adds substantial beyond-schema context: one write per parsed key, a 'write' audit event per key, skipExisting/overwrite semantics, and dryRun producing the same summary with no writes. It also discloses the parsing features supported (comments, quotes, \n escapes). Nothing contradicts the annotations.

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?

Dense but organized: purpose first, then routing, then mutation/audit behavior, then parsing and return semantics. Every clause carries information, though the run-on middle sentence could be split for faster scanning.

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?

With no output schema, the description still documents the return value (multiline summary of imported and skipped keys) and dryRun's parallel output. For a 5-param batch-import tool, an agent has everything needed to call it correctly.

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 adds meaning beyond it by explaining the observable effect of skipExisting (keys land in the 'skipped' list rather than overwritten) and dryRun (no writes, same summary). Scope/format details still rest on the schema.

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 specific verb+resource ('Parse dotenv-formatted text and store each key/value pair into the keyring') and explicitly names the sibling alternatives set_secret and teleport_unpack. An agent can distinguish it from other import/write tools without opening the schema.

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

Usage Guidelines5/5

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

Gives the two concrete trigger scenarios (migrating a .env file, onboarding a project) and routes the agent: prefer set_secret for a single key, teleport_unpack for encrypted bundles. Explicit when/when-not/alternatives coverage.

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

inspect_secretA
Read-onlyIdempotent

[secrets] Show full metadata for a single secret — env states, decay window, entanglement links, access counters — without ever revealing the value. Use when you need to understand the shape of a key before reading it or to debug 'why is this expired/stale'; prefer get_secret for the actual value, list_secrets for a many-key overview, and audit_log for the full access timeline. Read-only; does not write a 'read' event since the value is not exposed. Returns pretty-printed JSON with fields: key, scope, type ('superposition'|'collapsed'), created, updated, accessCount, lastAccessed, environments, defaultEnv, decay { expired, stale, lifetimePercent, timeRemaining }, entangled, description, tags. Errors with not-found if the key is absent.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesExact secret key name to inspect. Example: 'OPENAI_API_KEY'.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds non-obvious behavior: it never exposes the value and does not write a 'read' event for that reason, plus an explicit not-found error case. This is meaningful context beyond the annotations, though auth/permission requirements are not stated.

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 purpose, then alternatives, then behavior, then return shape. The field enumeration is long but earns its place since no output schema exists; a single sentence of it is arguably expendable.

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?

With no output schema, the description compensates by enumerating the returned fields (key, scope, type, decay, entangled, etc.), and it covers alternatives, side effects, and error behavior. An agent has everything needed to call and interpret it.

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% and each parameter (key, orgId, scope, teamId, projectPath) is fully documented in the schema, including scope-conditional requirements. The description adds no parameter-level syntax or format detail, so the baseline 3 applies.

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 specific verb+resource ('Show full metadata for a single secret') and immediately scopes it by what it does NOT do ('without ever revealing the value'). It explicitly names and differentiates from siblings get_secret, list_secrets, and audit_log, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions ('to understand the shape of a key before reading it or to debug why is this expired/stale') and names the three alternatives with the condition that selects each. Nothing is left to inference.

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

lint_filesA
DestructiveIdempotent

[scan] Inspect a specific list of files for hardcoded secrets and, when fix is true, replace each finding with process.env.KEY while storing the extracted value into the keyring. Use to migrate a known set of files (e.g. just-changed files in a pre-commit hook) into q-ring; prefer scan_codebase_for_secrets for a whole-tree audit and import_dotenv to ingest an existing .env. With fix: false this is read-only. With fix: true this MUTATES the listed source files in place (review with git diff!) and writes one new secret per finding to the keyring. Returns a JSON array of { file, line, key, value, kind } findings, or 'No hardcoded secrets found in the specified files.'.

ParametersJSON Schema
NameRequiredDescriptionDefault
fixNoIf true, rewrite the source files to read `process.env.KEY` and store the extracted value in the keyring. If false (default), only report findings.
filesYesAbsolute or relative paths to lint. Non-existent paths surface as scan errors.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, but the description adds materially: fix:false is read-only, fix:true mutates listed source files in place, writes one new secret per finding to the keyring, advises reviewing with git diff, and discloses the return shape. This is rich behavioral context beyond the structured fields.

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-loads the primary action, then routes to alternatives, then covers the mutation/read-only split and the return value. Dense but every sentence carries information relevant to calling it correctly.

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?

Covers action, alternatives, the risky fix flag semantics, and the return format (with the empty-result string). For a destructive, six-parameter tool with no output schema, nothing an agent needs is missing.

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%, so all six parameters are already documented in the schema. The description reinforces the fix flag's dual behavior but adds no syntax or format detail beyond what the schema fields already provide, so the baseline 3 applies.

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 specific verb (Inspect/scan) and resource (a specific list of files) plus the conditional mutation behavior. It also explicitly distinguishes itself from scan_codebase_for_secrets and import_dotenv, so the agent can tell them apart without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('migrate a known set of files, e.g. just-changed files in a pre-commit hook') and names two alternatives with the conditions that select them (whole-tree audit vs. .env ingestion). Nothing is left to inference.

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

list_hooksA
Read-onlyIdempotent

[hooks] Enumerate every registered lifecycle hook with its match criteria, delivery type, enabled flag, and description. Use to find a hook's id before calling remove_hook, audit what side effects are wired up, or diagnose why a hook did not fire. Read-only. Returns pretty-printed JSON array of hook entries, or 'No hooks registered' when the registry is empty.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description's 'Read-only' is largely redundant. It does add value by disclosing the return shape (pretty-printed JSON array) and the empty-registry sentinel string, which annotations do not convey.

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?

Three tight sentences: purpose first, then usage routing, then return format. No filler, and the routing guidance is front-loaded rather than buried.

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?

With no output schema and no parameters, the description carries the return-value burden and does so, covering both the populated array and the empty case. Nothing an agent needs to call this correctly is missing.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema shows. Baseline 4 applies since no parameter semantics are needed.

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 specific verb+resource ('Enumerate every registered lifecycle hook') and enumerates the returned fields (match criteria, delivery type, enabled flag, description). It is clearly distinguishable from siblings like register_hook and remove_hook.

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

Usage Guidelines5/5

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

Gives three concrete use cases (find a hook id before remove_hook, audit wired-up side effects, diagnose a hook that did not fire) and explicitly names the dependent sibling tool. Both when-to-use and the alternative are covered.

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

list_providersA
Read-onlyIdempotent

[validation] Enumerate the secret-validation providers q-ring knows how to call (OpenAI, Stripe, GitHub, …) along with their auto-detect prefixes. Use to discover what provider string to pass to validate_secret/rotate_secret, or to check whether your custom provider is registered. Read-only. Returns JSON array of { name, description, prefixes } objects. prefixes are the literal key-value prefixes (e.g. 'sk-' for OpenAI) used for auto-detection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, and the description reinforces 'Read-only.' More valuably, it discloses the return shape (JSON array of {name, description, prefixes}) and explains that `prefixes` are literal key prefixes used for auto-detection – behavioral context beyond the annotations.

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-loads the purpose, then usage, then read-only note, then return shape – in that priority order. Every sentence carries distinct information; nothing is redundant with structured fields.

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?

With no output schema, the description carries the burden of describing the return payload, which it does fully ({name, description, prefixes} and what prefixes mean). Nothing an agent needs to call or interpret this tool is missing.

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?

The tool takes no parameters, so the baseline is 4. The description nonetheless explains the semantics of the returned `prefixes` field (e.g. 'sk-' for OpenAI), which is the closest analogue to parameter meaning for a zero-arg discovery tool.

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 specific verb ('Enumerate') and resource ('secret-validation providers q-ring knows how to call') with concrete examples (OpenAI, Stripe, GitHub). It also names the sibling tools (validate_secret/rotate_secret) that consume the output, so an agent can distinguish it from the many other list_* tools.

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

Usage Guidelines5/5

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

Explicitly states two use cases: discovering the `provider` string to pass to validate_secret/rotate_secret, and checking whether a custom provider is registered. This routes the agent correctly relative to siblings without requiring inference.

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

list_secretsA
Read-onlyIdempotent

[secrets] List secret keys and quantum metadata in the requested scope, never the values. Use to discover what secrets exist before reading or writing; pair with inspect_secret for full metadata on one key, analyze_secrets for usage trends, or health_check for decay/anomaly summaries. Read-only; safe to call repeatedly. Returns JSON { ok, data: { entries: [...] } } where each entry has scope, key, stateKeys (env names if superposed), expired, stale, lifetimePercent, timeRemaining, entangledCount, accessCount.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoReturn only secrets that include this exact tag (case-sensitive). Example: 'production'.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
staleNoIf true, return only secrets in the stale window (lifetimePercent >= 75 and not yet expired).
filterNoGlob pattern matched against the key name. Supports `*` and `?`. Examples: 'API_*', 'STRIPE_?_KEY'.
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
expiredNoIf true, return only secrets whose decay TTL has elapsed (lifetimePercent >= 100).
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive, and closed-world. The description adds the crucial non-obvious constraint that values are NEVER returned, plus a full return-shape contract, which is real added context despite no output schema.

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?

Information-dense and front-loaded with the verb/resource and the value caveat, but the return-shape sentence is long. Nothing is wasted; every clause earns its place.

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?

Given 8 params (all optional) with full schema coverage, read-only annotations, and no output schema, the description supplies the missing return contract and value-safety guarantee, leaving no gap for an agent to call it incorrectly.

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% and each parameter is richly documented in the schema; the description adds no parameter-specific guidance. Baseline 3 is appropriate when the schema carries the full burden.

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 specific verb (list) and resource (secret keys and quantum metadata) with clear scope, and explicitly distinguishes itself from siblings by naming inspect_secret, analyze_secrets, and health_check with their distinct purposes.

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

Usage Guidelines5/5

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

Explicitly states when to use it ('discover what secrets exist before reading or writing') and routes to the correct alternatives for different needs, leaving nothing to inference.

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

register_hookA

[hooks] Register a side-effect (shell command, HTTP webhook, or process signal) that fires automatically when a matching secret is written, deleted, or rotated. Use to keep external systems in sync (restart a service after rotation, post to Slack on delete, kick a build); prefer agent_remember for storing facts an agent should recall later, and register_hook is not the right tool for time-based scheduled rotation (use agent_scan for that). Mutates the hook registry on disk. At least one match criterion (key, keyPattern, or tag) is required — calls without any return an error. Returns JSON of the registered hook entry including its assigned id (use that id with remove_hook).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoTrigger only on this exact key name. Pick at most one of `key` / `keyPattern` / `tag` (or combine for stricter matching).
tagNoTrigger on any secret carrying this exact tag. Combinable with key/keyPattern as an AND filter.
urlNoRequired when type='http'. Full URL to POST a JSON body `{ id, key, scope, action, timestamp }` to (the value itself is never sent).
typeYesHook delivery mechanism. 'shell' runs a local command, 'http' POSTs JSON to a URL, 'signal' sends an OS signal to a named process.
scopeNoRestrict the hook to secrets in this scope. Omit to fire across both global and project secrets.
actionsNoWhich lifecycle actions trigger this hook. Defaults to all three.
commandNoRequired when type='shell'. The literal shell command to run; q-ring exposes the matching key as $QRING_HOOK_KEY and action as $QRING_HOOK_ACTION.
keyPatternNoTrigger on any key matching this glob pattern. Examples: 'DB_*', 'STRIPE_*'.
signalNameNoSignal name to send (e.g. 'SIGHUP', 'SIGUSR1'). Defaults to SIGHUP, which most daemons treat as 'reload config'.SIGHUP
descriptionNoFree-text human-readable description, surfaced by `list_hooks` and the dashboard.
signalTargetNoRequired when type='signal'. Either a numeric PID or a process name resolvable via `ps`.

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond annotations by disclosing the on-disk registry mutation, the hard precondition that at least one of key/keyPattern/tag is required or the call errors, and the return contract (JSON entry including an assigned `id` to be used with `remove_hook`). These are behaviors the readOnlyHint/idempotentHint flags alone do not convey.

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 purpose in the first clause, then usage, side effects, preconditions, and return shape — dense but no filler. Every sentence adds a distinct fact an invoking agent needs.

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?

For an 11-parameter mutation tool with no output schema, the description covers side effects, precondition errors, return payload contents, hook environment variables ($QRING_HOOK_KEY/$QRING_HOOK_ACTION), and the follow-up tool (remove_hook). Annotations and schema fill the remaining type/enum details.

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 description coverage is 100%, so baseline is 3, but the description adds a cross-parameter constraint absent from the schema: at least one match criterion (key, keyPattern, or tag) is required or the call fails. It also notes the returned `id`'s purpose with `remove_hook`. Individual parameter meanings remain schema-only, so not a 5.

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?

Specific verb+resource: 'Register a side-effect (shell command, HTTP webhook, or process signal) that fires automatically when a matching secret is written, deleted, or rotated.' It explicitly distinguishes itself from siblings by naming agent_remember (fact storage) and agent_scan (scheduled rotation) as the wrong tools for those jobs.

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

Usage Guidelines5/5

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

Provides concrete when-to-use scenarios ('restart a service after rotation, post to Slack on delete, kick a build'), explicit alternatives ('prefer agent_remember for storing facts'), and an exclusion ('not the right tool for time-based scheduled rotation — use agent_scan'). This is exactly the when/when-not/alternative triad.

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

remove_hookA
DestructiveIdempotent

[hooks] Detach a single lifecycle hook by its registry id so it stops firing. Use to retire a specific webhook/command without touching any secrets; prefer delete_secret to remove a credential and tunnel_destroy for ephemeral tunnels. Mutates the hook registry only — does not touch secret values, audit log, or env states. Idempotent in spirit: removing an already-absent id returns a not-found error rather than partial work. Returns 'Removed hook ID' on success.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHook id returned by `register_hook` or visible in `list_hooks` (opaque string).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that: it enumerates untouched surfaces (secret values, audit log, env states) and nuances the idempotency hint by clarifying an already-absent id returns not-found rather than partial work, plus states the success return string.

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 effect, then alternatives, then scope guarantees. Every sentence carries information, though the 'idempotent in spirit' clause is slightly wordy.

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?

For a single-param mutation with no output schema, the description covers the action, the blast radius, the alternative tools, idempotency behavior, and the success return value. An agent has everything needed to call it correctly and safely.

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%, and the single param already documents its origin (register_hook / list_hooks, opaque string). The description's 'registry id' phrasing reinforces but does not extend that meaning, so the schema is doing the heavy lifting.

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 specific verb and resource ('Detach a single lifecycle hook by its registry id') plus the effect ('so it stops firing'). It explicitly distinguishes itself from nearby siblings delete_secret and tunnel_destroy, so an agent can route correctly without opening schemas.

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

Usage Guidelines5/5

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

Gives an explicit use case ('retire a specific webhook/command without touching any secrets') and names two alternatives with the conditions that select them. Nothing is left to inference about when this tool is the right choice.

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

rotate_secretA
Destructive

[validation] Ask the upstream provider to issue a fresh credential for this secret and store the new value back into the keyring. Use when a secret is expiring, leaked, or part of a scheduled rotation; prefer generate_secret for self-managed values you fully control, and agent_scan --autoRotate for sweep-style rotation across multiple expired keys. Mutates the keyring with the newly-issued value if rotation succeeds (one 'write' audit event), and makes outbound network requests against the provider's rotation API. Returns JSON { rotated, newValue?, message?, ... }. If rotated is false, the existing value is left untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesExact key to rotate. Must already exist in the keyring.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
providerNoForce a specific provider id (see `list_providers`). Omit to auto-detect from the current value or the secret's stored provider hint.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the 'write' audit event, outbound provider network calls, the return shape `{ rotated, newValue?, message?, ... }`, and the failure semantics (rotated=false leaves existing value untouched). The annotations cover the safety profile, and the description layers concrete operational detail on top.

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-loads the action, then when-to-use, then behavioral side effects and return contract in tightly packed sentences. Every clause carries distinct information; nothing is redundant.

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?

Although there is no output schema, the description documents the return fields and the failure state, and it covers mutation effects and network behavior for a destructive operation. An agent has everything needed to call this correctly.

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%, so all six parameters (key, orgId, scope, teamId, provider, projectPath) are already documented with examples and scope conditions. The description adds no syntax or format detail beyond the schema, so baseline 3 is appropriate.

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 specific verb+resource: 'Ask the upstream provider to issue a fresh credential for this secret and store the new value back into the keyring.' It distinguishes itself from `generate_secret` (self-managed values) and `agent_scan --autoRotate` (sweep rotation), so an agent can route correctly without opening schemas.

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

Usage Guidelines5/5

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

Explicit trigger conditions ('expiring, leaked, or part of a scheduled rotation') plus two named alternatives with the conditions that select them. Nothing is left to inference.

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

scan_codebase_for_secretsA
Read-onlyIdempotent

[scan] Walk a directory tree and flag plausible hardcoded secrets using regex heuristics plus Shannon-entropy scoring on string literals. Use as a one-shot 'is anything leaking in this repo?' audit before commit/release; prefer lint_files when you already know the specific files to check (and want optional auto-fix). Read-only — never modifies source files. Honors .gitignore. Returns JSON array of { file, line, key, value, kind } findings, or 'No hardcoded secrets found in the specified directory.' when clean. False positives are possible — review before treating as ground truth.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirPathYesDirectory to scan, absolute or relative to the server cwd. The scan recurses into subdirectories.

TDQS

A4.5/5.0
Behavior4/5

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

Adds real context beyond the annotations: it honors `.gitignore`, never modifies source files, returns a defined JSON finding shape, and warns that false positives are possible and require review. The safety profile (read-only) is already covered by the annotations, so the description's additional value is the gitignore behavior and the false-positive caveat.

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?

Dense but every sentence earns its place: scope, technique, routing to the alternative, read-only guarantee, gitignore behavior, return shape, and the false-positive caveat. Front-loads what the tool does before the caveats, with 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?

No output schema exists, and the description compensates by describing the JSON finding fields and the clean-result string. Combined with the routing guidance and caveats, an agent has everything needed to invoke and interpret this tool correctly.

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 `dirPath` parameter, so the schema already documents its semantics and recursion. The description only restates 'walk a directory tree' without adding format or edge-case guidance, so the baseline of 3 is appropriate.

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 specific verb and resource ('scan' a directory tree for hardcoded secrets') plus the technique used (regex heuristics plus Shannon-entropy scoring). It also distinguishes itself from the sibling `lint_files`, so an agent can tell the two apart without opening either schema.

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

Usage Guidelines5/5

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

Explicitly frames the tool as a one-shot 'is anything leaking in this repo?' audit before commit/release and names the alternative (`lint_files`) with the exact condition that should route the agent there (known specific files, optional auto-fix). When-to-use and when-to-prefer-alternatives are both present.

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

set_secretA
DestructiveIdempotent

[secrets] Create or overwrite a single secret value, optionally with TTL/decay, per-env superposition, description, tags, and rotation hints. Use to add or update one key at a time; prefer import_dotenv for bulk .env ingest, generate_secret (with saveAs) to generate-and-store in one step, and entangle_secrets instead of duplicating the same value under two keys. Mutates the keyring (overwrites any existing value at the same key/scope), writes a 'write' event to the audit log, and triggers any matching hooks. Subject to tool policy. Returns a short confirmation text like '[scope] KEY saved' (or '[scope] KEY set for env:NAME' when env is provided).

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoIf set, writes this value to the named per-env state (superposition) instead of the default slot. Existing default value is preserved as state 'default'. Example: 'prod'.
keyYesSecret key name (UPPER_SNAKE_CASE recommended). Example: 'STRIPE_SECRET_KEY'.
tagsNoTag list for filtering and hook matching. Example: ['production', 'payments'].
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
valueYesThe secret value to store. Stored as-is; never logged or echoed. May be empty only when `env` is provided to register a new env without a default.
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
ttlSecondsNoQuantum decay window in seconds. After this many seconds the secret is marked expired (still readable, but `has_secret` returns false and `health_check` flags it). Omit for no decay.
descriptionNoFree-text human-readable description shown in `inspect_secret` and the dashboard.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.
rotationFormatNoFormat used by `agent_scan --autoRotate` and `rotate_secret` when this secret expires. Pick the format that matches the upstream service's accepted shape.
rotationPrefixNoLiteral prefix prepended on auto-rotation (only used with rotationFormat 'api-key' or 'token'). Example: 'sk-'.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, openWorldHint=false. The description adds rich context beyond these: it specifies that it 'Mutates the keyring (overwrites any existing value at the same key/scope)' confirming the destructive nature, writes a 'write' event to the audit log, triggers any matching hooks, is subject to tool policy, and even describes the return value format. This exceeds the annotation burden.

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?

The description is dense but well-structured: first sentence states purpose and features, second gives usage alternatives, third describes side effects, fourth notes policy, fifth specifies return format. Every sentence earns its place, and information is front-loaded.

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?

Given 12 parameters with 100% schema coverage, no output schema, and annotations covering safety hints, the description is complete. It covers purpose, usage alternatives, side effects, policy, and return format. An agent has everything needed to call this tool correctly.

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 description coverage is 100%, so baseline is 3. The description adds meaning by explaining how env interacts with default slot ('per-env superposition'), mentions TTL/decay, description, tags, and rotation hints without repeating schema details. However, it does not add syntax or format details beyond what the schema already provides, so it is not a full 5.

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 specific verb+resource ('Create or overwrite a single secret value') and explicitly enumerates the features (TTL/decay, per-env superposition, description, tags, rotation hints). It clearly distinguishes itself from siblings by naming import_dotenv, generate_secret, and entangle_secrets as alternatives for different use cases.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('Use to add or update one key at a time') and when-not alternatives with conditions ('prefer import_dotenv for bulk .env ingest, generate_secret (with saveAs) to generate-and-store in one step, and entangle_secrets instead of duplicating'). This is comprehensive routing guidance.

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

status_dashboardA

[dashboard] Start a local web dashboard (http://127.0.0.1:PORT) that streams live KPIs, secret tables, manifest gaps, hooks, audit events, and anomalies via Server-Sent Events. Use when an operator (or an agent on behalf of one) wants a richer visual surface than chat output; prefer health_check / analyze_secrets for one-shot text summaries inside the conversation. Side effect: binds an HTTP server on the requested port (one process-wide instance — re-running returns the existing URL instead of starting a second server). Never exposes secret values. Returns the URL string to open in a browser.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoTCP port to listen on (default 9876). Pick another port if 9876 is already in use; the call fails if binding errors.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing the side effect of binding an HTTP server, the process-wide singleton behavior (re-running returns the existing URL rather than starting a second server), that secret values are never exposed, and that the return value is a URL string. Annotations are absent from the description's remit here except for safety hints, and this text adds substantial operational context.

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-loads the core action and resource, then layers usage routing, side effects, and return value in four dense sentences with no filler. Every sentence earns its place.

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?

Despite having no output schema, the description names the return value (URL string), the singleton constraint, the binding side effect, and the secret-safety guarantee. An agent has everything needed to call it correctly and set expectations.

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% and the port parameter is already fully documented in the schema (default, failure mode). The description only echoes 'on the requested port' without adding format or constraint meaning. Baseline 3 is appropriate when the schema carries the parameter semantics.

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 specific verb and resource ('Start a local web dashboard') plus exactly what it streams (KPIs, secret tables, manifest gaps, hooks, audit events, anomalies via SSE). It explicitly names the siblings it is not, so an agent can distinguish it from health_check/analyze_secrets without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use condition ('wants a richer visual surface than chat output') and names the alternatives ('prefer health_check / analyze_secrets for one-shot text summaries'). The routing decision is fully determined.

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

teleport_packA
Read-onlyIdempotent

[teleport] Encrypt one or more secrets into a single AES-256-GCM bundle string that can be safely transferred between machines. Use to hand off a curated set of credentials to another developer or environment; prefer export_secrets for plaintext .env output (single machine, trusted) and tunnel_create for ephemeral one-shot delivery on the same machine. Reads each secret value (records 'export' audit events) and produces a base64-encoded ciphertext. The bundle is unreadable without the same passphrase via teleport_unpack. Returns the bundle string directly. Errors with 'No secrets to pack' if the filter matched zero secrets.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysNoWhitelist of exact key names to include. Omit to pack every secret in the requested scope.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
passphraseYesSymmetric passphrase used to derive the AES-256-GCM key. The receiver must supply the same string to `teleport_unpack`. Pick something high-entropy and share it out-of-band.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, non-destructive behavior. The description adds important traits beyond annotations: AES-256-GCM encryption, base64 ciphertext output, audit-event recording, passphrase dependence for unpacking, direct bundle return, and the specific error when no secrets match.

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-loads the operation, then offers alternatives, then covers mechanism, return value, and error behavior. It is dense but every sentence earns its place and there is 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?

For a complex crypto handoff tool with no output schema, the description supplies the return type, passphrase requirement, audit side effect, error case, and sibling alternatives. The schema handles parameter details, so an agent has enough context to invoke it correctly.

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%, so the input schema already documents keys, scope, orgId, teamId, projectPath, and passphrase. The description reinforces that the passphrase must match teleport_unpack, but adds little parameter syntax beyond the schema, so baseline 3 applies.

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 specific verb and resource: encrypt/pack secrets into a single AES-256-GCM bundle. It explicitly distinguishes itself from export_secrets and tunnel_create, so an agent can route correctly without opening sibling schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance: hand off a curated set of credentials to another developer or environment. It names the preferred alternatives export_secrets for plaintext .env output and tunnel_create for ephemeral same-machine delivery, and points to teleport_unpack as the reverse operation.

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

teleport_unpackA
DestructiveIdempotent

[teleport] Decrypt a bundle produced by teleport_pack and import each contained secret into the local keyring. Use on the receiving machine after a packer hands you the bundle and passphrase out-of-band; prefer dryRun=true first to preview what will be written. When dryRun is false this mutates the keyring (one 'write' event per imported secret) at the requested scope. Bad passphrase or tampered bundle returns JSON { ok: false, error: { message } } with isError: true. On success returns 'Imported N secret(s) from teleport bundle'; in dryRun mode returns 'Would import N secrets:' followed by a KEY [scope] listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).global
bundleYesBase64-encoded ciphertext returned by `teleport_pack`. Pass through whitespace untouched if possible.
dryRunNoIf true, decrypt and report what would be written but do not mutate the keyring. Useful for verifying bundle contents before commit.
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
passphraseYesThe same passphrase that was used to pack this bundle. Bad passphrases return an authentication error rather than wrong plaintext.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, and the description adds real value beyond them: each imported secret emits a 'write' event, scope is honored, and bad passphrase/tampering yields JSON {ok:false} with isError:true. It does not address whether existing keys at the target scope are overwritten, which is the main destructive risk an agent would want spelled out.

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 the sibling reference, and each later sentence carries condition/return/error information rather than filler. It is somewhat dense and runs long for a single paragraph, but no sentence is redundant.

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?

With no output schema, the description fully covers the return contract (success string, dryRun listing format, JSON error shape) and the mutation/scope behavior. For a 7-parameter mutation tool with only two required inputs, an agent has everything needed to invoke it correctly.

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 coverage is 100%, so all seven parameters (including scope enum, dryRun default, and teamId/orgId/projectPath requirements) are already documented in the schema. The description reinforces dryRun's preview purpose and the scope concept but adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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 specific verb ('Decrypt... and import') plus resource ('bundle produced by teleport_pack', 'local keyring'), and explicitly ties itself to its sibling teleport_pack. An agent can distinguish it from import_dotenv or set_secret without opening any schema.

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?

Gives clear when-to-use context ('on the receiving machine after a packer hands you the bundle and passphrase out-of-band') and a recommended precondition (prefer dryRun=true first). It does not, however, name alternative import paths (e.g., import_dotenv, set_secret) or state when this tool should not be chosen.

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

tunnel_createA

[tunnel] Stash a one-shot or short-lived secret in the q-ring server's process memory and return an ID that can be used to read it back. Use for handing a one-time value to another tool/process without persisting it (npm OTP codes, magic-link tokens, copy/paste between machines via a relay); prefer set_secret with ttlSeconds when you actually want a tracked, auditable secret. Mutates only in-memory state — the value never touches disk and is lost on server restart. Subject to tool policy. Returns JSON { ok, data: { id } } where id is an opaque string to pass to tunnel_read/tunnel_destroy.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe plaintext value to tunnel. Held only in process memory; never logged.
maxReadsNoSelf-destruct after this many successful `tunnel_read` calls. Use 1 for true one-shot delivery.
ttlSecondsNoAuto-destroy the tunnel after this many seconds. Omit for no time limit (then a `maxReads` is highly recommended).

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds genuinely non-obvious traits: values stay in process memory, never touch disk, are lost on restart, and creation is subject to tool policy. It also names the downstream tools (`tunnel_read`/`tunnel_destroy`) that consume the returned id.

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 purpose and scope, then usage, behavior, and return shape in a tight sequence with no filler. It is a single dense block rather than cleanly separated sentences/lines, which slightly hurts scannability for a six-part message.

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?

No output schema exists, and the description compensates by specifying the return shape (`{ ok, data: { id } }`) and the opaque-id contract for `tunnel_read`/`tunnel_destroy`. Combined with the in-memory-loss caveat and policy note, an agent has everything needed to call and follow up correctly.

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%, so the schema already documents `value`, `maxReads`, and `ttlSeconds` including their self-destruct semantics. The description adds only indirect guidance (mentioning `ttlSeconds` in the `set_secret` comparison and warning that omitting a TTL makes `maxReads` strongly advisable), which is useful but not deep parameter elaboration.

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 specific verb and resource ('stash a one-shot or short-lived secret in the q-ring server's process memory') plus the concrete artifact returned ('an ID that can be used to read it back'). It explicitly contrasts itself with the sibling `set_secret`, so an agent can pick between them without opening schemas.

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

Usage Guidelines5/5

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

Gives concrete use cases (npm OTP codes, magic-link tokens, copy/paste relay) and an explicit routing rule: prefer `set_secret` with `ttlSeconds` when a tracked, auditable secret is wanted. This is a clear when-to-use and when-to-use-something-else statement.

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

tunnel_destroyA
DestructiveIdempotent

[tunnel] Immediately remove a tunnel from memory, regardless of remaining reads or TTL. Use when a tunneled value should be cancelled before delivery (e.g. wrong recipient, secret already rotated); prefer letting maxReads/TTL handle cleanup for normal flows. Mutates in-memory state only. Returns 'Destroyed ID' on success or a not-found error if the ID is unknown or already gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe opaque tunnel ID to destroy.

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the destructive/idempotent annotations by disclosing what is destroyed (in-memory only, not persisted), that it bypasses reads and TTL, and the exact success ('Destroyed ID') and failure (not-found) outcomes.

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?

Four tight sentences, front-loaded with the action and scope, then when/when-not, then side effects, then return values. 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?

With no output schema, the description still supplies the return contract and error behavior, and the mutation scope is clear despite rich annotations. Nothing needed to call it correctly is missing.

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 `id` parameter, so the schema already carries the contract. The description only adds the state semantics of an unknown/already-gone ID, which is a minor increment over baseline.

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 specific verb and resource ('Immediately remove a tunnel from memory') with scope qualifiers ('regardless of remaining reads or TTL'), which cleanly separates it from tunnel_read, tunnel_list, and tunnel_create.

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

Usage Guidelines5/5

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

Explicitly names the trigger case (cancelling before delivery, wrong recipient, rotated secret) and the negative case (prefer letting `maxReads`/TTL handle normal cleanup). The alternative-to-this-tool decision is fully spelled out.

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

tunnel_listA
Read-onlyIdempotent

[tunnel] Enumerate all currently-active tunnels in the q-ring server with their remaining read budget and time-to-live. Use to audit what is still in memory or to look up an ID you forgot; values are never included in the output. Read-only. Returns one line per tunnel formatted as id | reads:N | max:N | expires:Ns, or the literal text 'No active tunnels' when the list is empty.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, lowering the bar. The description nonetheless adds non-obvious behavior: secret values are never included in the output, and it specifies the exact return line format and the empty-list literal.

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 purpose and usage before the format details; every sentence carries information. The standalone 'Read-only.' sentence duplicates the readOnlyHint annotation, a minor redundancy that keeps it out of the top band.

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?

There is no output schema, so the description correctly supplies the return shape and the empty-case behavior. For a zero-parameter, read-only listing tool this covers everything an agent needs to call and parse it.

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?

The tool takes zero parameters, so the baseline of 4 applies; there is no parameter syntax left for the description to compensate for.

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 specific verb and resource (enumerate active tunnels in the q-ring server) plus the exact payload returned (remaining read budget and TTL). It is clearly distinguishable from siblings tunnel_create, tunnel_read, and tunnel_destroy by naming its enumeration/audit role.

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?

Gives two concrete use cases: auditing what is still in memory and recovering a forgotten tunnel ID. It does not explicitly name an alternative tool or state when not to use it, so it falls short of the top band.

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

tunnel_readA
Destructive

[tunnel] Fetch the value stashed by a prior tunnel_create call by its ID. Use exactly once per intended consumer; the value is destructive-by-design and may self-delete after this call. Increments the read counter and may auto-destroy the tunnel if maxReads was set. Returns JSON { ok, data: { id, value } } on success, or an error 'Tunnel "..." not found or expired' if the tunnel has been destroyed, hit its TTL, or never existed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe opaque tunnel ID returned by `tunnel_create`. Case-sensitive.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: it discloses self-deletion-by-design, read-counter increment, auto-destroy when maxReads is set, and the exact error string on failure. Annotations already flag destructive/non-idempotent, and the description enriches that with the concrete destruction mechanism.

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?

Three dense sentences with no filler; the destructive-consumption warning is front-loaded right after the purpose. Slightly redundant in restating the ID provenance and the return shape together, keeping it just under a 5.

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?

With no output schema, the description supplies the success shape ({ ok, data: { id, value } }) and the failure shape, plus the destruction semantics an agent needs before calling a one-shot destructive read. Nothing material is missing.

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% and the single `id` parameter is already documented there as the opaque, case-sensitive ID from tunnel_create. The description echoes this without adding format or validation detail, so the baseline of 3 applies.

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 specific verb and resource ('Fetch the value stashed by a prior tunnel_create call by its ID') and ties itself to the sibling that produces the input, so it is clearly distinguishable from tunnel_create/tunnel_list/tunnel_destroy.

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?

Gives explicit consumption guidance ('Use exactly once per intended consumer') and explains the failure condition (destroyed, TTL expired, never existed). It stops short of naming alternative tools or the alternative action when a tunnel is gone, so it is clear context without full routing.

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

validate_secretA
Read-onlyIdempotent

[validation] Test whether a stored secret is still accepted by its upstream service (OpenAI, Stripe, GitHub, AWS, generic HTTP, etc.) by making a minimal authenticated request. Use to confirm liveness before relying on a credential or as the verification step after rotate_secret; prefer ci_validate_secrets for a batch run across every key in scope. Side effects: makes one outbound network request per call (may incur tiny provider-side rate-limit cost). Records 'read' for the underlying secret value in the audit log; the value itself is never logged. Returns JSON { valid, provider, status?, message?, rateLimit?, ... } (provider-specific shape).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesThe exact key whose value should be tested upstream. Example: 'OPENAI_API_KEY'.
orgIdNoOrganization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'.
scopeNoWhere the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId).
teamIdNoTeam identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'.
providerNoForce a specific provider id. Built-ins include 'openai', 'stripe', 'github', 'aws', 'http'. Omit to auto-detect from the value's prefix or the secret's stored provider hint.
projectPathNoAbsolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (which only give readOnly/openWorld/idempotent/destructive hints) by disclosing the outbound network request per call, possible provider rate-limit cost, the 'read' audit-log entry, and the guarantee the value itself is never logged. It even sketches the return JSON shape. This is rich, non-redundant behavioral context.

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 purpose and free of filler, but it is a dense single paragraph bundling usage, side effects, and return shape. All content is useful, though slightly more than is strictly necessary for a scan.

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?

For a complex network-touching tool with no output schema, the description supplies the missing pieces: the side effect, the audit implication, and an inline return-shape sketch. An agent has everything needed to invoke and interpret it correctly.

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%, so the schema already documents every parameter including scope, orgId/teamId conditionals, and provider auto-detection. The description mentions providers but adds no syntax or constraint detail beyond what the schema provides, so the baseline 3 is appropriate.

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 specific verb and resource ('Test whether a stored secret is still accepted by its upstream service') and explains the mechanism ('minimal authenticated request'). It also distinguishes itself from siblings by naming rotate_secret and ci_validate_secrets, so an agent can route without opening schemas.

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

Usage Guidelines5/5

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

Explicitly gives when-to-use ('confirm liveness before relying on a credential' or 'verification step after rotate_secret') and names the alternative with its selection condition ('prefer ci_validate_secrets for a batch run across every key in scope'). Nothing is left to inference.

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

verify_audit_chainA
Read-onlyIdempotent

[audit] Recompute the SHA-256 hash chain over the audit log and confirm no event has been mutated, deleted, or reordered. Use periodically as a tamper-evidence check, or whenever you suspect the audit log has been touched outside q-ring; the result is informational — this tool does not repair the chain if it is broken. Read-only. Returns JSON { ok, valid, brokenAt? } where valid is true for an intact chain and brokenAt (when present) names the first event whose hash did not match.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds real behavioral context beyond them: it is a tamper-evidence check, it does not repair a broken chain, and it documents the return contract { ok, valid, brokenAt? }. That is substantive disclosure, not repetition.

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 core action in the first sentence, followed by usage and return contract. Every clause carries information and none is 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?

For a parameterless, no-output-schema tool, the description supplies the missing return shape and the non-repair caveat, so an agent has everything needed to call and interpret it correctly.

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?

The tool takes zero parameters, so there is nothing to document and the baseline is 4. The description does not need to compensate for any parameter gaps.

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 specific verb (recompute/verify) and resource (SHA-256 hash chain over the audit log) plus exactly what is being confirmed: no event mutated, deleted, or reordered. This cleanly separates it from siblings like audit_log, export_audit, and detect_anomalies.

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?

Gives explicit triggering contexts: 'use periodically as a tamper-evidence check' and 'whenever you suspect the audit log has been touched outside q-ring,' and clarifies it is informational and does not repair. It does not name an alternative tool (e.g., detect_anomalies) to disambiguate further, so it stops short of a 5.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.17.5
    • Changedaudit_log2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "read",
        -  "write",
        -  "delete",
        -  "list",
        -  "export",
        -  "generate",
        -  "entangle",
        -  "tunnel",
        -  "teleport",
        -  "collapse",
        -  "canary",
        -  "wrap"
        -]New value: +[
        +  "read",
        +  "write",
        +  "delete",
        +  "list",
        +  "export",
        +  "generate",
        +  "entangle",
        +  "tunnel",
        +  "teleport",
        +  "collapse",
        +  "approve",
        +  "revoke",
        +  "policy_deny",
        +  "rotate",
        +  "push",
        +  "wrap"
        +]
      • addedInput schema / properties / agent
        Added value: +{
        +  "description": "Limit to events stamped with this agent label (clientInfo name@version). Omit for all agents.",
        +  "type": "string"
        +}
  2. 1 tool updatev0.16.1
    • Changedaudit_log1 field changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "read",
        -  "write",
        -  "delete",
        -  "list",
        -  "export",
        -  "generate",
        -  "entangle",
        -  "tunnel",
        -  "teleport",
        -  "collapse"
        -]New value: +[
        +  "read",
        +  "write",
        +  "delete",
        +  "list",
        +  "export",
        +  "generate",
        +  "entangle",
        +  "tunnel",
        +  "teleport",
        +  "collapse",
        +  "canary",
        +  "wrap"
        +]
  3. 3 tool updatesv0.14.2
    • Addedcheck_project
    • Addedget_policy_summary
    • Addedtunnel_list
  4. 2 tool updates
    • Removedcheck_project
    • Removedtunnel_list
  5. 2 tool updatesv0.14.1
    • Changedexec_with_secrets1 field changed
      • changedInput schema / properties / profile / description
        Previous value: -"Exec sandbox profile. 'restricted' (default) limits PATH and inheritable env vars; 'ci' is restricted plus CI-friendly defaults (no TTY); 'unrestricted' inherits the full server environment — only pick this when you understand the leak risk."New value: +"Exec sandbox profile. 'restricted' (default) denies network-tool binaries (curl, wget, ssh, scp, nc, netcat, ncat) AND common interpreters/shells (python, node, deno, bun, perl, ruby, php, sh, bash, zsh) — since those could otherwise egress the injected secrets — strips proxy env vars, and caps runtime at 30s. It still is NOT a real OS sandbox (it does not restrict PATH, and some allowed binary could in principle make network calls); for genuinely untrusted commands use OS-level isolation (containers, network namespaces). 'ci' allows network and interpreters with a 300s cap and blocks a few destructive commands; 'unrestricted' inherits the full server environment. Define a custom profile in .q-ring.json to allow specific interpreters with secrets."
    • Removedget_policy_summary
  6. 40 tool updatesv0.11.7
    • Changedagent_forget1 field changed
      • changedInput schema / properties / key / description
        Previous value: -"Memory key to forget"New value: +"Memory key to delete."
    • Changedagent_recall1 field changed
      • changedInput schema / properties / key / description
        Previous value: -"Memory key to recall (omit to list all)"New value: +"Memory key to read. Omit to list every stored key (without values)."
    • Changedagent_remember2 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"Memory key"New value: +"Memory key (free-form string). Convention: lowercase dotted namespaces, e.g. 'project.lastDeploy'."
      • changedInput schema / properties / value / description
        Previous value: -"Value to store"New value: +"Plain-string value to store. JSON-stringify structured data on the caller side if needed."
    • Changedagent_scan2 fields changed
      • changedInput schema / properties / autoRotate / description
        Previous value: -"Auto-rotate expired secrets with generated values"New value: +"If true, replace expired secrets with newly generated values (using each secret's `rotationFormat`/`rotationPrefix`). Only enable when intentional rotation is desired — this is destructive on the upstream side."
      • changedInput schema / properties / projectPaths / description
        Previous value: -"Project paths to monitor"New value: +"List of absolute project roots to scan. Defaults to `[server.cwd]` when omitted."
    • Changedanalyze_secrets4 fields changed
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedaudit_log3 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Filter by action"New value: +"Limit to a single action verb (e.g. 'read' to see only reads). Omit for all actions."
      • changedInput schema / properties / key / description
        Previous value: -"Filter by key"New value: +"Limit to events touching this exact key. Omit for the full log."
      • changedInput schema / properties / limit / description
        Previous value: -"Max events to return"New value: +"Maximum events to return, newest first. Defaults to 20. Increase for deeper investigations."
    • Changedcheck_policy5 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Type of policy check"New value: +"Which policy surface to query. 'tool' = MCP tool gate (needs `toolName`); 'key_read' = secret read gate (needs `key`); 'exec' = exec_with_secrets command gate (needs `command`)."
      • changedInput schema / properties / command / description
        Previous value: -"Command to check (for action=exec)"New value: +"Command to evaluate against the exec allowlist/denylist. Required when `action` is 'exec'."
      • changedInput schema / properties / key / description
        Previous value: -"Secret key to check (for action=key_read)"New value: +"Secret key name to evaluate. Required when `action` is 'key_read'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / toolName / description
        Previous value: -"Tool name to check (for action=tool)"New value: +"Tool id to evaluate, e.g. 'rotate_secret'. Required when `action` is 'tool'."
    • Changedcheck_project1 field changed
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
    • Changedci_validate_secrets4 fields changed
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changeddelete_secret5 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"The secret key name"New value: +"Exact secret key name to delete. Example: 'OLD_API_KEY'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changeddetect_anomalies1 field changed
      • changedInput schema / properties / key / description
        Previous value: -"Check anomalies for a specific key"New value: +"If provided, narrow the scan to this exact key. Omit to scan across every key in the audit log."
    • Changeddetect_environment1 field changed
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
    • Changeddisentangle_secrets6 fields changed
      • changedInput schema / properties / sourceKey / description
        Previous value: -"Source secret key"New value: +"First key in the previously linked pair."
      • addedInput schema / properties / sourceProjectPath / description
        Added value: +"Project root for sourceKey when sourceScope='project'."
      • changedInput schema / properties / sourceScope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / targetKey / description
        Previous value: -"Target secret key"New value: +"Second key in the previously linked pair."
      • addedInput schema / properties / targetProjectPath / description
        Added value: +"Project root for targetKey when targetScope='project'."
      • changedInput schema / properties / targetScope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
    • Changedentangle_secrets6 fields changed
      • changedInput schema / properties / sourceKey / description
        Previous value: -"Source secret key"New value: +"First secret key in the pair. Example: 'STRIPE_SECRET_KEY'."
      • addedInput schema / properties / sourceProjectPath / description
        Added value: +"Project root for sourceKey when sourceScope='project'. Defaults to the server cwd."
      • changedInput schema / properties / sourceScope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / targetKey / description
        Previous value: -"Target secret key"New value: +"Second secret key to keep in lockstep with the source."
      • addedInput schema / properties / targetProjectPath / description
        Added value: +"Project root for targetKey when targetScope='project'. Defaults to the server cwd."
      • changedInput schema / properties / targetScope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
    • Changedenv_generate2 fields changed
      • changedInput schema / properties / env / description
        Previous value: -"Environment for superposition collapse (e.g., dev, staging, prod)"New value: +"Environment slug used to collapse superposition when a secret has multiple per-env states. Examples: 'dev', 'staging', 'prod'. If omitted, the secret's defaultEnv is used."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
    • Changedexec_with_secrets9 fields changed
      • changedInput schema / properties / args / description
        Previous value: -"Command arguments"New value: +"Positional arguments passed to `command`. Example: ['run', 'db:migrate']. Each element is passed verbatim with no extra shell parsing."
      • changedInput schema / properties / command / description
        Previous value: -"Command to run"New value: +"Executable name or full command to run. Example: 'pnpm', 'node', '/usr/bin/env'. Must be allowed by exec policy."
      • changedInput schema / properties / keys / description
        Previous value: -"Only inject these specific keys"New value: +"Whitelist of exact key names to inject. Omit to inject every secret in scope (subject to `tags`)."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / profile / description
        Previous value: -"Exec profile: unrestricted, restricted, or ci"New value: +"Exec sandbox profile. 'restricted' (default) limits PATH and inheritable env vars; 'ci' is restricted plus CI-friendly defaults (no TTY); 'unrestricted' inherits the full server environment — only pick this when you understand the leak risk."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / tags / description
        Previous value: -"Only inject secrets with these tags"New value: +"Inject only secrets carrying at least one of these tags. Combinable with `keys` as an AND filter."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedexport_audit3 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format"New value: +"Output format. 'jsonl' (default) is most stream-friendly; 'json' is a single array; 'csv' is spreadsheet-friendly."
      • changedInput schema / properties / since / description
        Previous value: -"Start date (ISO 8601)"New value: +"Inclusive lower bound on event timestamp, ISO 8601. Example: '2026-04-01T00:00:00Z'. Omit for no lower bound."
      • changedInput schema / properties / until / description
        Previous value: -"End date (ISO 8601)"New value: +"Inclusive upper bound on event timestamp, ISO 8601. Omit for now/no upper bound."
    • Changedexport_secrets8 fields changed
      • changedInput schema / properties / env / description
        Previous value: -"Environment for superposition collapse (e.g., dev, staging, prod)"New value: +"Environment slug used to collapse superposition when a secret has multiple per-env states. Examples: 'dev', 'staging', 'prod'. If omitted, the secret's defaultEnv is used."
      • changedInput schema / properties / format / description
        Previous value: -"Output format"New value: +"'env' renders KEY=\"value\" lines suitable for a .env file; 'json' renders an object keyed by secret name. Defaults to 'env'."
      • changedInput schema / properties / keys / description
        Previous value: -"Only export these specific key names"New value: +"Whitelist of exact key names to include. If omitted, every key in scope is considered (subject to `tags`)."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / tags / description
        Previous value: -"Only export secrets with any of these tags"New value: +"Include only secrets tagged with at least one of these tags. Combined with `keys` as an AND filter when both are supplied."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedgenerate_secret8 fields changed
      • changedInput schema / properties / format / description
        Previous value: -"Output format"New value: +"Output shape. 'hex' / 'base64' / 'alphanumeric' = raw random string of `length` characters; 'uuid' = RFC4122 v4; 'api-key' / 'token' = random alphanumeric with optional `prefix`; 'password' = mixed-case alphanumeric with symbols. Defaults to 'api-key'."
      • changedInput schema / properties / length / description
        Previous value: -"Length in bytes or characters"New value: +"Number of characters (or bytes for hex/base64) to generate. Ignored for 'uuid'. Defaults to a sensible per-format value (e.g. 32 for api-key)."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / prefix / description
        Previous value: -"Prefix for api-key/token format"New value: +"Literal prefix prepended to the random portion. Only meaningful for 'api-key' and 'token'. Example: 'sk-' or 'svc_'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / saveAs / description
        Previous value: -"If provided, save the generated secret with this key name"New value: +"If provided, store the generated value at this key name in the keyring (one mutation). Omit to just return the value without persisting."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedget_policy_summary1 field changed
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
    • Changedget_project_context4 fields changed
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedget_secret6 fields changed
      • changedInput schema / properties / env / description
        Previous value: -"Environment for superposition collapse (e.g., dev, staging, prod)"New value: +"Environment slug used to collapse superposition when a secret has multiple per-env states. Examples: 'dev', 'staging', 'prod'. If omitted, the secret's defaultEnv is used."
      • changedInput schema / properties / key / description
        Previous value: -"The secret key name"New value: +"Exact secret key name as stored in the keyring (case-sensitive). Example: 'OPENAI_API_KEY'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedhas_secret5 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"The secret key name"New value: +"Exact secret key name. Example: 'GITHUB_TOKEN'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedhealth_check4 fields changed
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedimport_dotenv5 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"The .env file content to parse and import"New value: +"Raw .env file content as a single string (newline-separated KEY=VALUE lines, comments allowed)."
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview what would be imported without saving"New value: +"If true, parse and report what would happen but do not write to the keyring. Useful for previewing imports before committing."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / skipExisting / description
        Previous value: -"Skip keys that already exist in q-ring"New value: +"If true, leave already-present keys untouched and add them to the 'skipped' list instead of overwriting."
    • Changedinspect_secret5 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"The secret key name"New value: +"Exact secret key name to inspect. Example: 'OPENAI_API_KEY'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedlint_files6 fields changed
      • changedInput schema / properties / files / description
        Previous value: -"File paths to lint"New value: +"Absolute or relative paths to lint. Non-existent paths surface as scan errors."
      • changedInput schema / properties / fix / description
        Previous value: -"Auto-replace and store secrets"New value: +"If true, rewrite the source files to read `process.env.KEY` and store the extracted value in the keyring. If false (default), only report findings."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedlist_secrets8 fields changed
      • changedInput schema / properties / expired / description
        Previous value: -"Show only expired secrets"New value: +"If true, return only secrets whose decay TTL has elapsed (lifetimePercent >= 100)."
      • changedInput schema / properties / filter / description
        Previous value: -"Glob pattern on key name (e.g., 'API_*')"New value: +"Glob pattern matched against the key name. Supports `*` and `?`. Examples: 'API_*', 'STRIPE_?_KEY'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / stale / description
        Previous value: -"Show only stale secrets (75%+ decay)"New value: +"If true, return only secrets in the stale window (lifetimePercent >= 75 and not yet expired)."
      • changedInput schema / properties / tag / description
        Previous value: -"Filter by tag"New value: +"Return only secrets that include this exact tag (case-sensitive). Example: 'production'."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedregister_hook11 fields changed
      • changedInput schema / properties / actions / description
        Previous value: -"Which actions trigger this hook"New value: +"Which lifecycle actions trigger this hook. Defaults to all three."
      • changedInput schema / properties / command / description
        Previous value: -"Shell command to execute (for shell type)"New value: +"Required when type='shell'. The literal shell command to run; q-ring exposes the matching key as $QRING_HOOK_KEY and action as $QRING_HOOK_ACTION."
      • changedInput schema / properties / description / description
        Previous value: -"Human-readable description"New value: +"Free-text human-readable description, surfaced by `list_hooks` and the dashboard."
      • changedInput schema / properties / key / description
        Previous value: -"Trigger on exact key match"New value: +"Trigger only on this exact key name. Pick at most one of `key` / `keyPattern` / `tag` (or combine for stricter matching)."
      • changedInput schema / properties / keyPattern / description
        Previous value: -"Trigger on key glob pattern (e.g. DB_*)"New value: +"Trigger on any key matching this glob pattern. Examples: 'DB_*', 'STRIPE_*'."
      • changedInput schema / properties / scope / description
        Previous value: -"Trigger only for this scope"New value: +"Restrict the hook to secrets in this scope. Omit to fire across both global and project secrets."
      • changedInput schema / properties / signalName / description
        Previous value: -"Signal to send (for signal type)"New value: +"Signal name to send (e.g. 'SIGHUP', 'SIGUSR1'). Defaults to SIGHUP, which most daemons treat as 'reload config'."
      • changedInput schema / properties / signalTarget / description
        Previous value: -"Process name or PID (for signal type)"New value: +"Required when type='signal'. Either a numeric PID or a process name resolvable via `ps`."
      • changedInput schema / properties / tag / description
        Previous value: -"Trigger on secrets with this tag"New value: +"Trigger on any secret carrying this exact tag. Combinable with key/keyPattern as an AND filter."
      • changedInput schema / properties / type / description
        Previous value: -"Hook type"New value: +"Hook delivery mechanism. 'shell' runs a local command, 'http' POSTs JSON to a URL, 'signal' sends an OS signal to a named process."
      • changedInput schema / properties / url / description
        Previous value: -"URL to POST to (for http type)"New value: +"Required when type='http'. Full URL to POST a JSON body `{ id, key, scope, action, timestamp }` to (the value itself is never sent)."
    • Changedremove_hook1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Hook ID to remove"New value: +"Hook id returned by `register_hook` or visible in `list_hooks` (opaque string)."
    • Changedrotate_secret6 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"The secret key to rotate"New value: +"Exact key to rotate. Must already exist in the keyring."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / provider / description
        Previous value: -"Force a specific provider"New value: +"Force a specific provider id (see `list_providers`). Omit to auto-detect from the current value or the secret's stored provider hint."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedscan_codebase_for_secrets1 field changed
      • changedInput schema / properties / dirPath / description
        Previous value: -"Absolute or relative path to the directory to scan"New value: +"Directory to scan, absolute or relative to the server cwd. The scan recurses into subdirectories."
    • Changedset_secret12 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Human-readable description"New value: +"Free-text human-readable description shown in `inspect_secret` and the dashboard."
      • changedInput schema / properties / env / description
        Previous value: -"If provided, sets the value for this specific environment (superposition)"New value: +"If set, writes this value to the named per-env state (superposition) instead of the default slot. Existing default value is preserved as state 'default'. Example: 'prod'."
      • changedInput schema / properties / key / description
        Previous value: -"The secret key name"New value: +"Secret key name (UPPER_SNAKE_CASE recommended). Example: 'STRIPE_SECRET_KEY'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / rotationFormat / description
        Previous value: -"Format for auto-rotation when this secret expires"New value: +"Format used by `agent_scan --autoRotate` and `rotate_secret` when this secret expires. Pick the format that matches the upstream service's accepted shape."
      • changedInput schema / properties / rotationPrefix / description
        Previous value: -"Prefix for auto-rotation (e.g. 'sk-')"New value: +"Literal prefix prepended on auto-rotation (only used with rotationFormat 'api-key' or 'token'). Example: 'sk-'."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / tags / description
        Previous value: -"Tags for organization"New value: +"Tag list for filtering and hook matching. Example: ['production', 'payments']."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
      • changedInput schema / properties / ttlSeconds / description
        Previous value: -"Time-to-live in seconds (quantum decay)"New value: +"Quantum decay window in seconds. After this many seconds the secret is marked expired (still readable, but `has_secret` returns false and `health_check` flags it). Omit for no decay."
      • changedInput schema / properties / value / description
        Previous value: -"The secret value"New value: +"The secret value to store. Stored as-is; never logged or echoed. May be empty only when `env` is provided to register a new env without a default."
    • Changedstatus_dashboard1 field changed
      • changedInput schema / properties / port / description
        Previous value: -"Port to serve on"New value: +"TCP port to listen on (default 9876). Pick another port if 9876 is already in use; the call fails if binding errors."
    • Changedteleport_pack6 fields changed
      • changedInput schema / properties / keys / description
        Previous value: -"Specific keys to pack (all if omitted)"New value: +"Whitelist of exact key names to include. Omit to pack every secret in the requested scope."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / passphrase / description
        Previous value: -"Encryption passphrase"New value: +"Symmetric passphrase used to derive the AES-256-GCM key. The receiver must supply the same string to `teleport_unpack`. Pick something high-entropy and share it out-of-band."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedteleport_unpack7 fields changed
      • changedInput schema / properties / bundle / description
        Previous value: -"Base64-encoded encrypted bundle"New value: +"Base64-encoded ciphertext returned by `teleport_pack`. Pass through whitespace untouched if possible."
      • changedInput schema / properties / dryRun / description
        Previous value: -"Preview without importing"New value: +"If true, decrypt and report what would be written but do not mutate the keyring. Useful for verifying bundle contents before commit."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / passphrase / description
        Previous value: -"Decryption passphrase"New value: +"The same passphrase that was used to pack this bundle. Bad passphrases return an authentication error rather than wrong plaintext."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
    • Changedtunnel_create3 fields changed
      • changedInput schema / properties / maxReads / description
        Previous value: -"Self-destruct after N reads"New value: +"Self-destruct after this many successful `tunnel_read` calls. Use 1 for true one-shot delivery."
      • changedInput schema / properties / ttlSeconds / description
        Previous value: -"Auto-expire after N seconds"New value: +"Auto-destroy the tunnel after this many seconds. Omit for no time limit (then a `maxReads` is highly recommended)."
      • changedInput schema / properties / value / description
        Previous value: -"The secret value"New value: +"The plaintext value to tunnel. Held only in process memory; never logged."
    • Changedtunnel_destroy1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Tunnel ID"New value: +"The opaque tunnel ID to destroy."
    • Changedtunnel_read1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Tunnel ID"New value: +"The opaque tunnel ID returned by `tunnel_create`. Case-sensitive."
    • Changedvalidate_secret6 fields changed
      • changedInput schema / properties / key / description
        Previous value: -"The secret key name"New value: +"The exact key whose value should be tested upstream. Example: 'OPENAI_API_KEY'."
      • changedInput schema / properties / orgId / description
        Previous value: -"Org identifier for org-scoped secrets"New value: +"Organization identifier for org-scoped secrets. Required only when scope='org'. Example: 'acme-corp'."
      • changedInput schema / properties / projectPath / description
        Previous value: -"Project root path for project-scoped secrets"New value: +"Absolute path to the project root for project-scoped secrets and policy resolution. Defaults to the MCP server's current working directory when omitted."
      • changedInput schema / properties / provider / description
        Previous value: -"Force a specific provider (openai, stripe, github, aws, http)"New value: +"Force a specific provider id. Built-ins include 'openai', 'stripe', 'github', 'aws', 'http'. Omit to auto-detect from the value's prefix or the secret's stored provider hint."
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global, project, team, or org"New value: +"Where the secret lives. 'global' = user keyring (default if omitted on reads), 'project' = scoped to projectPath, 'team' = team-shared (needs teamId), 'org' = org-shared (needs orgId)."
      • changedInput schema / properties / teamId / description
        Previous value: -"Team identifier for team-scoped secrets"New value: +"Team identifier for team-scoped secrets. Required only when scope='team'. Example: 'acme-platform'."
  7. 29 tool updatesv0.11.5
    • Addedagent_forget
    • Addedagent_recall
    • Addedagent_remember
    • Addedanalyze_secrets
    • Addedcheck_policy
    • Addedci_validate_secrets
    • Changeddelete_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changeddisentangle_secrets4 fields changed
      • changedInput schema / properties / sourceScope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / sourceScope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • changedInput schema / properties / targetScope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / targetScope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
    • Changedentangle_secrets4 fields changed
      • changedInput schema / properties / sourceScope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / sourceScope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • changedInput schema / properties / targetScope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / targetScope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
    • Addedexec_with_secrets
    • Addedexport_audit
    • Changedexport_secrets4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedgenerate_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Addedget_policy_summary
    • Addedget_project_context
    • Changedget_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedhas_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedhealth_check4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedimport_dotenv2 fields changed
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
    • Changedinspect_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Addedlint_files
    • Changedlist_secrets4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Addedrotate_secret
    • Addedscan_codebase_for_secrets
    • Changedset_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedteleport_pack4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedteleport_unpack4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Changedvalidate_secret4 fields changed
      • addedInput schema / properties / orgId
        Added value: +{
        +  "description": "Org identifier for org-scoped secrets",
        +  "type": "string"
        +}
      • changedInput schema / properties / scope / description
        Previous value: -"Scope: global or project"New value: +"Scope: global, project, team, or org"
      • changedInput schema / properties / scope / enum
        Previous value: -[
        -  "global",
        -  "project"
        -]New value: +[
        +  "global",
        +  "project",
        +  "team",
        +  "org"
        +]
      • addedInput schema / properties / teamId
        Added value: +{
        +  "description": "Team identifier for team-scoped secrets",
        +  "type": "string"
        +}
    • Addedverify_audit_chain
  8. 13 tool updatesv0.1.1
    • Addedcheck_project
    • Addeddisentangle_secrets
    • Addedenv_generate
    • Addedexport_secrets
    • Addedimport_dotenv
    • Addedlist_hooks
    • Addedlist_providers
    • Changedlist_secrets4 fields changed
      • addedInput schema / properties / expired
        Added value: +{
        +  "description": "Show only expired secrets",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / filter
        Added value: +{
        +  "description": "Glob pattern on key name (e.g., 'API_*')",
        +  "type": "string"
        +}
      • addedInput schema / properties / stale
        Added value: +{
        +  "description": "Show only stale secrets (75%+ decay)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / tag
        Added value: +{
        +  "description": "Filter by tag",
        +  "type": "string"
        +}
    • Addedregister_hook
    • Addedremove_hook
    • Changedset_secret2 fields changed
      • addedInput schema / properties / rotationFormat
        Added value: +{
        +  "description": "Format for auto-rotation when this secret expires",
        +  "enum": [
        +    "hex",
        +    "base64",
        +    "alphanumeric",
        +    "uuid",
        +    "api-key",
        +    "token",
        +    "password"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / rotationPrefix
        Added value: +{
        +  "description": "Prefix for auto-rotation (e.g. 'sk-')",
        +  "type": "string"
        +}
    • Addedstatus_dashboard
    • Addedvalidate_secret
  9. 19 tool updatesv0.1.0
    • First observedagent_scan
    • First observedaudit_log
    • First observeddelete_secret
    • First observeddetect_anomalies
    • First observeddetect_environment
    • First observedentangle_secrets
    • First observedgenerate_secret
    • First observedget_secret
    • First observedhas_secret
    • First observedhealth_check
    • First observedinspect_secret
    • First observedlist_secrets
    • First observedset_secret
    • First observedteleport_pack
    • First observedteleport_unpack
    • First observedtunnel_create
    • First observedtunnel_destroy
    • First observedtunnel_list
    • First observedtunnel_read

TDQS

A4.1/5.0

Scored across 44 tools

Disambiguation3/5

The set has many closely related diagnostic and lifecycle tools (e.g. health_check, check_project, agent_scan, detect_anomalies, analyze_secrets) whose boundaries are explained but still overlap enough to require careful reading. Within core secret CRUD, get/inspect/has are well distinguished, but the sheer volume creates selection risk.

Naming Consistency4/5

Almost all tools use snake_case and many follow a verb_noun or domain_verb pattern (get_secret, list_hooks, tunnel_create, agent_remember). A few names deviate to noun-first or noun_noun (env_generate, status_dashboard, audit_log, health_check), but the convention remains readable and largely predictable.

Tool Count2/5

44 tools is substantially beyond the recommended 3-15 range and exceeds the 25+ threshold, bundling secret CRUD, audit, validation, hooks, tunnels, teleport, scanning, policy, and a dashboard into one server. Although individual tools are granular and purposeful, the count creates a heavy surface for a single MCP server.

Completeness5/5

The surface covers the secret-management lifecycle comprehensively: create/read/update/delete, metadata inspection, generation, rotation, validation, export/import, encrypted teleport, ephemeral tunnels, audit logging, tamper verification, hooks, policy checks, exec injection, code scanning, and agent memory. No obvious lifecycle gap is missing for the stated domain.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides Claude Code with access to personal secrets and notes stored in a local Markdown file. It enables users to list, search, retrieve, and update secret sections through natural language commands.
    5
    8 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Local AES-256-GCM encrypted vault for AI agents. Resolve {{PLACEHOLDER}} secrets in prompts at runtime — LLMs never see real API keys. Argon2id key derivation, zero cloud.
    2
    58 npm
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Encrypted secrets vault that blinds AI agents to API keys. Stores secrets in AES-256-GCM encrypted SQLite vault, resolves them at runtime via MCP values never appear in LLM conversation transcripts. Sandbox .env files with deterministic fakes.
    7
    39 npm
    3
    MIT