mirror of
				https://gitea.com/gitea/gitea-mcp.git
				synced 2025-10-30 01:41: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) |  | ||||||
|  | 	var repo *gitea_sdk.Repository | ||||||
|  | 	var err error | ||||||
|  | 	if organization != "" { | ||||||
|  | 		repo, _, err = gitea.Client().CreateOrgRepo(organization, opt) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 		return to.ErrorResult(fmt.Errorf("create repo err: %v", err)) | 			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