dnomia-knowledge
Integrates with Git repositories to sync commit history, analyze code churn and hotspots, install post-commit hooks for automatic indexing, and perform crossover analysis with trace data.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dnomia-knowledgesearch for authentication middleware"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dnomia-knowledge
Local knowledge engine for codebases. Indexes your markdown and source code into a single SQLite database with hybrid search (FTS5 keyword + vector semantic), knowledge graph, and developer interaction tracking.
Built for Claude Code via MCP (Model Context Protocol). Works entirely on your machine. Your code never leaves your computer.
Why
Developer tools treat every session as a blank slate. You search for the same function, re-read the same config file, and re-discover the same architectural pattern across dozens of conversations. Grep finds exact strings but misses semantic matches. Embeddings find related concepts but miss exact terms. Neither remembers what you searched for last week.
Existing solutions don't fit solo developers:
GitHub Copilot / Cursor indexing is cloud-dependent and opaque. Your code leaves your machine.
RAG pipelines require infrastructure (vector DBs, embedding APIs, chunking services) that cost money and attention.
IDE search is per-project, per-session, with no memory of what matters to you.
dnomia-knowledge runs entirely on your machine: one SQLite database, one embedding model, hybrid search that combines keyword precision with semantic recall. It tracks which files you actually read and edit, boosts search results by your usage patterns, and syncs automatically on every commit. No cloud, no API keys, no infrastructure to manage.
Related MCP server: Knowledge MCP
What it does
Hybrid search across your projects. Not just grep, not just embeddings. FTS5 (BM25) and sqlite-vec (cosine KNN) run in parallel, merged with Reciprocal Rank Fusion. Finds code and documentation that keyword search misses and vector search misranks.
Knowledge graph over your codebase. Chunks are connected by markdown links, shared tags, categories, import statements, and semantic similarity. Community detection (Louvain) and PageRank surface the structure of your project.
Interaction tracking learns what matters to you. Every file you read and edit is logged. Search results are boosted by your actual usage patterns. Trace analytics show which files are hot, which knowledge gaps exist, and which areas are decaying.
Cross-project search lets you query across all your indexed repositories at once. Related projects can be linked via config for unified search results.
Continuous indexing keeps everything fresh. Git post-commit hooks and a periodic job (launchd on macOS) re-index changed files automatically. No daemon, no persistent memory usage.
Knowledge lifecycle (schema v4, opt-in) adds confidence scoring, supersession, and contradiction detection on top of the index. Chunks decay when ignored and strengthen when you read or edit them. Duplicate slugs and code-symbol collisions surface automatically. Ranking can be tuned by confidence, superseded chunks drop out of default search, and the lifecycle MCP tool exposes state to Claude Code. Inspired by the LLM Wiki v2 proposal extending Karpathy's LLM Wiki concept. Enable with [lifecycle] enabled = true in .knowledge.toml and DNOMIA_KNOWLEDGE_LIFECYCLE=1 for the hook.
Lifecycle at a glance
# See contradictions (e.g. duplicate slugs across posts)
dnomia-knowledge contradictions --project my-site
# Inspect a chunk's confidence and event history
dnomia-knowledge confidence 1234
# Mark an outdated doc as superseded by its rewrite
dnomia-knowledge supersede 1234 5678 --yes
# Apply daily decay sweep (or install launchd via --plist)
dnomia-knowledge forget --project my-siteFrom Claude Code via MCP: lifecycle(chunk_id, action='info') shows
state, action='reinforce' bumps confidence, action='supersede' and
action='restore' edit the supersession pointer.
Quick start
# Clone and install
git clone https://github.com/ceaksan/dnomia-knowledge.git
cd dnomia-knowledge
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e .
# Index your first project
dnomia-knowledge index /path/to/your/project
# Search
dnomia-knowledge search "authentication middleware"
# See what files you access most
dnomia-knowledge trace hotThe embedding model (intfloat/multilingual-e5-base, ~500MB) downloads automatically on first run.
Connect to Claude Code
Add to ~/.claude/settings.json under mcpServers:
{
"dnomia-knowledge": {
"command": "/path/to/dnomia-knowledge/.venv/bin/python",
"args": ["-m", "dnomia_knowledge.server"],
"env": {
"DNOMIA_KNOWLEDGE_PROJECT": "my-project"
}
}
}Claude Code now has access to 6 MCP tools: search, index_project, project_info, graph_query, read_file, and fetch_and_index.
Claude Code hooks (optional)
Track file interactions automatically by adding hooks to ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read|Grep",
"hooks": [
{
"type": "command",
"command": "/path/to/.venv/bin/python -m dnomia_knowledge.hooks.pre_tool_use"
}
]
}
],
"PostToolUse": [
{
"matcher": "Read|Edit",
"hooks": [
{
"type": "command",
"command": "/path/to/.venv/bin/python -m dnomia_knowledge.hooks.post_tool_use"
}
]
}
]
}
}The PreToolUse hook redirects large file reads (>300 lines) to the knowledge base search. The PostToolUse hook logs every Read/Edit for interaction tracking and search ranking.
Project configuration
Create .knowledge.toml in your project root to control what gets indexed:
[project]
name = "my-project"
type = "saas" # content | saas | static
[content]
paths = ["docs/"]
extensions = [".md", ".mdx"]
[code]
preset = "python" # web | python | django | mixed
paths = ["src/"]
max_chunk_lines = 50
[graph]
enabled = true
edge_types = ["link", "tag", "semantic", "import"]
semantic_threshold = 0.75
[indexing]
ignore_patterns = ["node_modules", "dist", "__pycache__", ".venv"]
max_file_size_kb = 500
[injection]
enabled = false # experimental; off by default
max_hint_tokens = 500
cache_ttl_seconds = 300
hot_limit = 3
recent_limit = 3Without .knowledge.toml, defaults to indexing .md and .mdx files only.
Experimental: passive context injection
With [injection] enabled = true, the server augments the search tool description on every tools/list call with a compact hint listing the top hot files and recent edits for DNOMIA_KNOWLEDGE_PROJECT. The model sees this passively, without calling search first. Hint is capped at 500 tokens, cached 5 minutes, falls back silently on error. See ADR-001.
CLI reference
Indexing
dnomia-knowledge index <path> # Index a project directory
dnomia-knowledge index <path> --full # Force full reindex (skip incremental)
dnomia-knowledge index-all # Index all registered projects
dnomia-knowledge index-all --changed # Only projects with changes since last indexSearch
dnomia-knowledge search <query> # Search all projects
dnomia-knowledge search <query> -p my-project # Filter by project
dnomia-knowledge search <query> -d code # Filter by domain (code|content|all)
dnomia-knowledge search <query> --lang python # Filter by languageTrace analytics
dnomia-knowledge trace hot # Most accessed files (reads + edits + searches)
dnomia-knowledge trace gaps # Searches that returned zero results
dnomia-knowledge trace decay # Files with declining activity over time
dnomia-knowledge trace queries # Most frequent search patternsAll trace commands accept --project/-p, --days/-d (default 30), and --limit/-l (default 20).
Git history analysis
dnomia-knowledge git-sync <path> # Sync git log into the database
dnomia-knowledge analyze churn # Most modified files by insertions + deletions
dnomia-knowledge analyze hotspots # Directory-level churn aggregation
dnomia-knowledge analyze crossover # Fuse git churn with trace read dataCrossover analysis assigns signals to files based on change frequency vs read frequency:
Signal | Meaning |
BLIND | High churn, zero reads. Changing but never consulted. |
TURBULENT | High churn, low reads. Unstable and under-monitored. |
HOT | High churn, high reads. Core active area. |
STABLE | Low churn, high reads. Settled reference code. |
ZOMBIE | Zero churn, some reads. Read but never touched. |
COLD | Low churn, low reads. Inactive. |
Knowledge graph
dnomia-knowledge graph rebuild # Rebuild all edges for a project
dnomia-knowledge graph communities # Run Louvain community detection + PageRankContinuous indexing
dnomia-knowledge install-hooks # Git post-commit hooks on all projects
dnomia-knowledge install-hooks --uninstall
dnomia-knowledge install-launchd # macOS launchd job (every 5 min)
dnomia-knowledge install-launchd --uninstallOther
dnomia-knowledge project-info # List all projects with stats
dnomia-knowledge read-file <path> # Smart file reading with chunk awareness
dnomia-knowledge export # CSV export of all chunksHow it works
Search pipeline
Query
-> embed with "query: " prefix (768d vector, cached)
-> FTS5 BM25 search (keyword matching)
-> sqlite-vec KNN search (semantic similarity)
-> RRF merge (k=60): score = sum(1/(k + rank + 1))
-> Fallback: prefix matching if both return empty
-> Interaction boost: re-rank by read/edit frequency (30-day window)
-> Return top N with snippetsIndexing pipeline
Project directory
-> Scan: filter by extension, size, .gitignore, config patterns
-> For each changed file (MD5 hash comparison):
-> .md/.mdx -> heading-based chunker (##/### splits, frontmatter)
-> code -> Tree-sitter AST chunker (functions, classes, methods)
-> Embed passages (batch=8, "passage: " prefix)
-> Atomic transaction: delete old + insert chunks + insert vectors
-> Build graph edges (link, tag, category, semantic, import)
-> Update project metadata + git commit hashContinuous indexing
git commit -> post-commit hook -> file lock -> background reindex
launchd (every 5 min) -> index-all --changed -> git HEAD comparison -> reindexOnly one index process runs at a time. File locks prevent concurrent embedding model loads (protects 8GB RAM machines).
Architecture
Single SQLite database with three search layers:
Layer | Technology | Purpose |
Keyword | FTS5 (BM25) | Porter stemmer, unicode61 tokenizer |
Semantic | sqlite-vec | Cosine KNN on 768d normalized vectors |
Graph | NetworkX | Louvain communities, PageRank, BFS traversal |
Embedding model: intfloat/multilingual-e5-base (768d). Lazy loaded on first search, auto-unloads after 10 minutes idle. Runs on 8GB RAM.
Code parsing: Tree-sitter with language pack. Extracts functions, classes, methods, structs, interfaces, enums with proper boundaries. Falls back to sliding-window chunking for unsupported languages.
Module structure
src/dnomia_knowledge/
server.py MCP server (6 tools, thread-safe singletons)
store.py SQLite persistence, schema v3, migrations, triggers
search.py Hybrid FTS5 + vector, RRF merge, interaction boost
indexer.py Scan -> chunk -> embed -> store pipeline
graph.py Edge builder, Louvain community detection, PageRank
embedder.py Lazy sentence-transformer, LRU cache, auto-unload
cli.py Rich CLI with 10+ commands
registry.py .knowledge.toml config loader (Pydantic v2)
models.py Chunk, SearchResult, IndexResult, InteractionType
chunker/
md_chunker.py Heading-based markdown splitter
ast_chunker.py Tree-sitter AST chunker with fallback
languages.py Per-language AST node type mappings
hooks/
pre_tool_use.py Redirects large file reads to search
post_tool_use.py Logs read/edit interactionsData model
Table | Purpose |
| Registered projects with path, type, graph config, last indexed commit |
| Indexed content and code pieces with metadata |
| sqlite-vec virtual table for vector embeddings (768d) |
| FTS5 virtual table mirroring chunk content |
| Per-file MD5 hash tracking for incremental indexing |
| Knowledge graph edges (link, tag, category, semantic, import) |
| Read/edit/search_hit tracking for boost and analytics |
| Query history for gap analysis and pattern tracking |
| Parsed git log entries |
| Per-file diff stats from git history |
Triggers auto-sync FTS5 on chunk insert/update/delete. Vector cleanup triggers on chunk delete.
Environment variables
Variable | Default | Description |
|
| Database path |
| (none) | Default project for MCP search |
Requirements
Python 3.11+
macOS or Linux (launchd is macOS only, git hooks work everywhere)
~500MB disk for embedding model (downloaded once)
8GB RAM minimum (embedding model loads lazily)
Development
pip install -e ".[dev]"
python -m pytest tests/ -v # 276 tests
ruff check src/ tests/ # LintingLicense
MIT
Available Tools
7 toolsfetch_and_indexA
Fetch URL content, convert to text, and index for searching.
After indexing, the content is searchable via the search tool.
Args: url: URL to fetch and index project: Project ID to store under (default: derived from URL domain)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains the multi-step behavior, the persistence of indexing, and the consequence that content becomes searchable. It also reveals the default project derivation from the URL domain, which is useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: the core behavior is front-loaded, the key post-condition follows, and the parameter explanations are minimal but sufficient. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two parameters and an output schema, the description covers the necessary operational context: what it does, what happens afterward, and what each parameter means. The main gap is the lack of explicit relationship or routing guidance relative to sibling tools like index_project, but this does not prevent an agent from calling the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It gives meaningful explanations for both parameters: url is the source to fetch and index, and project is the project ID with a default derived from the URL domain. This adds real value beyond the bare schema types, though it could be slightly more explicit about accepted URL formats or project ID constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action sequence: fetch URL content, convert to text, and index for searching. It also identifies the post-condition that content becomes searchable. However, it does not explicitly differentiate itself from the sibling index_project, leaving a small ambiguity gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied rather than explicit: the tool is obviously for fetching and indexing a URL so it can later be searched. It mentions the search tool as a downstream consumer, but gives no guidance on when to choose this over index_project or other siblings, and no exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graph_queryA
Query the knowledge graph.
Args: chunk_id: Chunk ID to start traversal from (required for neighbors mode) project: Project ID (required for communities mode) mode: "neighbors" for BFS traversal, "communities" for Louvain groups depth: BFS depth for neighbors mode (1-3)
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | neighbors | |
| depth | No | ||
| project | No | ||
| chunk_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does usefully reveal behavior: neighbors is a BFS traversal, communities uses Louvain groups, and depth is bounded to 1-3. On the other hand, it does not explicitly state that querying has no side effects, nor does it mention potential costs, permissions, or error behavior for missing required parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core purpose, and uses a clear argument list where each line adds essential semantic information. There is no redundant restating of types or schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the description explains all modes and parameters, the tool is largely self-contained for invocation. It falls slightly short of a 5 by not explicitly addressing whether the modes are mutually exclusive or what happens when both chunk_id and project are supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does so thoroughly. It explains the meaning and role of every parameter, including conditional requiredness (chunk_id for neighbors, project for communities) and the valid depth range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with the specific verb 'Query' and resource 'the knowledge graph', and the parameter list adds two distinct modes (neighbors/communities) that clarify what the tool does. It does not explicitly distinguish itself from the sibling tool 'search', so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear conditional usage context: chunk_id is required for neighbors mode, project is required for communities mode, and depth applies to neighbors mode. However, it does not explicitly explain when to prefer this tool over alternatives such as 'search' or 'project_info', nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_projectB
Index or reindex a project's content and code.
Args: path: Absolute path to project root (must contain .md/.mdx files) incremental: If True, only reindex changed files (default)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| incremental | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 explains the incremental reindex option and the path requirement, but does not state whether indexing is destructive, whether it replaces or merges an existing index, whether it requires authentication or network access, or how long-running the operation might be. For a mutating tool, these are notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well structured: a one-sentence purpose followed by bulleted argument explanations. Every sentence adds value, and the purpose is front-loaded. No redundant or filler language is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so describing return values is unnecessary. However, the description omits behavioral details that would help an agent call the tool correctly, such as whether the index is rebuilt from scratch or merged, whether existing data is deleted, and when a full reindex would be needed instead of incremental. It also gives no usage guidance relative to the sibling tools. These gaps keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does completely. It explains that path must be an absolute project root and must contain .md/.mdx files, and defines incremental as 'only reindex changed files' with its default. This adds essential meaning beyond the bare string and boolean types in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Index or reindex a project's content and code') with a concrete resource and a modifier that distinguishes it from the sibling tools (e.g., project_info, search). It lacks explicit sibling differentiation, but the verb and resource make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when you need to index/reindex a project—but provides no explicit context, exclusions, or comparison to alternatives like fetch_and_index. The path precondition (must contain .md/.mdx files) is the only usage hint, and no guidance on choosing between incremental and full reindex beyond the default is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lifecycleA
Inspect or mutate schema v4 lifecycle state for a chunk.
Args: chunk_id: Target chunk id action: info | reinforce | supersede | restore new_id: Chunk replacing the target (required when action=supersede) delta: Confidence delta for manual reinforcement (default 0.1) reason: Optional free-text reason stored on the event
| Name | Required | Description | Default |
|---|---|---|---|
| delta | No | ||
| action | No | info | |
| new_id | No | ||
| reason | No | ||
| chunk_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 clearly distinguishes read-only inspection ('info') from mutations ('reinforce', 'supersede', 'restore'), states that reason is 'stored on the event', and explains the meaning of delta as 'manual reinforcement'. This is solid behavioral transparency for a tool of this complexity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core purpose in one sentence and then uses a compact, scannable argument list with no fluff. Every line adds necessary semantic information and nothing is repeated from the schema without purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters and multiple mutation modes, the description adequately covers operation semantics, action-specific requirements, and parameter meaning. The presence of an output schema covers return-value expectations. It would be slightly stronger with an explicit note about consequences of destructive actions like supersede or restore, but the current text is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero property descriptions, so the description is the only source of parameter meaning. It explains all five parameters: chunk_id target, action allowed values, new_id obligation for supersede, delta as confidence adjustment with default, and reason as free text stored on the event. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific action ('Inspect or mutate') and a specific resource ('schema v4 lifecycle state for a chunk'), so an agent immediately knows what the tool does. The explicit action list further disambiguates it from the sibling tools, which deal with search, indexing, and file reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description names the four lifecycle actions and the condition requiring new_id for supersede, which tells the agent what operations are available. However, it does not explicitly state when this tool should be preferred over siblings like index_project or graph_query, nor does it mention excluded scenarios. The usage context is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_infoA
List registered projects with stats.
Args: project: Specific project ID, or None for all projects
| Name | Required | Description | Default |
|---|---|---|---|
| project | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. 'List' strongly implies a read-only operation and 'with stats' hints at the returned information, but the description does not explicitly state that no modifications occur, nor does it mention any permissions or side effects. This is adequate for a simple listing tool, but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one front-loaded sentence plus a single parameter explanation. Every sentence adds value, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and an output schema, the description is nearly complete. It tells the agent how to request all projects or a specific one, and the output schema covers return values. It doesn't elaborate on edge cases or alternative tool routing, but nothing critical is missing for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining the parameter's semantic meaning: 'project: Specific project ID, or None for all projects.' This goes beyond the schema's type/default information and clarifies the all-vs-specific behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List registered projects with stats.' The parameter line clarifies that it can target one project or all projects. It doesn't explicitly distinguish itself from siblings, but the resource and action are specific enough that an agent can generally identify its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear structural usage guidance: pass a project ID or None for all projects. However, it does not explain when this tool should be preferred over siblings like search or graph_query, and it provides no when-not-to-use guidance. Usage is implied rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_fileA
Smart file reading with index awareness.
If the file is indexed and large, returns relevant chunks instead of full content. Falls back to raw file reading for non-indexed files.
Args: file_path: Absolute path to the file to read query: Optional search query to find relevant sections in large files project: Project ID (default: auto-detect from file path)
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| project | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 does reveal the main conditional behavior: chunks for indexed large files, raw fallback for non-indexed files. Still, it leaves gaps around what counts as 'large', what happens when query is omitted, and how query behaves for non-indexed files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line summary, a short conditional behavior statement, and a clear Args list. Every sentence earns its place, with no unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core behavior and parameter semantics are covered well, and an output schema apparently handles return-value details. However, important operational context is missing: the threshold for 'large', behavior when query is absent on an indexed file, and guidance on how this differs from using search. This is adequate for straightforward use but incomplete for edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains all three parameters meaningfully: file_path must be absolute, query finds relevant sections in large files, and project defaults to auto-detection from the file path. This goes beyond the bare schema names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a file reader with index-aware chunking: it reads files, returns relevant chunks for indexed large files, and falls back to raw reading for non-indexed files. This is a specific verb-resource pairing that is distinguishable from siblings like search or index_project, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is appropriate by describing behavior for indexed vs. non-indexed files and by mentioning query for relevant sections. However, it does not explicitly say when to prefer a sibling tool such as search instead, nor does it provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Hybrid semantic + keyword search across project knowledge.
Args: query: Search query text domain: Filter by "all", "code", or "content" project: Project ID (default: DNOMIA_KNOWLEDGE_PROJECT env var) cross: If True, also search linked projects limit: Maximum results to return language: Filter by language (e.g. "python", "typescript") file_pattern: Filter by file path pattern (e.g. "auth", "models.py") show_content: If True, show full chunk content instead of truncated snippet
| Name | Required | Description | Default |
|---|---|---|---|
| cross | No | ||
| limit | No | ||
| query | Yes | ||
| domain | No | all | |
| project | No | ||
| language | No | ||
| file_pattern | No | ||
| show_content | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral context. It does convey the hybrid search behavior, the ability to search linked projects, and optional full-content display. Still, it does not disclose aspects like result ordering, pagination semantics, environment variable requirements, or any operational caveats beyond the implied read-only nature of search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-sentence summary is front-loaded and immediately informative, and the Args list is compact yet covers all 8 parameters without unnecessary filler. Every line adds value and no information is redundantly repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 8-parameter complexity and the presence of an output schema, the description is largely complete: it explains all inputs, the scoped knowledge domain, cross-project search, and filtering options. It could be stronger by explicitly addressing how this tool relates to graph_query or noting any setup prerequisites, but nothing critical is missing for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does by explaining every parameter: query text, domain values, project defaulting to an env var, cross-project behavior, limit, language, file pattern, and content display. The only minor issue is that the project default is described as env var-based while the schema says default null, introducing slight ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'Hybrid semantic + keyword search across project knowledge,' giving a specific verb and resource. It does not explicitly differentiate itself from sibling tools like graph_query, but the word 'search' and the hybrid semantic/keyword detail make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when searching across project knowledge, and the parameter list hints at filtering and cross-project scenarios. However, it does not explicitly state when to use this tool versus graph_query or other siblings, nor does it provide exclusions or alternatives.
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. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
fetch_and_index - First observed
graph_query - First observed
index_project - First observed
lifecycle - First observed
project_info - First observed
read_file - First observed
search
TDQS
Each tool targets a clearly distinct function: project listing, search, local indexing, graph traversal, file reading, URL ingestion, and lifecycle management. There is no meaningful overlap in purpose even though some tools touch related data.
Tool names mix conventions: index_project and read_file are verb_noun, project_info and graph_query are noun_verb, search is a bare verb, and lifecycle is a noun only. While all names are readable and snake_case, there is no predictable pattern across the set.
Seven tools is a well-scoped size for a knowledge management server, covering indexing, retrieval, graph exploration, and state management without unnecessary redundancy. Each tool earns its place.
The core knowledge lifecycle is covered: ingestion via index_project/fetch_and_index, retrieval via search/read_file, graph access, and state changes via lifecycle. A notable gap is the absence of any deletion/removal tool for projects, chunks, or indexed content.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Project memory, semantic code search, and grounded agent context.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Give your AI agent a persistent map of your project's structure, dependencies, and bugs.
Self-hosted AI-native knowledge workspace with hybrid search, GraphRAG, and MCP.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceProvides hybrid semantic and keyword code search for Claude Code using BM25 and vector retrieval. It enables indexing and searching local codebases with language-aware chunking and local embeddings.-
- FlicenseNot gradedqualityDmaintenanceA high-precision local knowledge base server enabling AI agents to navigate, search, and reason about complex codebases using hybrid semantic, lexical, and graph retrieval.3-
- AlicenseNot gradedqualityCmaintenanceA local, persistent, semantically-aware knowledge graph for AI coding agents like Claude Code, providing efficient session memory with minimal token cost and zero runtime network calls.MIT
- AlicenseNot gradedqualityBmaintenanceProvides Claude with persistent, semantic knowledge of a codebase across sessions by maintaining a local knowledge base of structural maps, compressed file summaries, and insights.71MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ceaksan/dnomia-knowledge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server