Codebase Memory MCP vs Obsidian MCP Pro
A side-by-side look at the Codebase Memory MCP and Obsidian MCP Pro MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Codebase Memory MCP for knowledge & memory work as a local process; choose Obsidian MCP Pro for knowledge & memory as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Codebase Memory MCP when
- You need dedicated capabilities in the Knowledge & Memory domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: No auth required.
- You want tools like
index_repository, search_graph, query_graph.
Choose Obsidian MCP Pro when
- You need dedicated capabilities in the Knowledge & Memory domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: No auth required.
- You have the keys it needs:
OBSIDIAN_VAULT_PATH, OBSIDIAN_READ_PATHS, OBSIDIAN_WRITE_PATHS. - You want tools like
search_notes, get_note, list_notes.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Knowledge & Memory | Knowledge & Memory |
| Quality signal | 73/100 · Great | 67/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | No auth required |
| Pricing | Free | Free |
| Required env vars | None listed | OBSIDIAN_VAULT_PATHOBSIDIAN_READ_PATHSOBSIDIAN_WRITE_PATHS |
| Verified owner | Community listing | Community listing |
| GitHub stars | 47,616 | 33 |
| Directory activity | 9 views 1 installs 1 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 17 | 41 |
| Full listing | View Codebase Memory MCP | View Obsidian MCP Pro |
Tools & capabilities
Codebase Memory MCP tools 17
index_repositoryIndex a repository. full/moderate add semantics; fast omits them; cross-repo-intelligence links services. Reports coverage gaps.search_graphFind symbols via BM25 query, regex name/qn filters, or semantic_query. Rows keep qn/file/lines and in/out over CALLS/USAGE/CALL_REFERENCE/INHERITS/IMPLEMENTS.query_graphRead-only Cypher for multi-hop, aggregation, complexity, or cross-service analysis. Default: 200 visible rows with exact/lower-bound totals and truncation; continue safely with next_cursor. graph=missed is a file tree of flagged coverage gaps; absence is not proof of completeness. Use get_graph_schema(diagnostics=full) for properties.trace_pathTrace callers/callees, data flow, or cross-service paths. Defaults exclude tests and resolver evidence. Rows keep qn/hop with explicit totals, relations, and continuations.get_code_snippetRead a search_graph symbol. auto bounds source and outlines large containers; full restores up to 500 lines. Source/outline pages continue; coverage_note marks gaps.get_file_outlineDeclaration outline of one exact repository-relative file: optional exact label filter, source order, exact total/offset/limit paging; file/folder/container nodes excluded.get_graph_schemaGet node-label and edge-type counts. diagnostics=full also lists queryable properties.compare_graphsCompare two indexed snapshots: deterministic target-only additions and base-only removals of stable node/edge identities; each set capped by limit and a 512 KiB budget with exact totals and truncation reasons.get_architectureCompact counts, languages, packages, entry points. Request structure, dependencies, routes, hotspots, boundaries, layers, clusters, cycles, or file_tree; path scopes a directory.search_codeGraph-ranked text search: compact symbols, full bounded source, or file paths.list_projectsList projects with stable paging. Identity is lean; stats adds graph sizes.delete_projectDelete a project from the index- +5 more on the listing page
Obsidian MCP Pro tools 41
search_notesFull-text search across all notes in the vault. Ranks literal matches with title/path focus and repeated-line dampening, then returns matching note paths grouped with the line numbers and query-centered snippet content of each matching line. Use to locate notes containing a phrase, keyword, or code fragment; pair with get_note to retrieve full bodies.get_noteRead a note in full or as a fragment. With no fragment options, returns parsed frontmatter (as a labeled header), a flat list of inline #tags, and the body. With `section`, returns just the body under that heading (path-form like 'Tasks/Today' is supported). With `block`, returns the paragraph or block tagged `^id`. With `lines`, returns the inclusive 1-indexed line range. Fragment modes skip the frontmatter/tag header and return raw text — use them to keep token usage tight on long notes.list_notesEnumerate every markdown note in the vault (or a single folder), returning a sorted list of relative paths along with the total count. Truncates output to `limit` entries but still reports the total. Use to browse vault structure, build a file picker, or enumerate targets for batch processing.get_daily_noteRead the daily note for today or for a specific date, resolved via the vault's configured daily-note folder and filename format. Returns the note path, parsed frontmatter (as a labeled header block), and body. Errors if no daily note exists for that date — use create_daily_note to create one.search_by_frontmatterFind notes whose YAML frontmatter contains a given property/value pair. Property names and values are matched case-insensitively; for array-valued properties, a match is declared if any element matches. Returns matching note paths with their full frontmatter. Use to filter notes by metadata like status, type, or tags stored in frontmatter.get_recent_notesList notes ordered by most-recently-modified first. Optional `since` filter accepts an ISO date (e.g. '2026-04-01') or a relative span ('7d', '24h', '2w'); only notes modified at or after that time are returned. Use to surface what you've been working on, build a 'what changed this week' digest, or pick targets for review.get_vault_statsReturn a quick health snapshot of the vault: note count, total bytes, total words, unique tag count, untagged-note count, and the most-recently-modified note. Useful for dashboards and 'is this vault healthy?' checks. Reads through the mtime cache so repeat calls are cheap.resolve_aliasFind every note whose frontmatter `aliases:` field contains the given name (case-insensitive). With `includeBasename: true`, also matches notes whose filename (without `.md`) equals the name — Obsidian's resolution fallback when no alias matches. Use to translate a human-friendly title like 'My Project' into the actual note path before calling get_note.create_noteCreate a new markdown note at the given path with body content and optional YAML frontmatter. Fails (does not overwrite) if a note already exists at that path — use append_to_note, prepend_to_note, or update_frontmatter for existing notes. Missing directories are created automatically, and a .md extension is appended if omitted.append_to_noteAppend text to the end of an existing note without altering prior content. By default, inserts a leading newline if the file does not already end in one, so appended content starts on its own line. Use for log entries, running lists, or adding new sections. Fails if the note does not exist — use create_note to make a new note first.prepend_to_noteInsert content at the top of an existing note's body, immediately after the YAML frontmatter block if one is present (so metadata stays at the top of the file). Use for adding new items to the front of a running list, pinning context, or inserting TL;DR sections. Fails if the note does not exist.update_frontmatterMerge new key-value pairs into a note's YAML frontmatter, preserving any keys not mentioned and leaving the body content untouched. Keys in the payload overwrite existing values. Creates a frontmatter block if the note has none. Returns a count of properties written. Use to set status fields, tags arrays, or other metadata without rewriting the body. Note: The YAML block is regenerated on each update — comments, custom quoting, multi-line scalar style, blank lines, and key ordering inside the block are normalized. Key *presence and values* are preserved; formatting is not.- +29 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Codebase Memory MCP
{
"mcpServers": {
"deusdata-codebase-memory-mcp": {
"command": "npx",
"args": [
"-y",
"codebase-memory-mcp"
]
}
}
}
Obsidian MCP Pro
{
"mcpServers": {
"rps321321-obsidian-mcp-pro": {
"command": "npx",
"args": [
"-y",
"obsidian-mcp-pro"
],
"env": {
"OBSIDIAN_VAULT_PATH": "YOUR_OBSIDIAN_VAULT_PATH_HERE",
"OBSIDIAN_READ_PATHS": "YOUR_OBSIDIAN_READ_PATHS_HERE",
"OBSIDIAN_WRITE_PATHS": "YOUR_OBSIDIAN_WRITE_PATHS_HERE"
}
}
}
}
Frequently asked questions
Codebase Memory MCP is categorized under Knowledge & Memory and uses a local stdio subprocess. Obsidian MCP Pro belongs to Knowledge & Memory and uses a local stdio subprocess. Pick Codebase Memory MCP for knowledge & memory work and Obsidian MCP Pro for knowledge & memory.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Codebase Memory MCP is listed as free. Auth: no auth required. Obsidian MCP Pro is listed as free. Auth: no auth required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add deusdata-codebase-memory-mcp and rps321321-obsidian-mcp-pro as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Codebase Memory MCP has a quality signal of 73/100 (Great) with 9 views, 1 installs and 47,616 GitHub stars. Obsidian MCP Pro has 67/100 (Great) with 1 views, 0 installs and 33 GitHub stars.