Documentation
¶
Overview ¶
Package resolvemcp exposes registered database models as Model Context Protocol (MCP) tools and resources over HTTP/SSE transport.
It mirrors the resolvespec package patterns:
- Same model registration API
- Same filter, sort, cursor pagination, preload options
- Same lifecycle hook system
Usage:
handler := resolvemcp.NewHandlerWithGORM(db)
handler.RegisterModel("public", "users", &User{})
r := mux.NewRouter()
resolvemcp.SetupMuxRoutes(r, handler, "http://localhost:8080")
Index ¶
- func GetEntity(ctx context.Context) string
- func GetModel(ctx context.Context) interface{}
- func GetModelPtr(ctx context.Context) interface{}
- func GetSchema(ctx context.Context) string
- func GetTableName(ctx context.Context) string
- func NewSSEServer(handler *Handler, baseURL, basePath string) *server.SSEServer
- func SetupBunRouterRoutes(router *bunrouter.Router, handler *Handler, baseURL, basePath string)
- func SetupMuxRoutes(muxRouter *mux.Router, handler *Handler, baseURL string)
- func WithEntity(ctx context.Context, entity string) context.Context
- func WithModel(ctx context.Context, model interface{}) context.Context
- func WithModelPtr(ctx context.Context, modelPtr interface{}) context.Context
- func WithSchema(ctx context.Context, schema string) context.Context
- func WithTableName(ctx context.Context, tableName string) context.Context
- type Handler
- type HookContext
- type HookFunc
- type HookRegistry
- func (r *HookRegistry) Clear(hookType HookType)
- func (r *HookRegistry) ClearAll()
- func (r *HookRegistry) Execute(hookType HookType, ctx *HookContext) error
- func (r *HookRegistry) HasHooks(hookType HookType) bool
- func (r *HookRegistry) Register(hookType HookType, hook HookFunc)
- func (r *HookRegistry) RegisterMultiple(hookTypes []HookType, hook HookFunc)
- type HookType
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetModelPtr ¶
func GetTableName ¶
func NewSSEServer ¶
NewSSEServer creates an *server.SSEServer that can be mounted manually, useful when integrating with non-Mux routers or adding extra middleware.
sseServer := resolvemcp.NewSSEServer(handler, "http://localhost:8080", "/mcp")
http.Handle("/mcp/", http.StripPrefix("/mcp", sseServer))
func SetupBunRouterRoutes ¶ added in v1.0.69
SetupBunRouterRoutes mounts the MCP HTTP/SSE endpoints on a bunrouter router.
Two routes are registered under the given basePath prefix:
- GET {basePath}/sse — SSE connection endpoint
- POST {basePath}/message — JSON-RPC message endpoint
func SetupMuxRoutes ¶
SetupMuxRoutes mounts the MCP HTTP/SSE endpoints on the given Gorilla Mux router.
baseURL is the public-facing base URL of the server (e.g. "http://localhost:8080"). It is sent to MCP clients during the SSE handshake so they know where to POST messages.
Two routes are registered:
- GET /mcp/sse — SSE connection endpoint (client subscribes here)
- POST /mcp/message — JSON-RPC message endpoint (client sends requests here)
To protect these routes with authentication, wrap the mux router or apply middleware before calling SetupMuxRoutes.
Types ¶
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler exposes registered database models as MCP tools and resources.
func NewHandler ¶
func NewHandler(db common.Database, registry common.ModelRegistry) *Handler
NewHandler creates a Handler with the given database and model registry.
func NewHandlerWithBun ¶
NewHandlerWithBun creates a Handler backed by a Bun database connection.
func NewHandlerWithDB ¶
NewHandlerWithDB creates a Handler using an existing common.Database and a new registry.
func NewHandlerWithGORM ¶
NewHandlerWithGORM creates a Handler backed by a GORM database connection.
func (*Handler) GetDatabase ¶
GetDatabase returns the underlying database.
func (*Handler) RegisterModel ¶
RegisterModel registers a model and immediately exposes it as MCP tools and a resource.
type HookContext ¶
type HookContext struct {
Context context.Context
Handler *Handler
Schema string
Entity string
Model interface{}
Options common.RequestOptions
Operation string
ID string
Data interface{}
Result interface{}
Error error
Query common.SelectQuery
Abort bool
AbortMessage string
AbortCode int
Tx common.Database
}
HookContext contains all the data available to a hook
type HookRegistry ¶
type HookRegistry struct {
// contains filtered or unexported fields
}
HookRegistry manages all registered hooks
func NewHookRegistry ¶
func NewHookRegistry() *HookRegistry
func (*HookRegistry) Clear ¶
func (r *HookRegistry) Clear(hookType HookType)
func (*HookRegistry) ClearAll ¶
func (r *HookRegistry) ClearAll()
func (*HookRegistry) Execute ¶
func (r *HookRegistry) Execute(hookType HookType, ctx *HookContext) error
func (*HookRegistry) HasHooks ¶
func (r *HookRegistry) HasHooks(hookType HookType) bool
func (*HookRegistry) Register ¶
func (r *HookRegistry) Register(hookType HookType, hook HookFunc)
func (*HookRegistry) RegisterMultiple ¶
func (r *HookRegistry) RegisterMultiple(hookTypes []HookType, hook HookFunc)
type HookType ¶
type HookType string
HookType defines the type of hook to execute
const ( // BeforeHandle fires after model resolution, before operation dispatch. BeforeHandle HookType = "before_handle" BeforeRead HookType = "before_read" AfterRead HookType = "after_read" BeforeCreate HookType = "before_create" AfterCreate HookType = "after_create" BeforeUpdate HookType = "before_update" AfterUpdate HookType = "after_update" BeforeDelete HookType = "before_delete" AfterDelete HookType = "after_delete" )