-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathserver.go
More file actions
125 lines (107 loc) · 3.87 KB
/
server.go
File metadata and controls
125 lines (107 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"context"
"fmt"
"log"
"devops-mcp-server/artifactregistry"
"devops-mcp-server/bm25"
"devops-mcp-server/cloudbuild"
"devops-mcp-server/cloudrun"
"devops-mcp-server/cloudstorage"
"devops-mcp-server/devconnect"
"devops-mcp-server/osv"
// "devops-mcp-server/rag"
artifactregistryclient "devops-mcp-server/artifactregistry/client"
cloudbuildclient "devops-mcp-server/cloudbuild/client"
cloudrunclient "devops-mcp-server/cloudrun/client"
cloudstorageclient "devops-mcp-server/cloudstorage/client"
developerconnectclient "devops-mcp-server/devconnect/client"
iamclient "devops-mcp-server/iam/client"
osvclient "devops-mcp-server/osv/client"
// ragclient "devops-mcp-server/rag/client"
bm25client "devops-mcp-server/bm25/client"
resourcemanagerclient "devops-mcp-server/resourcemanager/client"
_ "embed"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
var version = "0.1.0-dev"
func createServer() *mcp.Server {
opts := &mcp.ServerOptions{
Instructions: "Google Cloud DevOps MCP Server",
HasResources: false,
}
server := mcp.NewServer(&mcp.Implementation{
Name: "devops",
Title: "Google Cloud DevOps MCP Server",
Version: version,
}, opts)
ctx := context.Background()
if err := addAllTools(ctx, server); err != nil {
log.Fatalf("failed to add tools: %v", err)
}
return server
}
func addAllTools(ctx context.Context, server *mcp.Server) error {
i, err := iamclient.NewClient(ctx)
if err != nil {
return fmt.Errorf("failed to create IAM client: %w", err)
}
r, err := resourcemanagerclient.NewClient(ctx)
if err != nil {
return fmt.Errorf("failed to create resource manager client: %w", err)
}
arClient, err := artifactregistryclient.NewArtifactRegistryClient(ctx)
if err != nil {
return fmt.Errorf("failed to create ArtifactRegistry client: %w", err)
}
crClient, err := cloudrunclient.NewCloudRunClient(ctx)
if err != nil {
return fmt.Errorf("failed to create CloudRun client: %w", err)
}
csClient, err := cloudstorageclient.NewCloudStorageClient(ctx)
if err != nil {
return fmt.Errorf("failed to create CloudStorage client: %w", err)
}
devConnectClient, err := developerconnectclient.NewDeveloperConnectClient(ctx)
if err != nil {
return fmt.Errorf("failed to create dev connect client: %w", err)
}
cbClient, err := cloudbuildclient.NewCloudBuildClient(ctx)
if err != nil {
return fmt.Errorf("failed to create CloudBuild client: %w", err)
}
osvClient, err := osvclient.NewClient(ctx)
if err != nil {
return fmt.Errorf("failed to create OSV client: %w", err)
}
// ragClient, err := ragclient.NewClient(ctx)
// if err != nil {
// return fmt.Errorf("failed to create rag client: %w", err)
// }
bm25Client, err := bm25client.NewClient(ctx)
if err != nil {
return fmt.Errorf("failed to create bm25 client: %w", err)
}
(&artifactregistry.Handler{ArClient: arClient, IamClient: i}).Register(server)
(&cloudrun.Handler{CrClient: crClient}).Register(server)
(&devconnect.Handler{DcClient: devConnectClient}).Register(server)
(&cloudbuild.Handler{CbClient: cbClient, IClient: i, RClient: r}).Register(server)
(&cloudstorage.Handler{CsClient: csClient}).Register(server)
(&osv.Handler{OsvClient: osvClient}).Register(server)
// (&rag.Handler{RagClient: ragClient}).Register(server)
(&bm25.Handler{BM25Client: bm25Client}).Register(server)
return nil
}