mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2025-08-23 14:23:05 +00:00
## Why With the following configuration: ```bash docker run -i --rm -e GITEA_HOST=<gitea_host> -e GITEA_ACCESS_TOKEN=<gitea_access_token_for_host> docker.gitea.com/gitea-mcp-server:latest ``` after mcp-client calling a tool, the gitea client will encounter the following fatal error: ``` FATAL gitea/gitea.go:47 create gitea client err: user does not exist [uid: 0, name: ] gitea.com/gitea/gitea-mcp/pkg/gitea.Client.func1 /app/pkg/gitea/gitea.go:47 sync.(*Once).doSlow /usr/local/go/src/sync/once.go:78 sync.(*Once).Do /usr/local/go/src/sync/once.go:69 gitea.com/gitea/gitea-mcp/pkg/gitea.Client /app/pkg/gitea/gitea.go:21 gitea.com/gitea/gitea-mcp/operation/search.SearchReposFn /app/operation/search/search.go:161 github.com/mark3labs/mcp-go/server.(*MCPServer).handleToolCall /go/pkg/mod/github.com/mark3labs/mcp-go@v0.18.0/server/server.go:717 github.com/mark3labs/mcp-go/server.(*MCPServer).HandleMessage /go/pkg/mod/github.com/mark3labs/mcp-go@v0.18.0/server/request_handler.go:264 github.com/mark3labs/mcp-go/server.(*StdioServer).processMessage /go/pkg/mod/github.com/mark3labs/mcp-go@v0.18.0/server/stdio.go:228 github.com/mark3labs/mcp-go/server.(*StdioServer).processInputStream /go/pkg/mod/github.com/mark3labs/mcp-go@v0.18.0/server/stdio.go:143 github.com/mark3labs/mcp-go/server.(*StdioServer).Listen /go/pkg/mod/github.com/mark3labs/mcp-go@v0.18.0/server/stdio.go:209 github.com/mark3labs/mcp-go/server.ServeStdio /go/pkg/mod/github.com/mark3labs/mcp-go@v0.18.0/server/stdio.go:282 gitea.com/gitea/gitea-mcp/operation.Run /app/operation/operation.go:48 gitea.com/gitea/gitea-mcp/cmd.Execute /app/cmd/cmd.go:119 main.main /app/main.go:12 runtime.main /usr/local/go/src/runtime/proc.go:283 ``` Turns out the root cause was because the `GITEA_HOST` environment variable wasn't overriding the default flag value, resulting in mismatch of host and access token. The if statement won't be entered7cfa1fa218/cmd/cmd.go (L74-L77)
Due to `host` could never be evaluated as an empty string from the default value `"http://gitea.com"`7cfa1fa218/cmd/cmd.go (L35-L40)
Unless user specify `gitea-mcp ... --host <empty_string> ...` with environment `GITEA_HOST=<non_empty_string>` at the same time, which is very unlikely IMHO. ## How - Set `host` flag default value from `GITEA_HOST` environment variable value - Remove possible dead code if-statement Co-authored-by: hiifong <i@hiif.ong> Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/23 Reviewed-by: hiifong <i@hiif.ong> Co-authored-by: Flynn Hou <flynnhou7@gmail.com> Co-committed-by: Flynn Hou <flynnhou7@gmail.com>
111 lines
1.6 KiB
Go
111 lines
1.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"os"
|
|
|
|
"gitea.com/gitea/gitea-mcp/operation"
|
|
flagPkg "gitea.com/gitea/gitea-mcp/pkg/flag"
|
|
"gitea.com/gitea/gitea-mcp/pkg/log"
|
|
)
|
|
|
|
var (
|
|
transport string
|
|
host string
|
|
port int
|
|
token string
|
|
|
|
debug bool
|
|
)
|
|
|
|
func init() {
|
|
flag.StringVar(
|
|
&transport,
|
|
"t",
|
|
"stdio",
|
|
"Transport type (stdio or sse)",
|
|
)
|
|
flag.StringVar(
|
|
&transport,
|
|
"transport",
|
|
"stdio",
|
|
"Transport type (stdio or sse)",
|
|
)
|
|
flag.StringVar(
|
|
&host,
|
|
"host",
|
|
os.Getenv("GITEA_HOST"),
|
|
"Gitea host",
|
|
)
|
|
flag.IntVar(
|
|
&port,
|
|
"port",
|
|
8080,
|
|
"sse port",
|
|
)
|
|
flag.StringVar(
|
|
&token,
|
|
"token",
|
|
"",
|
|
"Your personal access token",
|
|
)
|
|
flag.BoolVar(
|
|
&debug,
|
|
"d",
|
|
true,
|
|
"debug mode",
|
|
)
|
|
flag.BoolVar(
|
|
&debug,
|
|
"debug",
|
|
true,
|
|
"debug mode",
|
|
)
|
|
flag.BoolVar(
|
|
&flagPkg.Insecure,
|
|
"insecure",
|
|
false,
|
|
"ignore TLS certificate errors",
|
|
)
|
|
|
|
flag.Parse()
|
|
|
|
flagPkg.Host = host
|
|
if flagPkg.Host == "" {
|
|
flagPkg.Host = "https://gitea.com"
|
|
}
|
|
|
|
flagPkg.Port = port
|
|
|
|
flagPkg.Token = token
|
|
if flagPkg.Token == "" {
|
|
flagPkg.Token = os.Getenv("GITEA_ACCESS_TOKEN")
|
|
}
|
|
|
|
flagPkg.Mode = transport
|
|
|
|
if debug {
|
|
flagPkg.Debug = debug
|
|
}
|
|
if !debug {
|
|
flagPkg.Debug = os.Getenv("GITEA_DEBUG") == "true"
|
|
}
|
|
|
|
// Set insecure mode based on environment variable
|
|
if os.Getenv("GITEA_INSECURE") == "true" {
|
|
flagPkg.Insecure = true
|
|
}
|
|
}
|
|
|
|
func Execute(version string) {
|
|
defer log.Default().Sync()
|
|
if err := operation.Run(transport, version); err != nil {
|
|
if err == context.Canceled {
|
|
log.Info("Server shutdown due to context cancellation")
|
|
return
|
|
}
|
|
log.Fatalf("Run Gitea MCP Server Error: %v", err)
|
|
}
|
|
}
|