mirror of
				https://gitea.com/gitea/gitea-mcp.git
				synced 2025-11-04 04:11:50 +00:00 
			
		
		
		
	feat: added parameter 'organization' to tool 'create_repo' (#88)
Using the Gitea-mcp server I was missing the ability to create repositories in other organizations. e.g.: * I was only able to create `https://gitea.domain.com/myuser/repo` ✅ * I was not able to create `https://gitea.domain.com/organization/repo` ❌ This feature was planned, implemented and compiled by Claude Code. I have no clue about Golang. I then took the resulting `gitea-mcp` file and sucessfully tested it on my self-hosted gitea instance: * Creating `https://gitea.domain.com/myuser/repo` ✅ * Creating `https://gitea.domain.com/organization/repo` ✅ Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/88 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: marcluer <gitea@marcluerssen.de> Co-committed-by: marcluer <gitea@marcluerssen.de>
This commit is contained in:
		@@ -27,7 +27,7 @@ const (
 | 
				
			|||||||
var (
 | 
					var (
 | 
				
			||||||
	CreateRepoTool = mcp.NewTool(
 | 
						CreateRepoTool = mcp.NewTool(
 | 
				
			||||||
		CreateRepoToolName,
 | 
							CreateRepoToolName,
 | 
				
			||||||
		mcp.WithDescription("Create repository"),
 | 
							mcp.WithDescription("Create repository in personal account or organization"),
 | 
				
			||||||
		mcp.WithString("name", mcp.Required(), mcp.Description("Name of the repository to create")),
 | 
							mcp.WithString("name", mcp.Required(), mcp.Description("Name of the repository to create")),
 | 
				
			||||||
		mcp.WithString("description", mcp.Description("Description of the repository to create")),
 | 
							mcp.WithString("description", mcp.Description("Description of the repository to create")),
 | 
				
			||||||
		mcp.WithBoolean("private", mcp.Description("Whether the repository is private")),
 | 
							mcp.WithBoolean("private", mcp.Description("Whether the repository is private")),
 | 
				
			||||||
@@ -38,6 +38,7 @@ var (
 | 
				
			|||||||
		mcp.WithString("license", mcp.Description("License to use")),
 | 
							mcp.WithString("license", mcp.Description("License to use")),
 | 
				
			||||||
		mcp.WithString("readme", mcp.Description("Readme of the repository to create")),
 | 
							mcp.WithString("readme", mcp.Description("Readme of the repository to create")),
 | 
				
			||||||
		mcp.WithString("default_branch", mcp.Description("DefaultBranch of the repository (used when initializes and in template)")),
 | 
							mcp.WithString("default_branch", mcp.Description("DefaultBranch of the repository (used when initializes and in template)")),
 | 
				
			||||||
 | 
							mcp.WithString("organization", mcp.Description("Organization name to create repository in (optional - defaults to personal account)")),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ForkRepoTool = mcp.NewTool(
 | 
						ForkRepoTool = mcp.NewTool(
 | 
				
			||||||
@@ -120,6 +121,7 @@ func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolRe
 | 
				
			|||||||
	license, _ := req.GetArguments()["license"].(string)
 | 
						license, _ := req.GetArguments()["license"].(string)
 | 
				
			||||||
	readme, _ := req.GetArguments()["readme"].(string)
 | 
						readme, _ := req.GetArguments()["readme"].(string)
 | 
				
			||||||
	defaultBranch, _ := req.GetArguments()["default_branch"].(string)
 | 
						defaultBranch, _ := req.GetArguments()["default_branch"].(string)
 | 
				
			||||||
 | 
						organization, _ := req.GetArguments()["organization"].(string)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opt := gitea_sdk.CreateRepoOption{
 | 
						opt := gitea_sdk.CreateRepoOption{
 | 
				
			||||||
		Name:          name,
 | 
							Name:          name,
 | 
				
			||||||
@@ -133,9 +135,19 @@ func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolRe
 | 
				
			|||||||
		Readme:        readme,
 | 
							Readme:        readme,
 | 
				
			||||||
		DefaultBranch: defaultBranch,
 | 
							DefaultBranch: defaultBranch,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	repo, _, err := gitea.Client().CreateRepo(opt)
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						var repo *gitea_sdk.Repository
 | 
				
			||||||
		return to.ErrorResult(fmt.Errorf("create repo err: %v", err))
 | 
						var err error
 | 
				
			||||||
 | 
						if organization != "" {
 | 
				
			||||||
 | 
							repo, _, err = gitea.Client().CreateOrgRepo(organization, opt)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return to.ErrorResult(fmt.Errorf("create organization repository '%s' in '%s' err: %v", name, organization, err))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							repo, _, err = gitea.Client().CreateRepo(opt)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return to.ErrorResult(fmt.Errorf("create repository '%s' err: %v", name, err))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return to.TextResult(repo)
 | 
						return to.TextResult(repo)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user