MCP tokens

Session.SetMCPTokens on the one SDK, pkg/abox.

Pushes a Bearer token into the guest and reconnects MCP. Configure servers with abox mcp add first. Host credentials.env is still how Open injects tokens at boot; this example is the live update path.

export ABOX_MCP_TOKEN_ENV=ABOX_MCP_GH_TOKEN
export ABOX_MCP_TOKEN=# not a real key in docs
package main

import (
	"context"
	"fmt"
	"os"

	"github.com/AdminTurnedDevOps/ABox/pkg/abox"
)

func main() {
	ctx := context.Background()
	sess, err := abox.Open(ctx, abox.Options{})
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	defer sess.Close()
	env := os.Getenv("ABOX_MCP_TOKEN_ENV")
	tok := os.Getenv("ABOX_MCP_TOKEN")
	if env == "" || tok == "" {
		fmt.Fprintln(os.Stderr, "set ABOX_MCP_TOKEN_ENV (guest env name) and ABOX_MCP_TOKEN")
		os.Exit(2)
	}
	if err := sess.SetMCPTokens(ctx, map[string]string{env: tok}); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	fmt.Println("mcp token set for", env)
	_, err = sess.Turn(ctx, "List your MCP tools by name.", func(ev abox.Event) {
		if ev.Kind == "text" {
			fmt.Print(ev.Text)
		}
	})
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
	fmt.Println()
}