infimium
OfficialInfimium is a local-first AI context layer for codebases. It gives AI agents token-efficient access to code, memory, and web tools.
Health:
hello_infimiumchecks server status.Semantic code search:
semantic_code_searchfinds code by meaning and returns compact signatures (~99.5% token reduction).Symbol expansion:
expand_symbolloads full symbol implementation on demand.Dependency graph:
dep_graphinspects imports, callers, callees, and HTTP routes.Project context:
get_contextprovides a tri-zonal YAML/JSON context layer (repo overview, Git state, active task) without network or LLM calls.Project memory:
project_memorymanages persistent memory across sessions—remember progress, resume tasks, complete items, and search history.Local docs search:
query_local_docssemantically searches indexed Markdown, text, HTML, and PDF files.Implementation planning:
plangenerates code-aware plans with an optional dry-run to preview retrieved context.Web search:
web_searchsearches the web (requires optional Tinyfish config).URL fetch:
fetch_urlextracts readable text/markdown from any URL.Shell:
shellruns allowlisted commands with configurable timeouts and output limits.
Key highlights: 100% local, embedded SQLite storage, supports JavaScript, TypeScript, Python, Dart, Go, Rust, Java, and works with any MCP client.
Click on "Deploy 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., "@infimiumsemantic code search for pricing logic"
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.
Infimium
The Private Context Layer & Super Brain for Your Codebase. Give AI agents persistent memory, deep dependency graphs, and instant code context -- 100% local, zero token bloat.
Demo

Related MCP server: LocalNest MCP
Why
Large repositories make agents read too much code or miss the right symbol. Infimium retrieves compact, relevant context before the agent starts editing.
200,000 lines of code
Agent reads everything -> context blown + expensive
grep "price calculation" -> misses calcPropertyValue()tool: semantic_code_search
query: "price calculation logic"
-> services/property/calc.ts:142 · calcPropertyValue()
-> callers: getListingPrice(), estimatePropertyTax()Quick Start
Requires Node.js 22.5+. From your project folder:
cd /path/to/your/project
npx infimium@latest setupRun setup from the repository you want to index, not from your home directory (~).
Infimium stops broad roots automatically so it cannot scan unrelated files.
That creates global config, starts Ollama if it is installed, pulls nomic-embed-text, indexes the current project or workspace, runs doctor, and opens Playground.
The published CLI keeps its executable entrypoint, so MCP clients can launch it directly through the configuration below.
If Ollama is not installed yet:
npx infimium@latest setup --install-depsinfimium setup creates one global config at ~/.infimium/.env. You do not need a .env in every project. Code, docs, memory, graphs, and vectors are stored locally under ~/.infimium/.
Web search is optional. Add a Tinyfish key only when you need it:
SEARCH_PROVIDER=tinyfish
SEARCH_API_KEY=your_keyFull infimium plan generation also needs a local text model:
ollama pull llama3.1infimium plan --dry-run "your task" works without this model and shows the retrieved code context first.
Connect Your Agent
Cursor, Windsurf, Claude Desktop, and other MCP clients:
{
"mcpServers": {
"infimium": {
"command": "npx",
"args": ["-y", "infimium", "serve"]
}
}
}Restart the client, then use:
Use Infimium hello_infimium.
Use Infimium get_context before starting.
Use Infimium semantic_code_search to explain this repository.Infimium normally uses the MCP process working directory. If your client starts it elsewhere, pass project_path once; Infimium remembers the active project and auto-indexes it.
Tools
Tool | What it does |
| Confirms the MCP server is healthy. |
| Reads saved YAML repo context, current memory and handoff; explicit refresh updates Git/index state. |
| Refreshes episodic memory and handoff graphs; controls automatic memory checkpoints. |
| Finds code by meaning and returns symbol signatures first. |
| Loads one full implementation only when needed. |
| Searches local Markdown, text, HTML, and PDF files. |
| Shows imports, callers, callees, and HTTP routes for a symbol. |
| Keeps active scratchpad events, compact milestones, and durable project rules across agents. |
| Builds a grounded implementation plan from code and graph context. |
| Searches the web through optional Tinyfish configuration. |
| Extracts readable Markdown or text from a URL. |
| Runs allowlisted commands with timeouts and output limits. |
CLI
Command | Description |
| Run health checks on your dependencies and setup. |
| Show the current status of the index and memory. |
| Shows all relevant cli commands. |
| Launch the local web UI to explore index, graph, and memory. |
| Scan and index the current project directory (code, docs, dependencies). |
| Run the indexer in watch mode to continuously index changes. |
| Output the full flattened context as YAML ( |
| Semantically search code and return symbol signatures. |
| Fetch the full implementation code for a specific symbol. |
| Semantically search local markdown/text documentation. |
| Show dependencies, callers, callees, and route graph. |
| Draft an implementation plan based on a given prompt. |
| Add a milestone, progress, or decision to project memory. |
| Show the active task and recent scratchpad memory events. |
| Compact the active scratchpad into an archived milestone. |
| Semantically search past project rules and memory ledger. |
Use npx infimium ... if you did not install the package globally.
Project Memory
Refresh memory yourself, or enable periodic checkpoints for the current project:
infimium update --note "Implemented login validation" --task "Finish login" --handoff "Run the auth tests next"
infimium update start --interval 300
infimium update status
infimium update stopReplace the example notes with your own. Add --project /path/to/repo to select a project and --file src/auth.ts to attach a relevant file. infimium_update and infimium-update are CLI aliases. MCP agents use the infimium_update tool with action: refresh|start|stop|status, project_path, and optional note, task, handoff, files, or interval_seconds.
Auto-update is opt-in and runs while the foreground CLI watcher or an MCP server is open. Its per-project setting survives restarts; stop disables future checkpoints (an in-flight refresh may finish). Checkpoints link episodes, tasks, file references, and handoff notes in local SQLite. Unchanged observations are deduplicated. Automatic checkpoints record observable state, not guessed intent, and never mark a task complete.
get-context / get_context now reads saved context and current memory without rescanning the repo. It includes a bounded memory graph and guidance to answer repo-overview questions only when asked, using Infimium memory first. Missing context is reported explicitly. Run infimium update or get-context --refresh to refresh filesystem context. These are agent guidelines, not an enforcement mechanism for other clients.
Infimium keeps memory bounded across long sessions:
Scratchpad: recent events for the active task.
Archive: compact summaries of completed tasks.
Ledger: durable decisions, rules, quirks, and unresolved blockers.
Record meaningful progress while working:
infimium remember "Added rate-limit middleware" --type progress --task "Rate limiting"
infimium remember "Use Redis-backed counters in production" --type decisionWhen the task is complete:
infimium memory completeInfimium uses the local llama3.1 model when available and falls back to deterministic compaction when it is not. Raw compacted events remain stored locally for seven days before pruning. get_context never calls an LLM or network service.
From a source checkout, build once and run the local playground with:
npm run build
npm run playgroundLocal Architecture
Ollama creates embeddings on your machine.
Embedded SQLite stores vectors, index metadata, project memory, and graph edges. No ChromaDB or Docker service is required.
Documents use recursive boundary-aware chunks instead of blind fixed slices.
JavaScript, TypeScript, Python, and Dart parsers are bundled.
Go, Rust, and Java Tree-sitter WASM grammars download on first use and cache in
~/.infimium/grammars/..gitignore,.infimiumignore, and framework defaults exclude dependencies, build output, Flutter artifacts, caches, and binaries before indexing.semantic_code_searchreturns signatures;expand_symbolprovides full code on demand.Project memory uses session-scoped scratchpads, compact milestone archives, and a versioned semantic ledger.
get_contextemits static anchors, dynamic repository state, and active execution as separate YAML zones.
Multiple Projects
Run the normal index command from a folder containing related projects:
infimium indexInfimium detects immediate project roots from files such as pubspec.yaml, package.json, Cargo.toml, and go.mod. It shows the detected roles and dependencies, asks once, then creates infimium.workspace.json, indexes every project, and opens Playground.
For unattended setup:
infimium index --yes --no-playgroundUse --no-workspace to index only the current project. Workspace projects keep separate memory and Git state while get_context includes balanced summaries and graph relationships from related projects.
Infimium - Playground
Infimium drops the initial payload cost from approximately 1,460 tokens to 8 tokens per symbol. Semantic search returns the AST signature first; the agent requests the full implementation only when it needs it with expand_symbol.
Full implementation ~1,460 tokens
AST skeleton ~8 tokens
Initial payload reduction ~99.5%These are Playground reference values, not a claim that every function has the same size. Inspect your own indexed repository and compare AST-first retrieval with full-text retrieval locally:
infimium playgroundOpen Token Economics to see the estimated token difference across your actual indexed symbols.
Privacy
Code, docs, embeddings, memory, graph data, prompts, queries, file paths, and repo names remain local.
Infimium sends privacy-safe anonymous lifecycle telemetry so we can understand setup success:
init_started,init_completeddoctor_run,doctor_passedindex_started,index_completed,setup_completedserve_started,first_tool_call,playground_opened
Telemetry includes an anonymous install ID, Infimium version, OS, Node major version, timestamp, and event name. It never includes code, file paths, repo names, prompts, search queries, memory notes, API keys, or user identity.
Disable it anytime:
infimium telemetry offor set:
INFIMIUM_TELEMETRY=falseTroubleshooting
FAQ & Common Confusions
Where is layer.md?
When you run infimium get-context, it prints saved context directly to your terminal (stdout). Refreshes store project-scoped YAML under Infimium's local data directory. To export the saved context to a file, use terminal redirection:
infimium get-context > layer.mdWhy does the Playground UI say "Awaiting first agent interaction..."?
The CURRENT TASK tracker reflects stored project context. Run infimium update --task "Your task" to refresh it; get-context reads the saved snapshot.
How do I format infimium remember?
The infimium remember command requires a message and a --type flag (valid types: note, progress, decision, blocker, index, plan). If you also want it to update the active task in the Playground, include the --task flag:
infimium remember "Added rate limiting" --type progress --task "Security Features"Database is locked
If you see Failed to start Infimium: Database is locked, it means another instance of Infimium is actively holding a lock on the SQLite memory database. This usually happens if you try to run infimium index manually in one terminal while infimium playground or infimium watch is still running in another. Simply stop the running process (Ctrl+C) before running manual commands.
General Setup Issues
Run:
infimium doctorEvery failed check prints one copy-paste fix. If setup still fails, give this prompt to your coding agent:
Set up Infimium in this repository. Install/start Ollama, pull nomic-embed-text,
run npx infimium init, run npx infimium index, and make all six
npx infimium doctor checks pass. Do not commit secrets.Contributing
See CONTRIBUTING.md. Adding a language starts with a parser fixture and extraction test.
Self-hosting is free forever under the MIT license.
Available Tools
11 toolsdep_graphC
Inspect dependency relationships for a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_name | Yes | ||
| project_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It implies a read-only inspection but does not disclose return format, whether traversal is transitive, required permissions, or failure modes. The word 'inspect' hints at non-mutating behavior, but no explicit guarantees are given.
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 a single front-loaded sentence, which is efficient, but it omits essential information. True conciseness balances brevity with necessary detail; this veers into under-specification.
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 that there is no output schema, no annotations, and only vague parameter descriptions, the tool description is insufficient for an agent to use it effectively. It lacks details about return values, edge cases, or relation to sibling tools.
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%, and the description adds nothing about the parameters. An agent cannot determine what 'symbol_name' should look like (e.g., fully qualified name or plain string) or what 'project_path' means or its default behavior when omitted.
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 'Inspect dependency relationships for a symbol' uses a clear verb ('inspect') and identifies a specific resource ('dependency relationships for a symbol'). It distinguishes this tool from siblings like semantic_code_search or expand_symbol, though it does not specify whether it shows incoming or outgoing dependencies.
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?
No guidance is provided on when to use this tool versus its siblings. There is no mention of alternatives, exclusions, or typical use cases, leaving the agent to guess based on the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expand_symbolB
Load the full implementation of one symbol returned by semantic_code_search.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | ||
| symbol_name | Yes | ||
| project_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of transparency. It only states the action 'load the full implementation' but doesn't disclose what exactly is returned (e.g., source code, metadata), whether it requires a project path or file path for disambiguation, or any error behavior. The one-line description lacks essential 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?
The description is a single sentence with no filler words. It clearly states the purpose and the workflow context, making it highly efficient.
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 no output schema and no annotations, so the description must cover both input parameters and return behavior. It fails to explain the role of optional parameters, what 'full implementation' includes, or how the returned data is structured. While simple, the lack of context around optional file_path and project_path leaves the agent guessing.
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 for the three parameters. It doesn't explain what file_path and project_path mean or how they relate to symbol_name. The description only mentions 'one symbol', leaving the optional parameters completely undocumented, which is insufficient for an agent to correctly populate them.
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 the specific verb 'Load' with a clear resource 'full implementation of one symbol', and explicitly ties it to symbols returned by semantic_code_search. This distinguishes it from sibling tools like semantic_code_search (search) and dep_graph (dependencies).
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 phrase 'returned by semantic_code_search' provides a clear workflow context: this tool should be used after obtaining a symbol from semantic_code_search. However, it doesn't explicitly state when not to use it or mention alternative tools, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_urlC
Fetch a URL and extract readable content.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| extract | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It does not mention possible failures (e.g., invalid URLs, network errors, redirects), rate limits, authentication requirements, or the structure/format of the returned content. This is a significant gap for a network-fetching 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?
The description is a single concise sentence, front-loaded with the core action. It is easy to scan and understand the primary purpose. However, the brevity sacrifices important behavioral and usage details, so it is not perfectly complete for the tool's 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 that there is no output schema and no annotations, the description needs to provide more context about what the agent should expect. It does not describe the return structure, error handling, or what formats 'extractable content' may take. For a simple tool with only two parameters, the description is under-specified and leaves too much to inference.
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%, and the description only indirectly references the 'url' parameter ('Fetch a URL') and the 'extract' action ('extract readable content'). It does not explain the two parameter names, the enum choices for 'extract', or the default behavior. The schema provides the default and enum, but the description adds little semantic value beyond what the parameter names imply.
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 a specific verb 'Fetch' and clearly identifies the resource ('a URL'), with the added action of extracting readable content. It is distinguishable from sibling tools like 'web_search', which implies a search-based retrieval rather than direct fetch of a specified URL. However, it does not explicitly state what 'readable content' includes, leaving some ambiguity.
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?
No guidance is provided on when to use this tool versus alternatives like web_search or get_context. There are no exclusions, prerequisites, or preferred scenarios. The description simply states the action, leaving the agent to infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contextA
Read the balanced YAML context layer with repo overview, Git state, task, memory, and AST-first handoff guidance. Pass project_path once to activate the current IDE workspace as the default.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| format | No | yaml | |
| refresh | No | ||
| project_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It does disclose that passing project_path activates the IDE workspace as default, a side-effectful behavior, and uses 'Read' to signal a non-mutating operation. It does not explain refresh/format defaults or whether any re-indexing occurs, but it avoids contradiction.
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 sentences: the first states purpose with specific content, the second gives a concise setup instruction. No redundant filler.
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 description gives a solid purpose and one parameter's behavior, but without annotations or output schema it leaves gaps: it does not describe the output format/length or how refresh/limit alter results, and it lacks guidance relative to sibling tools. It is adequate but not comprehensive.
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%, and the description only adds semantics for project_path ('activate the current IDE workspace as the default'). It does not explain the meaning or effect of limit, format, or refresh, leaving the agent to infer from the schema alone.
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 specifies a clear action ('Read') and a concrete resource ('balanced YAML context layer') with listed contents (repo overview, Git state, task, memory, AST-first handoff guidance). It is not a tautology and conveys a distinct purpose, though it does not explicitly contrast with sibling tools like project_memory.
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 clearly implies when to use it — when you need repo overview, Git state, task, memory, or handoff guidance — and includes a practical activation instruction ('Pass project_path once...'). However, it does not provide explicit exclusions or alternative tool recommendations, so it stops short of the strongest guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hello_infimiumB
Health probe for the Infimium MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose whether the tool is read-only, what it returns, or if it has side effects. 'Health probe' implies safety but does not explicitly confirm behavior, response format, or error conditions. This is a significant gap for a tool with no structured annotations.
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 a single short sentence that conveys the essential purpose without wasted words. For a zero-parameter health probe, this level of conciseness is appropriate.
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 is simple (no params, no output schema, no annotations), but the description still omits key context such as the return value (e.g., OK/status), potential errors, and whether any setup is required. It feels incomplete for an agent deciding whether to invoke 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?
The input schema has zero parameters, so the baseline is 4. There is nothing for the description to explain regarding parameters, and no schema-description coverage issues exist.
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 identifies the tool as a 'health probe' for the Infimium MCP server, which clearly indicates its purpose. It is distinct from sibling tools like web_search or shell, though it lacks an explicit verb like 'checks' or 'returns'.
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?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of typical scenarios. The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
planC
Generate a grounded implementation plan for the current repository.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| top_k | No | ||
| dry_run | No | ||
| language | No | ||
| write_plan | No | ||
| output_path | No | plan.md | |
| project_path | No |
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 disclosing behavioral traits. It does not mention potential side effects such as writing files (write_plan, output_path) or the ability to run in dry-run mode (dry_run). The tool also supports custom languages and project paths, none of which are disclosed, leaving significant behavioral ambiguity.
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 a single concise sentence, which is structurally efficient and front-loaded. However, for a tool with 7 parameters and multiple behavioral options, this is under-specified—a complete description would need more detail to be appropriately sized. It is not excessively verbose, but the lack of substance makes it minimally adequate.
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 tool's complexity (7 parameters, no annotations, no output schema), the description is drastically incomplete. It does not explain what a 'grounded implementation plan' entails, how the plan is generated, whether the tool returns a string or writes a file, or how parameters like dry_run and write_plan alter behavior. An agent would have insufficient context to invoke this tool reliably.
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 7 parameters with 0% description coverage, and the tool description does not mention any of them. It fails to explain what 'task' means, what 'top_k' controls, or that 'language' and 'project_path' affect scope. The description provides no semantic value beyond the schema's raw field names, making parameter understanding entirely dependent on the agent's prior knowledge.
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 purpose with a specific verb ('Generate') and object ('grounded implementation plan') scoped to 'the current repository.' It distinguishes itself from sibling tools like semantic_code_search or dep_graph, which serve different functions.
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 phrase 'grounded implementation plan' implies it should be used when planning based on repository context, but it does not explicitly state when to use this tool over alternatives like get_context or shell. No exclusions or alternative recommendations are provided, so guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_memoryB
Manage compact project memory across chats, agents, and IDEs: remember active work, complete and archive sessions, search history, or update durable rules.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| note | No | ||
| task | No | ||
| limit | No | ||
| query | No | ||
| value | No | ||
| action | No | resume | |
| category | No | ||
| use_model | No | ||
| event_type | No | note | |
| project_path | No |
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 names operations like remember, complete/archive, and search, but does not explain side effects, persistence semantics, return values, or any prerequisites. This is insufficient for a tool with multiple mutating actions.
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 a single, well-structured sentence that front-loads the primary purpose and lists key actions without fluff. It is efficient and appropriate in size for a high-level overview.
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 tool's complexity (11 parameters, multiple action modes, no output schema, no annotations), the description is far too incomplete. It provides only a high-level summary and omits critical usage details, action-specific semantics, and expected responses.
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% and the description provides no parameter-level information. The tool has 11 parameters, including enums and defaults, but none are explained, leaving agents unable to construct valid calls.
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 manages compact project memory across chats, agents, and IDEs, and enumerates specific operations (remember, complete/archive, search, update rules). It distinguishes from sibling tools by focusing on memory management, though 'manage' is a generic verb and the exact resource is broad.
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 needing to maintain project memory across chats, agents, and IDEs, providing clear context for when to use it. It does not explicitly mention alternatives or exclusions, but the context is specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_local_docsC
Query indexed local documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| project_path | No |
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 only states 'Query indexed local documentation' without indicating whether the operation is read-only, what setup is required, or what the response contains. This is a significant gap for a query 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?
The description is a single short sentence, which is concise, but it is under-specification rather than effective conciseness. It fails to include necessary usage and parameter details, so the brevity is not a benefit.
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?
This tool has three parameters, no annotations, and no output schema. The description is far from complete: it does not clarify what 'indexed' means, how project_path scopes the query, or what top_k controls. The tool cannot be used reliably based on this description alone.
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% and the description provides no parameter explanations. The agent must infer meanings for query, top_k, and project_path from names alone, which is insufficient for correct invocation.
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 function with a specific verb ('Query') and resource ('indexed local documentation'), distinguishing it implicitly from siblings like web_search and semantic_code_search. However, it does not explicitly contrast with alternatives, so it stops short of a perfect score.
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 offers no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or a preferred context, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_code_searchC
Search code semantically and return compact symbol signatures.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| top_k | No | ||
| language | No | ||
| project_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose that the output is 'compact symbol signatures', which is a meaningful behavioral trait. However, it does not state whether the operation is read-only (though it is implied), nor does it mention any limitations, performance characteristics, or underlying mechanisms (e.g., embeddings). This is minimal but not completely absent.
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 a single, front-loaded sentence with no filler words. It directly states the action and the result. Every word earns its place, and it is appropriately brief for a tool whose core purpose is clear from its name.
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 4 parameters, no annotation, and no output schema. The description is too sparse to provide complete guidance for an agent. It does not explain the parameters, return format details, or when to use the tool. For a search tool with multiple optional filters and a specific output type, this level of completeness is clearly insufficient.
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% and the description contains no parameter information. The description does not explain what 'query' means beyond the tool's general purpose, nor does it define 'top_k', 'language', or 'project_path'. Since the schema provides no property descriptions either, the agent must infer all parameter semantics from the tool name alone, which is insufficient.
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 function: semantically searching code and returning compact symbol signatures. It specifies a verb ('search'), a resource ('code'), and a mode ('semantically'), which distinguishes it from keyword search. While it does not explicitly name sibling tools, the tool's focus on semantic code search sets it apart from web_search, query_local_docs, and expand_symbol.
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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., indexing), exclusions, or any context for choosing semantic_code_search over other search or code-related tools. The usage context is only implied by the tool's name and generic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shellC
Run an allowlisted shell command.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| command | Yes | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits, but it only says 'Run an allowlisted shell command.' It fails to mention potential side effects, output format, error handling, security implications, or the fact that this could modify the system. 'Allowlisted' hints at some restriction but lacks detail, leaving significant ambiguity for a powerful 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?
The description is concise—a single sentence with no fluff—which is positive. However, it is under-specified to the point of being almost unhelpful. Concision is valued, but here it sacrifices necessary detail, making it only minimally acceptable.
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 that this tool executes arbitrary system commands, the description is critically incomplete. It lacks information about the execution environment, command output, exit codes, security restrictions, timeout behavior, and interaction with 'cwd'. With no annotations or output schema, the description fails to provide a complete picture, making safe and effective use nearly impossible.
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%, and the description does not compensate. Parameters like 'cwd', 'timeout', and even 'command' are not elaborated in any way. The description doesn't clarify that 'command' is the executable string, 'cwd' sets the working directory, or 'timeout' limits execution time. This leaves users without meaningful guidance on how to structure invocations.
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 primary function: to run a shell command. The verb 'Run' is action-specific and 'shell command' identifies the resource. While it doesn't elaborate on what 'allowlisted' entails, it distinguishes itself from siblings like web_search or fetch_url, which perform other actions.
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 provides no guidance on when to use this tool versus alternatives. It doesn't mention scenarios like executing system-level commands or interacting with the local environment, nor does it specify any prerequisites or exclusions. Users are left to infer its context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchC
Search the web for current information.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
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 only says 'current information' but does not describe result formats, pagination, rate limits, or what kind of web sources are searched. The description is too vague to be informative.
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 a single, concise sentence that is front-loaded and easy to parse. It does not waste words, but the brevity comes at the cost of missing useful behavior and parameter details.
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 there is no output schema and no annotations, the description should explain return values and common use cases. It does neither, and also lacks usage context compared to its sibling tools. The description is too minimal for an agent to confidently invoke the tool in varied scenarios.
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 schema has 0% description coverage for parameters, and the description does not mention 'query' or 'max_results' at all. Since the parameter names are somewhat self-explanatory but not guaranteed, the lack of any explanation leaves the agent to guess their exact semantics and 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 'Search the web for current information' clearly states the action (search) and resource (the web), making it easy to understand what the tool does. However, it does not explicitly differentiate itself from sibling tools like fetch_url or query_local_docs, 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 provides no guidance on when to use this tool versus alternatives. It does not mention scenarios like needing fresh information, distinguishing from local document search, or say when not to use it. This is a clear gap.
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.
11 tool updates
v0.5.8- First observed
dep_graph - First observed
expand_symbol - First observed
fetch_url - First observed
get_context - First observed
hello_infimium - First observed
plan - First observed
project_memory - First observed
query_local_docs - First observed
semantic_code_search - First observed
shell - First observed
web_search
TDQS
Scored across 11 tools
Each tool targets a clearly distinct function: context reading, health probe, web search, URL fetching, local docs, semantic code search, symbol expansion, dependency graph, shell execution, planning, and project memory. There is no overlap or ambiguity between them.
Naming is inconsistent: some tools use verb_noun (web_search, fetch_url, expand_symbol), while others are bare nouns (shell, plan), abbreviations (dep_graph), or greetings (hello_infimium). This mixed style makes the set harder to predict and navigate.
With 11 tools, the server is well-scoped—each tool earns its place and the count is within the ideal 3-15 range. It feels comprehensive without being bloated.
The tool surface covers a broad workflow: context, code exploration, web/docs lookup, shell access, planning, and memory. Slight gaps like a direct file editor exist, but shell can fill in, so the coverage is nearly complete.
Maintenance
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Persistent memory and knowledge graphs for AI agents. Hybrid search, context checkpoints, and more.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server for semantic code search & navigation that helps AI agents work efficiently without burning through costly tokens. Instead of reading entire files, agents can search conceptually and jump directly to the specific functions, classes, and code chunks they need.120MIT
- AlicenseBqualityCmaintenanceA local-first MCP server that provides AI agents with safe codebase access through file discovery, hybrid lexical-semantic search, and project introspection. It features durable local memory and semantic indexing while keeping all data and processing entirely on your local machine.74146MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents structured code understanding and precise code intelligence via local indexing of AST, call graphs, and semantic search.814Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides structure-aware code analysis (symbol trees, dependencies, docs) to reduce AI agent token consumption by up to 99%, along with Git commit intelligence.MIT