mirror of
https://gitea.com/gitea/gitea-mcp.git
synced 2026-03-13 16:35:12 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22fc663387 | ||
|
|
e0abd256a3 | ||
|
|
73263e74d0 |
@@ -2,6 +2,7 @@ package operation
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
@@ -136,7 +137,7 @@ func Run() error {
|
|||||||
close(shutdownDone)
|
close(shutdownDone)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if err := httpServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil {
|
if err := httpServer.Start(fmt.Sprintf(":%d", flag.Port)); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
<-shutdownDone // Wait for shutdown to finish
|
<-shutdownDone // Wait for shutdown to finish
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package repo
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"gitea.com/gitea/gitea-mcp/pkg/gitea"
|
"gitea.com/gitea/gitea-mcp/pkg/gitea"
|
||||||
@@ -18,9 +19,10 @@ import (
|
|||||||
var Tool = tool.New()
|
var Tool = tool.New()
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CreateRepoToolName = "create_repo"
|
CreateRepoToolName = "create_repo"
|
||||||
ForkRepoToolName = "fork_repo"
|
ForkRepoToolName = "fork_repo"
|
||||||
ListMyReposToolName = "list_my_repos"
|
ListMyReposToolName = "list_my_repos"
|
||||||
|
ListOrgReposToolName = "list_org_repos"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -55,6 +57,14 @@ var (
|
|||||||
mcp.WithNumber("page", mcp.Required(), mcp.Description("Page number"), mcp.DefaultNumber(1), mcp.Min(1)),
|
mcp.WithNumber("page", mcp.Required(), mcp.Description("Page number"), mcp.DefaultNumber(1), mcp.Min(1)),
|
||||||
mcp.WithNumber("perPage", mcp.Required(), mcp.Description("results per page"), mcp.DefaultNumber(30), mcp.Min(1)),
|
mcp.WithNumber("perPage", mcp.Required(), mcp.Description("results per page"), mcp.DefaultNumber(30), mcp.Min(1)),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ListOrgReposTool = mcp.NewTool(
|
||||||
|
ListOrgReposToolName,
|
||||||
|
mcp.WithDescription("List repositories of an organization"),
|
||||||
|
mcp.WithString("org", mcp.Required(), mcp.Description("Organization name")),
|
||||||
|
mcp.WithNumber("page", mcp.Required(), mcp.Description("Page number"), mcp.DefaultNumber(1), mcp.Min(1)),
|
||||||
|
mcp.WithNumber("pageSize", mcp.Required(), mcp.Description("Page size number"), mcp.DefaultNumber(100), mcp.Min(1)),
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -70,6 +80,10 @@ func init() {
|
|||||||
Tool: ListMyReposTool,
|
Tool: ListMyReposTool,
|
||||||
Handler: ListMyReposFn,
|
Handler: ListMyReposFn,
|
||||||
})
|
})
|
||||||
|
Tool.RegisterRead(server.ServerTool{
|
||||||
|
Tool: ListOrgReposTool,
|
||||||
|
Handler: ListOrgReposFn,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
func CreateRepoFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
@@ -178,3 +192,34 @@ func ListMyReposFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolR
|
|||||||
|
|
||||||
return to.TextResult(slimRepos(repos))
|
return to.TextResult(slimRepos(repos))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ListOrgReposFn(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
|
log.Debugf("Called ListOrgReposFn")
|
||||||
|
org, ok := req.GetArguments()["org"].(string)
|
||||||
|
if !ok {
|
||||||
|
return to.ErrorResult(errors.New("organization name is required"))
|
||||||
|
}
|
||||||
|
page, ok := req.GetArguments()["page"].(float64)
|
||||||
|
if !ok {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
pageSize, ok := req.GetArguments()["pageSize"].(float64)
|
||||||
|
if !ok {
|
||||||
|
pageSize = 100
|
||||||
|
}
|
||||||
|
opt := gitea_sdk.ListOrgReposOptions{
|
||||||
|
ListOptions: gitea_sdk.ListOptions{
|
||||||
|
Page: int(page),
|
||||||
|
PageSize: int(pageSize),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
client, err := gitea.ClientFromContext(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return to.ErrorResult(fmt.Errorf("get gitea client err: %v", err))
|
||||||
|
}
|
||||||
|
repos, _, err := client.ListOrgRepos(org, opt)
|
||||||
|
if err != nil {
|
||||||
|
return to.ErrorResult(fmt.Errorf("list organization '%s' repositories error: %v", org, err))
|
||||||
|
}
|
||||||
|
return to.TextResult(repos)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user