mc-changelog-mcp
Queries the Modrinth API for Minecraft mod version history and uses that version information to enrich generated modpack changelogs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mc-changelog-mcpCompare my old and new modpack folders and generate a Markdown changelog"
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.
mc-changelog-mcp
MCP server for Minecraft modpack changelog generation and version comparison.
Tools
Tool | Description |
| Compare two modpack directories and list added/removed/changed mods |
| Generate a Markdown-format changelog from a modpack directory |
| Generate a plain-text summary (suitable for Discord/forum posts) |
| Query Modrinth for a mod's version history (requires network) |
| Save a generated changelog to a file |
| 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.jsMCP 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 根地址,支持自建网关/代理 |
|
| 请求 User-Agent(Modrinth 要求标明来源) |
|
| 整合包内模组所在子目录名 |
|
| 增强信息(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,zodNetwork access required only for
get_mod_version_infoandgenerate_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
└── .gitignoreLicense
MIT
Available Tools
6 toolscompare_modpacksA
比较两个整合包目录的差异,返回新增、删除、更新的模组列表
| Name | Required | Description | Default |
|---|---|---|---|
| new_pack_dir | Yes | 新版本整合包根目录路径 | |
| old_pack_dir | Yes | 旧版本整合包根目录路径 |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| new_version | No | 新版本标签(如 v1.1.0) | |
| old_version | No | 旧版本标签(如 v1.0.0) | |
| new_pack_dir | Yes | 新版本整合包根目录路径 | |
| old_pack_dir | Yes | 旧版本整合包根目录路径 |
TDQS
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.
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.
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.
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.
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.
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(网络请求较多,较慢)
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 输出格式,默认 markdown | |
| new_version | No | 新版本标签 | |
| old_version | No | 旧版本标签 | |
| new_pack_dir | Yes | 新版本整合包根目录路径 | |
| old_pack_dir | Yes | 旧版本整合包根目录路径 |
TDQS
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.
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.
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.
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.
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.
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/论坛/群聊
| Name | Required | Description | Default |
|---|---|---|---|
| new_version | No | 新版本标签 | |
| old_version | No | 旧版本标签 | |
| new_pack_dir | Yes | 新版本整合包根目录路径 | |
| old_pack_dir | Yes | 旧版本整合包根目录路径 |
TDQS
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.
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.
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.
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.
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.
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 上某个模组的历史版本信息(发布日期、加载器支持等)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 返回版本数量上限,默认 5 | |
| mod_name | Yes | 模组名称或 slug(如 sodium、fabric-api) |
TDQS
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.
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.
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.
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.
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.
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 保存到指定文件路径
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | 要保存的 changelog 内容 | |
| output_path | Yes | 输出文件路径,如 C:/Users/xxx/Desktop/changelog.md |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v1.0.0- First observed
compare_modpacks - First observed
generate_changelog - First observed
generate_full_changelog - First observed
generate_text_summary - First observed
get_mod_version_info - First observed
save_changelog
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Detect breaking changes, generate changelogs, diff, and validate OpenAPI specs.
Breaking changes and changelogs between two npm or PyPI package versions, from real release notes.
Compare two JSON files deeply, regardless of order. Get a detailed difference report highlighting…
Create, update, and publish changelog entries on your Patchlog changelog from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceGenerate professional changelogs from git history and suggest semver bumps, with optional AI enhancement via Claude.15 npm2MIT
- AlicenseNot gradedqualityBmaintenanceEnables creating Minecraft modpack structures, searching Modrinth mods, resolving dependencies, and checking compatibility.MIT
- AlicenseAqualityBmaintenanceEnables reading, validating, comparing, and cleaning up Minecraft mod configuration files in .cfg, .toml, and .json formats.6MIT
- AlicenseNot gradedqualityCmaintenanceEnables reading, validating, and managing Minecraft resource packs, including structure checks, asset listing, pack comparison, and Modrinth queries.MIT