Context+
Context+ is a semantic intelligence MCP server that transforms large codebases into searchable, hierarchical graphs — combining AST parsing, vector embeddings, spectral clustering, and a persistent memory graph for AI-assisted engineering.
Discovery & Navigation
get_context_tree— Structural AST tree with file headers, function/class names, and line ranges; auto-prunes based on project sizeget_file_skeleton— View function signatures, class methods, and type definitions without reading full file bodiessemantic_code_search— Search by meaning using embeddings over file headers and symbolssemantic_identifier_search— Identifier-level semantic search for functions/classes/variables with ranked call sites and line numberssemantic_navigate— Browse the codebase by meaning using spectral clustering to group semantically related files into labeled clusters
Analysis
get_blast_radius— Trace every file and line where a symbol is imported or used before modifying/deleting itrun_static_analysis— Run native linters/compilers (TypeScript, Python, Rust, Go) to find unused variables, dead code, and type errors
Code Operations
propose_commit— The only way to write code; validates formatting rules and creates a shadow restore point before savingget_feature_hub— Navigate Obsidian-style feature hubs (.mdfiles with[[wikilinks]]) mapping features to code files; identifies orphaned files
Version Control (Shadow Restore)
list_restore_points— List all shadow restore points created before AI editsundo_change— Restore files to their pre-AI-change state without affecting Git history
Memory Graph & RAG
upsert_memory_node— Create or update a memory node (concept, file, symbol, or note) with auto-generated embeddingscreate_relation— Create typed edges between nodes (relates_to,depends_on,implements,references, etc.) with time-decayed weightssearch_memory_graph— Semantic search with graph traversal — finds direct matches then walks 1st/2nd-degree neighborsretrieve_with_traversal— Start from a specific node and walk the graph outward, scoring neighbors by decay and depthadd_interlinked_context— Bulk-add nodes with automatic similarity linking (cosine ≥ 0.72 creates edges automatically)prune_stale_links— Remove decayed edges and orphan nodes to keep the graph lean
Manages codebase changes via a shadow restore system that tracks file states before AI modifications, allowing undos without impacting the project's Git history.
Supports Obsidian-style feature hub navigation by using markdown files and wikilinks to map high-level features to their corresponding code files.
Integrates with Ollama to provide semantic intelligence, including vector embeddings for code search and chat models for labeling semantic file clusters.
Provides static analysis tools for Python codebases to detect unused variables, dead code, and type errors.
Provides static analysis tools for Rust codebases to detect unused variables, dead code, and type errors.
Provides static analysis tools for TypeScript codebases to detect unused variables, dead code, and type errors.
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., "@Context+show the blast radius of changing the 'processPayment' function"
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.
Context+
Semantic Intelligence for Large-Scale Engineering.
Context+ is an MCP server designed for developers who demand 99% accuracy. By combining RAG, Tree-sitter AST, Spectral Clustering, and Obsidian-style linking, Context+ turns a massive codebase into a searchable, hierarchical feature graph.
https://github.com/user-attachments/assets/a97a451f-c9b4-468d-b036-15b65fc13e79
Tools
Discovery
Tool | Description |
| Structural AST tree of a project with file headers and symbol ranges (line numbers for functions/classes/methods). Dynamic pruning shrinks output automatically. |
| Function signatures, class methods, and type definitions with line ranges, without reading full bodies. Shows the API surface. |
| Search by meaning, not exact text. Uses embeddings over file headers/symbols and returns matched symbol definition lines. |
| Identifier-level semantic retrieval for functions/classes/variables with ranked call sites and line numbers. |
| Browse codebase by meaning using spectral clustering. Groups semantically related files into labeled clusters. |
Analysis
Tool | Description |
| Trace every file and line where a symbol is imported or used. Prevents orphaned references. |
| Run native linters and compilers to find unused variables, dead code, and type errors. Supports TypeScript, Python, Rust, Go. |
Code Ops
Tool | Description |
| The only way to write code. Validates against strict rules before saving. Creates a shadow restore point before writing. |
| Obsidian-style feature hub navigator. Hubs are |
Version Control
Tool | Description |
| List all shadow restore points created by |
| Restore files to their state before a specific AI change. Uses shadow restore points. Does not affect git. |
Memory & RAG
Tool | Description |
| Create or update a memory node (concept, file, symbol, note) with auto-generated embeddings. |
| Create typed edges between nodes (relates_to, depends_on, implements, references, similar_to, contains). |
| Semantic search with graph traversal — finds direct matches then walks 1st/2nd-degree neighbors. |
| Remove decayed edges (e^(-λt) below threshold) and orphan nodes with low access counts. |
| Bulk-add nodes with auto-similarity linking (cosine ≥ 0.72 creates edges automatically). |
| Start from a node and walk outward — returns all reachable neighbors scored by decay and depth. |
Complementary server: pmll-memory-mcp (
npx pmll-memory-mcp) is a separate MCP server by @drQedwards that adapts Context+'s long-term memory graph and adds short-term KV context memory, Q-promise deduplication, and a solution engine on top. See drQedwards/PPM for details.
Related MCP server: SRC (Structured Repo Context)
Setup
Quick Start (npx / bunx)
No installation needed. Add Context+ to your IDE MCP config.
For Claude Code, Cursor, and Windsurf, use mcpServers:
{
"mcpServers": {
"contextplus": {
"command": "bunx",
"args": ["contextplus"],
"env": {
"OLLAMA_EMBED_MODEL": "nomic-embed-text",
"OLLAMA_CHAT_MODEL": "gemma2:27b",
"OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY"
}
}
}
}For VS Code (.vscode/mcp.json), use servers and inputs:
{
"servers": {
"contextplus": {
"type": "stdio",
"command": "bunx",
"args": ["contextplus"],
"env": {
"OLLAMA_EMBED_MODEL": "nomic-embed-text",
"OLLAMA_CHAT_MODEL": "gemma2:27b",
"OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY"
}
}
},
"inputs": []
}If you prefer npx, use:
"command": "npx""args": ["-y", "contextplus"]
Or generate the MCP config file directly in your current directory:
npx -y contextplus init claude
bunx contextplus init cursor
npx -y contextplus init opencodeSupported coding agent names: claude, cursor, vscode, windsurf, opencode.
Config file locations:
IDE | Config File |
Claude Code |
|
Cursor |
|
VS Code |
|
Windsurf |
|
OpenCode |
|
CLI Subcommands
init [target]- Generate MCP configuration (targets:claude,cursor,vscode,windsurf,opencode).skeleton [path]ortree [path]- (New) View the structural tree of a project with file headers and symbol definitions directly in your terminal.[path]- Start the MCP server (stdio) for the specified path (defaults to current directory).
Including paths excluded by the workspace .gitignore
If your workspace .gitignore excludes a sub-directory that you still want
indexed (common in monorepos where sub-projects under repos/, packages/,
or vendor/ are gitignored at the top level), use --include or
CONTEXTPLUS_EXTRA_ROOTS to add the paths back.
CLI form (repeatable):
bunx contextplus /path/to/workspace \
--include repos/lacuna \
--include repos/graphrag-coreEnvironment variable (fallback when no --include flag is set; uses the
system path separator — : on Unix, ; on Windows):
CONTEXTPLUS_EXTRA_ROOTS=repos/lacuna:repos/graphrag-core \
bunx contextplus /path/to/workspaceIn .mcp.json the env form is usually more ergonomic:
{
"mcpServers": {
"contextplus": {
"command": "bunx",
"args": ["contextplus", "/path/to/workspace"],
"env": {
"CONTEXTPLUS_EXTRA_ROOTS": "repos/lacuna:repos/graphrag-core"
}
}
}
}Each path listed is walked independently of the workspace root, with a
fresh ignore scope. Each path's own .gitignore is respected. Paths are
validated at startup; invalid entries (non-existent, not a directory,
outside the workspace) emit a stderr warning and are skipped.
Nested .gitignore files inside the workspace and inside each extra root
are loaded and merged with inherited rules, matching git and ripgrep
behavior.
From Source
npm install
npm run buildEmbedding Providers
Context+ supports two embedding backends controlled by CONTEXTPLUS_EMBED_PROVIDER:
Provider | Value | Requires | Best For |
Ollama (default) |
| Local Ollama server | Free, offline, private |
OpenAI-compatible |
| API key | Gemini (free tier), OpenAI, Groq, vLLM |
Ollama (Default)
No extra configuration needed. Just run Ollama with an embedding model:
ollama pull nomic-embed-text
ollama serveGoogle Gemini (Free Tier)
Full Claude Code .mcp.json example:
{
"mcpServers": {
"contextplus": {
"command": "npx",
"args": ["-y", "contextplus"],
"env": {
"CONTEXTPLUS_EMBED_PROVIDER": "openai",
"CONTEXTPLUS_OPENAI_API_KEY": "YOUR_GEMINI_API_KEY",
"CONTEXTPLUS_OPENAI_BASE_URL": "https://generativelanguage.googleapis.com/v1beta/openai",
"CONTEXTPLUS_OPENAI_EMBED_MODEL": "text-embedding-004"
}
}
}
}Get a free API key at Google AI Studio.
OpenAI
{
"mcpServers": {
"contextplus": {
"command": "npx",
"args": ["-y", "contextplus"],
"env": {
"CONTEXTPLUS_EMBED_PROVIDER": "openai",
"OPENAI_API_KEY": "sk-...",
"OPENAI_EMBED_MODEL": "text-embedding-3-small"
}
}
}
}Other OpenAI-compatible APIs (Groq, vLLM, LiteLLM)
Any endpoint implementing the OpenAI Embeddings API works:
{
"mcpServers": {
"contextplus": {
"command": "npx",
"args": ["-y", "contextplus"],
"env": {
"CONTEXTPLUS_EMBED_PROVIDER": "openai",
"CONTEXTPLUS_OPENAI_API_KEY": "YOUR_KEY",
"CONTEXTPLUS_OPENAI_BASE_URL": "https://your-proxy.example.com/v1",
"CONTEXTPLUS_OPENAI_EMBED_MODEL": "your-model-name"
}
}
}
}Note: The
semantic_navigatetool also uses a chat model for cluster labeling. When using theopenaiprovider, setCONTEXTPLUS_OPENAI_CHAT_MODEL(default:gpt-4o-mini).For VS Code, Cursor, or OpenCode, use the same
envblock inside your IDE's MCP config format (see Config file locations table above).
Architecture
Three layers built with TypeScript over stdio using the Model Context Protocol SDK:
Core (src/core/) - Multi-language AST parsing (tree-sitter, 43 extensions), gitignore-aware traversal, Ollama vector embeddings with disk cache, wikilink hub graph, in-memory property graph with decay scoring.
Tools (src/tools/) - 17 MCP tools exposing structural, semantic, operational, and memory graph capabilities.
Git (src/git/) - Shadow restore point system for undo without touching git history.
Runtime Cache (.mcp_data/) - created on server startup; stores reusable file, identifier, and call-site embeddings to avoid repeated GPU/CPU embedding work. A realtime tracker refreshes changed files/functions incrementally.
Config
Variable | Type | Default | Description |
| string |
| Embedding backend: |
| string |
| Ollama embedding model |
| string | - | Ollama Cloud API key |
| string |
| Ollama chat model for cluster labeling |
| string | - | API key for OpenAI-compatible provider (alias: |
| string |
| OpenAI-compatible endpoint URL (alias: |
| string |
| OpenAI-compatible embedding model (alias: |
| string |
| OpenAI-compatible chat model for labeling (alias: |
| string (parsed as number) |
| Embedding batch size per GPU call, clamped to 5-10 |
| string (parsed as number) |
| Per-chunk chars before merge, clamped to 256-8000 |
| string (parsed as number) |
| Skip non-code text files larger than this many bytes |
| string (parsed as number) | - | Optional Ollama embed runtime |
| string (parsed as number) | - | Optional Ollama embed runtime |
| string (parsed as number) | - | Optional Ollama embed runtime |
| string (parsed as number) | - | Optional Ollama embed runtime |
| string (parsed as number) | - | Optional Ollama embed runtime |
| string (parsed as boolean) | - | Optional Ollama embed runtime |
| string (parsed as boolean) |
| Enable realtime embedding refresh on file changes |
| string (parsed as number) |
| Max changed files processed per tracker tick, clamped to 5-10 |
| string (parsed as number) |
| Debounce window before tracker refresh |
Test
npm test
npm run test:demo
npm run test:allAvailable Tools
17 toolsadd_interlinked_contextA
Bulk-add multiple memory nodes with automatic similarity linking. Computes embeddings for all items, then creates similarity edges between any pair (new-to-new and new-to-existing) with cosine similarity ≥ 0.72. Ideal for importing related concepts, files, or notes at once.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of nodes to add. Each needs type, label, and content. | |
| auto_link | No | Whether to auto-create similarity edges. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses significant implementation detail absent from annotations: specifically cites the cosine similarity threshold (≥0.72), reveals embedding computation occurs, and clarifies edge creation scope (new-to-new AND new-to-existing). Missing only operational details like atomicity guarantees or failure modes.
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?
Two dense sentences with zero redundancy. Front-loaded with the core action (bulk-add), followed by technical mechanism (embeddings/similarity), then usage context. Every clause provides distinct value.
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?
Comprehensively explains the mutation behavior (node creation + edge linking) and algorithmic specifics (0.72 threshold). Lacks only return value documentation, which is relevant given no output schema exists, but the behavioral description is complete enough for invocation decisions.
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 100%, providing complete documentation for both 'items' and 'auto_link' parameters. The description references these concepts ('all items', 'automatic similarity linking') but does not augment the schema with additional semantic guidance (e.g., content format recommendations), warranting baseline 3.
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?
Excellent specificity: 'Bulk-add multiple memory nodes with automatic similarity linking' clearly defines the verb (bulk-add), resource (memory nodes), and distinguishing mechanism (automatic similarity linking). Differentiates from sibling 'upsert_memory_node' (single node) and 'create_relation' (manual edges) through the bulk/automatic scope.
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?
Provides clear contextual signal with 'Ideal for importing related concepts, files, or notes at once,' indicating bulk ingestion use cases. However, lacks explicit contrast with single-node alternative (upsert_memory_node) or when to disable auto_link.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_relationA
Create a typed edge between two memory nodes. Supports relation types: relates_to, depends_on, implements, references, similar_to, contains. Edges have weights (0-1) that decay over time via e^(-λt). Duplicate edges update weight instead of creating new ones.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes | ID of the source memory node. | |
| target_id | Yes | ID of the target memory node. | |
| relation | Yes | Relationship type between nodes. | |
| weight | No | Edge weight 0-1. Higher = stronger relationship. Default: 1.0. | |
| metadata | No | Optional key-value metadata for the edge. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Superior disclosure despite no annotations. Uniquely documents temporal decay physics (e^(-λt)) and idempotent upsert behavior on duplicates—critical behavioral traits for a write operation that agents need to understand for correct invocation and expectation-setting.
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?
Four precisely ordered sentences spanning purpose, valid types, physics, and uniqueness constraints. Zero waste—every clause earns its place. Front-loaded with the core action, followed by necessary constraints and behaviors.
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?
Comprehensive for a graph mutation tool without output schema. Covers unique domain logic (decay, duplicates) that schema cannot express. Minor gap: does not explicitly state prerequisite that source/target nodes must exist (implied but not guaranteed).
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?
With 100% schema coverage, baseline is 3. Description adds value by contextualizing the weight parameter (decay mechanics, 0-1 range emphasis) and implying directional semantics via 'typed edge'. Lists enum values explicitly, slightly redundant with schema but reinforces valid options.
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?
Excellent specificity with clear verb 'Create' and resource 'typed edge between two memory nodes'. Distinctly differentiates from sibling node-creation tools (upsert_memory_node) and retrieval tools by explicitly mentioning edges/relationships.
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?
Provides implicit guidance through enumeration of relation types and duplicate-handling behavior, but lacks explicit 'when to use this vs alternatives' guidance. Does not clarify when to prefer this over add_interlinked_context or prerequisite that nodes must exist first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blast_radiusA
Before deleting or modifying code, check the BLAST RADIUS. Traces every file and line where a specific symbol (function, class, variable) is imported or used. Prevents orphaned code. Also warns if usage count is low (candidate for inlining).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_name | Yes | The function, class, or variable name to trace across the codebase. | |
| file_context | No | The file where the symbol is defined. Excludes the definition line from results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses key traits: traces imports AND uses, excludes definition line (via file_context behavior), generates warnings for low usage (inlining candidates), and prevents orphaned code. Missing explicit read-only declaration, though implied by 'get' prefix and 'traces' verb.
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?
Four tightly constructed sentences with zero waste. Front-loaded with usage context (sentence 1), followed by mechanism (sentence 2), and value-add behaviors (sentences 3-4). Every clause earns its place.
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?
No output schema exists, but the description adequately describes conceptual output ('every file and line', usage count warnings). Good coverage for a read-only analysis tool, though explicit mention of return format (e.g., list of locations) would strengthen it.
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 coverage is 100% and descriptions are thorough. The tool description reinforces the semantic types (function, class, variable) but doesn't add syntax details, format constraints, or examples beyond what the schema already provides. Baseline 3 appropriate for high-coverage schemas.
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?
Specific verb ('traces') + resource ('symbol') + scope ('every file and line'). The parenthetical '(function, class, variable)' clarifies the polymorphic input, and the front-loaded context 'Before deleting or modifying code' clearly distinguishes this impact-analysis tool from general search siblings like semantic_code_search.
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?
Explicitly states when to use ('Before deleting or modifying code') and implies workflow integration (safety check). While it doesn't name specific alternatives, the context makes it clear this is for pre-modification validation versus general exploration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_context_treeA
Get the structural tree of the project with file headers, function names, classes, enums, and line ranges. Automatically reads 2-line headers for file purpose. Dynamic token-aware pruning: Level 2 (deep symbols) -> Level 1 (headers only) -> Level 0 (file names only) based on project size.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | No | Specific directory or file to analyze (relative to project root). Defaults to root. | |
| depth_limit | No | How many folder levels deep to scan. Use 1-2 for large projects. | |
| include_symbols | No | Include function/class/enum names in the tree. Defaults to true. | |
| max_tokens | No | Maximum tokens for output. Auto-prunes if exceeded. Default: 20000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description carries full behavioral disclosure burden effectively. Documents non-obvious behaviors: automatic 2-line header reading for file purpose and the three-level degradation strategy (Level 2→1→0) based on token limits. Could improve by stating read-only nature or output format specifics.
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?
Two dense sentences with zero waste. First sentence establishes capability and scope; second sentence elaborates on intelligent behaviors (header extraction, dynamic pruning). Every clause provides distinct semantic value (content types, automation, fallback strategy).
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?
With 4 optional parameters (100% schema coverage) and no output schema, description adequately compensates by detailing what the tree structure contains (headers, functions, classes, enums, ranges) and how output scales. Minor gap: doesn't specify output format (JSON vs text tree) or structure despite complexity of the hierarchical data.
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 coverage is 100% (baseline 3). Description adds significant value by explaining how parameters interact: the 'Level 2 (deep symbols)' maps to include_symbols=true, while the pruning explanation clarifies max_tokens behavior. Elaborates on what 'file headers' means (2-line extraction) beyond schema literalism.
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?
Description uses specific verb 'Get' with specific resource 'structural tree of the project' and enumerates exact contents (file headers, function names, classes, enums, line ranges). Clearly distinguishes from siblings like semantic_code_search (semantic vs structural) and get_file_skeleton (single file vs project tree).
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?
Provides implied usage guidance through the 'Dynamic token-aware pruning' explanation (indicating automatic scaling for large projects), but lacks explicit when-to-use statements versus alternatives like semantic_code_search or get_file_skeleton. No explicit exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feature_hubA
Obsidian-style feature hub navigator. Hub files are .md files containing [[path/to/file]] wikilinks that act as a Map of Content. Modes: (1) No args = list all hubs, (2) hub_path or feature_name = show hub with bundled skeletons of all linked files, (3) show_orphans = find files not linked to any hub. Prevents orphaned code and enables graph-based codebase navigation.
| Name | Required | Description | Default |
|---|---|---|---|
| hub_path | No | Path to a specific hub .md file (relative to root). | |
| feature_name | No | Feature name to search for. Finds matching hub file automatically. | |
| show_orphans | No | If true, lists all source files not linked to any feature hub. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It adds valuable context that the tool returns 'bundled skeletons of all linked files' and identifies orphaned files, but omits critical safety information (read-only vs. destructive), error handling for invalid hub paths, or performance characteristics for large codebases.
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 efficiently structured and front-loaded: it opens with the navigation concept, defines the resource (hub files), enumerates the three modes with clear numbering, and closes with value propositions. Every sentence serves a distinct purpose without 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?
Given three well-documented parameters (100% schema coverage) but no output schema, the description adequately explains the tool's scope and mentions 'bundled skeletons' to hint at return format. It covers the three operational modes comprehensively, though it could explicitly describe the return structure or read-only nature given the lack of output schema and annotations.
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?
With 100% schema description coverage, the baseline is 3. The description adds significant value by explaining how the three parameters create distinct modes of operation (listing vs. specific retrieval vs. orphan detection), and clarifies that hub_path and feature_name are alternative ways to target a specific hub.
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 defines the tool as an 'Obsidian-style feature hub navigator' and specifies it operates on '.md files containing [[path/to/file]] wikilinks.' It distinguishes from siblings like get_context_tree or semantic_navigate by emphasizing the specific 'Map of Content' pattern and graph-based navigation approach.
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 explicitly outlines three distinct usage modes: (1) no arguments to list all hubs, (2) hub_path or feature_name to show a specific hub with bundled skeletons, and (3) show_orphans to find unlinked files. While it maps parameters to behaviors clearly, it lacks explicit guidance on when to use this versus alternatives like get_context_tree or retrieve_with_traversal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_skeletonA
Get detailed function signatures, class methods, and type definitions of a specific file WITHOUT reading the full body. Shows the API surface: function names, parameters, return types, and line ranges. Perfect for understanding how to use code without loading it all.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the file to inspect (relative to project root). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Strong disclosure of scope limitations given no annotations: explicitly clarifies this extracts only API surface (signatures, line ranges) versus full content. Could mention if results are cached or any performance characteristics, but clearly defines the lightweight/skeleton nature of the return data.
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?
Three sentences with zero waste. Front-loaded with the core value proposition (signatures without body), followed by specific return contents, and closing with the use case. No repetition of tool name or tautology.
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?
Compensates well for missing output schema by enumerating specific return elements (function names, parameters, return types, line ranges). Given single-parameter simplicity and no annotations, provides sufficient context for an agent to understand the tool's contract, though response format structure (JSON vs text) isn't specified.
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 coverage is 100% with 'file_path' fully documented. The description references 'specific file' which aligns with the parameter semantics but doesn't add syntax details, format constraints, or examples beyond the schema's 'relative to project root' specification.
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?
Excellent specificity with 'Get detailed function signatures, class methods, and type definitions' defining the exact resource extracted. The 'WITHOUT reading the full body' clause effectively distinguishes this from full-content retrieval tools in the sibling set (like retrieve_with_traversal).
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?
Provides clear contextual guidance: 'Perfect for understanding how to use code without loading it all' defines the efficiency use case. The 'WITHOUT reading the full body' phrase implicitly indicates when not to use it (when you need implementation details), though it doesn't explicitly name the alternative tool for that case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_restore_pointsA
List all shadow restore points created by propose_commit. Each point captures the file state before the AI made changes. Use this to find a restore point ID for undoing a bad change.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description carries full burden. It successfully explains domain semantics ('captures file state before AI made changes', 'shadow restore points') and provenance. However, lacks operational details like retention policies, pagination behavior, or performance characteristics expected for a zero-annotation tool.
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?
Three sentences with zero waste. First states action, second explains entity semantics, third states intent/use-case. Front-loaded structure puts the operation first. Every sentence earns its place in conveying tool 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 zero-parameter list tool without output schema, description adequately covers the conceptual model (what restore points are, their origin, their purpose). Minor gap: could explicitly mention that it returns a collection of IDs/objects, though 'find a restore point ID' implies this.
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?
Zero parameters present (baseline 4 per rubric). Description compensates by explaining implicit filtering scope ('all shadow restore points created by propose_commit'), clarifying that the listing is not global but filtered to AI-generated shadow points.
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?
Description uses specific verb 'List' with clear resource 'shadow restore points'. It explicitly links to sibling tool 'propose_commit' (creator) and implies connection to 'undo_change' workflow ('undoing a bad change'), clearly distinguishing this listing capability from other traversal/search siblings.
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?
Explicitly states when to use: 'to find a restore point ID for undoing a bad change', providing clear workflow context (use after bad change, before undoing). However, lacks explicit 'when not to use' elements (e.g., if no commits exist) or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_commitA
The ONLY way to write code. Validates the code against strict rules before saving: 2-line header comments, no inline comments, max nesting depth, max file length. Creates a shadow restore point before writing. REJECTS code that violates formatting rules.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Where to save the file (relative to project root). | |
| new_content | Yes | The complete file content to save. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Excellent disclosure: lists specific validation constraints (2-line headers, no inline comments, max nesting/length), discloses automatic side effect (creates shadow restore point), and specifies failure mode (rejects violations). Rich safety and behavioral context.
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?
Four dense sentences with zero waste. Opens with strong positional claim ('The ONLY way'), efficiently lists validation constraints, discloses restore point creation, and states rejection policy. Every sentence earns its place.
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 2-parameter write tool with complex side effects (validation, restore points), description adequately covers the validation rules, backup behavior, and failure modes. No output schema exists, but the description provides sufficient behavioral coverage for agent to understand consequences of 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 has 100% description coverage, establishing baseline of 3. Description mentions validation rules that apply to new_content (no inline comments, etc.) adding some semantic context, but does not add usage syntax, format details, or specific mappings beyond what the schema already provides for file_path and new_content.
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?
Description explicitly states this is the code writing tool ('The ONLY way to write code') and distinguishes from siblings (mostly search/read tools like search_memory_graph, get_context_tree) by claiming exclusivity for write operations and mentioning validation/restore behaviors unique to this tool.
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 'ONLY way to write code' provides clear usage priority. Explicitly states rejection criteria ('REJECTS code that violates formatting rules'). Mentions restore point creation, implying relationship to undo_change sibling, though could explicitly reference that tool for reverting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prune_stale_linksA
Remove stale memory graph edges whose weight has decayed below threshold via e^(-λt) formula. Also removes orphan nodes with no edges, low access count, and >7 days since last access. Keeps the graph lean.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold | No | Minimum decayed weight to keep an edge. Default: 0.15. Lower = keep more edges. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries significant burden. It discloses the decay algorithm (e^(-λt)), side effects (orphan node removal with multi-criteria: no edges, low access count, >7 days), and destructive nature. Missing reversibility or atomicity details, but strong coverage of complex behavioral mechanics.
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?
Three dense sentences: main operation with algorithm, side-effect logic (orphan criteria), and rationale. Front-loaded with the primary action. Every clause earns its place; no repetition of structured data.
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?
Appropriate for complexity: explains multi-stage operation (edge decay pruning + orphan cleanup) without output schema. Covers the graph maintenance semantics well, though could mention return format or whether operation is logged/reversible.
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 has 100% coverage (baseline 3). Description adds value by contextualizing 'threshold' within the exponential decay formula and explaining its effect ('decayed below threshold'), helping agents understand how to tune the value (0.15 default mentioned in 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?
Clear specific verb+resource: 'Remove stale memory graph edges'. Distinguishes from siblings like 'create_relation' or 'upsert_memory_node' (creation vs cleanup), and from search/retrieval tools by specifying the decay mechanism and orphan removal behavior.
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?
Implies maintenance usage via 'stale', 'decayed', and 'Keeps the graph lean'. However, lacks explicit when-to-use guidance (e.g., 'run when memory exceeds X') or when-not-to-use warnings (e.g., 'do not use if you need to preserve weak associations').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_with_traversalA
Start from a specific memory node and traverse the graph outward. Returns the starting node plus all reachable neighbors within the depth limit, scored by edge weight decay and depth penalty. Use after search_memory_graph to explore a specific node's neighborhood.
| Name | Required | Description | Default |
|---|---|---|---|
| start_node_id | Yes | ID of the memory node to start traversal from. | |
| max_depth | No | Maximum traversal depth from start node. Default: 2. | |
| edge_filter | No | Only traverse edges of these types. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description carries full disclosure burden. It valuably explains the scoring algorithm ('edge weight decay and depth penalty') and return composition ('starting node plus all reachable neighbors'). However, it does not explicitly confirm read-only safety, state error handling for invalid node IDs, or mention performance characteristics.
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?
Three well-structured sentences with zero waste: action definition, return value explanation with behavioral detail, and usage context. Information is front-loaded with the core operation, followed by mechanics, then workflow positioning.
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 3-parameter traversal tool with no output schema, the description adequately explains the return structure conceptually (nodes with scoring) and establishes sibling relationships. Minor gap in explicit safety/assertion documentation given lack of annotations.
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 coverage is 100%, so baseline score applies. Description reinforces parameter semantics by referencing 'depth limit' (max_depth) and 'edge weight' (edge_filter context), but does not add syntax details, format examples, or constraints beyond the schema definitions.
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?
Excellent specificity with 'traverse the graph outward' and clear resource identification (memory node). Explicitly distinguishes from sibling search_memory_graph by positioning it as the follow-up step ('Use after search_memory_graph'), establishing clear workflow boundaries.
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?
Provides explicit temporal guidance ('Use after search_memory_graph') clarifying when to invoke this tool in the workflow. However, lacks explicit 'when not to use' guidance or comparison to similar traversal siblings like get_context_tree or get_blast_radius.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_static_analysisA
Run the project's native linter/compiler to find unused variables, dead code, type errors, and syntax issues. Delegates detection to deterministic tools instead of LLM guessing. Supports TypeScript, Python, Rust, Go.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | No | Specific file or folder to lint (relative to root). Omit for full project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description carries full disclosure burden. It clarifies the delegation pattern (deterministic tools vs. LLM) and identifies specific defect types detected. However, it omits critical execution details: whether the tool is read-only or potentially destructive (some linters auto-fix), output format expectations, and dependency requirements.
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?
Three tightly crafted sentences: first establishes core functionality, second differentiates approach (deterministic vs. LLM), third specifies language support. Every sentence earns its place; no redundancy or boilerplate. Front-loaded with action verb.
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?
Adequate for tool selection given the simple single-parameter schema. Covers primary use case and scope. However, for a tool executing external linters/compilers, the absence of output schema makes the lack of return value description or execution safety notes (read-only vs. mutating) a modest gap.
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 has 100% coverage with clear target_path description. The tool description adds valuable semantic context by listing supported languages, which helps constrain valid target_path values to appropriate file types. While it doesn't detail syntax further, the combination of complete schema and language context provides solid parameter guidance.
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?
Excellent specificity with 'Run the project's native linter/compiler' (verb + resource) and enumerates exact findings (unused variables, dead code, type errors, syntax issues). Clearly distinguishes from semantic search siblings by focusing on deterministic static analysis.
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?
Provides implied guidance via 'Delegates detection to deterministic tools instead of LLM guessing,' suggesting preference over heuristic analysis. Lists supported languages (TypeScript, Python, Rust, Go) indicating applicability. However, lacks explicit when-to-use vs. siblings like semantic_code_search or prerequisites (e.g., needing config files).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memory_graphA
Search the memory graph by meaning with graph traversal. First finds direct matches via embedding similarity, then traverses 1st/2nd-degree neighbors to discover linked context. Returns both direct hits and graph-connected neighbors with relevance scores.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query to search the memory graph. | |
| max_depth | No | How many hops to traverse from direct matches. Default: 1. | |
| top_k | No | Number of direct matches to return. Default: 5. | |
| edge_filter | No | Only traverse edges of these types. Omit for all types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It effectively discloses the two-phase algorithmic behavior (embedding search followed by 1st/2nd-degree traversal) and return structure (direct hits + neighbors with scores), though it omits explicit safety/side-effect declarations (implied read-only by '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?
Three sentences with zero waste: sentence 1 states purpose, sentence 2 explains mechanism, sentence 3 specifies returns. Front-loaded and appropriately sized for the complexity.
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 no output schema, the description compensates by specifying return composition ('direct hits and graph-connected neighbors with relevance scores'). With 100% schema parameter coverage and no annotations to repeat, the description provides sufficient context for tool selection.
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 coverage is 100%, establishing baseline 3. Description adds conceptual context beyond the schema: 'embedding similarity' explains the query mechanism, and '1st/2nd-degree neighbors' explains max_depth semantics, elevating it above baseline.
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?
Specific verb ('Search') with resource ('memory graph') and distinct methodology ('by meaning with graph traversal'). The two-phase mechanism description (embedding similarity + neighbor traversal) clearly distinguishes this from sibling semantic_search tools and pure traversal tools like retrieve_with_traversal.
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?
Describes the mechanism (embedding similarity then graph traversal) which implies when to use it, but lacks explicit when-to-use/when-not guidance or named alternatives among siblings like semantic_code_search or semantic_navigate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_code_searchA
Search the codebase by MEANING, not just exact variable names. Uses Ollama embeddings over file headers and symbol names. Example: searching 'user authentication' finds files about login, sessions, JWT even if those exact words aren't used, with matched definition lines.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language description of what you're looking for. Example: 'how are transactions signed' | |
| top_k | No | Number of matches to return. Default: 5. | |
| semantic_weight | No | Weight for embedding similarity in hybrid ranking. Default: 0.72. | |
| keyword_weight | No | Weight for keyword overlap in hybrid ranking. Default: 0.28. | |
| min_semantic_score | No | Minimum semantic score filter. Accepts 0-1 or 0-100. | |
| min_keyword_score | No | Minimum keyword score filter. Accepts 0-1 or 0-100. | |
| min_combined_score | No | Minimum final score filter. Accepts 0-1 or 0-100. | |
| require_keyword_match | No | When true, only return files with keyword overlap. | |
| require_semantic_match | No | When true, only return files with positive semantic similarity. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses embedding technology (Ollama), search scope (file headers and symbol names), and return format (matched definition lines). Lacks performance characteristics or failure mode disclosure.
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?
Three sentences with zero waste. Front-loaded with key differentiator ('MEANING'). Example efficiently demonstrates semantic matching capability without verbosity.
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 9-parameter search tool with no output schema, the description adequately covers the return format ('matched definition lines') and hybrid nature. Could benefit from explicit mention of result structure (e.g., snippets, scores, file paths) given missing output schema.
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 has 100% coverage (baseline 3). Description adds value by establishing the semantic-vs-keyword conceptual framework, which helps contextualize the weight and requirement parameters (semantic_weight, require_keyword_match, etc.) beyond their schema definitions.
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?
Specific verb-resource pair ('Search the codebase') with clear scope ('by MEANING, not just exact variable names'). Explicitly contrasts with keyword/identifier search, distinguishing from siblings like semantic_identifier_search. Includes concrete example ('user authentication' finding JWT/login) illustrating semantic capability.
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?
Clear implicit guidance via 'by MEANING, not just exact variable names' indicating when to prefer this over exact-match tools. However, lacks explicit 'when not to use' or named sibling alternatives (e.g., versus semantic_identifier_search or search_memory_graph).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_identifier_searchA
Search semantic intent at identifier level (functions, methods, classes, variables) with definition lines and ranked call sites. Uses embeddings over symbol signatures and source context, then returns line-numbered definition/call chains.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language intent to match identifiers and usages. | |
| top_k | No | How many identifiers to return. Default: 5. | |
| top_calls_per_identifier | No | How many ranked call sites per identifier. Default: 10. | |
| include_kinds | No | Optional kinds filter, e.g. ["function", "method", "variable"]. | |
| semantic_weight | No | Weight for semantic similarity score. Default: 0.78. | |
| keyword_weight | No | Weight for keyword overlap score. Default: 0.22. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It effectively explains the internal mechanism ('embeddings over symbol signatures'), the ranking methodology, and the return structure ('line-numbered definition/call chains', 'ranked call sites'), though it omits side effects, rate limits, or caching behavior.
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?
Two information-dense sentences with zero fluff. The first establishes scope and return value; the second explains the ranking methodology. Technical terms are precisely chosen ('embeddings', 'symbol signatures', 'call chains').
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?
Despite lacking an output schema and annotations, the description adequately explains the return value structure (definition lines, ranked call sites, line-numbered chains) and search methodology. For a 6-parameter search tool, this covers the essential behavioral contract, though error handling or pagination details could strengthen it.
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 100%, establishing a baseline of 3. The description conceptually maps to parameters (e.g., 'semantic'/'keyword' to the weight parameters, identifier types to 'include_kinds') but does not add syntax details, constraints, or usage guidance beyond the schema definitions.
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 defines the operation ('Search semantic intent'), the specific resource ('identifier level'), and the exact entity types covered ('functions, methods, classes, variables'). It distinguishes itself from sibling 'semantic_code_search' by emphasizing identifier-level granularity versus broader code blocks.
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?
While the scope ('identifier level') implicitly suggests use cases, there is no explicit guidance on when to choose this over 'semantic_code_search' or other siblings, nor exclusions or prerequisites mentioned. The agent must infer appropriateness from the resource description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_changeA
Restore files to their state before a specific AI change. Uses the shadow restore point system. Does NOT affect git history. Call list_restore_points first to find the point ID.
| Name | Required | Description | Default |
|---|---|---|---|
| point_id | Yes | The restore point ID (format: rp-timestamp-hash). Get from list_restore_points. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses implementation ('shadow restore point system') and critical safety boundary ('Does NOT affect git history'). Could strengthen by clarifying if current uncommitted changes are preserved or overwritten, but mechanism disclosure is solid.
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?
Four sentences with zero waste: purpose, mechanism, safety constraint, prerequisite. Front-loaded with core action, structured logically. Every sentence earns its place.
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?
Comprehensive for a single-parameter tool. Covers purpose, mechanism, safety guardrails, and prerequisites. No output schema exists; description appropriately doesn't speculate on return values.
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 coverage is 100%, establishing baseline 3. Description adds crucial workflow context for point_id ('Get from list_restore_points') that explains the parameter's semantic relationship to sibling tools and data flow.
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?
Exceptionally clear: 'Restore files to their state before a specific AI change' provides specific verb (restore), resource (files), and scope constraint (AI change, not manual changes). Distinguishes mechanism via 'shadow restore point system' and explicitly contrasts with git-based recovery.
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?
Explicit workflow guidance: 'Call list_restore_points first to find the point ID' provides clear prerequisite. 'Does NOT affect git history' establishes sibling differentiation from version control tools like propose_commit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_memory_nodeA
Create or update a memory node in the linking graph. Nodes represent concepts, files, symbols, or notes with auto-generated embeddings. If a node with the same label and type exists, it updates content and increments access count. Returns the node ID for use in create_relation.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Node type: concept (abstract ideas), file (source files), symbol (functions/classes), note (free-form). | |
| label | Yes | Short identifier for the node. Used for deduplication with type. | |
| content | Yes | Detailed content for the node. Used for embedding generation. | |
| metadata | No | Optional key-value metadata pairs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure burden. It effectively explains the upsert logic (create vs update), deduplication key (label+type), auto-generated embeddings, and access count incrementing. Minor gap: lacks explicit mention of whether updates are destructive or if old versions persist.
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?
Four tightly constructed sentences: (1) operation+resource, (2) node semantics+embeddings, (3) deduplication/update logic, (4) return value+workflow. Every sentence adds distinct value (purpose, behavior, mechanics, integration). No redundancy with schema definitions.
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 upsert complexity and lack of output schema, the description comprehensively covers the operational contract: input requirements, uniqueness semantics, mutation behavior, and output intent. Only minor gaps remain around error conditions and content size constraints.
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?
With 100% schema coverage (baseline 3), the description adds critical semantic context: it explains that label+type combination drives deduplication, content drives embeddings, and elaborates on the state change behavior (incrementing access count) that the schema doesn't convey.
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 uses specific verbs 'Create or update' with clear resource 'memory node in the linking graph'. It distinguishes from siblings by defining nodes as representing specific concepts (files, symbols, notes) and explicitly mentioning the return value is 'for use in create_relation', delineating it from retrieval tools like search_memory_graph.
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?
It provides clear workflow guidance by stating the return value (node ID) is intended 'for use in create_relation', establishing prerequisite relationships. However, it lacks explicit 'when not to use' guidance contrasting with retrieval siblings like retrieve_with_traversal or search_memory_graph.
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.
17 tool updates
v1.0.8- First observed
add_interlinked_context - First observed
create_relation - First observed
get_blast_radius - First observed
get_context_tree - First observed
get_feature_hub - First observed
get_file_skeleton - First observed
list_restore_points - First observed
propose_commit - First observed
prune_stale_links - First observed
retrieve_with_traversal - First observed
run_static_analysis - First observed
search_memory_graph - First observed
semantic_code_search - First observed
semantic_identifier_search - First observed
semantic_navigate - First observed
undo_change - First observed
upsert_memory_node
TDQS
Most tools have distinct purposes, but there is some overlap that could cause confusion. For example, search_memory_graph, semantic_code_search, and semantic_identifier_search all involve semantic search with embeddings, differing mainly in scope (graph vs. codebase vs. identifiers), which might lead to misselection. Similarly, get_context_tree and get_file_skeleton both provide structural insights into code, with one focusing on project-wide hierarchy and the other on file-level details, potentially blurring boundaries.
Tool names follow a consistent verb_noun pattern throughout, such as add_interlinked_context, create_relation, and get_blast_radius, which aids predictability. However, there are minor deviations like semantic_navigate (adjective_verb) and upsert_memory_node (verb_noun_noun), slightly breaking the pattern but remaining readable and understandable.
With 17 tools, the count is slightly high but reasonable for the server's purpose of context management and code analysis, as it covers diverse areas like memory graphs, code search, and project navigation. It might feel heavy, but each tool appears to serve a specific function, avoiding redundancy, though some trimming could improve focus.
The tool set offers comprehensive coverage for context management and codebase interaction, including CRUD-like operations for memory nodes (e.g., upsert_memory_node, create_relation, prune_stale_links), search capabilities, and project analysis tools. Minor gaps exist, such as no direct tool for deleting memory nodes or managing graph nodes beyond pruning, but agents can likely work around these with existing tools.
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
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Intelligent context infrastructure for AI teams: knowledge graph, sessions, tasks, documents.
Enterprise code intelligence for M&A, security audits, and tech debt. Hosted server with 200k free.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA graph-powered code intelligence engine that indexes codebases into a structural knowledge graph to provide AI agents with deep context on function calls, types, and execution flows. It offers local, zero-dependency tools for hybrid search, impact analysis, and dead code detection across Python, JavaScript, and TypeScript projects.808MIT
- AlicenseAqualityCmaintenanceAn MCP server and CLI tool that transforms codebases into AI-ready context through semantic search, call graph analysis, and incremental indexing. It enables AI assistants to perform hybrid vector and keyword searches to understand complex repository structures and cross-file relationships.5281MIT
- AlicenseAqualityCmaintenanceCode graph context engine that parses codebases with tree-sitter (170+ languages), builds structural dependency graphs, and provides 24 MCP tools for code intelligence. One prepare_context call gives your AI agent the right files for any task. Includes focus, blast radius, hotspots, dead code detection, and hybrid search.241AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceContext Bridge is a lightweight MCP server that builds a persistent semantic knowledge graph of your codebase, enabling AI assistants to query complex codebases with sub-millisecond latency without re-reading files every session.6MIT
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/forloopcodes/contextplus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server