code-index-pg
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., "@code-index-pgfind all callers of the function validate_token and show their files"
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.
code-index-pg
Unified code index for Hermes: exact + semantic + call graph search over the TGT One monorepo, persisted in postgres. Replaces the code-index fork, cocoindex and CodeGraphContext with one lightweight MCP server.
Stack
postgres-local (port 5432, DB
codeindex) + pgvector 0.8.3Ollama
bge-m3(1024 dims) for embeddings — no torch in this venvtree-sitter-language-pack (21 languages) for symbol extraction
fastmcp — single MCP process, no extra daemons
Related MCP server: Tree-Sitter MCP
Install
git clone https://github.com/tgt-technology/code-index-pg.git
cd code-index-pg
uv sync
uv tool install --editable .DB: la infraestructura (postgres + pgvector, ollama + bge-m3, base codeindex) se
levanta con deploy/ — ver Deploy. El esquema de tablas lo
aplica el server al arrancar.
Deploy (entorno desde cero)
El índice vive en postgres, no en archivos: reproducir el entorno es levantar la infra, no
copiar datos. Todo está en deploy/.
Windows (Docker Desktop + uv):
powershell -NoProfile -File deploy\setup.ps1 # -Gpu si hay GPU NVIDIALinux / WSL:
deploy/setup.sh # --gpu si hay GPU NVIDIAEl script levanta postgres (pgvector) + ollama, crea la base codeindex con la extensión
vector, descarga bge-m3, instala el server como uv tool y verifica cada punto al final
(falla con mensaje claro si algo quedó a medias).
Después, una sola vez, el índice inicial (~30 min para ~7K archivos):
uv run python -c "from code_index_pg.indexer_pipeline import index_project; print(index_project('/ruta/a/tu/codigo'))"Registro en Hermes — el wrapper espera a que postgres acepte conexiones antes de lanzar el server (sin eso, el server muere si la BD no está lista):
# Linux / WSL
hermes mcp add codeindex --command /ruta/al/repo/deploy/mcp-wrapper.sh
# Windows
hermes mcp add codeindex --command powershell --args -NoProfile -File C:\ruta\al\repo\deploy\mcp-wrapper.ps1Solo los servicios van en Docker: el server MCP es stdio y corre en el host, usando los
defaults del código (127.0.0.1:5432/codeindex, http://localhost:11434).
Run
# MCP server (stdio — used by the proxy wrapper)
code-index-pg --project-path ~/develop
# Full index (one-time, ~10 min for ~7K files)
python -m code_index_pg.indexer_pipeline # via test harness, or:
uv run python -c "from code_index_pg.indexer_pipeline import index_project; print(index_project('/home/jam/develop'))"MCP tools
Tool | Description |
| Index a project and start the incremental watcher |
| Incremental re-index: add missing files, drop deleted ones (no re-embed) |
| Literal/regex search over symbol names + file paths (paginated) |
| Embedding similarity search (bge-m3, pgvector cosine) |
| Symbols that call the given symbol |
| Symbols called by the given symbol |
| 2-level recursive callers + affected files |
| Glob search over indexed files |
| Signature, docstring, location of a symbol |
| Language, line count, symbols of a file |
| Indexed projects + counts + active project |
| Remove an indexed project and all its data in cascade (rejects the active project) |
Hermes integration
Proxy: port 3104 in
~/.hermes/scripts/mcp-proxies.sh(supervisor systemd)Wrapper:
~/.hermes/scripts/mcp-codeindex-wrapper.shRegister:
hermes mcp add codeindex --url http://127.0.0.1:3104/mcp
Environment
Var | Default | Notes |
|
| local tool |
|
| embeddings |
|
| must match pgvector dims (1024) |
| unset | active project (set via |
Tests
uv run pytest tests/ -q # unit + contract (in-memory MCP client)Spec / OpenSpec
Living spec: openspec/specs/code-index/spec.md — archived changes in
openspec/changes/archive/ (unified-code-index, project-directory-management).
License
MIT — free to use, modify and redistribute. See LICENSE.
Available Tools
12 toolscallees_ofA
List symbols called by the given symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It states the core list behavior but does not clarify whether callees are direct or transitive, or what kinds of symbols are included.
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. The action and scope are front-loaded and every word contributes meaning.
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 and has an output schema, so return details need not be repeated. Still, the missing direct-versus-transitive distinction and lack of annotations leave room for agent misunderstanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description gives the sole 'symbol' parameter a clear role as the source being queried. It does not specify the expected symbol format, such as fully qualified names or display names, leaving a partial gap.
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 'List' and clearly identifies the resource as 'symbols called by the given symbol'. This unambiguously distinguishes it from the inverse sibling callers_of.
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 explicit when-to-use, exclusions, or alternative tools are mentioned. However, the name and wording imply this is the tool for outgoing call-relationship queries, so usage is inferable but not fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
callers_ofB
List symbols that call the given symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'List' signals a read-only operation, but the description does not clarify whether callers are direct or transitive, whether results are scoped to the current project, or whether the index must be updated first.
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 redundant wording. Every word contributes to conveying the tool's 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?
The description covers the basic concept and an output schema exists, so return-value details are not required. However, it lacks important context about the tool's scope, whether results are direct or transitive, and how it relates to sibling tools like callees_of and impact_analysis.
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 single parameter. It only refers back to 'the given symbol' without explaining expected formats, such as fully qualified names or file paths, leaving the parameter meaning underspecified.
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 ('List') and a clear resource ('symbols that call the given symbol'), which precisely identifies the operation. The wording also differentiates it from the sibling tool callees_of by direction, making the purpose immediately understandable.
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 given on when this tool should be used versus alternatives such as callees_of or impact_analysis. There is no mention of exclusions, prerequisites, or a deciding condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_filesC
Find files by glob pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| glob | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states that it finds files, without revealing whether the operation is read-only, whether it searches recursively, whether it returns relative or absolute paths, or any side effects. The description gives no insight into how the search behaves beyond the basic action.
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, compact sentence with no unnecessary words. It is front-loaded with the action and resource. However, its brevity borders on under-specification, though the sentence itself is well-formed and 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?
Given the tool has one parameter and an output schema, the description is still incomplete for correct invocation. An agent would not know how to format the glob pattern, whether the search is recursive, or what the output looks like (though the output schema might cover that). Without annotations or richer context, an agent could easily misuse the glob syntax or misinterpret scope. The description is adequate only for a very simple and obvious use case.
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 no description for the 'glob' parameter (0% coverage), and the tool description only repeats that the search is 'by glob pattern'. This adds minimal clarification (that the string is a glob), but does not explain acceptable glob syntax, case sensitivity, or examples. For a low-coverage schema, the description does not compensate enough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('find files') and the method ('by glob pattern'), making the tool's purpose evident. However, it does not explicitly contrast with siblings like search_code or search_semantic, so an agent might wonder if these also find files. The verb 'find' implies a filesystem path search, but the distinction is not spelled out.
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. The description only states what it does, not when it should be chosen over search_code or search_semantic. It does not mention exclusions, prerequisites, or typical scenarios, leaving the agent to infer usage from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_file_summaryB
Summarize a file: language, line count, symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It lists the output fields but does not disclose whether the operation is read-only, how it accesses the file, error behavior, or any side effects. The tool name hints at a safe read, but the description does not confirm it.
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?
A single, front-loaded sentence with zero filler. It starts with the action verb, names the target resource, and lists exactly what summary data is returned, all in a compact structure.
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 (one required parameter) and has an output schema, so the description covers the basic return values. However, it omits path semantics and any task-level context, and with no annotations, an agent lacks enough detail to fully ensure correct calling and error handling.
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%, yet the description adds no meaning beyond the schema's property name 'path'. It does not clarify path format, whether the file must exist, supported file types, or how 'path' relates to the current project context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Summarize'), a resource ('a file'), and the exact output contents ('language, line count, symbols'). This separates it from sibling tools like get_symbol_body or find_files, which target different resources and return different information.
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 siblings such as get_status or get_symbol_body, no preconditions, and no exclusions. The only implied use is 'when you need a file summary,' but that is not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusA
Show indexed projects and counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states 'Show indexed projects and counts' without disclosing whether the operation is read-only, any side effects, or performance implications. The verb 'Show' implies read-only, but this is not explicit.
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?
One concise sentence that front-loads the action. No wasted words.
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 simplicity of the tool, the description is sufficient. It states the purpose and the output schema covers return details, so nothing essential is missing.
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?
There are no parameters, so the description has nothing to add. The schema is empty, so the baseline is 4.
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 shows indexed projects and counts, using a specific verb and resource. It distinguishes from sibling tools like search_code or update_index, which perform different 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 explicit guidance on when to use this tool versus alternatives. It implies usage for checking the current index state, but doesn't mention when not to use it or point to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbol_bodyA
Get the signature, docstring and location of a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It indicates a read-only lookup and names the returned information, but it does not explain behavior for missing symbols, symbol format requirements, or any prerequisites such as an indexed project.
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 is front-loaded with the verb and no filler. Every word earns its place, and it is appropriately sized for a simple one-parameter tool.
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 and has an output schema, which reduces the need to describe return values. Still, the description lacks guidance on symbol naming and when to prefer this over search-oriented siblings. It is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It tells the agent that 'symbol' is the target of the lookup, but it does not specify the expected format (e.g., fully qualified name, simple name, language) or provide examples. This is only minimal compensation for an undocumented parameter.
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 ('Get') and names a concrete resource ('a symbol') along with what is returned ('signature, docstring and location'). This clearly distinguishes it from siblings like search_code or get_file_summary, which serve different lookup purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need a symbol's signature, docstring, or location. However, it does not explicitly state exclusions or contrast with alternatives like search_code/search_semantic, so the usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
impact_analysisB
2-level recursive callers and affected files for a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral disclosure burden. It does reveal the key behavior: recursion to the second level and identification of affected files. However, it does not state whether the tool is read-only, requires an indexed project, or has other prerequisites or side effects.
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, tightly-worded sentence with no filler. It leads with the most distinguishing behavioral detail, '2-level recursive,' and contains only information relevant to choosing and invoking the tool.
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 simple one-parameter tool with an output schema, the description covers the core purpose and result shape. But it omits input format guidance and any prerequisites around project path or index freshness, leaving a meaningful gap for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the only parameter, symbol. The description merely repeats the phrase 'for a symbol' and adds no detail about the expected symbol format, syntax, casing, or how to qualify it, leaving the agent with insufficient 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?
The description clearly states that the tool analyzes a symbol and returns two levels of recursive callers plus affected files. This distinguishes it from siblings like callers_of and callees_of, though it lacks an explicit verb and is phrased as a noun phrase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no context for when the tool should be chosen over related alternatives such as callers_of, callees_of, or search_code. The intended use case is only implied by the tool name and the mention of recursive callers and affected files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_projectA
Remove an indexed project and all its data (cascade).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does disclose that the action is destructive and cascades to all project data. It does not mention irreversibility, permission requirements, or what happens to dependent index state, which would strengthen transparency for a destructive operation.
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 one compact, front-loaded sentence that states the action, the resource, and the cascade behavior without filler or redundancy. Every word adds 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?
For a low-complexity tool with a single parameter and an output schema, the description covers the essential operation and destructive scope. The only meaningful gap is the lack of guidance for the 'path' parameter, but the overall context is sufficient for basic correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single 'path' parameter with no description, and the tool description does not explain what type of path is expected or how it relates to an indexed project. Since schema description coverage is 0%, the description needed to compensate but did not.
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 ('Remove') and a specific resource ('indexed project') and clarifies the destructive scope ('all its data (cascade)'). This clearly differentiates it from the sibling search/indexing tools.
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 intended use is implied by the verb: use this when you want to delete an indexed project. However, there is no explicit statement about when not to use it or which sibling tool might be an alternative, such as update_index for non-destructive changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_codeB
Search symbols and files by literal, regex, or fuzzy match.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| fuzzy | No | ||
| regex | No | ||
| pattern | Yes | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the matching modes but does not mention pagination behavior, result limits, whether the search is scoped to the current project, or how regex/fuzzy flags interact. For a search tool with no annotations, this is a meaningful gap.
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?
A single concise sentence that front-loads the core purpose and matching modes. It earns its place, though it could add a brief usage note without becoming bloated.
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 5 parameters, 0% schema description coverage, no annotations, and an output schema. The description does not explain pagination parameters, the interaction between regex and fuzzy, or the search scope. For a search tool with siblings like search_semantic and find_files, more context is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the core 'pattern' parameter's matching modes (literal, regex, fuzzy), which maps to the pattern, regex, and fuzzy fields. However, it does not explain page/page_size semantics or the default behavior when regex/fuzzy are false. Baseline 3 is appropriate because the description adds some meaning but leaves several parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and resource ('symbols and files') and distinguishes three matching modes (literal, regex, fuzzy). It is clear about what the tool does, though it does not explicitly differentiate from sibling search_semantic or find_files.
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 usage for symbol/file search with literal, regex, or fuzzy matching, but provides no explicit guidance on when to choose this over search_semantic or find_files. The sibling names suggest alternatives, but the description does not state selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_semanticA
Search code by meaning using embeddings (bge-m3 via Ollama).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry behavioral disclosure. It does state that the tool relies on embeddings (bge-m3 via Ollama), which signals semantic vector matching. However, it does not mention dependencies such as index state, result ranking behavior, or limitations, so the behavior is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, tightly written sentence with no wasted words; the core semantic mechanism is front-loaded before the model detail. This is appropriately concise.
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 low-complexity search tool with an output schema, most operational details are inferable, but the description omits guidance for choosing this over search_code and any prerequisite behavior such as needing an updated index. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the parameters. It only indirectly clarifies that 'query' is a meaning-based search phrase; 'limit' and query formatting/interpretation are left entirely to inference from the schema names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Search'), resource ('code'), and method ('by meaning using embeddings'), which clearly differentiates this from sibling search_code, presumably a lexical search. It goes beyond a vague restatement and identifies the semantic nature of the 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 phrase 'by meaning' implies this is for conceptual/semantic searches rather than exact-string searches, but it never explicitly states when to choose this over search_code or when not to use it. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_pathC
Index a project directory and make it the active project.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool indexes a directory and changes the active project, but it does not mention side effects such as whether the previous active project is replaced, whether the index is persisted, whether the path must exist, or whether this operation is destructive to any existing index. The description is too thin for a state-changing 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 that front-loads the main action and the effect. It is not bloated, though it could add a bit more useful detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, which may describe return values, but the description does not cover important context: prerequisites (e.g., does the directory need to be a valid project?), side effects (e.g., replacing the active project), and relationship to siblings like update_index. For a state-changing tool with no annotations, this is a significant 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 description coverage is 0% and the schema only says 'path' is a string. The description adds that the path is a project directory, but it does not clarify whether the path must be absolute, whether it must already exist, or what happens if it is invalid. With only one parameter and no schema description, the description should compensate more than it does.
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 ('Index') and a specific resource ('a project directory'), and states the effect ('make it the active project'). It is clear what the tool does, though it does not explicitly distinguish itself from sibling tools like update_index or remove_project.
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 is used to set up a project for subsequent operations, but it does not state when to use it versus alternatives like update_index, nor does it mention any prerequisites or exclusions. Some context is implied by the phrase 'active project' but no explicit guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_indexA
Incremental update: index missing files, drop deleted ones (no re-embed).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly discloses the incremental nature, the addition of missing files, the removal of deleted ones, and the absence of re-embedding. This covers the key behavioral traits, including the destructive aspect of dropping files. It does not mention error handling or side effects, but for a tool of this scope, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It front-loads the core concept ('Incremental update') and then specifies the exact actions. Every word contributes to meaning, making it highly concise and well-structured.
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 tool with an output schema, the description is largely complete. It explains the operation's scope (missing files, deleted files, no re-embed) and implies a maintenance context. It does not specify whether the operation is synchronous or what the output contains, but given the output schema exists and the operation is simple, these gaps are minor.
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 for this dimension is 4. The description does not need to explain parameters because there are none. It correctly focuses on behavior rather than arguments, and the schema already confirms no parameters are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('update') with a clear resource ('index') and precise scope ('missing files, drop deleted ones'). It distinguishes itself from sibling search and analysis tools by focusing on index maintenance rather than querying. The behavior is unambiguous and action-oriented.
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 usage (when you need to sync the index incrementally) but does not explicitly mention alternatives or exclusions. It does not say 'use this instead of a full re-index' or reference sibling tools. The implied context is clear enough for a simple tool, but no explicit when/when-not guidance is provided.
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.
12 tool updates
v0.2.0- First observed
callees_of - First observed
callers_of - First observed
find_files - First observed
get_file_summary - First observed
get_status - First observed
get_symbol_body - First observed
impact_analysis - First observed
remove_project - First observed
search_code - First observed
search_semantic - First observed
set_project_path - First observed
update_index
TDQS
Scored across 12 tools
Each tool targets a distinct operation: indexing, searching (literal vs semantic), graph queries (callers/callees), file operations, and project management. No two tools appear to overlap in purpose.
Most tool names follow a clear verb_noun pattern (set_project_path, search_code, get_status). Minor exception: 'callers_of' and 'callees_of' use a different prepositional style, but still readable and predictable.
12 tools is well within the ideal range for a code indexing/search server. Each tool serves a distinct function needed for code navigation and project management, with no redundancy.
The surface covers the full lifecycle: project setup, incremental updates, multiple search modes, symbol graph queries, file and symbol detail, and project removal. Missing features like batch re-index or cross-project search are minor and not essential.
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
Ask a codebase what calls what: search, blast radius, paths between symbols, and diffs.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Enterprise code intelligence for M&A, security audits, and tech debt. Hosted server with 200k free.
Deterministic context layer for your codebase: change impact, blast radius, answers with receipts.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables fast code analysis and navigation through hybrid semantic search, graph-based relationship tracking, and structure exploration across multiple programming languages with optimized indexing for large codebases.83MIT
- AlicenseNot gradedqualityCmaintenanceEnables fast semantic code search and analysis across 15+ programming languages. Supports searching for functions and classes, tracing code usage, detecting syntax errors, and analyzing code quality and structure.4834GPL 3.0
- AlicenseNot gradedqualityDmaintenanceProvides knowledge extraction and cross-repo analysis tools for multi-repository organizations. It enables users to query type definitions, service dependencies, and infrastructure configurations across an entire organization's codebase.MIT
- AlicenseNot gradedqualityCmaintenanceProvides semantic code search and code insights via a knowledge graph, enabling AI to understand, navigate, and modify complex projects with deep dependency and architecture analysis.MIT