Files
mcq/cmd/mcq/client.go
Kyle Isom 3d5f52729f Add CLI client subcommands and MCP server
Adds push, list, get, delete, and login subcommands backed by an HTTP
API client, plus an MCP server for tool-based access to the document
queue.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 00:08:55 -07:00

62 lines
1.3 KiB
Go

package main
import (
"fmt"
"os"
"path/filepath"
"strings"
"github.com/spf13/cobra"
"git.wntrmute.dev/mc/mcq/internal/client"
)
var clientFlags struct {
server string
token string
}
func addClientFlags(cmd *cobra.Command) {
cmd.Flags().StringVar(&clientFlags.server, "server", "", "MCQ server URL (env: MCQ_SERVER)")
cmd.Flags().StringVar(&clientFlags.token, "token", "", "auth token (env: MCQ_TOKEN)")
}
func newClient() (*client.Client, error) {
server := clientFlags.server
if server == "" {
server = os.Getenv("MCQ_SERVER")
}
if server == "" {
return nil, fmt.Errorf("server URL required: use --server or MCQ_SERVER")
}
token := clientFlags.token
if token == "" {
token = os.Getenv("MCQ_TOKEN")
}
if token == "" {
token = readCachedToken()
}
if token == "" {
return nil, fmt.Errorf("auth token required: use --token, MCQ_TOKEN, or run 'mcq login'")
}
return client.New(server, token), nil
}
func tokenPath() string {
if dir, err := os.UserConfigDir(); err == nil {
return filepath.Join(dir, "mcq", "token")
}
home, _ := os.UserHomeDir()
return filepath.Join(home, ".config", "mcq", "token")
}
func readCachedToken() string {
data, err := os.ReadFile(tokenPath())
if err != nil {
return ""
}
return strings.TrimSpace(string(data))
}