Skip to main content
Glama

devvault-mcp

The bridge between a user's DevVault and their coding agent.

Status: scaffold only. The tools here depend on endpoints that land in Phases 1–3.5 (see ../CONTEXT-ENGINE.md). This folder exists to hold the deployment decision and repo shape until then.

This becomes its own git repo.


Two transports, one codebase

This is the part worth understanding before deploying anything.

An MCP server for a local coding agent is not a hosted service — Claude Code spawns it as a subprocess on the user's own machine and talks to it over stdio. Deploying that to EC2 would produce a process with nothing to talk to.

But the same tool definitions can also be served over HTTP, and that one deploys exactly like the FastAPI and Django services. So: one codebase, two entry points.

stdio

HTTP

Runs on

the user's machine, via npx

our EC2, alongside FastAPI/Django

Distributed by

npm publishnpx pulls it on first run

Docker image + CI/CD

User setup

paste config + token into .mcp.json

paste a URL, authorise

Token lives

on the user's machine only

server-side (OAuth)

Laptop + coding agent

claude.ai web / mobile

Ship order

first — no hosting required

second — but required for web/mobile

HTTP is not just nicer onboarding. The bind loop is meaningless on a phone — there is no repo to write into — but capture is not: someone researching in the mobile app should be able to file it into their vault, and only a remote connector can reach them. (A paste-a-transcript box in the DevVault web app is the no-MCP path to the same outcome; see CONTEXT-ENGINE.md decision 2b.)

src/
  tools/        shared tool definitions (transport-agnostic)
  ledger.ts     session dedup + token budget
  client.ts     typed DevVault API client (Bearer dvp_...)
  bin/stdio.ts  entry point: StdioServerTransport
  bin/http.ts   entry point: StreamableHTTPServerTransport

Related MCP server: Memento Vault

Local configuration (stdio)

{
  "mcpServers": {
    "devvault": {
      "command": "npx",
      "args": ["-y", "@devvault/mcp"],
      "env": {
        "DEVVAULT_URL": "https://anshbackend.upyourbusiness.tech",
        "DEVVAULT_TOKEN": "dvp_..."   // Settings -> Connected Agents
      }
    }
  }
}

The token never reaches Anthropic. This process runs locally, reads DEVVAULT_TOKEN from its own environment, and calls the DevVault API directly.

Tools

Tool

Loop

Backing endpoint

Phase

devvault_context(task | @collection)

bind

POST /api/v1/context/route

3.5

devvault_search(query)

bind

GET /api/v1/context/search

3.5

devvault_get_container(slug, depth)

bind

GET /api/v1/containers/{id}/export.md

done (1a)

devvault_save_research(tree)

capture

POST /api/v1/containers/import

1

devvault_append(slug, content)

capture

POST /api/v1/containers/import (mode=append)

1

Tool descriptions are load-bearing: they are what teach the agent to pass a short task description rather than the user's raw prompt, and to re-call when the task shifts domain. Treat them as code, not documentation.

Deployment (HTTP transport)

Mirrors the existing services: GitHub Actions → build and push image → SCP config → SSH deploy on EC2 → health check. Dockerfile and workflow land with Phase 4.

Prerequisites

  • A DevVault access token — Settings → Connected Agents (Phase 0, shipped). Scopes: containers:read for the bind loop, containers:write for capture.

Available Tools

6 tools
devvault_contextLoad coding context from DevVaultA

Call this BEFORE writing any code. Returns the user's own rules and conventions for the area you are working in, plus a list of deeper reference material you can pull in on demand. Pass task: one short sentence describing what you are building (e.g. 'build a Node.js REST API for user auth'). Do NOT paste the user's full prompt — a long query retrieves badly. If the user named a collection with @, pass it as collection instead; an explicit name always wins over inference. Call this again whenever the work shifts to a different area (frontend → backend, say). If it returns nothing, the user has no context saved for this area: say so rather than inventing conventions.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoOne sentence: what you are building.
collectionNoA collection name the user named explicitly, with or without '@'.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are present, so the description carries the transparency burden. It discloses retrieval behavior, the quality consequence of long queries, the precedence of explicit collections over inference, and the empty-result handling. It does not explicitly state that the operation is read-only, though 'returns' and 'load' strongly imply it.

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 not padded; every sentence carries an actionable instruction. The key imperative 'Call this BEFORE writing any code' is front-loaded, and the rest of the guidance 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 explains the high-level return payload: rules/conventions plus a list of deeper references. It also covers the no-results edge case with explicit instructions on how to behave. This is sufficient for an agent to invoke and interpret the 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 coverage is 100%, setting a baseline of 3. The description adds meaningful semantics: task should be one short sentence, full prompts retrieve badly, collection should be used when the user names it with @, and an explicit name always wins over inference. This goes beyond the schema's field 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?

States a concrete action and resource: it loads the user's own coding rules and conventions for the current area, plus a list of deeper reference material. This clearly separates it from the sibling search/write/list/save tools by focusing on loading personal coding context.

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 when-to-use guidance: call before writing any code, and call again whenever the work area changes. It also gives clear constraints: pass a one-sentence task, do not paste the full prompt, and pass an explicitly named collection. It does not name an alternative sibling such as devvault_search, so the 'vs alternatives' part is not fully explicit.

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

devvault_get_containerRead one DevVault container in fullA

Fetch a container's complete content when the rules you were given are not enough. Use the id from a search result or the manifest.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo0 links to child containers; 1-2 inlines them.
container_idYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It correctly signals a read-only fetch of complete content, but it does not describe side effects, error behavior, or what 'complete content' means with respect to the depth parameter. This is acceptable for a simple retrieval tool, but some operational nuance is left implicit.

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, with the purpose stated first and usage guidance second. Every clause contributes information needed to decide when and how to call the tool.

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 read tool with two parameters and no output schema, the description covers the essential invocation path: when to use it and where the id comes from. It could be more complete by explaining the output or the effect of depth in prose, but the schema covers depth and the title covers what is returned.

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 description adds meaningful context for container_id by explaining that it comes from a search result or the manifest, which is not in the schema. The depth parameter's behavior is already documented in the schema, and the description does not need to repeat it, though it could have briefly mentioned the inline-versus-link distinction.

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 action ('Fetch a container's complete content') and a clear resource, distinguishing it from sibling tools by focusing on full container retrieval rather than context, search, or research saving. The title reinforces the read operation, and the reference to using an id from a search result or manifest makes the tool's role distinct.

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?

'When the rules you were given are not enough' gives a clear trigger for using this tool, and 'Use the id from a search result or the manifest' explains how to obtain the required identifier. It does not explicitly name alternative tools or state when not to use it, but the conditional framing provides useful guidance.

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

devvault_list_collectionsList the user's DevVault collectionsA

Show which collections exist, with their descriptions. Useful when the user refers to a collection you cannot resolve, or when deciding where to save research.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It conveys that this is a read-only listing operation via 'Show which collections exist,' and it specifies that returned data includes descriptions. However, it does not explicitly state that no changes are made, nor does it describe any output structure or edge cases.

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 short sentences with no wasted words. The primary purpose is front-loaded, and the usage guidance is presented succinctly in the second sentence.

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 zero-parameter listing tool, the description covers what the tool does, what the output includes (collections and descriptions), and when it is useful. It does not elaborate on output formatting or pagination, but the absence of a schema and the simple nature of the tool make this acceptable.

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 zero parameters, so there are no parameter semantics to clarify. The description appropriately adds no parameter-related detail because none is 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?

The description clearly states the tool's function: showing which collections exist and their descriptions. This is distinct from sibling tools like devvault_search or devvault_save_research, which involve searching or writing rather than listing collections.

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 explicitly provides when to use the tool: when the user refers to an unresolvable collection or when deciding where to save research. It lacks explicit when-not-to-use guidance or alternative tool routing, but the stated use cases are sufficiently clear for a simple listing tool.

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

devvault_save_researchSave research into DevVaultA

File the current conversation's findings into the user's vault as structured containers, so neither of you has to re-derive them next time. You decide the structure: group by topic, one topic per container, and nest sub-topics as children. Write real titles. Constraints are enforced server-side and anything over them is repaired automatically (long paragraphs split, extra blocks spill into continuation containers, deep nesting is flattened and linked) — the response tells you exactly what was adjusted, so report that to the user. Always set external_key on every container: re-running the same research then updates in place instead of duplicating. Supplying agent_rules alongside the research is worth doing — it saves a future session from re-reading the prose.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'update' reuses containers matching on external_key.update
parent_idNoNest the import under an existing container.
containersYesFlat list. The first entry is the root (parent: null); every other entry points at an earlier index.
collection_nameNoNames the collection this import creates. Defaults to the root title.
collection_descriptionNoOne or two sentences on what this collection covers and when it applies. This is what future task descriptions are matched against, so make it specific.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description bears full responsibility and excels: it discloses server-side constraint enforcement, automatic repair behavior (paragraph splitting, spillover, flattening), and that the response reports what was adjusted and should be relayed. It also exposes the idempotent update behavior tied to external_key. This goes well beyond a generic save description.

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 every sentence earns its place: purpose, structural guidance, repair behavior, idempotency, and agent_rules are all front-loaded with no filler. The only minor nit is its long em-dash sentence, but the information density justifies it.

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, 5-parameter tool with no output schema, the description covers the important behaviors agents need: how to structure containers, what constraints will be auto-repaired, what to report back, and how to make updates idempotent. Nothing critical for a correct call is missing.

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?

Even though the schema already documents every parameter, the description adds valuable guidance beyond it: always set external_key, prefer grouping by topic with nested children, use agent_rules to save future reading, and make collection_description match against future task descriptions. This materially improves how an agent would populate the parameters.

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 action—file the current conversation's findings into the vault as structured containers—and elaborates a clear structure model: topic-based containers with nested sub-topics. This clearly distinguishes the save/import operation from retrieval-oriented siblings like devvault_search and devvault_get_container.

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?

It states the context: after research has happened, when findings should be persisted for future reuse, and advises on agent_rules and external_key to avoid duplicate/re-derived work. It does not explicitly name when to avoid this tool or point to an alternative, so it misses the top tier.

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

devvault_write_rulesCache a rule extraction back onto a containerA

After reading a container whose result said it has no cached rules, distil it and save the result here so no future session has to re-derive it. IMPORTANT: extract EVERY actionable rule in the container, not only the ones relevant to what you are building right now — these rules are reused for unrelated tasks, and a narrow extraction is worse than none. One imperative rule per line. Drop background and explanation; keep code examples and links. Rules a user wrote by hand are never overwritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
rulesYesOne imperative rule per line, task-agnostic.
container_idYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses important behavioral traits: it overwrites cached rules? Actually it says 'Rules a user wrote by hand are never overwritten,' which implies it may overwrite machine-generated rules. It also warns that a narrow extraction is worse than none, and specifies the format (one imperative rule per line, drop background/explanation, keep code examples and links). This is rich behavioral context beyond the 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?

The description is a single dense paragraph, front-loaded with the trigger condition and the core action. It packs a lot of important guidance (completeness, format, preservation of hand-written rules) without excessive verbosity. Slightly long but every sentence 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?

For a write tool with no annotations and no output schema, the description covers the key context: when to use, what to extract, how to format, and what not to overwrite. It doesn't describe the return value or error cases, but those are less critical for an agent deciding to call it. The main gap is not stating whether the tool overwrites existing machine-generated rules, though the hand-written rule caveat implies 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?

Schema description coverage is 50%: the 'rules' parameter is described as 'One imperative rule per line, task-agnostic,' and the description reinforces that with format and content guidance. The 'container_id' parameter has no description in the schema, but the description implies it identifies the container to write back to. The description adds meaningful semantics for the rules parameter and enough context for container_id.

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: after reading a container with no cached rules, distil it and save the result. It names the resource (a container) and the specific operation (caching extracted rules), and it distinguishes itself from siblings by describing a write-back workflow that follows reading.

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?

The description explicitly says when to use this tool: after reading a container whose result said it has no cached rules. It also gives a strong exclusion: do not use it for narrow, task-specific extraction; extract every actionable rule. This is clear guidance for an agent deciding between this and sibling read/search tools.

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. 6 tool updatesv0.1.0
    • First observeddevvault_context
    • First observeddevvault_get_container
    • First observeddevvault_list_collections
    • First observeddevvault_save_research
    • First observeddevvault_search
    • First observeddevvault_write_rules

TDQS

A4.3/5.0

Scored across 6 tools

Disambiguation4/5

Each tool has a distinct role in the retrieval/writing workflow, and the descriptions clarify when to use each one. devvault_search and devvault_get_container both retrieve content but are differentiated by search-by-vocabulary versus fetching by ID, so only mild ambiguity exists.

Naming Consistency4/5

All tools share the devvault_ prefix and use snake_case, with a mostly verb_noun pattern like search, get_container, write_rules, list_collections, and save_research. devvault_context is the one exception, using a noun instead of an action verb.

Tool Count5/5

Six tools is a well-scoped size for a personal knowledge vault MCP server. Each tool serves a clear part of the workflow with no obvious redundancy.

Completeness4/5

The surface covers context retrieval, research search, full container fetching, rule writing, collection listing, and saving research. Minor gaps exist around explicit deletion or collection creation, but save_research updates in place and the core workflows are otherwise covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers