diff --git a/cmd/cmd.go b/cmd/cmd.go index 0b51c08..fdeeb3e 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -3,6 +3,7 @@ package cmd import ( "context" "flag" + "os" "gitea.com/gitea/gitea-mcp/operation" flagPkg "gitea.com/gitea/gitea-mcp/pkg/flag" @@ -42,6 +43,12 @@ func init() { "", "Your personal access token", ) + flag.BoolVar( + &debug, + "d", + false, + "debug mode", + ) flag.BoolVar( &debug, "debug", @@ -52,7 +59,24 @@ func init() { flag.Parse() flagPkg.Host = host + if flagPkg.Host == "" { + flagPkg.Host = os.Getenv("GITEA_HOST") + } + if flagPkg.Host == "" { + flagPkg.Host = "https://gitea.com" + } + flagPkg.Token = token + if flagPkg.Token == "" { + flagPkg.Token = os.Getenv("GITEA_TOKEN") + } + + if debug { + flagPkg.Debug = debug + } + if !debug { + flagPkg.Debug = os.Getenv("GITEA_DEBUG") == "true" + } } func Execute(version string) { diff --git a/go.mod b/go.mod index caffc18..ab3e3e0 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.24.0 require ( code.gitea.io/sdk/gitea v0.20.0 - github.com/mark3labs/mcp-go v0.14.0 + github.com/mark3labs/mcp-go v0.14.1 go.uber.org/zap v1.27.0 ) diff --git a/go.sum b/go.sum index 3a577d4..e7e742b 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/mark3labs/mcp-go v0.14.0 h1:/bASI77oZbDKTQoCIxxPFu+UKn0o6OeA9C3cBrbapxM= -github.com/mark3labs/mcp-go v0.14.0/go.mod h1:xBB350hekQsJAK7gJAii8bcEoWemboLm2mRm5/+KBaU= +github.com/mark3labs/mcp-go v0.14.1 h1:NsieyFbuWQaeZSWSHPvJ5TwJdQwu+1jmivAIVljeouY= +github.com/mark3labs/mcp-go v0.14.1/go.mod h1:xBB350hekQsJAK7gJAii8bcEoWemboLm2mRm5/+KBaU= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= diff --git a/operation/issue/issue.go b/operation/issue/issue.go index 415b9aa..617b3a3 100644 --- a/operation/issue/issue.go +++ b/operation/issue/issue.go @@ -5,6 +5,7 @@ import ( "fmt" "gitea.com/gitea/gitea-mcp/pkg/gitea" + "gitea.com/gitea/gitea-mcp/pkg/log" "gitea.com/gitea/gitea-mcp/pkg/to" gitea_sdk "code.gitea.io/sdk/gitea" @@ -72,6 +73,7 @@ func RegisterTool(s *server.MCPServer) { } func GetIssueByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called GetIssueByIndexFn") owner := req.Params.Arguments["owner"].(string) repo := req.Params.Arguments["repo"].(string) index := req.Params.Arguments["index"].(float64) @@ -84,6 +86,7 @@ func GetIssueByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallT } func GetPullRequestByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called GetPullRequestByIndexFn") owner := req.Params.Arguments["owner"].(string) repo := req.Params.Arguments["repo"].(string) index := req.Params.Arguments["index"].(float64) @@ -96,6 +99,7 @@ func GetPullRequestByIndexFn(ctx context.Context, req mcp.CallToolRequest) (*mcp } func CreateIssueFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called CreateIssueFn") owner := req.Params.Arguments["owner"].(string) repo := req.Params.Arguments["repo"].(string) title := req.Params.Arguments["title"].(string) @@ -112,6 +116,7 @@ func CreateIssueFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolR } func CreateIssueCommentFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called CreateIssueCommentFn") owner := req.Params.Arguments["owner"].(string) repo := req.Params.Arguments["repo"].(string) index := req.Params.Arguments["index"].(float64) @@ -127,6 +132,7 @@ func CreateIssueCommentFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.Ca } func CreatePullRequestFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called CreatePullRequestFn") owner := req.Params.Arguments["owner"].(string) repo := req.Params.Arguments["repo"].(string) title := req.Params.Arguments["title"].(string) diff --git a/operation/repo/branch.go b/operation/repo/branch.go index aa75661..b287e96 100644 --- a/operation/repo/branch.go +++ b/operation/repo/branch.go @@ -4,6 +4,7 @@ import ( "context" "gitea.com/gitea/gitea-mcp/pkg/gitea" + "gitea.com/gitea/gitea-mcp/pkg/log" "github.com/mark3labs/mcp-go/mcp" gitea_sdk "code.gitea.io/sdk/gitea" @@ -25,6 +26,7 @@ var ( ) func CreateBranchFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called CreateBranchFn") owner := req.Params.Arguments["owner"].(string) repo := req.Params.Arguments["repo"].(string) branch := req.Params.Arguments["branch"].(string) diff --git a/operation/repo/repo.go b/operation/repo/repo.go index 7cd4ecc..8c85807 100644 --- a/operation/repo/repo.go +++ b/operation/repo/repo.go @@ -3,8 +3,9 @@ package repo import ( "context" - "code.gitea.io/sdk/gitea" - giteaPkg "gitea.com/gitea/gitea-mcp/pkg/gitea" + gitea_sdk "code.gitea.io/sdk/gitea" + "gitea.com/gitea/gitea-mcp/pkg/gitea" + "gitea.com/gitea/gitea-mcp/pkg/log" "gitea.com/gitea/gitea-mcp/pkg/to" "github.com/mark3labs/mcp-go/mcp" @@ -49,6 +50,7 @@ func RegisterTool(s *server.MCPServer) { } func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called CreateRepoFn") name := req.Params.Arguments["name"].(string) description := req.Params.Arguments["description"].(string) private := req.Params.Arguments["private"].(bool) @@ -60,7 +62,7 @@ func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolRe readme := req.Params.Arguments["readme"].(string) defaultBranch := req.Params.Arguments["default_branch"].(string) - opt := gitea.CreateRepoOption{ + opt := gitea_sdk.CreateRepoOption{ Name: name, Description: description, Private: private, @@ -72,7 +74,7 @@ func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolRe Readme: readme, DefaultBranch: defaultBranch, } - repo, _, err := giteaPkg.Client().CreateRepo(opt) + repo, _, err := gitea.Client().CreateRepo(opt) if err != nil { return nil, err } @@ -80,6 +82,7 @@ func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolRe } func ListMyReposFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called ListMyReposFn") page, ok := req.Params.Arguments["page"].(float64) if !ok { return mcp.NewToolResultError("get page number error"), nil @@ -88,13 +91,13 @@ func ListMyReposFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolR if !ok { return mcp.NewToolResultError("get page size number error"), nil } - opts := gitea.ListReposOptions{ - ListOptions: gitea.ListOptions{ + opt := gitea_sdk.ListReposOptions{ + ListOptions: gitea_sdk.ListOptions{ Page: int(page), PageSize: int(size), }, } - repos, _, err := giteaPkg.Client().ListMyRepos(opts) + repos, _, err := gitea.Client().ListMyRepos(opt) if err != nil { return mcp.NewToolResultError("List my repositories error"), err } diff --git a/operation/user/user.go b/operation/user/user.go index f1549b1..2462b7a 100644 --- a/operation/user/user.go +++ b/operation/user/user.go @@ -4,6 +4,7 @@ import ( "context" "gitea.com/gitea/gitea-mcp/pkg/gitea" + "gitea.com/gitea/gitea-mcp/pkg/log" "gitea.com/gitea/gitea-mcp/pkg/to" "github.com/mark3labs/mcp-go/mcp" @@ -26,6 +27,7 @@ func RegisterTool(s *server.MCPServer) { } func GetUserInfoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called GetUserInfoFn") user, _, err := gitea.Client().GetMyUserInfo() if err != nil { return mcp.NewToolResultError("Get My User Info Error"), err diff --git a/operation/version/version.go b/operation/version/version.go index 13b25f5..2da70ab 100644 --- a/operation/version/version.go +++ b/operation/version/version.go @@ -5,6 +5,7 @@ import ( "fmt" "gitea.com/gitea/gitea-mcp/pkg/flag" + "gitea.com/gitea/gitea-mcp/pkg/log" "gitea.com/gitea/gitea-mcp/pkg/to" "github.com/mark3labs/mcp-go/mcp" @@ -27,6 +28,7 @@ func RegisterTool(s *server.MCPServer) { } func GetGiteaMCPServerVersionFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + log.Debugf("Called GetGiteaMCPServerVersionFn") version := flag.Version if version == "" { version = "dev" diff --git a/pkg/gitea/gitea.go b/pkg/gitea/gitea.go index 859104a..daa9728 100644 --- a/pkg/gitea/gitea.go +++ b/pkg/gitea/gitea.go @@ -1,7 +1,6 @@ package gitea import ( - "os" "sync" "gitea.com/gitea/gitea-mcp/pkg/flag" @@ -18,18 +17,7 @@ var ( func Client() *gitea.Client { clientOnce.Do(func() { if client == nil { - host, token := flag.Host, flag.Token - if host == "" { - host = os.Getenv("GITEA_HOST") - } - if host == "" { - host = "https://gitea.com" - } - if token == "" { - token = os.Getenv("GITEA_TOKEN") - } - - c, err := gitea.NewClient(host, gitea.SetToken(token)) + c, err := gitea.NewClient(flag.Host, gitea.SetToken(flag.Token)) if err != nil { log.Fatalf("create gitea client err: %v", err) } diff --git a/pkg/log/log.go b/pkg/log/log.go index 20e414e..91402c6 100644 --- a/pkg/log/log.go +++ b/pkg/log/log.go @@ -5,6 +5,7 @@ import ( "sync" "time" + "gitea.com/gitea/gitea-mcp/pkg/flag" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -28,7 +29,13 @@ func Default() *zap.Logger { ws = zapcore.NewMultiWriteSyncer(wss...) enc := zapcore.NewConsoleEncoder(ec) - core := zapcore.NewCore(enc, ws, zapcore.DebugLevel) + var level zapcore.Level + if flag.Debug { + level = zapcore.DebugLevel + } else { + level = zapcore.InfoLevel + } + core := zapcore.NewCore(enc, ws, level) options := []zap.Option{ zap.AddStacktrace(zapcore.ErrorLevel), zap.AddCaller(), diff --git a/pkg/to/to.go b/pkg/to/to.go index 40ed892..a150415 100644 --- a/pkg/to/to.go +++ b/pkg/to/to.go @@ -3,6 +3,7 @@ package to import ( "encoding/json" + "gitea.com/gitea/gitea-mcp/pkg/log" "github.com/mark3labs/mcp-go/mcp" ) @@ -11,5 +12,6 @@ func TextResult(v any) (*mcp.CallToolResult, error) { if err != nil { return mcp.NewToolResultError("marshal result error"), err } + log.Debugf("Text Result: %s", string(result)) return mcp.NewToolResultText(string(result)), nil }