Node Labels in the Codebase-Memory-MCP Graph Schema: Complete Reference
The codebase-memory-mcp graph schema defines 11 canonical node labels—file, function, class, struct, enum, typedef, variable, namespace, module, token, and embedding—that categorize source-code entities within the cbm_gbuf_node_t structure.
The graph schema in DeusData/codebase-memory-mcp organizes source code into a navigable knowledge graph where every entity is represented as a node with a specific type identifier. These node labels are stored as heap-owned strings in the label field of the cbm_gbuf_node_t structure, allowing the indexing pipeline to distinguish between files, functions, classes, and other semantic elements during the code analysis process.
The 11 Canonical Node Labels
The indexing pipeline assigns specific string identifiers to nodes based on the source entity they represent. Each label is passed as a literal string to the graph buffer API and stored in the node's metadata.
Source File Containers
file: Represents a source file itself—the top-level container for all other entities in that file. Created when the watcher first discovers a file.
Type Definitions
class: Identifies class declarations and definitions (C++/Java-style).struct: Marksstructdefinitions in C/C++ code.enum: Denotes enumeration type definitions.typedef: Captures type aliases created viatypedeforusingstatements.
Functions and Variables
function: Assigned to function definitions, including free functions and class methods. Created when the parser discovers a function body.variable: Labels global or file-scope variable declarations.
Namespaces and Modules
namespace: Tracks namespace blocks in C++ code.module: Represents language-level modules, such as Python modules or Go packages.
Semantic Search Vectors
token: Identifies lexical tokens stored for semantic-search purposes within the semantic-vectors subsystem.embedding: Marks vector embeddings attached to nodes for similarity search, typically stored via the vector storage API.
Data Structure and Storage
All node labels are stored in the label member of the cbm_gbuf_node_t structure defined in the core graph-buffer header. This structure manages heap-owned strings for entity metadata.
/* src/graph_buffer/graph_buffer.h */
typedef struct {
int64_t id; /* temporary sequential ID */
char *label; /* heap-owned string – one of the labels above */
char *name;
char *qualified_name;
char *file_path;
int start_line;
int end_line;
char *properties_json; /* JSON payload – “{}” by default */
} cbm_gbuf_node_t;
The label field accepts any valid string, making the schema extensible, though the built-in pipeline uses only the canonical set defined above.
How Labels Are Assigned at Runtime
Node labels are assigned during the indexing pipeline through explicit calls to cbm_gbuf_upsert_node. The watcher stage parses source files and creates nodes with appropriate labels, while the pass stages handle semantic vectors.
File and Function Creation
In src/watcher/watcher.c, the parser discovers entities and immediately assigns labels:
/* Example: creating a function node */
int64_t fn_id = cbm_gbuf_upsert_node(
gb,
"function", /* ← label */
"myFunc", /* name */
"myPkg.myFunc", /* qualified name */
"src/myPkg/file.c", /* file path */
12, /* start line */
20, /* end line */
"{}"); /* empty properties */
/* Example: creating a file node */
int64_t file_id = cbm_gbuf_upsert_node(
gb,
"file",
"file.c",
"myPkg.file.c",
"src/myPkg/file.c",
1,
0,
"{}");
Semantic Vector Labels
The semantic analysis passes in src/passes/* (e.g., pass_semantic.c) handle specialized labels:
- Token nodes are created by the helper
cbm_gbuf_store_token_vector, which internally assigns thetokenlabel to lexical elements. - Embedding nodes are stored via
cbm_gbuf_store_vectorand attached to existing nodes while carrying theembeddinglabel to distinguish vector data from source entities.
Extending the Schema
Because the label field is a plain heap-allocated string passed directly to cbm_gbuf_upsert_node, the schema is deliberately extensible. New labels can be introduced in custom passes or watchers without modifying the core cbm_gbuf_node_t structure in src/graph_buffer/graph_buffer.h. However, the eleven labels listed above represent the complete built-in vocabulary used by the current codebase-memory-mcp implementation.
Summary
- codebase-memory-mcp uses 11 canonical node labels:
file,function,class,struct,enum,typedef,variable,namespace,module,token, andembedding. - Labels are stored as heap-owned strings in the
labelfield ofcbm_gbuf_node_tdefined insrc/graph_buffer/graph_buffer.h. - The watcher (
src/watcher/watcher.c) creates entity nodes for files, functions, and types. - The passes (
src/passes/*) createtokenandembeddingnodes for semantic search. - The string-based label system allows for schema extension without core structural changes.
Frequently Asked Questions
What data structure holds node labels in codebase-memory-mcp?
Node labels are stored in the cbm_gbuf_node_t structure defined in src/graph_buffer/graph_buffer.h. This struct contains a char *label field that holds a heap-owned string identifying the entity type, alongside fields for name, qualified name, file path, and line numbers.
How are node labels assigned to source entities during indexing?
Labels are assigned via the cbm_gbuf_upsert_node function. When the watcher in src/watcher/watcher.c parses source code, it discovers entities like functions or classes and calls cbm_gbuf_upsert_node with the appropriate label string (e.g., "function" or "class"), which creates or updates the node in the graph buffer.
Can I add custom node labels to the codebase-memory-mcp graph schema?
Yes. Because the label is a plain string passed to cbm_gbuf_upsert_node, you can introduce new labels in custom passes or watchers without modifying the core graph buffer implementation. The schema is designed to be extensible, though the built-in pipeline uses only the eleven canonical labels.
What is the difference between token and embedding node labels?
token nodes represent lexical tokens extracted from source code for semantic search, created by cbm_gbuf_store_token_vector. embedding nodes represent vector embeddings (numerical vectors) attached to existing nodes for similarity search, stored via cbm_gbuf_store_vector. While token nodes contain raw lexical data, embedding nodes contain computed vector representations.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →