mcp-trove
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-trovestore my OpenAI API key as a secret"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-trovepip 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 introve.tomlunderrecipients. 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:
TROVE_KEY_PATHenvironment variable, if set.key_pathunder[trove]introve.toml, if set.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/troveThe 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>.agerage (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 |
| Scaffold the vault, generate/register the keypair, write config, hooks |
| Save a plaintext snippet (Markdown + frontmatter) |
| Save an encrypted secret + cleartext metadata sidecar |
| Decrypt a secret on the fly (needs the private key) |
| Partially update a secret (set/remove fields, notes, tags) and re-encrypt |
| Full-text over snippets; metadata-only over secrets |
| List entries / regenerate |
| Delete an entry and rebuild the index |
| 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_secretencrypts in memory; plaintext never touches disk.trove_initinstalls a pre-commit hook that blocks committing a private key, and enables it automatically (core.hooksPath) when the vault is a git repo.trove_doctorflags any cleartext undersecrets/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 testsmcp-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-troveL'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 introve.tomlsottorecipients. 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:
variabile d'ambiente
TROVE_KEY_PATH, se impostata;key_pathsotto[trove]introve.toml, se impostato;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/troveIl 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>.ageAnche 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_secretcifra in memoria; il testo in chiaro non tocca mai il disco.trove_initinstalla 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_doctorsegnala qualsiasi file in chiaro sottosecrets/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 toolstrove_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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Non-sensitive tags. | |
| notes | No | Free text stored INSIDE the encrypted payload. | |
| title | Yes | Human-readable title; slug derived from it. | |
| fields | Yes | Key/value secret material (username, password, token…). | |
| category | Yes | Category folder under secrets/, e.g. 'aws'. | |
| overwrite | No | Replace an existing entry (default false). |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Main code language: python/html/bash/text… | |
| tags | No | Cross-cutting tags. | |
| title | Yes | Human-readable title; slug derived from it. | |
| domain | Yes | Primary domain folder, e.g. 'django'. | |
| project | No | Optional generic project name. | |
| subpath | No | Optional sub-folder under the domain. | |
| overwrite | No | Replace an existing file (default false). | |
| body_markdown | Yes | Note body below the H1 title. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Secret title or slug. | |
| category | No | Optional category to disambiguate. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | UI language: 'en' or 'it' (default en). | |
| recipient | No | Explicit age public key (age1...). If set, no keypair is generated. | |
| generate_key | No | Generate a keypair when none exists and no recipient is given (default true). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | 'snippet' or 'secret'. | |
| name | Yes | Title or slug of the entry. | |
| domain | No | Snippet domain (helps locate the file). | |
| subpath | No | Snippet sub-folder. | |
| category | No | Secret category (recommended). |
TDQS
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.
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.
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.
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.
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.
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_searchA
Search the vault. Full-text over snippets; metadata-only over secrets (title/tags/category, never values). Filter by tags and kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 'snippet', 'secret' or 'all' (default all). | |
| tags | No | Require all these tags. | |
| query | No | Free text to match. |
TDQS
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 explicitly states that for secrets, only metadata (title/tags/category) is searched, never values. This is a key behavioral disclosure. However, it could mention case sensitivity, partial match behavior, or result format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the action ('Search the vault') and then providing the most important behavioral rules. There is no wasted text, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters (all described), no output schema, and no annotations, the description explains the core search behavior and differences between snippets and secrets. It could be improved by mentioning the return format or pagination, but it is largely complete for an agent to understand how to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with descriptions for each parameter. The description adds meaning by explaining how 'query' behaves differently for snippets (full-text) vs secrets (metadata-only), and summarizes the purpose of 'tags' and 'kind' filtering. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches the vault, specifies different behaviors for snippets (full-text) and secrets (metadata-only), and allows filtering by tags and kind. This distinguishes it from siblings like 'trove_list' or 'trove_get_secret' 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (searching, filtering) and provides context that it searches differently based on kind. It doesn't explicitly state when not to use it or name alternatives, but the context is sufficient for typical use cases.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Secret title or slug. | |
| tags | No | Replacement tag list (omit to keep). | |
| notes | No | New notes (omit to keep; '' clears). | |
| category | No | Category to disambiguate. | |
| set_fields | No | Fields to add or overwrite. | |
| remove_fields | No | Field names to drop. |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Manage portable AI agent playbooks, Agent Skills, MCP configurations, personas, and memory.
Render, verify, describe, and safely edit Mermaid diagrams through MCP.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP 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.5390414MIT
- AlicenseBqualityCmaintenanceEnables AI agents to manage secrets and credentials from a secure vault via MCP tools over stdio.7MIT
- AlicenseNot gradedqualityFmaintenanceEnables MCP-based operations on an Obsidian vault, including reading, editing, and custom script tools.BSD Zero Clause
- AlicenseNot gradedqualityCmaintenanceExposes OS keychain or AES-256-GCM encrypted file secrets as MCP tools, allowing reading, setting, and listing secrets without exposing values in conversation messages.11MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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