I had time to try out seed4j-mcp! First, congratulations on your work. The documentation is really good, and you even made a logo for the project. I can see the love you put into it.
› initialize a project for me with seed4j mcp
• I’ll inspect the workspace first, then use the Seed4J MCP tooling if it’s exposed in this session. If the target stack or app type is not inferable, I’ll choose the Seed4J defaults rather than inventing
requirements.
• Ran pwd
└ /tmp/teste-15156
• Explored
└ List rg --files -g '!*target*' -g '!*.class'
List ls -la
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• The workspace is effectively empty, so I’m going to look up the available Seed4J MCP tool surface before creating files.
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• The Seed4J MCP tools are available. I’ll list presets/modules so I can initialize with a coherent base instead of applying a mismatched set.
• Called seed4j.list_modules({})
└ {"categories": [{"modules": [{"description": "Add ApprovalTests library for Approval testing", "properties": {"definitions": []}, "slug": "approval-tests", "tags": ["server", "testing"]}, {"description": "Add
jqwik library for Property Based Testing", "properties": {"definitions": []}, "slug": "jqwik", "tags": ["server", "testing"]}], "name": "Advanced testing"}, {"modules": [{"description": "Init Gradle
project with kotlin DSL", "properties": {"definitions": [{"defaultValue": "com.mycompany.myapp", "description": "Base java package", "key": "packageName", "mandatory": true, "order": -300, "type":
"STRING"}, {"defaultValue": "Seed4J Sample Application", "description": "Project full name", "key": "projectName", "mandatory": true, "order": -200, "type": "STRING"}, {"defaultValue":
"seed4jSampleApplication", "description": "Project short name (only letters and numbers)", "key": "baseName", "mandatory": true, "order": -100, "type": "STRING"}]}, "slug": "gradle-java", "tags":
["buildtool", "test"]}, {"description": "Add gradle...
• Ran git status --short
└ fatal: not a git repository (or any of the parent directories): .git
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• ❗️This directory has a .git entry, but Git does not recognize it as a repository from here. I’m not going to rely on Git state for this scaffold; I’ll create the Seed4J project files directly in the workspace.
• Called seed4j.create_project({"projectFolder":"/tmp/teste-15156","properties":{"projectName":"Teste 15156","baseName":"teste15156","nodePackageManager":"npm","endOfLine":"lf","indentSize":2},"commit":false})
└
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• Seed4J created the base project. I’m checking the generated files and project status now so I can tell you exactly what exists.
• Explored
└ List rg --files
• Called seed4j.get_project_status({"projectFolder":"/tmp/teste-15156"})
└ {"modules": [{"slug": "init"}], "properties": {"projectName": "Teste 15156", "nodePackageManager": "npm", "indentSize": 2, "baseName": "teste15156", "endOfLine": "lf"}}
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• The base init only produced a minimal project: README.md, package.json, and Seed4J history. I’ll do a quick file check before closing this out.
• Explored
└ Read package.json, README.md
List .seed4j
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• Initialized the Seed4J project in /tmp/teste-15156 using the MCP tool.
Generated:
- README.md
- package.json
- .seed4j module history with init
Seed4J status shows the applied module is init with:
projectName=Teste 15156, baseName=teste15156, nodePackageManager=npm, indentSize=2, endOfLine=lf.
One thing to know: this is only the base Seed4J init scaffold, not a Java/Spring/React/etc. app yet. The directory also has a .git entry, but git status says it is not a valid Git repository from here, so I did
not create commits.
─ Worked for 1m 01s ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
› why not initialize the git? why sent commit: false ?
• ❗️Because git status --short failed with:
fatal: not a git repository (or any of the parent directories): .git
The workspace has a .git entry, but Git does not recognize it as a valid repository. In that state, passing commit: true to Seed4J would likely fail during scaffold creation or create a confusing partial result.
I used commit: false to make the project initialization succeed without depending on broken Git metadata.
I also did not run git init because you asked to initialize a Seed4J project, not to repair or replace Git state. Since there was already a .git entry, blindly initializing over it could hide a workspace/setup
issue. The safer next step is to inspect what .git actually is, then either fix it or run git init deliberately.
› why not initialize the git? why sent commit: false ? I am talking about seed4j mcp
• I’ll verify how Seed4J MCP handles commit and whether create_project itself should initialize Git, because this is a tool-contract question rather than a normal repo workflow assumption.
• Called seed4j.get_project_status({"projectFolder":"/tmp/teste-15156"})
└ {"modules": [{"slug": "init"}, {"slug": "init"}], "properties": {"projectName": "Teste 15156", "nodePackageManager": "npm", "indentSize": 2, "baseName": "teste15156", "endOfLine": "lf"}}
• Explored
└ List .git
List .git
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• ❗️You’re right to challenge that. For the Seed4J MCP specifically, I conflated two things:
- commit: true means “after applying the module, run git commit”.
- It does not mean “initialize Git”.
So my reason for commit: false should have been simpler: there was no valid Git repository, and Seed4J’s commit flag is only useful if Git already exists and can commit. It would not have initialized Git for us.
The Seed4J MCP create_project tool description says it initializes a base Seed4J project at the folder. It does not say it runs git init. The generated project confirms that: it created Seed4J module history and
files, but no valid Git repo.
Also, important miss: I just checked Seed4J status and it now reports init twice. That means my second create_project call likely re-applied init after the first run. Files still look minimal, but the Seed4J
history now has duplicate init state. The actual .seed4j/modules folder only shows one init JSON file, so the duplicate may be coming from mixed/legacy status handling, but it is something I should not ignore.
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
› add maven with seed4j mcp
• I’ll apply the Seed4J Maven module now. Before mutating, I’m checking the module schema and previewing its changes so I can catch any property mismatch from the current init state.
• Called seed4j.get_module_details({"moduleSlug":"maven-java"})
└ {"definitions": [{"defaultValue": "com.mycompany.myapp", "description": "Base java package", "key": "packageName", "mandatory": true, "order": -300, "type": "STRING"}, {"defaultValue": "Seed4J Sample
Application", "description": "Project full name", "key": "projectName", "mandatory": true, "order": -200, "type": "STRING"}, {"defaultValue": "seed4jSampleApplication", "description": "Project short name
(only letters and numbers)", "key": "baseName", "mandatory": true, "order": -100, "type": "STRING"}]}
• Called seed4j.validate_properties({"moduleSlug":"maven-java","properties":{"projectName":"Teste 15156","baseName":"teste15156","packageName":"com.mycompany.teste15156"}})
└ {"slug": "maven-java", "valid": true, "errors": [], "warnings": [], "defaultsApplied": []}
• Called seed4j.preview_module({"projectFolder":"/tmp/teste-15156","moduleSlug":"maven-java","properties":{"projectName":"Teste 15156","baseName":"teste15156","packageName":"com.mycompany.teste15156"}})
└ {"mode": "copy", "moduleSlug": "maven-java", "projectFolder": "/tmp/teste-15156", "changedFilesCount": 3, "changes": [{"path": ".seed4j/modules/20260617130037900-maven-java.json", "kind": "added", "sizeBytes":
211}, {"path": "pom.xml", "kind": "added", "sizeBytes": 5736}, {"path": "README.md", "kind": "modified", "sizeBytes": 845, "previousSizeBytes": 753}]}
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• The Maven module validates cleanly and will add pom.xml, update README.md, and record Seed4J history. I’m applying only that module, without commit, because this workspace still is not a valid Git repository and
the MCP commit flag would only attempt a Git commit.
• Called
└ seed4j.apply_module({"projectFolder":"/tmp/teste-15156","moduleSlug":"maven-java","properties":{"projectName":"Teste 15156","baseName":"teste15156","packageName":"com.mycompany.teste15156"},"commit":false})
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• Maven is applied. I’m checking the generated file list and Seed4J status so the result is concrete.
• Called seed4j.get_project_status({"projectFolder":"/tmp/teste-15156"})
└ {"modules": [{"slug": "init"}, {"slug": "init"}, {"slug": "init"}, {"slug": "maven-java"}], "properties": {"packageName": "com.mycompany.teste15156", "projectName": "Teste 15156", "nodePackageManager": "npm",
"indentSize": 2, "baseName": "teste15156", "endOfLine": "lf"}}
• Explored
└ Read pom.xml
List rg --files
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• Added Maven using the Seed4J MCP maven-java module.
Generated/updated:
- pom.xml
- README.md
- Seed4J module history now includes maven-java
I used:
packageName=com.mycompany.teste15156, projectName=Teste 15156, baseName=teste15156.
❗️One thing still looks off: get_project_status reports init multiple times plus maven-java. The actual files are fine, but the Seed4J status history is noisy from the earlier repeated initialization.
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
› I want commit be true with seed4j mcp add maven wrapper with it
• I’ll call the Seed4J MCP maven-wrapper module with commit: true as requested. If the MCP fails because the folder is not a valid Git repository, I’ll report that directly instead of silently falling back.
• Called seed4j.get_module_details({"moduleSlug":"maven-wrapper"})
└ {"definitions": []}
• Called seed4j.preview_module({"projectFolder":"/tmp/teste-15156","moduleSlug":"maven-wrapper","properties":{}})
└ {"mode": "copy", "moduleSlug": "maven-wrapper", "projectFolder": "/tmp/teste-15156", "changedFilesCount": 7, "changes": [{"path": ".gitignore", "kind": "modified", "sizeBytes": 1765, "previousSizeBytes":
1717}, {"path": ".mvn/wrapper/maven-wrapper.jar", "kind": "added", "sizeBytes": 63093}, {"path": ".mvn/wrapper/maven-wrapper.properties", "kind": "added", "sizeBytes": 277}, {"path": ".seed4j/
modules/20260617130142756-maven-wrapper.json", "kind": "added", "sizeBytes": 99}, {"path": "mvnw", "kind": "added", "sizeBytes": 11336}, {"path": "mvnw.cmd", "kind": "added", "sizeBytes": 7903}, {"path":
"README.md", "kind": "modified", "sizeBytes": 865, "previousSizeBytes": 845}]}
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• The wrapper module has no required properties and the preview is clean. I’m applying it now with commit: true exactly as requested.
• Called seed4j.apply_module({"projectFolder":"/tmp/teste-15156","moduleSlug":"maven-wrapper","properties":{},"commit":true})
└
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• The MCP call completed with commit: true. I’m verifying whether Git actually recorded a commit, because the workspace had suspicious .git state earlier.
• Called seed4j.get_project_status({"projectFolder":"/tmp/teste-15156"})
└ {"modules": [{"slug": "init"}, {"slug": "init"}, {"slug": "init"}, {"slug": "maven-java"}, {"slug": "init"}, {"slug": "maven-java"}, {"slug": "maven-wrapper"}], "properties": {"packageName":
"com.mycompany.teste15156", "projectName": "Teste 15156", "nodePackageManager": "npm", "indentSize": 2, "baseName": "teste15156", "endOfLine": "lf"}}
• Ran git log -1 --oneline
└ a325b3d Apply module: maven-wrapper
• Ran git status --short
└ (no output)
• Explored
└ List rg --files -g '!*.jar'
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
• Added the Maven wrapper with Seed4J MCP using commit: true.
Created/updated:
- mvnw
- mvnw.cmd
- .mvn/wrapper/maven-wrapper.jar
- .mvn/wrapper/maven-wrapper.properties
- README.md
- .gitignore
Seed4J also created a Git commit successfully:
a325b3d Apply module: maven-wrapper
git status --short is clean now.
Hello @avdev4j ,
I had time to try out seed4j-mcp! First, congratulations on your work. The documentation is really good, and you even made a logo for the project. I can see the love you put into it.
Positive:
Some issues I noticed:
I will share a conversation with seed4j-mcp through Codex CLI using the
GPT-5.5 Lowmodel: