sb-mcp
Commands
go build ./... # build all
go test ./... # test all
go test ./internal/silverbullet/ # test single package
Build with version: go build -ldflags "-X git.secluded.site/sb-mcp/internal/server.Version=$VERSION" ./cmd/sb-mcp/
Run: sb-mcp serve (stdio) or sb-mcp serve --http :3001 (streamable HTTP)
Landmines
print()is silently swallowed in the Runtime API. Always usereturnto send results back fromexecute_lua. No error, no warning — just empty output.- Space Lua is camelCase, not snake_case. All built-in functions (
space.readPage,space.writePage) use camelCase. Writingspace.read_pagewill fail. - Bearer auth and password auth coexist —
SB_TOKENsetsAuthorization: Bearer ..., whileSB_USER/SB_PASSlogs in viaPOST /.authand sends a sessionCookie. They use different headers, no override. For proxy auth (e.g. Exe.dev), use SB password authentication with Exe Bearer auth or SB Bearer auth with Exe HTTP Basic credentials embedded inSB_URL(https://user:pass@host). - Timeout clamping: Lua timeouts <1 are clamped to 1, >21600 clamped to 21600. No error raised; the value silently changes.
Environment
Required: SB_URL (must be http(s)). Optional: SB_USER/SB_PASS (basic auth), SB_TOKEN (bearer), SB_TIMEOUT (seconds, default 120).