Add mcp-master binary and build target
New cmd/mcp-master/ entry point following the agent pattern: cobra CLI with --config, version, and server commands. Makefile: add mcp-master target, update all and clean targets. Example config: deploy/examples/mcp-master.toml with all sections. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
7
Makefile
7
Makefile
@@ -8,6 +8,9 @@ mcp:
|
|||||||
mcp-agent:
|
mcp-agent:
|
||||||
CGO_ENABLED=0 go build $(LDFLAGS) -o mcp-agent ./cmd/mcp-agent
|
CGO_ENABLED=0 go build $(LDFLAGS) -o mcp-agent ./cmd/mcp-agent
|
||||||
|
|
||||||
|
mcp-master:
|
||||||
|
CGO_ENABLED=0 go build $(LDFLAGS) -o mcp-master ./cmd/mcp-master
|
||||||
|
|
||||||
build:
|
build:
|
||||||
go build ./...
|
go build ./...
|
||||||
|
|
||||||
@@ -30,6 +33,6 @@ proto-lint:
|
|||||||
buf breaking --against '.git#branch=master,subdir=proto'
|
buf breaking --against '.git#branch=master,subdir=proto'
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f mcp mcp-agent
|
rm -f mcp mcp-agent mcp-master
|
||||||
|
|
||||||
all: vet lint test mcp mcp-agent
|
all: vet lint test mcp mcp-agent mcp-master
|
||||||
|
|||||||
49
cmd/mcp-master/main.go
Normal file
49
cmd/mcp-master/main.go
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.wntrmute.dev/mc/mcp/internal/config"
|
||||||
|
"git.wntrmute.dev/mc/mcp/internal/master"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
version = "dev"
|
||||||
|
cfgPath string
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
root := &cobra.Command{
|
||||||
|
Use: "mcp-master",
|
||||||
|
Short: "Metacircular Control Plane master",
|
||||||
|
}
|
||||||
|
root.PersistentFlags().StringVarP(&cfgPath, "config", "c", "", "config file path")
|
||||||
|
|
||||||
|
root.AddCommand(&cobra.Command{
|
||||||
|
Use: "version",
|
||||||
|
Short: "Print version",
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
fmt.Println(version)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
root.AddCommand(&cobra.Command{
|
||||||
|
Use: "server",
|
||||||
|
Short: "Start the master server",
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
cfg, err := config.LoadMasterConfig(cfgPath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("load config: %w", err)
|
||||||
|
}
|
||||||
|
return master.Run(cfg, version)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
if err := root.Execute(); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
94
deploy/examples/mcp-master.toml
Normal file
94
deploy/examples/mcp-master.toml
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
# MCP Master configuration
|
||||||
|
#
|
||||||
|
# Default location: /srv/mcp-master/mcp-master.toml
|
||||||
|
# Override with: mcp-master server --config /path/to/mcp-master.toml
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# gRPC server
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[server]
|
||||||
|
# Listen address for the gRPC server. Bind to the Tailnet interface.
|
||||||
|
grpc_addr = "100.95.252.120:9555"
|
||||||
|
tls_cert = "/srv/mcp-master/certs/cert.pem"
|
||||||
|
tls_key = "/srv/mcp-master/certs/key.pem"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Database
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[database]
|
||||||
|
path = "/srv/mcp-master/master.db"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# MCIAS (for validating inbound CLI/agent tokens)
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[mcias]
|
||||||
|
server_url = "https://mcias.metacircular.net:8443"
|
||||||
|
ca_cert = "/srv/mcp-master/certs/ca.pem"
|
||||||
|
service_name = "mcp-master"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Master identity (for dialing agents)
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[master]
|
||||||
|
# Path to the MCIAS service token file used by the master to
|
||||||
|
# authenticate to agents when forwarding deploys and edge routes.
|
||||||
|
service_token_path = "/srv/mcp-master/mcias-token"
|
||||||
|
|
||||||
|
# CA cert for verifying agent TLS certificates.
|
||||||
|
ca_cert = "/srv/mcp-master/certs/ca.pem"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Edge routing
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[edge]
|
||||||
|
# Public hostnames in service definitions must fall under one of these
|
||||||
|
# domains. Validation uses proper domain label matching.
|
||||||
|
allowed_domains = ["metacircular.net", "wntrmute.net"]
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Agent registration
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[registration]
|
||||||
|
# MCIAS service identities permitted to register.
|
||||||
|
allowed_agents = ["agent-rift", "agent-svc", "agent-orion"]
|
||||||
|
|
||||||
|
# Maximum registered nodes.
|
||||||
|
max_nodes = 16
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Timeouts
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[timeouts]
|
||||||
|
deploy = "5m"
|
||||||
|
edge_route = "30s"
|
||||||
|
health_check = "5s"
|
||||||
|
undeploy = "2m"
|
||||||
|
snapshot = "10m"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# DNS (MCNS)
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[mcns]
|
||||||
|
server_url = "https://mcns.svc.mcp.metacircular.net:8443"
|
||||||
|
ca_cert = "/srv/mcp-master/certs/ca.pem"
|
||||||
|
token_path = "/srv/mcp-master/mcns-token"
|
||||||
|
zone = "svc.mcp.metacircular.net"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Logging
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[log]
|
||||||
|
level = "info"
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Bootstrap nodes
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
[[nodes]]
|
||||||
|
name = "rift"
|
||||||
|
address = "100.95.252.120:9444"
|
||||||
|
role = "master"
|
||||||
|
|
||||||
|
[[nodes]]
|
||||||
|
name = "svc"
|
||||||
|
address = "100.106.232.4:9555"
|
||||||
|
role = "edge"
|
||||||
Reference in New Issue
Block a user