// app/mcps/admin_mcp/adminmcp.go
package adminmcp
import (
"context"
"golazy.dev/lazymcp"
)
type AdminMCP struct {
lazymcp.Base
}
func New(ctx context.Context) *AdminMCP {
return &AdminMCP{Base: lazymcp.NewBase(ctx)}
}
type UserCountParams struct {
Active bool `json:"active"`
}
type UserCountResult struct {
Count int `json:"count"`
}
func (m *AdminMCP) UserCountTool(ctx context.Context) lazymcp.ToolSpec {
return lazymcp.ToolSpec{
Desc: "Count users.",
Fn: m.UserCount,
UI: lazymcp.UI("ui://admin/dashboard"),
}
}
func (m *AdminMCP) UserCount(ctx context.Context, params UserCountParams) (UserCountResult, error) {
return UserCountResult{Count: 3}, nil
}
func (m *AdminMCP) DashboardApp(ctx context.Context) lazymcp.AppSpec {
return lazymcp.AppSpec{
Name: "dashboard",
Desc: "Admin dashboard.",
View: "dashboard",
UseLayout: true,
}
}
// init/mcp.go
package appinit
import (
"context"
"golazy.dev/lazymcp"
adminmcp "sample_app/app/mcps/admin_mcp"
)
func RegisterMCP(ctx context.Context, scope *lazymcp.Scope) error {
return scope.Register(adminmcp.New(ctx))
}
// init/app.go
package appinit
import (
"golazy.dev/lazyapp"
"sample_app/app"
)
func App() *lazyapp.App {
return lazyapp.New(lazyapp.Config{
Name: "sample_app",
Drawer: Draw,
Public: app.Public,
Views: app.Views,
Dependencies: Dependencies,
MCP: RegisterMCP,
})
}
{{/* app/views/mcp/admin/dashboard.html.tpl */}}
<section>
<h1>Admin</h1>
<p>Rendered as an MCP Apps UI resource.</p>
</section>