package organization import ( "context" "errors" "fmt" "git.lethalbits.com/lethalbits/gitea-mcp/pkg/gitea" "git.lethalbits.com/lethalbits/gitea-mcp/pkg/log" "git.lethalbits.com/lethalbits/gitea-mcp/pkg/params" "git.lethalbits.com/lethalbits/gitea-mcp/pkg/to" gitea_sdk "code.gitea.io/sdk/gitea" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" ) const ( ListOrgActivityFeedsToolName = "list_org_activity_feeds" ListTeamActivityFeedsToolName = "list_team_activity_feeds" ) var ( ListOrgActivityFeedsTool = mcp.NewTool( ListOrgActivityFeedsToolName, mcp.WithDescription("List an organization's activity feeds"), mcp.WithString("org", mcp.Required(), mcp.Description("organization name")), mcp.WithNumber("page", mcp.Description("page number"), mcp.DefaultNumber(1)), mcp.WithNumber("pageSize", mcp.Description("page size"), mcp.DefaultNumber(100)), ) ListTeamActivityFeedsTool = mcp.NewTool( ListTeamActivityFeedsToolName, mcp.WithDescription("List a team's activity feeds"), mcp.WithNumber("id", mcp.Required(), mcp.Description("team ID")), mcp.WithNumber("page", mcp.Description("page number"), mcp.DefaultNumber(1)), mcp.WithNumber("pageSize", mcp.Description("page size"), mcp.DefaultNumber(100)), ) ) func init() { Tool.RegisterRead(server.ServerTool{Tool: ListOrgActivityFeedsTool, Handler: ListOrgActivityFeedsFn}) Tool.RegisterRead(server.ServerTool{Tool: ListTeamActivityFeedsTool, Handler: ListTeamActivityFeedsFn}) } func ListOrgActivityFeedsFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { log.Debugf("Called ListOrgActivityFeedsFn") org, ok := req.GetArguments()["org"].(string) if !ok { return to.ErrorResult(errors.New("org is required")) } page := params.GetOptionalInt(req.GetArguments(), "page", 1) pageSize := params.GetOptionalInt(req.GetArguments(), "pageSize", 100) client, err := gitea.ClientFromContext(ctx) if err != nil { return to.ErrorResult(fmt.Errorf("get gitea client err: %v", err)) } feeds, _, err := client.ListOrgActivityFeeds(org, gitea_sdk.ListOrgActivityFeedsOptions{ ListOptions: gitea_sdk.ListOptions{Page: int(page), PageSize: int(pageSize)}, }) if err != nil { return to.ErrorResult(fmt.Errorf("list org %s activity feeds err: %v", org, err)) } return to.TextResult(feeds) } func ListTeamActivityFeedsFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { log.Debugf("Called ListTeamActivityFeedsFn") id, err := params.GetIndex(req.GetArguments(), "id") if err != nil { return to.ErrorResult(err) } page := params.GetOptionalInt(req.GetArguments(), "page", 1) pageSize := params.GetOptionalInt(req.GetArguments(), "pageSize", 100) client, err := gitea.ClientFromContext(ctx) if err != nil { return to.ErrorResult(fmt.Errorf("get gitea client err: %v", err)) } feeds, _, err := client.ListTeamActivityFeeds(id, gitea_sdk.ListTeamActivityFeedsOptions{ ListOptions: gitea_sdk.ListOptions{Page: int(page), PageSize: int(pageSize)}, }) if err != nil { return to.ErrorResult(fmt.Errorf("list team %d activity feeds err: %v", id, err)) } return to.TextResult(feeds) }