source-rag-mcp
This server enables local indexing, searching, and analysis of decompiled Minecraft and mod source code using symbol lookup, text search, BM25, and local code embeddings.
Index Management
add_minecraft_version– Download, decompile (via Vineflower), and index a Minecraft version (supportslatest_release,latest_snapshot, or exact version IDs).add_mod_jar– Decompile and index a local mod.jarfile.index_sources– Index an already-decompiled local Java source tree.decompile_classes– Decompile a.jar,.classfile, or class directory, with an option to auto-index afterward.list_versions– List all indexed Minecraft, mod, and custom source versions.
Code Search
search_symbol– Search for classes, methods, and fields by name or signature.search_text– Search raw source lines for any text query.rag_search– Search source chunks using BM25 lexical scoring and local code embeddings.search_code– Hybrid search fusing exact symbol lookup, raw text, BM25, and cosine similarity over code embeddings.
Source Reading & Analysis
get_source– Read a full source file by path, simple class name, or fully qualified class name.get_method_source– Extract a specific method body, with support for inner classes, overloaded methods, and constructors.get_source_range– Read an inclusive line range from a source file with optional surrounding context.find_references– Find all exact word-level references to a symbol across indexed sources.compare_method_source– Compare a method's implementation across two indexes and return a unified diff.
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., "@source-rag-mcpsearch for the Item class in Minecraft source"
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.
source-rag-mcp
Minecraft decompiled source MCP server for local source search, symbol lookup, reference lookup, and local embedding RAG.
Node.js 24 or newer is required.
Copyright Boundary
This project does not ship Minecraft source code, bytecode, assets, jars, mod jars, or decompiled output.
The package contains only the MCP server code. When you use add_minecraft_version, add_mod_jar, or decompile_classes, Minecraft and mod files are downloaded, copied, or generated only on your local machine under SOURCE_RAG_DATA or ./.source-rag.
Do not commit, publish, or redistribute:
.source-rag/sources/Minecraft
.jarfilesmod
.jarfilesMinecraft
.classfilesmod
.classfilesdecompiled Minecraft or mod
.javaoutput
This project is licensed under Apache-2.0. Minecraft is owned by Mojang/Microsoft and is not included in this project.
Related MCP server: @codesift/mcp
Setup
pnpm install
pnpm buildRun
Run the server from the project root:
pnpm build
node ./dist/index.jsThe server writes index data to ./.source-rag by default.
You can override this location with the SOURCE_RAG_DATA environment variable.
Windows accelerated embeddings
The bundled Node runtime supports DirectML without an additional Python environment. This is the recommended Windows setup:
$env:SOURCE_RAG_EMBEDDING_DEVICE = "dml"
$env:SOURCE_RAG_EMBEDDING_MAX_TOKENS = "1024"
$env:SOURCE_RAG_EMBEDDING_BATCH_SIZE = "10"The 1024-token limit prevents unusually large decompiler methods from exhausting GPU memory. The default batch size is 10 and can be lowered if GPU memory is limited. DirectML sessions use sequential execution and two ONNX CPU threads.
First Index
For a normal Minecraft version, use add_minecraft_version.
The MCP server will download the Minecraft jar from Mojang metadata, decompile it, and index it.
Minecraft jars are written through temporary files and verified against Mojang's declared size and SHA-1 before becoming active. The cached Vineflower jar is likewise verified against its pinned SHA-256.
{
"version": "latest_release",
"side": "client"
}Exact version IDs work too:
{
"version": "26.2",
"side": "client"
}If you already have decompiled .java files, use index_sources with a version name and source directory:
{
"version": "26.1",
"sourceDir": "./sources/26.1"
}If you have a jar, .class file, or class directory, use decompile_classes first:
{
"input": "./sources/26.2",
"outputDir": "./.source-rag/sources/26.2",
"version": "26.2",
"indexAfter": true
}decompile_classes downloads Vineflower into ./.source-rag/tools on first use.
Mod Jars
add_mod_jar only accepts a local jar path. It does not download mod jars from URLs.
{
"jarPath": "C:\\dev\\minecraft\\afterglow\\run\\mods\\sodium-fabric-0.9.0+mc26.2.jar",
"modId": "sodium",
"version": "0.9.0+mc26.2"
}The resulting index label defaults to:
mod:<jar-name>or, when modId and version are provided:
mod:<modId>:<version>You can also provide indexAs directly.
Hybrid Code Search
search_code is the primary search tool. Its default auto mode combines:
exact symbol lookup
raw text matches
SQLite FTS5 BM25 over identifier-aware tokens
cosine similarity over local
jinaai/jina-embeddings-v2-base-codevectors
Tree-sitter extracts classes, methods, constructors, and fields without treating local variables as fields. Source is chunked at declaration and statement boundaries. Long methods are split between top-level statements with a small overlap. Dense vectors are normalized, quantized to int8, and stored as contiguous rows in a binary vector file.
Each index generation uses a managed source snapshot, a SQLite symbol/FTS database, and an optional vector file. Display labels never become filesystem paths directly. A completed generation replaces the active catalog entry atomically, so a failed rebuild leaves the previous generation available. Builds for the same label use a filesystem lock. Abandoned staging, work, and inactive generation directories older than 24 hours are removed during later builds; active generations are never removed by this maintenance pass.
The embedding model is downloaded from Hugging Face on the first new index and cached under <SOURCE_RAG_DATA>/models. The default model file is about 642 MB. Inference is local and does not use an external embedding API.
Set SOURCE_RAG_EMBEDDINGS=disabled to build and search an FTS-only index. Override the model with SOURCE_RAG_EMBEDDING_MODEL; indexes searched together must use the same model. SOURCE_RAG_EMBEDDING_DEVICE selects the Transformers.js execution device and defaults to auto. On Windows, use dml for DirectML acceleration.
SOURCE_RAG_EMBEDDING_MAX_TOKENS defaults to 1024 so unusually large decompiler methods cannot exhaust GPU memory. Long methods are already split into overlapping source chunks before this final tokenizer limit is applied.
Tools
list_versions: list Minecraft, mod, and custom indexes with source metadataadd_minecraft_version: download a Minecraft jar from Mojang metadata, decompile it, and index itadd_mod_jar: decompile and index a local mod jar without downloading anythingindex_sources: index a local decompiled Java source treedecompile_classes: decompile class or jar input with Vineflower and optionally index itsearch_symbol: search classes, methods, and fieldssearch_text: search raw source linesrag_search: search semantic chunks with BM25 and local code embeddingssearch_code: automatically fuse symbol, text, BM25, and code-embedding resultsget_source: read a source file by path or class nameget_source_range: read an inclusive line range with optional contextget_method_source: read a method body from a class, including inner class owners and overloaded methodscompare_method_source: compare a method across two indexes and return a unified difffind_references: find exact word references with source, path, owner, and declaration filters
All tools return MCP structuredContent with a stable { "result": ... } envelope as well as a JSON text representation.
get_method_source accepts these optional overload filters:
{
"version": "26.2",
"owner": "net.minecraft.world.item.ItemStack",
"method": "ItemStack",
"parameterTypes": ["Holder<Item>", "int"]
}Inner classes can be addressed with either . or $:
{
"version": "26.2",
"owner": "com.mojang.blaze3d.vertex.TlsfAllocator.Block",
"method": "isFree"
}Codex MCP Config
Add this to your Codex config.toml. Prefer absolute paths because Codex may start the MCP server from a different working directory.
[mcp_servers.minecraft-source]
command = "node"
args = [
"C:\\dev\\minecraft\\source-rag-mcp\\dist\\index.js"
]
[mcp_servers.minecraft-source.env]
SOURCE_RAG_DATA = "C:\\dev\\minecraft\\source-rag-mcp\\.source-rag"
SOURCE_RAG_EMBEDDING_DEVICE = "dml"
SOURCE_RAG_EMBEDDING_MAX_TOKENS = "1024"
SOURCE_RAG_EMBEDDING_BATCH_SIZE = "10"If node is not on PATH, use an absolute Node executable path for command only:
[mcp_servers.minecraft-source]
command = "<path-to-node>"
args = [
"C:\\dev\\minecraft\\source-rag-mcp\\dist\\index.js"
]
[mcp_servers.minecraft-source.env]
SOURCE_RAG_DATA = "C:\\dev\\minecraft\\source-rag-mcp\\.source-rag"
SOURCE_RAG_EMBEDDING_DEVICE = "dml"
SOURCE_RAG_EMBEDDING_MAX_TOKENS = "1024"
SOURCE_RAG_EMBEDDING_BATCH_SIZE = "10"Example:
[mcp_servers.minecraft-source]
command = "C:/path/to/node.exe"
args = [
"C:\\dev\\minecraft\\source-rag-mcp\\dist\\index.js"
]
[mcp_servers.minecraft-source.env]
SOURCE_RAG_DATA = "C:\\dev\\minecraft\\source-rag-mcp\\.source-rag"
SOURCE_RAG_EMBEDDING_DEVICE = "dml"
SOURCE_RAG_EMBEDDING_MAX_TOKENS = "1024"
SOURCE_RAG_EMBEDDING_BATCH_SIZE = "10"Indexed Sources
Every active catalog entry points to an immutable UUID generation stored under:
<SOURCE_RAG_DATA>/indexes/<generation-uuid>/
index.sqlite
vectors.i8
sources/The human-readable index label is stored in catalog.sqlite and is not used as a directory name.
Available Tools
11 toolsadd_minecraft_versionB
Download a Minecraft jar from Mojang metadata, decompile it, and index the sources.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | client | |
| indexAs | No | Optional index label. Defaults to the resolved version id. | |
| version | Yes | Exact version id, latest_release, latest_snapshot, or latest. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must bear full burden. It mentions download, decompile, index but lacks details on side effects (e.g., network usage, storage impact), idempotency, permissions, or execution time. The multi-step process is hinted but not elaborated.
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 terse sentence covers main actions with no redundancy. Could benefit from structured bullet points or additional context, but no unnecessary 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?
No output schema, descriptions of return values missing. Lacks explanation of prerequisites (internet access?), error scenarios, or what 'index the sources' means for the agent. Given tool complexity, description is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (version and indexAs have descriptions). Description adds default behavior for indexAs and explains version special values. 'side' is self-explanatory via enum. Description adds some value but does not fully compensate for missing schema description on side.
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 actions: download a Minecraft jar, decompile it, and index sources. It distinguishes itself from siblings like add_mod_jar (mods) and decompile_classes (single task).
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 guidance on when to use this tool versus alternatives such as add_mod_jar or index_sources. The description implies use for adding official Mojang versions, but no clear when-not or alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_mod_jarA
Decompile and index a local mod jar. This tool does not download mod jars.
| Name | Required | Description | Default |
|---|---|---|---|
| modId | No | Optional mod id for the index label. | |
| indexAs | No | Optional full index label. Defaults to mod:<jar-name> or mod:<modId>:<version>. | |
| jarPath | Yes | Local path to a mod jar. | |
| version | No | Optional mod version for the index label. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool decompiles and indexes, and does not download. But it lacks details on side effects (e.g., overwriting behavior), required permissions, or output format. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no fluff, front-loaded with the main action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no annotations, and no output schema, the description is incomplete. It does not explain return values, side effects, idempotency, or prerequisites (e.g., file existence). More context is needed for a state-modifying tool.
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 100% coverage with descriptions for all parameters. The tool description adds no extra parameter semantics beyond what the schema provides, so baseline 3 is appropriate.
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: 'Decompile and index a local mod jar.' It uses a specific verb-resource pair and distinguishes from sibling tools by explicitly noting it does not download jars.
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 (adding a local mod jar to the index) and notes a constraint (no download). However, it does not explicitly state when to use this tool versus alternatives like decompile_classes or index_sources, nor does it provide when-not scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decompile_classesB
Decompile a jar, class file, or class directory with Vineflower. Optionally index the output.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Jar, .class file, or directory containing .class files. | |
| version | No | Version label to index after decompilation. | |
| outputDir | Yes | Directory where decompiled .java files should be written. | |
| indexAfter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states basic action and optional indexing, but does not mention side effects (e.g., file overwrites), permissions, error handling, or output format.
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 two sentences, front-loaded with the core action, and contains no fluff. However, it could be more efficient by integrating the indexing detail into the first sentence.
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 4 parameters, no annotations, and no output schema, the description should explain output behavior, prerequisites, and indexing purpose. It covers purpose but omits important behavioral details, making it incomplete for full autonomy.
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 already describes all four parameters with reasonable detail (75% coverage per context). The description adds minimal extra: it names the decompilation tool and clarifies the indexing option. Baseline score of 3 is appropriate as schema does most of the work.
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 verb 'Decompile' and the resource types 'jar, class file, or class directory'. It also specifies the tool (Vineflower) and mentions optional indexing, differentiating it from sibling tools like 'get_source' or 'search_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 vs. alternatives, no prerequisites, and no when-not-to-use advice. It merely states what it does, leaving the agent to infer usage from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_referencesC
Find exact word references to a symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | ||
| version | No | Minecraft version. Omit to search every indexed version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It only specifies 'exact word references' but omits details like case sensitivity, return format, or pagination behavior. Significant gaps exist.
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 single sentence is concise and front-loaded, with no wasted words. However, it could be more informative without sacrificing brevity.
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 fails to explain return values, search scope (e.g., all indexed versions), or behavior when version is omitted. Given the tool's complexity and lack of output schema, this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only the version parameter has a description). The description adds no parameter-level meaning, such as explaining what a 'symbol' is or how 'limit' affects results. It does not compensate for the low coverage.
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 verb 'find' and the resource 'exact word references to a symbol,' providing a specific purpose. However, it does not differentiate from sibling tools like search_symbol or search_text, which may have overlapping functionality.
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, no prerequisites, and no exclusions. The agent must infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_method_sourceA
Read a method body from a class. Supports inner class owners and overloaded methods.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Relative path, simple class name, or fully qualified class name. | |
| method | Yes | ||
| version | Yes | ||
| signature | No | Optional substring that must appear in the method signature. | |
| overloadIndex | No | Zero-based match index after other overload filters. | |
| parameterCount | No | Optional parameter count filter for overloaded methods. | |
| parameterTypes | No | Optional ordered parameter type filter for overloaded methods. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read operation ('Read'), which is accurate, but provides no details on error handling, missing methods, or permissions. With no annotations, the description carries the burden but only partially discloses behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences and 14 words. It front-loads the action ('Read a method body') and adds key features in the second sentence. 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?
For a tool that reads method bodies, the description lacks details on return format, error behavior, and handling of ambiguous overloads. Given no output schema, more context would help an agent use it effectively. The current description is adequate but basic.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so the schema already documents most parameters. The description adds context about inner classes and overloaded methods but does not elaborate on specific parameter semantics beyond what the schema provides. Value added is marginal.
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 reads a method body from a class, distinguishing it from siblings like get_source. It also specifies support for inner class owners and overloaded methods, making the purpose specific and actionable.
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 it (e.g., for inner classes or overloaded methods) but does not explicitly state when not to use it or mention alternatives like get_source for full class source. The guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sourceA
Read a full source file by relative path, class name, or fully qualified class name.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | ||
| fileOrClass | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states 'Read', indicating non-destructive behavior. However, it does not disclose what happens if the file is not found, any required permissions, rate limits, or the exact output format. For a simple read tool, this is adequate but not richly 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 of 15 words with no fluff. It front-loads the action and specification of parameters efficiently.
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 2 string parameters, no output schema, and no annotations, the description covers the core functionality but misses details like the role of the 'version' parameter and the return format (e.g., plain text). This leaves ambiguity for the agent.
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 that the 'fileOrClass' parameter accepts a relative path, class name, or FQCN, adding meaning beyond the schema's 'type: string'. However, the 'version' parameter is left unexplained, so only partial semantics are provided.
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 verb 'Read' and the resource 'full source file'. It specifies three identification methods: relative path, class name, or fully qualified class name. This distinguishes it from siblings like 'get_method_source' (which reads a specific method) and 'search_text'/'search_symbol' (which search within 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 when to use (when needing a full source file by various identifiers) but provides no explicit guidance on when not to use or which sibling to choose instead. For example, if only a method is needed, 'get_method_source' would be more appropriate, but this is not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_sourcesB
Index a local decompiled Minecraft Java source tree.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Version label, for example 26.1. | |
| sourceDir | Yes | Folder containing decompiled .java sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks behavioral details beyond the single verb 'index'. With no annotations provided, it does not disclose whether indexing is destructive, how long it takes, whether it overwrites previous indices, or what the indexing produces. This is insufficient for a potentially resource-intensive 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 a single sentence with no wasted words. It is front-loaded with the key verb and resource. However, it could be slightly more informative without being 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?
Given the tool has 2 required parameters, no output schema, and no annotations, the description is too minimal. It does not mention prerequisites (e.g., decompilation via 'decompile_classes'), what the index is used for, or any side effects. The sibling tools indicate a workflow that is not explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The tool description adds no extra meaning beyond the schema, so baseline of 3 is appropriate. No further format or constraints are given.
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 action (index) and the resource (local decompiled Minecraft Java source tree), making the purpose specific. However, it does not differentiate from sibling tools like 'rag_search' or 'search_text', which are related but distinct.
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 guidance on when to use this tool versus alternatives like 'decompile_classes' (which must be run first) or 'search_text' (which uses the index). The context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionsA
List indexed Minecraft source versions.
| 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 fully disclose behavioral traits. It implies a read-only operation but does not describe edge cases (e.g., empty result set) or side effects. The description is not misleading but lacks depth.
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 with no wasted words. It is front-loaded with the key action and object.
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 simplicity, the description is adequate but could be more complete by specifying what versions are listed (e.g., from which index or format). Without an output schema, the description does not explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no additional param information beyond the schema, which is empty. This is acceptable as the description clarifies the overall purpose.
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 lists indexed Minecraft source versions, using a specific verb and resource. It distinguishes from siblings like add_minecraft_version and index_sources that 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?
No guidance is provided on when to use this tool versus alternatives. The description is minimal and does not mention appropriate contexts or exclusions, but the tool's simplicity reduces the need for extensive guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_searchC
Search source chunks with lightweight lexical RAG scoring.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| version | No | Minecraft version. Omit to search every indexed version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions 'lightweight lexical RAG scoring' but does not specify whether the operation is read-only, any required authentication, rate limits, or what happens to the state. This is insufficient for a search 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 sentence, which makes it concise but overly brief. It lacks structure and does not present information in a scannable way. While front-loaded, it omits crucial 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 the tool has 3 parameters (one required), no output schema, and no annotations, the description is insufficient. It does not explain the output format, scoring details, or how to interpret results, leaving the agent with many unknowns.
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 only 33% (only 'version' has a description). The description adds no information about the parameters 'query' or 'limit', failing to compensate for the low coverage. The agent would need to infer their meanings.
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 verb 'Search', the resource 'source chunks', and the method 'lightweight lexical RAG scoring', distinguishing it from sibling tools like search_symbol and search_text which likely use different algorithms.
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 such as search_symbol or search_text. There is no mention of use cases, limitations, or criteria for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_symbolC
Search classes, methods, and fields by name or signature.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| version | No | Minecraft version. Omit to search every indexed version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits (e.g., read-only, side effects, pagination, or result ordering). It only states what is searched, not how the search behaves.
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 wasted words, but it is too abbreviated, lacking necessary elaboration. It is concise but at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and low schema coverage, the description fails to provide adequate context. It does not describe return values, error cases, or how results are structured, leaving significant gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only version has a description). The description adds no additional meaning to the parameters; it does not explain what the query or limit parameters do beyond their schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches classes, methods, and fields by name or signature, distinguishing it from sibling tools like search_text (general text search) and find_references (specific reference lookup). The verb 'search' and the resource 'symbols' are specific.
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 on when to use this tool versus alternatives such as search_text, rag_search, or find_references. There is no mention of appropriate contexts or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_textB
Search raw source lines.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| version | No | Minecraft version. Omit to search every indexed version. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'Search raw source lines' without disclosing query behavior (regex? case-sensitive?), what 'raw source lines' entails, or whether it is safe (e.g., read-only). This is minimal behavioral info.
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. It is appropriately sized for a simple search tool, though it could benefit from a bit more detail on parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and low schema description coverage, the description is incomplete. It does not explain what 'raw source lines' are, how results are returned, or any limitations (e.g., indexing scope). The tool requires more context for effective use.
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 33% (only 'version' has a description). The tool description adds no parameter information beyond what the schema provides. The required 'query' parameter is left unexplained, and 'limit' is not described. The description fails to compensate for the low coverage.
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 raw source lines.' uses a specific verb ('search') and resource ('raw source lines'), and distinguishes from siblings like 'search_symbol' which likely searches for symbols rather than raw text.
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 this tool is for raw text search but does not explicitly state when to use it versus alternatives like 'search_symbol' or 'rag_search'. No exclusions or context are 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. Dates show when Glama detected each change.
11 tool updates
v0.1.0- First observed
add_minecraft_version - First observed
add_mod_jar - First observed
decompile_classes - First observed
find_references - First observed
get_method_source - First observed
get_source - First observed
index_sources - First observed
list_versions - First observed
rag_search - First observed
search_symbol - First observed
search_text
TDQS
Each tool targets a distinct operation: adding versions/mod jars, decompiling, indexing, listing, and various search methods. The search tools are differentiated by type (exact references, lexical RAG, symbol lookup, raw text), and source retrieval is separated from search.
All tool names use snake_case with a verb_noun pattern (e.g., add_minecraft_version, decompile_classes, find_references). The only slight inconsistency is 'rag_search' which combines a descriptor with the verb, but it still follows the pattern.
With 11 tools, the server is well-scoped for its purpose of managing and querying decompiled Minecraft sources. Each tool serves a clear role without redundancy or excessive specialization.
The tool set covers the main workflow: adding sources, decompiling, indexing, listing, and multiple search modalities. However, missing are tools for updating or removing indexed sources, which may require manual cleanup.
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
MCP server for developer documentation, generated by doc2mcp.
MCP server for dev documentation, generated by doc2mcp.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for intelligently reading Java source code, supporting extraction from Maven dependencies and local projects with dual decompilers.155Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for local-first lexical code search, providing tools for searching code, finding symbols, and reading chunks from indexed repositories.MIT
- AlicenseNot gradedqualityDmaintenanceIntelligent code search MCP server with AST analysis, call graphs, dependency tracking, and semantic embeddings for developers.Apache 2.0
- AlicenseAqualityDmaintenanceLocal-first MCP server for semantic + keyword hybrid code search. Zero external services, no API keys required.2MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hanhy06/source-rag-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server