Skip to main content
Glama
hanhy06

source-rag-mcp

by hanhy06

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.

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 .jar files

  • mod .jar files

  • Minecraft .class files

  • mod .class files

  • decompiled Minecraft or mod .java output

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 build

Run

Run the server from the project root:

pnpm build
node ./dist/index.js

The 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.

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-code vectors

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 metadata

  • add_minecraft_version: download a Minecraft jar from Mojang metadata, decompile it, and index it

  • add_mod_jar: decompile and index a local mod jar without downloading anything

  • index_sources: index a local decompiled Java source tree

  • decompile_classes: decompile class or jar input with Vineflower and optionally index it

  • search_symbol: search classes, methods, and fields

  • search_text: search raw source lines

  • rag_search: search semantic chunks with BM25 and local code embeddings

  • search_code: automatically fuse symbol, text, BM25, and code-embedding results

  • get_source: read a source file by path or class name

  • get_source_range: read an inclusive line range with optional context

  • get_method_source: read a method body from a class, including inner class owners and overloaded methods

  • compare_method_source: compare a method across two indexes and return a unified diff

  • find_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 tools
add_minecraft_versionB

Download a Minecraft jar from Mojang metadata, decompile it, and index the sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
sideNoclient
indexAsNoOptional index label. Defaults to the resolved version id.
versionYesExact version id, latest_release, latest_snapshot, or latest.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modIdNoOptional mod id for the index label.
indexAsNoOptional full index label. Defaults to mod:<jar-name> or mod:<modId>:<version>.
jarPathYesLocal path to a mod jar.
versionNoOptional mod version for the index label.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesJar, .class file, or directory containing .class files.
versionNoVersion label to index after decompilation.
outputDirYesDirectory where decompiled .java files should be written.
indexAfterNo

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
symbolYes
versionNoMinecraft version. Omit to search every indexed version.

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYesRelative path, simple class name, or fully qualified class name.
methodYes
versionYes
signatureNoOptional substring that must appear in the method signature.
overloadIndexNoZero-based match index after other overload filters.
parameterCountNoOptional parameter count filter for overloaded methods.
parameterTypesNoOptional ordered parameter type filter for overloaded methods.

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYes
fileOrClassYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionYesVersion label, for example 26.1.
sourceDirYesFolder containing decompiled .java sources.

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

search_symbolC

Search classes, methods, and fields by name or signature.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
versionNoMinecraft version. Omit to search every indexed version.

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
versionNoMinecraft version. Omit to search every indexed version.

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 11 tool updatesv0.1.0
    • First observedadd_minecraft_version
    • First observedadd_mod_jar
    • First observeddecompile_classes
    • First observedfind_references
    • First observedget_method_source
    • First observedget_source
    • First observedindex_sources
    • First observedlist_versions
    • First observedrag_search
    • First observedsearch_symbol
    • First observedsearch_text

TDQS

B3.4/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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