62 lines
2.0 KiB
Go
62 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/allowlist"
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/auth"
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/config"
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/gitea"
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/mcp"
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/registry"
|
|
"gitea.d-ma.be/mathias/gitea-mcp/internal/tools"
|
|
)
|
|
|
|
func main() {
|
|
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
|
|
|
|
cfg, err := config.Load()
|
|
if err != nil {
|
|
logger.Error("load config", "err", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
giteaClient := gitea.NewClient(cfg.GiteaBaseURL, cfg.GiteaAPIToken)
|
|
ownerAllow := allowlist.New(cfg.AllowedOwners)
|
|
|
|
reg := registry.New()
|
|
reg.Register(tools.NewRepoList(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewRepoGet(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewFileRead(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewFileWriteBranch(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewPRCreate(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewPRGet(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewWorkflowRunTrigger(giteaClient, ownerAllow, cfg.GiteaBaseURL))
|
|
reg.Register(tools.NewWorkflowRunStatus(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewRepoSearch(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewCodeSearch(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewIssueCreate(giteaClient, ownerAllow))
|
|
reg.Register(tools.NewIssueComment(giteaClient, ownerAllow))
|
|
|
|
mcpSrv := mcp.NewServer(mcp.ServerOptions{
|
|
Registry: reg,
|
|
Sessions: mcp.NewSessionStore(),
|
|
})
|
|
|
|
mux := http.NewServeMux()
|
|
mux.Handle("/mcp", mcp.OriginAllowlist(cfg.OriginAllowlist)(auth.CallerMiddleware(mcpSrv)))
|
|
mux.HandleFunc("/healthz", func(w http.ResponseWriter, _ *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
_, _ = w.Write([]byte("ok"))
|
|
})
|
|
|
|
addr := ":" + cfg.Port
|
|
logger.Info("gitea-mcp starting", "addr", addr, "version", "0.1.0")
|
|
if err := http.ListenAndServe(addr, mux); err != nil {
|
|
logger.Error("server stopped", "err", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|