tool

package
v0.16.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 9, 2026 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultMaxTools = 50

DefaultMaxTools is the combined limit for tools + plugins.

Variables

This section is empty.

Functions

func AddScheduleToConfig added in v0.9.0

func AddScheduleToConfig(path, name, schedExpr, skillName, channel, sessionMode, sessionTier, agent string, tags []string, enabled bool) error

AddScheduleToConfig appends a [[schedules]] entry to the TOML config.

func RemoveScheduleFromConfig added in v0.9.0

func RemoveScheduleFromConfig(path, name string) error

RemoveScheduleFromConfig removes a [[schedules]] entry matched by name.

func SSRFSafeTransport added in v0.16.5

func SSRFSafeTransport(allowLoopback bool) *http.Transport

SSRFSafeTransport returns an *http.Transport that blocks connections to SSRF-sensitive IP addresses at TCP connect time via net.Dialer.Control. This prevents DNS-rebinding attacks where a hostname resolves to a blocked IP after passing the initial string-based URL validation.

func SetAuthConfig added in v0.13.0

func SetAuthConfig(path, passwordHash, sessionSecret string) error

SetAuthConfig persists password_hash and session_secret to [api.auth] in the TOML config file. Used by the PIN-protected account setup flow.

func SetSessionSecret added in v0.16.7

func SetSessionSecret(path, sessionSecret string) error

SetSessionSecret persists only the session_secret into [api.auth] without touching other auth fields. Used at startup to auto-generate a stable secret.

func UpdateAgentInConfig added in v0.11.0

func UpdateAgentInConfig(path, name string, changes map[string]any) error

UpdateAgentInConfig updates fields of an [[agents]] entry matched by name. Only keys present in changes are applied (partial update).

func UpdateScheduleInConfig added in v0.9.0

func UpdateScheduleInConfig(path, name, schedExpr, skillName, channel, sessionMode, sessionTier, agent string, tags []string, enabled bool) error

UpdateScheduleInConfig replaces a [[schedules]] entry matched by name.

Types

type LifecycleManager added in v0.1.0

type LifecycleManager struct {
	// contains filtered or unexported fields
}

LifecycleManager coordinates adding and removing MCP tools and plugins at runtime, persisting changes to the TOML config file.

func NewLifecycleManager added in v0.1.0

func NewLifecycleManager(toolMgr *Manager, configPath string, maxTools int, logger *slog.Logger) *LifecycleManager

NewLifecycleManager creates a lifecycle manager wrapping the given tool.Manager. configPath is the path to denkeeper.toml. maxTools is the combined limit (0 uses DefaultMaxTools).

func (*LifecycleManager) AddPlugin added in v0.1.0

func (lm *LifecycleManager) AddPlugin(ctx context.Context, name string, cfg config.PluginConfig) error

func (*LifecycleManager) AddTool added in v0.1.0

func (lm *LifecycleManager) AddTool(ctx context.Context, name string, cfg config.ToolConfig) error

AddTool validates the config, spawns the MCP server, registers it, and persists the [tools.<name>] section to denkeeper.toml.

func (*LifecycleManager) ListPlugins added in v0.1.0

func (lm *LifecycleManager) ListPlugins() []PluginStatus

ListPlugins returns metadata for all registered plugins.

func (*LifecycleManager) ListTools added in v0.1.0

func (lm *LifecycleManager) ListTools() []ServerStatus

ListTools returns metadata for all registered MCP tool servers.

func (*LifecycleManager) RemovePlugin added in v0.1.0

func (lm *LifecycleManager) RemovePlugin(ctx context.Context, name string) error

RemovePlugin unregisters and removes [plugins.<name>] from denkeeper.toml.

func (*LifecycleManager) RemoveTool added in v0.1.0

func (lm *LifecycleManager) RemoveTool(ctx context.Context, name string) error

RemoveTool unregisters the MCP server and removes [tools.<name>] from denkeeper.toml.

func (*LifecycleManager) RestartTool added in v0.15.1

func (lm *LifecycleManager) RestartTool(ctx context.Context, name string) error

RestartTool stops and re-registers an MCP tool server, resetting its health state.

func (*LifecycleManager) ToolManager added in v0.1.0

func (lm *LifecycleManager) ToolManager() *Manager

ToolManager returns the underlying tool.Manager.

func (*LifecycleManager) TrackPlugin added in v0.1.0

func (lm *LifecycleManager) TrackPlugin(name string, cfg config.PluginConfig)

TrackPlugin registers a plugin that was loaded at startup so ListPlugins can report it. This avoids re-registering already-running plugins.

func (*LifecycleManager) UpdateTool added in v0.15.1

func (lm *LifecycleManager) UpdateTool(ctx context.Context, name string, cfg config.ToolConfig) error

UpdateTool replaces the configuration of an existing MCP tool server. It removes the old server and re-adds it with the new config atomically.

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager manages MCP tool server connections and tool execution.

func NewManager

func NewManager(logger *slog.Logger, mcpCfg ...config.MCPConfig) *Manager

NewManager creates a manager with no servers registered.

func (*Manager) AdoptFrom

func (m *Manager) AdoptFrom(source *Manager)

AdoptFrom stores a reference to source as a parent manager. The child manager delegates tool lookups to the parent, so tools added to the parent at runtime (e.g. via the REST API) are immediately visible to all agents. Both managers share the same underlying *mcp.ClientSession pointers, which is safe for concurrent use.

func (*Manager) CleanupOAuthToken added in v0.16.0

func (m *Manager) CleanupOAuthToken(name string)

UnregisterServer stops the MCP server for the given config name, removes its tools from the tool map, and closes the connection. Returns an error if the server is not registered. CleanupOAuthToken removes the OAuth token for a tool, if any. Called during tool removal to avoid leaving orphaned tokens.

func (*Manager) Close

func (m *Manager) Close() error

Close shuts down all MCP server connections and OAuth handlers.

func (*Manager) Execute

func (m *Manager) Execute(ctx context.Context, call llm.ToolCall) (string, error)

Execute runs a single tool call and returns the text result. If the tool is not found locally, it delegates to the parent manager.

func (*Manager) GetOAuthHandler added in v0.16.0

func (m *Manager) GetOAuthHandler(name string) oauthHandler

GetOAuthHandler returns the OAuth handler for a tool, or nil.

func (*Manager) RegisterServer

func (m *Manager) RegisterServer(ctx context.Context, name string, cfg config.ToolConfig) error

RegisterServer connects to an MCP server (stdio subprocess or remote SSE) based on the transport field in cfg, and discovers its available tools.

func (*Manager) RegisterSession

func (m *Manager) RegisterSession(ctx context.Context, name string, session *mcp.ClientSession) error

RegisterSession registers an already-connected MCP client session without spawning a subprocess. Use this for in-process servers (e.g. configmcp).

func (*Manager) RestartServer added in v0.15.1

func (m *Manager) RestartServer(ctx context.Context, name string) error

RestartServer stops and re-registers an MCP server using its stored config. It resets the server's health state (disabled flag, error, restart count).

func (*Manager) ServerInfo added in v0.1.0

func (m *Manager) ServerInfo(name string) (ServerStatus, bool)

ServerInfo returns metadata about a registered server. The second return value is false if the server is not registered. Checks the parent manager if the server is not found locally.

func (*Manager) ServerNames added in v0.1.0

func (m *Manager) ServerNames() []string

ServerNames returns the names of all registered MCP servers, including those from the parent manager (if any).

func (*Manager) ServerToolConfig added in v0.15.1

func (m *Manager) ServerToolConfig(name string) (config.ToolConfig, bool)

ServerToolConfig returns the stored config.ToolConfig for a registered server. This is used to pre-populate edit forms. Returns false if not found.

func (*Manager) ServerToolDefs added in v0.16.0

func (m *Manager) ServerToolDefs(serverName string) ([]llm.ToolDef, bool)

ServerToolDefs returns tool definitions for a specific server. Returns false if the server is not registered.

func (*Manager) SetOAuthSupport added in v0.16.0

func (m *Manager) SetOAuthSupport(o *OAuthSupport)

SetOAuthSupport injects OAuth infrastructure into the Manager.

func (*Manager) StartHealthChecker added in v0.15.1

func (m *Manager) StartHealthChecker(ctx context.Context, interval time.Duration)

StartHealthChecker runs a background goroutine that periodically probes MCP servers and restarts crashed ones. It respects the mcp config settings: auto_restart, max_restart_attempts, and restart_cooldown.

func (*Manager) ToolDefs

func (m *Manager) ToolDefs() []llm.ToolDef

ToolDefs returns OpenAI-format tool definitions for all registered tools, including those from the parent manager (if any).

func (*Manager) ToolNames

func (m *Manager) ToolNames() []string

ToolNames returns the names of all registered MCP tools, including those from the parent manager (if any).

func (*Manager) UnregisterServer added in v0.1.0

func (m *Manager) UnregisterServer(name string) error

type OAuthHandlerFactory added in v0.16.0

type OAuthHandlerFactory func(name string, cfg config.ToolConfig, httpClient *http.Client) (oauthHandler, any, error)

OAuthHandlerFactory creates an OAuthHandler and its corresponding auth.OAuthHandler for use with StreamableClientTransport. The second return value is the transport-compatible handler.

type OAuthStatusInfo added in v0.16.0

type OAuthStatusInfo struct {
	HasToken    bool `json:"has_token"`
	NeedsReauth bool `json:"needs_reauth"`
}

OAuthStatusInfo is a non-sensitive view of OAuth state for API responses.

type OAuthSupport added in v0.16.0

type OAuthSupport struct {
	// HandlerFactory creates an oauth.Handler for a tool. This is set from
	// a build-tag-gated init in manager_oauth.go.
	HandlerFactory OAuthHandlerFactory
	CallbackURL    string
}

OAuthSupport holds OAuth infrastructure injected into the Manager.

type PluginStatus added in v0.1.0

type PluginStatus struct {
	Name         string   `json:"name"`
	Type         string   `json:"type"`
	Command      string   `json:"command,omitempty"`
	Image        string   `json:"image,omitempty"`
	Args         []string `json:"args,omitempty"`
	Capabilities []string `json:"capabilities,omitempty"`
	ToolNames    []string `json:"tool_names"`
	Status       string   `json:"status"`
}

PluginStatus exposes metadata about a registered plugin.

type ServerStatus added in v0.1.0

type ServerStatus struct {
	Name         string           `json:"name"`
	Command      string           `json:"command,omitempty"`
	Args         []string         `json:"-"`          // excluded from JSON (may contain secrets)
	ArgsCount    int              `json:"args_count"` // safe count for display
	ToolNames    []string         `json:"tool_names"`
	Status       string           `json:"status"` // "connected", "restarting", "error", "disabled"
	Transport    string           `json:"transport,omitempty"`
	URL          string           `json:"url,omitempty"` // redacted
	RestartCount int              `json:"restart_count,omitempty"`
	LastError    string           `json:"last_error,omitempty"`
	UptimeSecs   float64          `json:"uptime_secs,omitempty"`
	AuthType     string           `json:"auth_type,omitempty"` // "oauth" or ""
	OAuthStatus  *OAuthStatusInfo `json:"oauth_status,omitempty"`
}

ServerStatus exposes metadata about a registered MCP server.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL