1 Commits
v0.9.0 ... main

Author SHA1 Message Date
silverwind
9ce5604e4c Improve CLI help text and flags (#139)
## Summary
- Replace default `flag.Usage` with custom 2-column layout using `text/tabwriter`
- Add short and long aliases for all CLI flags
- Add environment variables section with sorted entries
- Handle `-version` flag in `Execute()`

## Sample output
```
Usage: gitea-mcp [options]

Options:
  -t, -transport <type>   Transport type: stdio or http (default: stdio)
  -H, -host <url>         Gitea host URL (default: https://gitea.com)
  -p, -port <number>      HTTP server port (default: 8080)
  -T, -token <token>      Personal access token
  -r, -read-only          Expose only read-only tools
  -d, -debug              Enable debug mode
  -k, -insecure           Ignore TLS certificate errors
  -v, -version            Print version and exit

Environment variables:
  GITEA_ACCESS_TOKEN   Provide access token
  GITEA_DEBUG          Set to 'true' for debug mode
  GITEA_HOST           Override Gitea host URL
  GITEA_INSECURE       Set to 'true' to ignore TLS errors
  GITEA_READONLY       Set to 'true' for read-only mode
  MCP_MODE             Override transport mode
```

*Created by Claude on behalf of @silverwind*

Reviewed-on: https://gitea.com/gitea/gitea-mcp/pulls/139
Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-committed-by: silverwind <me@silverwind.io>
2026-02-26 18:49:37 +00:00

View File

@@ -3,7 +3,9 @@ package cmd
import ( import (
"context" "context"
"flag" "flag"
"fmt"
"os" "os"
"text/tabwriter"
"gitea.com/gitea/gitea-mcp/operation" "gitea.com/gitea/gitea-mcp/operation"
flagPkg "gitea.com/gitea/gitea-mcp/pkg/flag" flagPkg "gitea.com/gitea/gitea-mcp/pkg/flag"
@@ -11,60 +13,53 @@ import (
) )
var ( var (
host string host string
port int port int
token string token string
version bool
) )
func init() { func init() {
flag.StringVar( flag.StringVar(&flagPkg.Mode, "t", "stdio", "")
&flagPkg.Mode, flag.StringVar(&flagPkg.Mode, "transport", "stdio", "")
"t", flag.StringVar(&host, "H", os.Getenv("GITEA_HOST"), "")
"stdio", flag.StringVar(&host, "host", os.Getenv("GITEA_HOST"), "")
"Transport type (stdio or http)", flag.IntVar(&port, "p", 8080, "")
) flag.IntVar(&port, "port", 8080, "")
flag.StringVar( flag.StringVar(&token, "T", "", "")
&flagPkg.Mode, flag.StringVar(&token, "token", "", "")
"transport", flag.BoolVar(&flagPkg.ReadOnly, "r", false, "")
"stdio", flag.BoolVar(&flagPkg.ReadOnly, "read-only", false, "")
"Transport type (stdio or http)", flag.BoolVar(&flagPkg.Debug, "d", false, "")
) flag.BoolVar(&flagPkg.Debug, "debug", false, "")
flag.StringVar( flag.BoolVar(&flagPkg.Insecure, "k", false, "")
&host, flag.BoolVar(&flagPkg.Insecure, "insecure", false, "")
"host", flag.BoolVar(&version, "v", false, "")
os.Getenv("GITEA_HOST"), flag.BoolVar(&version, "version", false, "")
"Gitea host",
) flag.Usage = func() {
flag.IntVar( w := tabwriter.NewWriter(os.Stderr, 0, 0, 3, ' ', 0)
&port, fmt.Fprintln(os.Stderr, "Usage: gitea-mcp [options]")
"port", fmt.Fprintln(os.Stderr)
8080, fmt.Fprintln(os.Stderr, "Options:")
"http port", fmt.Fprintf(w, " -t, -transport <type>\tTransport type: stdio or http (default: stdio)\n")
) fmt.Fprintf(w, " -H, -host <url>\tGitea host URL (default: https://gitea.com)\n")
flag.StringVar( fmt.Fprintf(w, " -p, -port <number>\tHTTP server port (default: 8080)\n")
&token, fmt.Fprintf(w, " -T, -token <token>\tPersonal access token\n")
"token", fmt.Fprintf(w, " -r, -read-only\tExpose only read-only tools\n")
"", fmt.Fprintf(w, " -d, -debug\tEnable debug mode\n")
"Your personal access token", fmt.Fprintf(w, " -k, -insecure\tIgnore TLS certificate errors\n")
) fmt.Fprintf(w, " -v, -version\tPrint version and exit\n")
flag.BoolVar( fmt.Fprintln(w)
&flagPkg.ReadOnly, fmt.Fprintln(w, "Environment variables:")
"read-only", fmt.Fprintf(w, " GITEA_ACCESS_TOKEN\tProvide access token\n")
false, fmt.Fprintf(w, " GITEA_DEBUG\tSet to 'true' for debug mode\n")
"Read-only mode", fmt.Fprintf(w, " GITEA_HOST\tOverride Gitea host URL\n")
) fmt.Fprintf(w, " GITEA_INSECURE\tSet to 'true' to ignore TLS errors\n")
flag.BoolVar( fmt.Fprintf(w, " GITEA_READONLY\tSet to 'true' for read-only mode\n")
&flagPkg.Debug, fmt.Fprintf(w, " MCP_MODE\tOverride transport mode\n")
"d", w.Flush()
false, }
"debug mode (If -d flag is provided, debug mode will be enabled by default)",
)
flag.BoolVar(
&flagPkg.Insecure,
"insecure",
false,
"ignore TLS certificate errors",
)
flag.Parse() flag.Parse()
@@ -99,6 +94,10 @@ func init() {
} }
func Execute() { func Execute() {
if version {
fmt.Fprintln(os.Stdout, flagPkg.Version)
return
}
defer log.Default().Sync() //nolint:errcheck // best-effort flush defer log.Default().Sync() //nolint:errcheck // best-effort flush
if err := operation.Run(); err != nil { if err := operation.Run(); err != nil {
if err == context.Canceled { if err == context.Canceled {