Skip to main content
Glama

Create or update concept

upsert_concept
Destructive

Write a concept note into the vault (creates or overwrites the markdown file, then reindexes it). Use to capture new product knowledge discovered during a task — a decision made, a constraint hit, a pattern adopted — so future agents can find it. Omit id to derive a slug from the title; pass an existing id to update that note. Body is markdown; [[wiki-links]] to other concept ids create graph edges. Returns the saved concept's metadata.

Input Schema

NameRequiredDescriptionDefault
idNoConcept id (slug). Omit to derive from title; pass an existing id to update.
bodyYesMarkdown body. [[other-id]] wiki-links become graph edges.
tagsNoTags for filtering.
typeNoConcept type (default "concept"). The 11 built-in types are concept, domain, feature, story, spec, workflow, task, decision, constraint, pattern, glossary; a vault may also define custom types. An unknown type falls back to "concept".
titleYesHuman-readable title (required, non-empty).
doneAtNoFor tasks: ISO timestamp when completed.
statusNoLifecycle status (default "active").
productNoProduct grouping key.
takenAtNoFor tasks: ISO timestamp when claimed.
takenByNoFor tasks: label of the agent/orchestrator that claimed it.
codeAreasNoRough codebase paths/globs where this knowledge lives, e.g. ["packages/core/src/vault.ts", "apps/web/src/routes/**"] — lets agents briefed by get_context know where to apply it.
relationsNoTyped edges, e.g. {"depends_on": ["auth-system"]}. Conventions: part_of (feature/story/task → domain), realized_by (story → features), realizes (task → stories/features), governs (spec → what it constrains), governed_by (task → specs), depends_on, constrains, supersedes, related_to. For domain concepts, prefer linking to OTHER domains (related_to / depends_on) wherever they share a boundary or hand off responsibility — connected domains reveal how the product's areas overlap instead of floating as isolated islands.
taskStatusNoFor type="task" concepts: lifecycle "open" | "taken" | "done" (default "open"). Prefer the task tools (create_task / take_task / complete_task) over setting this directly.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Adds real context beyond the annotations: the write is an overwrite of a markdown file followed by a reindex, which substantiates the destructiveHint=true flag rather than contradicting it. It also discloses the return shape. A 5 would need to say what an overwrite does to fields not supplied (e.g. are tags/relations cleared), which is the main behavioral risk for an upsert.

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?

Four tight sentences with the mutation behavior front-loaded and the create-vs-update rule following it; nothing is padding. Minor overlap with schema descriptions keeps it from a 5.

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?

Covers return values verbally since there is no output schema, and handles the create/overwrite distinction for a 13-parameter tool with nested relations. The gap is update semantics: it never says whether an overwrite preserves or drops existing tags, relations, or status.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 13 parameters, including id derivation and wiki-link semantics. The description restates the id and body behavior without adding syntax or format detail not already present. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — writes a concept note into the vault — and immediately clarifies the create-or-overwrite semantics plus the reindex side effect. This distinguishes it cleanly from read-side siblings like get_concept and search_concepts, and from the task-specific create_task.

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 a concrete when-to-use framing (capture decisions, constraints, patterns discovered during a task) and explains the id-omitted vs id-passed branching for create vs update. It stops short of naming exclusions or deferring explicitly to siblings like create_task or link_concepts, which would be needed for a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources