Skip to main content
Glama

mcp-trove

An MCP server that manages a trove: a git-backed vault holding two kinds of entry — plaintext snippets (searchable Markdown, with images and diagrams) and secrets stored encrypted at rest, so the whole vault can be pushed to a private remote without exposing them. A trove holds both treasures (secrets) and finds (snippets).

The server is the deterministic writer over the vault: the calling model composes and cleans content, the server guarantees placement, slug, frontmatter, encryption and index — always the same, no drift.

Install

pip install mcp-trove        # or: uv add mcp-trove

pip install is self-contained — encryption uses the age algorithm through the pyrage binding, so no external binary is required.

Related MCP server: AgentVault MCP Server

Configure

The vault root comes from the TROVE_PATH environment variable. Register the server with your MCP client (Claude Code shown):

"trove": {
  "type": "stdio",
  "command": "uv",
  "args": ["--directory", "/path/to/mcp-trove", "run", "mcp-trove"],
  "env": { "TROVE_PATH": "/path/to/your/trove" }
}

Then call trove_init once to scaffold the vault and generate the age keypair. The private key is written outside the repo (default ~/.config/trove/key); the public recipient is committed in trove.toml.

Back up your private key off-machine (e.g. a password manager). Without it the encrypted secrets are unrecoverable, even for you. On a new machine you clone the git vault and restore the key separately — cloning alone cannot decrypt, by design.

Key management

There are two keys, and only one is secret.

  • Public recipient (age1...) — committed in trove.toml under recipients. Secrets are encrypted to it. Safe to share.

  • Private key (AGE-SECRET-KEY-1...) — decrypts secrets. Never commit it.

Where it lives. Trove looks for the private key in this order:

  1. TROVE_KEY_PATH environment variable, if set.

  2. key_path under [trove] in trove.toml, if set.

  3. Default: ~/.config/trove/key.

File format. A plain text file containing a single AGE-SECRET-KEY-1... line (lines starting with # are ignored). Keep it chmod 600.

Creating it. trove_init generates the keypair on first run: it writes the private key to the resolved path (mode 600) and records the public recipient in trove.toml. You don't create it by hand.

Backing it up. Copy that single file somewhere off this machine — your password manager is ideal. This is the only thing that cannot be regenerated.

Restoring on another machine.

mkdir -p ~/.config/trove
# paste your backed-up key into the file, one AGE-SECRET-KEY-1... line:
$EDITOR ~/.config/trove/key
chmod 600 ~/.config/trove/key
git clone <your-private-vault-repo> /path/to/your/trove   # the snippets + encrypted secrets
export TROVE_PATH=/path/to/your/trove

The git clone brings the vault (snippets and encrypted secrets); the key file brings the ability to decrypt. With both in place, trove_get_secret works.

Reading secrets without the MCP

The MCP is a convenience, not a lock-in. The package ships a trove command alongside the server, so you can read and browse the vault straight from a terminal — no MCP client running, and no external age binary (decryption goes through the bundled pyrage). It reads the same TROVE_PATH and private key the server uses.

trove get jira                      # decrypt and print all fields
trove get jira --field password     # print one raw value (pipe-friendly)
trove get jira --field password --clip   # copy to clipboard, keep it off-screen
trove get jira --json               # machine-readable dump
trove list                          # list every entry
trove search grafana --kind secret  # search (metadata only for secrets)

--clip shells out to the platform clipboard tool (pbcopy, wl-copy, xclip, xsel, or clip); if none is present it errors instead of printing.

As a low-level fallback, secrets are plain age files (ASCII-armored, -----BEGIN AGE ENCRYPTED FILE-----), so the standard age CLI decrypts them too:

age -d -i ~/.config/trove/key <trove>/secrets/<category>/<slug>.age

rage (the Rust implementation) works the same way. Security lives entirely in the private key, not in the server: whoever holds ~/.config/trove/key can read every secret, with or without the MCP.

Note on Markdown readers (Obsidian, etc.): the secrets/ folder looks empty because those tools list only .md files, and secrets are .age payloads plus .meta.yaml sidecars. The files are there — enable "Detect all file extensions" to see them. The .age stays unreadable (encrypted) and the .meta.yaml shows only title and tags, never values. Use Markdown readers for snippets/; manage secrets through the MCP tools or the age CLI.

Tools

Tool

Purpose

trove_init

Scaffold the vault, generate/register the keypair, write config, hooks

trove_add_snippet

Save a plaintext snippet (Markdown + frontmatter)

trove_add_secret

Save an encrypted secret + cleartext metadata sidecar

trove_get_secret

Decrypt a secret on the fly (needs the private key)

trove_update_secret

Partially update a secret (set/remove fields, notes, tags) and re-encrypt

trove_search

Full-text over snippets; metadata-only over secrets

trove_list / trove_index

List entries / regenerate INDEX.md

trove_remove

Delete an entry and rebuild the index

trove_doctor

Read-only health & safety audit

Layout

<trove>/
  snippets/<domain>/<sub>/<slug>.md     plaintext markdown + frontmatter
  secrets/<category>/<slug>.age          encrypted payload (armored age)
  secrets/<category>/<slug>.meta.yaml    cleartext metadata, never values
  _assets/                               images, diagrams
  INDEX.md                               generated
  trove.toml                             vault config (recipients, language)

Snippets render in any Markdown reader (Obsidian, VS Code, GitHub). The index and search read only cleartext metadata for secrets, so they can never leak a value.

Security model

  • Encryption is delegated to vetted code (age/pyrage); none is written here.

  • The private key lives outside the repo and is git-ignored.

  • trove_add_secret encrypts in memory; plaintext never touches disk.

  • trove_init installs a pre-commit hook that blocks committing a private key, and enables it automatically (core.hooksPath) when the vault is a git repo.

  • trove_doctor flags any cleartext under secrets/ or a key in the tree, and reminds you when a git remote is configured.

Cleartext metadata caveat. Secret values are encrypted, but the .meta.yaml sidecars — titles, tags, category names — are cleartext and get pushed with the vault. Keep the remote private and avoid putting sensitive details in secret titles (prefer "Prod DB" over "Prod DB root password h***").

Development

uv sync --extra dev
uv run pytest
uv run ruff check src tests

mcp-trove (Italiano)

Server MCP che gestisce un trove: un vault versionato con git che contiene due tipi di voce — snippet in chiaro (Markdown cercabile, con immagini e schemi) e segreti salvati cifrati a riposo, così l'intero vault si pubblica su un remote privato senza esporli. Un trove custodisce sia i tesori (i segreti) sia i ritrovamenti (gli snippet).

Il server è lo scrittore deterministico del vault: il modello compone e ripulisce il contenuto, il server garantisce collocazione, slug, frontmatter, cifratura e indice — sempre uguali, senza deriva.

Installazione

pip install mcp-trove

L'installazione è autosufficiente: la cifratura usa l'algoritmo age tramite il binding pyrage, nessun binario esterno richiesto.

Configurazione

La radice del vault arriva dalla variabile d'ambiente TROVE_PATH. Registra il server nel tuo client MCP (esempio Claude Code) come mostrato sopra, poi chiama trove_init una volta per creare il vault e generare la coppia di chiavi age.

Fai un backup della chiave privata fuori dalla macchina (es. password manager). Senza, i segreti cifrati sono irrecuperabili, anche per te. Su un PC nuovo cloni il vault git e ripristini la chiave a parte: clonare e basta non decifra, per scelta.

Gestione della chiave

Le chiavi sono due, e solo una è segreta.

  • Recipient pubblico (age1...) — committato in trove.toml sotto recipients. I segreti vengono cifrati verso di lui. Si può condividere.

  • Chiave privata (AGE-SECRET-KEY-1...) — decifra i segreti. Mai committarla.

Dove vive. Trove cerca la chiave privata in quest'ordine:

  1. variabile d'ambiente TROVE_KEY_PATH, se impostata;

  2. key_path sotto [trove] in trove.toml, se impostato;

  3. default: ~/.config/trove/key.

Formato del file. Un file di testo con una sola riga AGE-SECRET-KEY-1... (le righe che iniziano con # sono ignorate). Tienilo a chmod 600.

Creazione. trove_init genera la coppia al primo avvio: scrive la chiave privata nel path risolto (permessi 600) e registra il recipient pubblico in trove.toml. Non la crei a mano.

Backup. Copia quel singolo file fuori da questa macchina — il password manager è il posto ideale. È l'unica cosa che non si può rigenerare.

Ripristino su un'altra macchina.

mkdir -p ~/.config/trove
# incolla la chiave salvata nel file, una riga AGE-SECRET-KEY-1...:
$EDITOR ~/.config/trove/key
chmod 600 ~/.config/trove/key
git clone <repo-privato-del-vault> /path/to/your/trove   # snippet + segreti cifrati
export TROVE_PATH=/path/to/your/trove

Il clone git porta il vault (snippet e segreti cifrati); il file chiave porta la capacità di decifrare. Con entrambi a posto, trove_get_secret funziona.

Leggere i segreti senza l'MCP

L'MCP è una comodità, non un vincolo. Il package installa un comando trove accanto al server, così leggi e navighi il vault direttamente da terminale — senza client MCP attivo e senza binario age esterno (la decifratura passa per pyrage già incluso). Usa lo stesso TROVE_PATH e la stessa chiave privata del server.

trove get jira                      # decifra e stampa tutti i campi
trove get jira --field password     # stampa un solo valore grezzo (per pipe)
trove get jira --field password --clip   # copia negli appunti, fuori dallo schermo
trove get jira --json               # output leggibile dalle macchine
trove list                          # elenca ogni voce
trove search grafana --kind secret  # cerca (solo metadata per i segreti)

--clip invoca il tool clipboard di sistema (pbcopy, wl-copy, xclip, xsel o clip); se non ce n'è nessuno dà errore invece di stampare.

Come fallback di basso livello, i segreti sono normali file age (in armor ASCII, -----BEGIN AGE ENCRYPTED FILE-----), quindi anche la CLI standard age li decifra:

age -d -i ~/.config/trove/key <trove>/secrets/<categoria>/<slug>.age

Anche rage (l'implementazione Rust) funziona allo stesso modo. La sicurezza sta tutta nella chiave privata, non nel server: chi possiede ~/.config/trove/key legge ogni segreto, con o senza l'MCP.

Nota sui lettori Markdown (Obsidian, ecc.): la cartella secrets/ appare vuota perché quegli strumenti elencano solo i file .md, mentre i segreti sono payload .age più sidecar .meta.yaml. I file ci sono — attiva "Detect all file extensions" per vederli. Il .age resta illeggibile (cifrato) e il .meta.yaml mostra solo titolo e tag, mai i valori. Usa i lettori Markdown per gli snippets/; i segreti gestiscili con gli strumenti MCP o con la CLI age.

Modello di sicurezza

  • La cifratura è delegata a codice collaudato (age/pyrage), nessuna scritta qui.

  • La chiave privata vive fuori dal repo ed è esclusa da git.

  • trove_add_secret cifra in memoria; il testo in chiaro non tocca mai il disco.

  • trove_init installa un hook pre-commit che blocca il commit di una chiave privata e lo abilita da solo (core.hooksPath) quando il vault è un repo git.

  • trove_doctor segnala qualsiasi file in chiaro sotto secrets/ o una chiave nell'albero, e ti avvisa quando è configurato un remote git.

Caveat metadati in chiaro. I valori dei segreti sono cifrati, ma i sidecar .meta.yaml — titoli, tag, nomi di categoria — sono in chiaro e vengono pushati col vault. Tieni il remote privato ed evita dettagli sensibili nei titoli (meglio "Prod DB" che "Prod DB password di root h***").

Available Tools

10 tools
trove_add_secretA

Save an encrypted secret under secrets//.age plus a cleartext metadata sidecar (title, tags, dates — never values). Encrypts in memory with age; plaintext never touches disk. Requires recipients in trove.toml.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoNon-sensitive tags.
notesNoFree text stored INSIDE the encrypted payload.
titleYesHuman-readable title; slug derived from it.
fieldsYesKey/value secret material (username, password, token…).
categoryYesCategory folder under secrets/, e.g. 'aws'.
overwriteNoReplace an existing entry (default false).

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses encryption in memory with age, that plaintext never touches disk, and the existence of a cleartext metadata sidecar. It does not contradict any annotations. The behavior is fairly transparent, though it omits details on return values or error handling.

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 two sentences, each packed with meaningful information. No fluff or redundancy. It efficiently communicates the core action, encryption method, and prerequisite. The structure is front-loaded with the main purpose.

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

Completeness3/5

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

Given the complexity (6 params, nested object, no output schema), the description covers the encryption process, path structure, and prerequisite. However, it lacks any mention of return values or what the agent receives after execution, which is a notable gap since there is no output schema to fill that gap.

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 baseline is 3. The description adds global context (e.g., fields are encrypted inside payload, tags are non-sensitive) but does not significantly enhance individual parameter understanding beyond the schema's own descriptions. It does not introduce new parameter-specific 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?

The description clearly states the tool saves an encrypted secret under a specific path pattern (secrets/<category>/<slug>.age) and explains the metadata sidecar. The verb 'Save' and resource 'encrypted secret' are explicit, and the description distinguishes from siblings like trove_get_secret and trove_update_secret by focusing on creation and encryption details.

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

Usage Guidelines3/5

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

The description mentions a prerequisite (requires recipients in trove.toml) but does not explicitly guide when to use this tool over alternatives like trove_add_snippet or trove_update_secret. The usage context is implied through the description of encryption and storage, but no direct when/when-not guidance is provided.

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

trove_add_snippetA

Save a plaintext snippet as Markdown with frontmatter under snippets///.md, then rebuild the index. Provide body_markdown already segmented (prose outside fences, code in fenced blocks).

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoMain code language: python/html/bash/text…
tagsNoCross-cutting tags.
titleYesHuman-readable title; slug derived from it.
domainYesPrimary domain folder, e.g. 'django'.
projectNoOptional generic project name.
subpathNoOptional sub-folder under the domain.
overwriteNoReplace an existing file (default false).
body_markdownYesNote body below the H1 title.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries the full burden. It discloses the file path structure, that the tool rebuilds the index after saving, and hints at side effects via the overwrite parameter. It could mention more about slug derivation or frontmatter format, but the key behaviors are covered.

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?

Two sentences, no filler. First sentence defines the core action and destination; second provides a critical formatting instruction. Every word earns its place.

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

Completeness4/5

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

With 8 parameters and no output schema, the description explains the key path logic and body formatting. It doesn't detail the frontmatter structure or slug derivation, but these are implied by Markdown conventions. The tool's complexity is moderate, and the description covers the essential usage aspects.

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. The description adds value by explaining how parameters combine into a path (snippets/<domain>/<subpath>/<slug>.md) and by constraining body_markdown to be pre-segmented. This provides meaning beyond the schema's simple property descriptions.

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?

Description clearly states the action (save a plaintext snippet), the resource (Markdown with frontmatter), and the destination path pattern (snippets/<domain>/<subpath>/<slug>.md). It distinguishes itself from sibling tools like trove_add_secret by focusing on code snippets.

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?

The description gives explicit formatting guidance for body_markdown ('already segmented (prose outside fences, code in fenced blocks)'), which helps proper use. However, it does not explicitly state when to use this tool versus alternatives like trove_add_secret, though the purpose is clear enough from context.

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

trove_doctorA

Read-only health and safety audit: missing key, no recipients, cleartext under secrets/, orphan payload/metadata, broken frontmatter, a private key in the tree, missing pre-commit hook. Returns findings with severity and fix.

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?

The description explicitly states it is 'read-only', lists the specific checks performed, and describes the output ('findings with severity and fix'). This fully discloses the behavioral traits beyond what structured fields provide (none exist).

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 two concise sentences, front-loading the key purpose ('Read-only health and safety audit') followed by a list of checks and output. Every sentence earns its place with no waste.

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 zero-parameter tool with no output schema, the description provides sufficient context: the audit scope, specific checks, and that the output includes severity and fix. Completeness is adequate for the tool's complexity.

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 has no parameters, and the schema coverage is 100% (empty). The description does not need to add parameter details. Baseline 4 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?

The description clearly states it performs a 'Read-only health and safety audit' and lists specific checks (missing key, cleartext secrets, etc.), distinguishing it from sibling tools that operate on secrets and snippets.

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?

The description implies use for auditing repository health, and the sibling tool list shows other tools are for operations on secrets, making the use case clear. However, no explicit when-not or alternatives are stated.

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

trove_get_secretA

Decrypt a secret and return its fields. Requires the private key at the configured key path. Values are returned to you, never written to disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSecret title or slug.
categoryNoOptional category to disambiguate.

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: decrypting, returning fields, requiring a private key, and stating that values are never written to disk. This provides clarity on safety and side effects, though could mention potential errors.

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?

Two sentences, 24 words, front-loaded with action. Every sentence adds value with no redundancy or fluff.

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

Completeness4/5

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

For a simple retrieval tool with two parameters, the description covers the main actions and constraints. It mentions return values and lack of disk writes, but could be slightly more explicit about the scope (single secret by name). No output schema exists, but the description mitigates this.

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% with both parameters already described. The description adds no further detail on parameters, but the overall context ('Decrypt a secret') reinforces their purpose. 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?

The description uses a specific verb ('Decrypt a secret and return its fields') and clearly identifies the resource (secret). It distinguishes from sibling tools like trove_add_secret and trove_update_secret by focusing on retrieval.

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

Usage Guidelines3/5

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

The description mentions a prerequisite ('Requires the private key') but does not explicitly state when to use this tool versus alternatives like trove_list or trove_search. Usage context is implied but no exclusions or explicit alternatives are provided.

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

trove_indexA

Regenerate INDEX.md from current frontmatter and secret metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

The description only states the action without detailing side effects, permissions, or whether it is read-only. Since no annotations are provided, the description carries the full burden, but fails to disclose if regeneration overwrites files or requires specific authorization.

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 a single sentence, concise and to the point. No unnecessary words.

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

Completeness3/5

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

The description is brief and covers the basic action. However, it lacks context about what 'frontmatter' and 'secret metadata' are, and what the regeneration entails (e.g., does it require prior initialization?). This makes it minimally complete for a simple tool with no parameters.

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

Parameters5/5

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

The input schema has zero parameters, so the description need not elaborate on parameters. It is fully adequate for a parameterless 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?

The description uses a specific verb 'Regenerate' and resource 'INDEX.md', clearly stating the tool's action. It distinguishes from siblings like 'trove_add_secret' or 'trove_search' which have different purposes.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, scenarios, or when not to use it.

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

trove_initA

Scaffold the trove vault at TROVE_PATH: create directories, generate or register the age keypair, write trove.toml, .gitignore, CONVENTIONS.md and a pre-commit safety hook. Idempotent. Returns paths created, the recipient, and a key-backup warning.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoUI language: 'en' or 'it' (default en).
recipientNoExplicit age public key (age1...). If set, no keypair is generated.
generate_keyNoGenerate a keypair when none exists and no recipient is given (default true).

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full responsibility. It lists all created files, notes idempotency, and mentions return values including a key-backup warning. However, it could be more explicit about behavior when TROVE_PATH already exists or when files are already present, though idempotency implies safe re-run.

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?

Two concise sentences that front-load the action and immediately list deliverables. Every word adds value; no filler or repetition.

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 tool with no output schema, the description effectively communicates what the tool does and what it returns (paths, recipient, warning). It covers the full scope of a vault initialization task and aligns with the sibling set.

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 input schema covers all three parameters with descriptions, achieving 100% coverage. The description reinforces parameter roles (e.g., generate keypair vs. use recipient) and adds behavioral context like idempotency and return values, providing value beyond 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?

The description clearly states the tool scaffolds a trove vault with specific actions: creating directories, generating or registering an age keypair, and writing several files. It distinguishes itself from siblings by focusing on initialization, which is a unique task among the listed tools.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. While the sibling names imply this is for initial setup, there is no guidance on prerequisites or scenarios where other tools are more appropriate.

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

trove_listA

List all entries (snippets and secrets) with their tags and paths.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authentication requirements, or potential side effects. The description is minimal for a tool with no annotation support.

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 a single, concise sentence that directly states the tool's function. No wasted words.

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

Completeness3/5

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

The description explains what is returned (entries with tags and paths) but does not mention ordering, pagination, or behavior on empty results. For a simple list tool without output schema, it is adequate but lacks completeness on edge cases.

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?

With zero parameters, the schema coverage is trivially 100%. The description does not need to add parameter information. Baseline 4 is appropriate as per guidelines.

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 explicitly states the action (list), the resource (entries: snippets and secrets), and the content (tags and paths). It distinguishes from siblings like trove_search (which would filter) and trove_get_secret (single entry).

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

Usage Guidelines3/5

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

The description implies usage for retrieving all entries, but does not provide explicit guidance on when to use this tool versus alternatives like trove_search or trove_get_secret. No when-not-to-use or alternative naming.

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

trove_removeA

Remove an entry by name and rebuild the index. For secrets, both the encrypted payload and its metadata sidecar are deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes'snippet' or 'secret'.
nameYesTitle or slug of the entry.
domainNoSnippet domain (helps locate the file).
subpathNoSnippet sub-folder.
categoryNoSecret category (recommended).

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description must disclose behavioral traits. It mentions index rebuilding and secret sidecar deletion, which are important side effects. However, it does not address permanence, permissions, or dependencies beyond what's stated, leaving some gaps.

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 two sentences, front-loaded with the core action, and efficiently covers the essentials without any wasted words.

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

Completeness4/5

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

For a removal tool, the description covers the main action and distinguishes behavior for secrets. It does not explain return values (no output schema) or possible failures, but given the simplicity and 100% schema coverage, it is fairly complete.

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?

All 5 parameters are described in the schema (100% coverage). The description repeats 'name' and 'kind' in context but adds no new semantic information beyond the schema. 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?

The description clearly states the action ('remove an entry by name'), the resource ('entry'), and provides specific detail about secrets (payload and metadata sidecar deletion). It distinguishes from sibling tools like trove_add_secret and trove_update_secret.

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

Usage Guidelines3/5

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

The description implies usage for removal but provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The context signals show sibling tools like trove_add_snippet and trove_update_secret, but no comparative advice is given.

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

trove_update_secretA

Update an existing secret without re-supplying it whole: set/remove fields, change notes or tags, then re-encrypt. Decryption needs the private key; re-encryption needs recipients. Preserves the created date.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSecret title or slug.
tagsNoReplacement tag list (omit to keep).
notesNoNew notes (omit to keep; '' clears).
categoryNoCategory to disambiguate.
set_fieldsNoFields to add or overwrite.
remove_fieldsNoField names to drop.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses key behaviors: requires private key for decryption, needs recipients for re-encryption, and preserves created date. Missing details on permissions or failure modes, but provides substantial 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?

Two sentences with front-loaded purpose. Every sentence adds value: first states action and scope, second gives prerequisites and side effects. No fluff.

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

Completeness3/5

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

The description covers operation and prerequisites but lacks return value information (no output schema). Given complexity with nested objects, missing details on error handling or idempotency make it adequate but incomplete.

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 baseline is 3. The description adds operational context (e.g., re-encryption), but does not enhance individual parameter understanding beyond the schema descriptions.

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 clearly states the tool updates an existing secret, specifying actions like set/remove fields, change notes/tags, and re-encrypt. It distinguishes from siblings like trove_add_secret (creates new) and trove_remove (deletes).

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

Usage Guidelines3/5

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

The description implies usage for modifying a secret without recreating it, but lacks explicit when-to-use or alternatives like comparing with trove_add_secret. It provides some context but no exclusions.

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

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct operation or resource category (secrets, snippets, vault management). There is no overlap or ambiguity between tools like trove_add_secret and trove_get_secret, or trove_list and trove_search.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, prefixed by 'trove_'. Examples: trove_add_secret, trove_get_secret, trove_list, trove_search, trove_doctor. No mixed conventions.

Tool Count5/5

With 10 tools, the server covers initialization, secrets management (CRUD), snippet management (add/remove), indexing, listing, searching, and auditing. The scope is well-defined and each tool earns its place.

Completeness3/5

Secrets have full lifecycle (add, get, update, remove), but snippets lack explicit get and update tools. While trove_search provides full-text access over snippets, the absence of dedicated read and update operations for snippets is a notable gap.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Vaultwarden/Bitwarden vault management. Enables AI agents to securely create, search, read, and update vault items via the official Bitwarden CLI, with safe-by-default redaction and support for both stdio and SSE transports.
    53
    904
    14
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables MCP-based operations on an Obsidian vault, including reading, editing, and custom script tools.
    BSD Zero Clause
  • A
    license
    Not graded
    quality
    C
    maintenance
    Exposes OS keychain or AES-256-GCM encrypted file secrets as MCP tools, allowing reading, setting, and listing secrets without exposing values in conversation messages.
    11
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mauriziomocci/mcp-trove'

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