A Graph Answer Is a Chain of Evidence
deusdata/codebase-memory-mcp is designed to make structural questions easier for an AI coding agent, but the graph does not eliminate the need to ask what supports an answer. The useful judgment here is whether a result has a complete enough evidence chain: the relevant source was in scope, the identity is the right one, the relationship means what the question assumes, the response boundary has not hidden a decisive omission, and exact source or coverage metadata does not contradict the conclusion.
That standard connects the graph's construction with its use. A published index can be internally consistent and still be incomplete relative to a working tree. A search result can be a valuable lead without being an exhaustive enumeration. A relationship can be real but belong to a different evidence class from the one a reader needs. Codebase-memory-mcp's distinctive discipline is to preserve these distinctions in the data and response contracts so an agent can carry them into the final explanation.
The five links in a useful answer
The first link is scope. Every graph result describes an indexed boundary, not an abstract repository in its entirety. Discovery applies ignore rules, mode-specific filters, language detection, and file-handling limits before extraction begins. That is necessary for performance and for practical focus, but it means the graph's universe is the set of accepted inputs. A deliberate exclusion is meaningful: the path was outside the graph by design. A skipped or partially parsed file is also meaningful, but for a different reason. The result cannot be read as though the missing material had been examined and found irrelevant.
Scope is easy to forget because a graph query feels self-contained. The agent types a project name and receives rows; the rows look authoritative. Yet a question such as “Where are the handlers?” is implicitly about a chosen directory or codebase boundary. If generated code, examples, tests, or a dependency subtree were excluded, the answer may be entirely correct within the indexed scope and still incomplete for the user's actual question. Scope is therefore not a preamble to the answer. It is one of the answer's conditions.
The second link is identity. A short name is a convenient display label, not always a unique subject. Codebase-memory-mcp retains qualified names, file paths, and source-line ranges so that an agent can distinguish two functions with the same spelling or two types with the same short name. The graph store also makes relationship rows refer to stable node identities rather than to whatever text happened to match a query.
Identity turns a plausible search hit into a candidate that can be followed. If an agent asks for run and receives several rows, the correct response is not to select the first one because it appears near the top. It is to narrow by project context, qualified name, file, label, or surrounding relationship. A source snippet retrieved by qualified name can then be checked against the candidate that the trace actually used. The path and line range are not decorative metadata; they are how a compact result remains attached to the source it describes.
The third link is relationship meaning. The graph does not treat every connection as a generic dependency. CALLS describes a source-level invocation. IMPORTS describes how a file obtains a module or name. USAGE can record an identifier use without proving a unique callable target. CALLREFERENCE is a more specific callable-value reference. INHERITS and IMPLEMENTS describe type relationships.