Skip to main content
Glama
dcd887

mc-changelog-mcp

mc-changelog-mcp

M8ven Verified

MCP server for Minecraft modpack changelog generation and version comparison.

Tools

Tool

Description

compare_modpacks

Compare two modpack directories and list added/removed/changed mods

generate_changelog

Generate a Markdown-format changelog from a modpack directory

generate_text_summary

Generate a plain-text summary (suitable for Discord/forum posts)

get_mod_version_info

Query Modrinth for a mod's version history (requires network)

save_changelog

Save a generated changelog to a file

generate_full_changelog

Generate a full changelog including Modrinth version info for each mod

Related MCP server: mc-pack-builder-mcp

Quick Start

npm install
npm run build
node dist/index.js

MCP Client Configuration

{
  "mcpServers": {
    "mc-changelog": {
      "command": "node",
      "args": ["${workspaceFolder}/dist/index.js"]
    }
  }
}

Path note: ${workspaceFolder} resolves to the project root in Trae/VS Code. On other editors use the absolute path: ["C:/path/to/mc-changelog-mcp/dist/index.js"](把 C:/path/to/ 替换成你的实际路径)。

Configuration

本工具零配置即可用(内置默认值,任何环境开箱即用)。以下项目可通过环境变量或项目根目录 .env 文件覆盖(复制 .env.example 为 .env):

变量

默认值

说明

MODRINTH_API_BASE

https://api.modrinth.com/v2

Modrinth API 根地址,支持自建网关/代理

CHANGELOG_USER_AGENT

mc-changelog-mcp/1.0

请求 User-Agent(Modrinth 要求标明来源)

CHANGELOG_MODS_DIR

mods

整合包内模组所在子目录名

CHANGELOG_ENRICH_LIMIT

5

增强信息(enrich)时每个模组返回的版本数量上限

优先级:环境变量 > .env 文件 > 内置默认值。改动后重启 MCP server 生效。

Testing

npm run build
npm run test:unit   # Unit tests (100% offline)
npm test            # Integration tests (requires network for Modrinth API)

Requirements

  • Node.js 18+

  • @modelcontextprotocol/sdk, zod

  • Network access required only for get_mod_version_info and generate_full_changelog

Architecture

mc-changelog-mcp/
├── src/
│   ├── index.ts                     # MCP server + all tool implementations
│   └── changelog-templates.json     # Changelog template definitions
├── dist/                            # Compiled JavaScript
├── skills/
│   └── mc-changelog-helper.md       # Trae Work skill
├── __tests__/
│   └── unit.test.ts                 # Unit tests (fully offline)
├── test.js                          # Integration test runner
├── test_logs/                       # Test output logs (gitignored)
├── package.json
├── tsconfig.json
└── .gitignore

License

MIT

Available Tools

6 tools
compare_modpacksA

比较两个整合包目录的差异,返回新增、删除、更新的模组列表

NameRequiredDescriptionDefault
new_pack_dirYes新版本整合包根目录路径
old_pack_dirYes旧版本整合包根目录路径

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 the full behavioral burden. It usefully discloses that the result contains added, deleted, and updated mod lists, but it does not state that the operation is read-only, whether it follows nested directories, or any path/permission expectations.

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 front-loaded sentence with no wasted wording. It states the action and return categories efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read/comparison tool with full schema coverage and no output schema, the description is largely complete: it explains both inputs and the returned change categories. It is missing only sibling-tool routing and explicit safety/behavioral context.

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 100%, and the schema already documents both required parameters as old and new modpack root paths. The description adds no parameter-level detail beyond identifying the two directories, so the baseline of 3 applies.

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 states a specific verb and resource: comparing two modpack directories and returning added/deleted/updated mod lists. It is clear what the tool does, but it does not explicitly distinguish itself from sibling changelog-generation tools that may compare similar inputs.

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 purpose implies when to use it—when comparing two modpack directories—but the description gives no explicit guidance on when to choose this over generate_changelog or generate_full_changelog. No exclusions or alternative-selection criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_changelogC

根据整合包差异生成 Markdown 格式的 Changelog

NameRequiredDescriptionDefault
new_versionNo新版本标签(如 v1.1.0)
old_versionNo旧版本标签(如 v1.0.0)
new_pack_dirYes新版本整合包根目录路径
old_pack_dirYes旧版本整合包根目录路径

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden but only says the output is Markdown. It doesn't disclose whether a file is written to disk or the text is returned (critical given a save_changelog sibling), whether it is read-only, or what the tool does with the pack directories.

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?

A single sentence that front-loads the purpose and output format with no filler. It is efficient, though brevity here overlaps with under-specification of behavior.

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?

Schema fully documents the four parameters and the description names the output format, which covers the basics for a generation tool with no output schema. What's missing is the crucial behavioral context: whether output is returned or persisted, and how the version labels are used.

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%, and each parameter (old_pack_dir, new_pack_dir, old_version, new_version) is documented in the schema itself. The description adds nothing beyond 'modpack differences', so the baseline 3 applies.

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?

States a specific verb (generate), resource (Changelog), output format (Markdown), and input basis (modpack differences), so the agent knows exactly what the call produces. It does not differentiate itself from siblings like generate_full_changelog or compare_modpacks, leaving the agent to infer the boundary.

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?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as generate_full_changelog, compare_modpacks, or save_changelog. The agent can only infer that it should be called when two pack directories differ, and must guess how this differs from a 'full' changelog.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_full_changelogA

生成包含 Modrinth 版本历史信息的完整 Changelog(网络请求较多,较慢)

NameRequiredDescriptionDefault
formatNo输出格式,默认 markdown
new_versionNo新版本标签
old_versionNo旧版本标签
new_pack_dirYes新版本整合包根目录路径
old_pack_dirYes旧版本整合包根目录路径

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does add one genuine trait: network-heavy and slow, plus an implicit dependency on the Modrinth API. It does not say whether the result is returned or written to disk (a save_changelog sibling exists), whether it is read-only, or how it handles API failures/rate limits.

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?

A single well-formed sentence with the purpose front-loaded and the performance caveat in a trailing parenthetical. Nothing is wasted, though it is arguably too terse given the unaddressed sibling relationship.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with no annotations and no output schema, the core purpose and the notable cost are covered. The remaining gaps are the return/behavior details and the explicit distinction from generate_changelog, which for a tool that may trigger many external requests is a meaningful omission.

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 100%, so all five parameters including the format enum and the two required pack directories are already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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?

States a specific verb and resource (generate a complete Changelog) and scopes it to including Modrinth version-history data. The word '完整' (complete) implicitly contrasts with the sibling generate_changelog, but that sibling is never named, so an agent must infer the boundary.

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 parenthetical note that it makes many network requests and is slow implies a tradeoff, suggesting this is the heavier option versus a lighter sibling. However, it never states when to prefer it over generate_changelog or compare_modpacks, leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_text_summaryB

生成简洁的纯文本格式变更记录,适合复制粘贴到 Discord/论坛/群聊

NameRequiredDescriptionDefault
new_versionNo新版本标签
old_versionNo旧版本标签
new_pack_dirYes新版本整合包根目录路径
old_pack_dirYes旧版本整合包根目录路径

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It usefully discloses the output format (concise plain text, copy-paste ready), which matters because there is no output schema. It does not say whether it only compares/reads the two pack dirs or persists anything (save_changelog exists as a sibling, implying this one does not save), nor how expensive the comparison is.

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?

A single front-loaded sentence with zero waste. It is appropriately sized but also thin — the brevity comes at the cost of the routing and behavior detail an agent needs.

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?

Four parameters at full schema coverage and no output schema mean the description needn't document inputs or return values, and it does state the output format. What is missing for a tool sitting among four changelog/compare siblings is any explicit routing guidance or note that it is a read-only analysis versus a writer.

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 100%, so old_pack_dir, new_pack_dir, old_version, and new_version are already documented in the schema. The description adds no parameter-level meaning such as whether version labels are optional display strings or how paths are resolved, so the baseline 3 applies.

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 pairs a specific verb (生成/generate) with a specific resource (变更记录/changelog) and adds the output shape (简洁的纯文本格式), so an agent knows this produces a short text changelog rather than a full one. It implicitly contrasts with generate_full_changelog via '简洁' but never names the sibling, so differentiation is inferred rather than stated.

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?

'适合复制粘贴到 Discord/论坛/群聊' gives a concrete usage context, which implies when to pick this over a formal changelog. However, it names no alternatives and gives no when-not guidance, so choosing between this, generate_changelog, and generate_full_changelog is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_mod_version_infoB

查询 Modrinth 上某个模组的历史版本信息(发布日期、加载器支持等)

NameRequiredDescriptionDefault
limitNo返回版本数量上限,默认 5
mod_nameYes模组名称或 slug(如 sodium、fabric-api)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden. It implies a read-only query and discloses what comes back (发布日期、加载器支持等), but says nothing about Modrinth API rate limits, behavior when the mod is not found, or ordering of results.

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?

A single front-loaded sentence that identifies the resource and the main returned fields without padding. It is appropriately sized, though it could also mention the limit or ordering.

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?

There is no output schema, so the description must convey the return shape; naming 发布日期 and 加载器支持 is a start, but '等' and the absence of ordering or pagination hints leave it partially specified for a version-history listing 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?

Schema description coverage is 100%, so both mod_name (slug examples) and limit (default 5) are already documented in the schema. The description adds no parameter meaning beyond that, so baseline 3 applies.

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 states a specific verb+resource: query a mod's historical version info on Modrinth, and names the returned content (release date, loader support). It clearly differs from changelog-generation siblings, but doesn't explicitly say so.

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?

Usage is only implied: fetch raw version history, as opposed to generate_changelog or generate_full_changelog which produce derived output. No explicit when-to-use/when-not or named alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_changelogB

将生成的 Changelog 保存到指定文件路径

NameRequiredDescriptionDefault
contentYes要保存的 changelog 内容
output_pathYes输出文件路径,如 C:/Users/xxx/Desktop/changelog.md

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 the full disclosure burden for a filesystem write. It says nothing about overwrite behavior if the file exists, whether parent directories are created, encoding, permission failures, or what the tool returns on success or error.

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?

One short front-loaded sentence with no filler, which is appropriate for a two-parameter tool. It is efficient but so terse that the brevity is costing information rather than just being tight.

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 simple 2-required-param sink with full schema coverage and no output schema, the description is minimally sufficient to invoke the tool correctly. It is nonetheless incomplete for a write operation: overwrite semantics and return behavior go unaddressed, and there are no annotations to cover that gap.

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 100% and both required parameters (content, output_path) are documented in the schema, including a path example. The description only restates that a path and changelog content are involved, adding no new semantics, so the baseline 3 applies.

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?

States a specific verb+object pair ('save the generated Changelog') plus the destination ('specified file path'), which is enough to separate it from the generate_* siblings. It does not name any sibling explicitly, so an agent must infer that this is the terminal step after generate_changelog.

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?

Usage is only implied: the phrase 'generated changelog' hints that this runs after a generation step, and there are no explicit when-not conditions or named alternatives. Nothing tells the agent whether the path must already exist or whether the file is overwritten.

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.

  1. 6 tool updatesv1.0.0
    • First observedcompare_modpacks
    • First observedgenerate_changelog
    • First observedgenerate_full_changelog
    • First observedgenerate_text_summary
    • First observedget_mod_version_info
    • First observedsave_changelog

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

The three generation tools have overlapping-sounding names, but their descriptions clarify distinct outputs: full changelog with Modrinth history, diff-based Markdown changelog, and plain-text summary. get_mod_version_info and generate_full_changelog overlap somewhat on Modrinth data, but one is a lookup and the other an aggregation, so boundaries are mostly clear.

Naming Consistency5/5

All tool names use consistent snake_case with a clear verb-first pattern (generate_*, compare_*, get_*, save_*). Minor pluralization in compare_modpacks is harmless and still predictable.

Tool Count5/5

Six tools is well-scoped for a changelog-generation server, covering comparison, generation variants, metadata lookup, and saving. Each tool has a clear purpose and none feels redundant.

Completeness4/5

The surface covers the core lifecycle: compare modpacks, generate Markdown or text summaries, enrich with Modrinth history, and save output. Minor gaps exist around customizing or appending to existing changelogs, but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables creating Minecraft modpack structures, searching Modrinth mods, resolving dependencies, and checking compatibility.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables reading, validating, and managing Minecraft resource packs, including structure checks, asset listing, pack comparison, and Modrinth queries.
    MIT