Documentation
¶
Index ¶
- Constants
- Variables
- type API
- type Manager
- func (m *Manager) CallTool(ctx context.Context, req workspacesdk.CallMCPToolRequest) (workspacesdk.CallMCPToolResponse, error)
- func (m *Manager) Close() error
- func (m *Manager) MarkStartupSettled()
- func (m *Manager) RefreshTools(ctx context.Context) error
- func (m *Manager) Reload(ctx context.Context, paths []string) error
- func (m *Manager) SnapshotChanged(paths []string) bool
- func (m *Manager) Tools(ctx context.Context, paths []string) ([]workspacesdk.MCPToolInfo, error)
- type ServerConfig
Constants ¶
const ToolNameSep = "__"
ToolNameSep separates the server name from the original tool name in prefixed tool names. Double underscore avoids collisions with tool names that may contain single underscores.
Variables ¶
var ( // ErrInvalidToolName is returned when the tool name format // is not "server__tool". ErrInvalidToolName = xerrors.New("invalid tool name format") // ErrUnknownServer is returned when no MCP server matches // the prefix in the tool name. ErrUnknownServer = xerrors.New("unknown MCP server") // ErrManagerClosed is returned by Reload and Tools after // Close. Close cancels the Manager's derived context, so this // sentinel keeps explicit Close distinguishable from parent // context cancellation. ErrManagerClosed = xerrors.New("manager closed") )
Functions ¶
This section is empty.
Types ¶
type API ¶
type API struct {
// contains filtered or unexported fields
}
API exposes MCP tool discovery and call proxying through the agent.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager manages connections to MCP servers discovered from a workspace's .mcp.json file. It caches the aggregated tool list and proxies tool calls to the appropriate server.
func NewManager ¶
func NewManager( ctx context.Context, logger slog.Logger, execer agentexec.Execer, updateEnv func([]string) ([]string, error), ) *Manager
NewManager creates a new MCP client manager. The ctx bounds subprocess lifetime. The execer applies resource limits to MCP server subprocesses. The updateEnv callback enriches the subprocess environment to match interactive sessions.
func (*Manager) CallTool ¶
func (m *Manager) CallTool(ctx context.Context, req workspacesdk.CallMCPToolRequest) (workspacesdk.CallMCPToolResponse, error)
CallTool proxies a tool call to the appropriate MCP server.
func (*Manager) Close ¶
Close terminates all MCP server connections and child processes, stops the config file watcher, and waits for any in-flight watcher-driven reload to complete.
func (*Manager) MarkStartupSettled ¶ added in v2.34.0
func (m *Manager) MarkStartupSettled()
MarkStartupSettled marks startup scripts as terminal for MCP config purposes. Missing config files after this point are a real empty config, not an unknown startup state.
func (*Manager) RefreshTools ¶
RefreshTools re-fetches tool lists from all connected servers in parallel and rebuilds the cache. On partial failure, tools from servers that responded successfully are merged with the existing cached tools for servers that failed, so a single dead server doesn't block updates from healthy ones.
func (*Manager) Reload ¶ added in v2.33.0
Reload ensures the tool cache reflects the current config.
If config files differ from the last snapshot, a singleflight differential reconnect is driven and Reload waits for it. If the snapshot is current, Reload returns immediately.
Starting and running the reload is manager-scoped. Caller contexts may bound only that caller's wait for the reload result. They are never passed to, and must not suppress, the reload body.
func (*Manager) SnapshotChanged ¶ added in v2.33.0
SnapshotChanged checks whether any config file has changed since the last reload by comparing os.Stat results against the stored snapshot.
func (*Manager) Tools ¶
func (m *Manager) Tools(ctx context.Context, paths []string) ([]workspacesdk.MCPToolInfo, error)
Tools returns the current MCP tool cache after startup-safe config synchronization.
Before startup has settled via MarkStartupSettled, Tools blocks until settlement or ctx cancels. After settlement, it drives a config reload bounded by toolsReloadTimeout.
On error before the first sync settles, Tools returns nil tools and the error. On error after a prior sync, it returns cached tools and the error so callers can degrade gracefully.
type ServerConfig ¶
type ServerConfig struct {
Name string `json:"name"`
Transport string `json:"type"`
Command string `json:"command"`
Args []string `json:"args"`
Env map[string]string `json:"env"`
URL string `json:"url"`
Headers map[string]string `json:"headers"`
}
ServerConfig describes a single MCP server parsed from a .mcp.json file.
func ParseConfig ¶
func ParseConfig(path string) ([]ServerConfig, error)
ParseConfig reads a .mcp.json file at path and returns the declared MCP servers sorted by name. It returns an empty slice when the mcpServers key is missing or empty.