mcp

package
v0.4.7 Latest Latest
Warning

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

Go to latest
Published: Jul 29, 2026 License: MIT Imports: 29 Imported by: 0

Documentation

Overview

Package mcp hosts the Seamless MCP tool surface over streamable HTTP with a single static bearer key. It adds what v1 lacked: a per-connection session binding, so an agent calls session_start once and later memory/recall/notes calls inherit the session's project scope without repeating it. Every stored identity is a ULID; names and slugs are only ergonomic handles.

Index

Constants

View Source
const (
	// ServerName is the server name advertised in the MCP initialize handshake.
	// Exported for docsgen, which mirrors the handshake identity into the
	// published server card's serverInfo (docs/.well-known/mcp/server-card.json).
	ServerName = "Seamless"

	// ToolCount is the number of MCP tools registered. doctor asserts the actual
	// registered count (Server.NumTools) equals it. P2 minimal loop = 15; P3 adds
	// tasks (4) + trials (3) = 22; P4 adds gardener (2) + capture_url +
	// usage_summary = 26; plans-as-composition adds tasks_claim + tasks_release = 28;
	// gardener_request = 29; gardener_split = 30; favorite_set = 31.
	ToolCount = 31
)

Variables

This section is empty.

Functions

func Catalog

func Catalog() []mcp.Tool

Catalog returns every registered tool's definition, in registration order.

It exists so documentation tooling (cmd/docsgen) can render the tool surface without constructing a Server: the constructors are plain data -- name, description, and input schema -- and need no DB, config, or listening port. The definitions here are the same values registerTools hands to addTool, so the docs describe exactly what the server serves.

The order below MUST mirror registerTools. catalog_test enforces both halves of that contract (length against ToolCount, names against a live server's registration order), so a tool added to one and not the other fails the build rather than silently vanishing from the docs.

Types

type Config

type Config struct {
	DB       *sql.DB
	Files    *files.Manager
	Retrieve *retrieve.Service
	Events   *events.Recorder
	Gardener *gardener.Service // may be nil (gardener_apply is then unavailable)
	Embedder llm.Embedder      // may be nil (memory_write dedup hint is then skipped)
	APIKey   string
	Version  string // build version advertised in the MCP handshake; defaults to serverVersion
	// ToolEventMaxChars caps each captured field (tool.call args value/result,
	// session findings) of a logged Interactions event at this many runes. 0 =
	// unlimited (the default): content is logged in full.
	ToolEventMaxChars int
	// CaptureAllowedPorts are the destination ports capture_url may dial
	// (config.Capture.AllowedPorts). Empty means the capture package's 80/443
	// default, never "any port".
	CaptureAllowedPorts []int
	Logger              *slog.Logger
}

Config wires the MCP server's dependencies.

type Server

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

Server hosts the MCP tools and their per-connection session bindings.

func New

func New(cfg Config) *Server

New constructs a Server and registers the tool surface.

func (*Server) Handler

func (s *Server) Handler() http.Handler

Handler returns the streamable-HTTP handler for /api/mcp. The static key is verified in the HTTP context func (which tags the context on success); the tool middleware rejects any call whose context was not tagged.

func (*Server) NumTools

func (s *Server) NumTools() int

NumTools returns the number of registered MCP tools. doctor asserts it equals ToolCount, catching a tool that was written but never wired into registerTools.

Jump to

Keyboard shortcuts

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