Documentation
¶
Index ¶
Constants ¶
const DefaultMaxRequestBody int64 = 32 << 20 // 32 MiB
DefaultMaxRequestBody is the per-request body cap applied when ServerConfig.MaxRequestBodyBytes is unset. Generous enough for large JSON-RPC batches and uploads, small enough that one hostile request cannot buffer unbounded memory.
Variables ¶
var Log logger.Logger = logger.NewNullLogger()
Functions ¶
func RunJSONRPCServer ¶ added in v0.12.0
func RunJSONRPCServer(ctx context.Context, config ServerConfig) error
RunJSONRPCServer runs the stdio JSON-RPC 2.0 server. It performs the same bootstrap as RunServer (setup script registers handlers via runtime.jsonrpc.method/notification or runtime.plugin.serve/function), then serves requests from stdin until stdin closes or a terminating signal arrives.
When the setup script calls runtime.plugin.serve(), the server switches to the full Scriptling plugin protocol (scriptling.handshake, function.call, etc.) so that clients can load it with scriptling=True and receive auto-generated proxy libraries. Otherwise the plain JSON-RPC 2.0 loop runs.
func RunMCPStdioServer ¶ added in v0.16.0
func RunMCPStdioServer(ctx context.Context, config ServerConfig) error
RunMCPStdioServer runs the MCP server over stdio (newline-delimited JSON-RPC 2.0 on stdin/stdout). It performs the same bootstrap as RunServer — the setup script may register libraries or keep itself alive via runtime.start_server() — then builds the MCP server from --mcp-tools / --mcp-exec-script and serves it until stdin closes or a terminating signal arrives.
Logs must go to stderr in this mode (the CLI arranges this) so the stdout protocol stream stays pure.
Types ¶
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server represents the HTTP server
func NewServer ¶
func NewServer(config ServerConfig) (*Server, error)
NewServer creates a new HTTP server
func (*Server) RunJSONRPCStdio ¶ added in v0.12.0
RunJSONRPCStdio serves JSON-RPC 2.0 requests from stdin, writing one response per line to stdout. Each request runs on a fresh Scriptling evaluator in its own goroutine. The call blocks until stdin closes (or returns on a fatal read/write error).
func (*Server) RunPluginServerStdio ¶ added in v0.15.0
RunPluginServerStdio serves the Scriptling plugin protocol over stdio using the pre-built plugin server.
type ServerConfig ¶
type ServerConfig struct {
Address string
// ScriptFile is the path to the setup script to run before serving.
// Ignored when ScriptSource is set.
ScriptFile string
// ScriptSource is the setup script's content, for callers that already
// hold it and have no file to point at — a script fetched from a plugin
// scheme source, say, or one generated by the host. It takes precedence
// over ScriptFile, so nothing has to be written to a temporary file.
ScriptSource []byte
// ScriptName labels ScriptSource in error messages and __file__. Defaults
// to "<script>" when ScriptSource is set without it.
ScriptName string
LibDirs []string
Packages []string // Package (.zip) paths or URLs
Bundle *pack.Bundle // The single app bundle to serve; when set the server runs in app-bundle mode
LibBundles []*pack.Bundle // Pre-opened library bundles (module providers only, no app behavior)
Insecure bool // Allow self-signed HTTPS for package URLs
CacheDir string // Override default OS cache dir for remote packages
BearerToken string
AllowedPaths []string // Filesystem path restrictions (empty = no restrictions)
NetworkPolicy *netsecurity.Config // Script outbound network policy (nil = no restrictions)
DisabledLibs []string // Built-in libraries to disable (empty = all enabled)
PluginDirs []string
PluginManager *scriptlingplugin.Manager
MCPToolsDir string // Empty means MCP disabled
MCPResourcesDir string // Folder of resource .toml/.py pairs (empty = none)
MCPPromptsDir string // Folder of prompt .toml/.py pairs (empty = none)
MCPExecTool bool // Enable code execution tool
JSONRPC bool // Mount JSON-RPC over HTTP at /json-rpc
KVStoragePath string // Empty means in-memory KV store
WebRoot string // Directory to serve static files from (empty = disabled)
SecretRegistry *secretprovider.Registry
DockerSock string
PodmanSock string
TLSCert string
TLSKey string
TLSGenerate bool
// ExtraLibs, if set, registers additional libraries on every evaluator
// after the standard library set — the setup script and every json-rpc,
// http, mcp and websocket request handler. Host applications use this to
// expose their own libraries to served scripts.
ExtraLibs func(*scriptling.Scriptling)
// Argv holds extra CLI arguments (after --) to expose via sys.argv in
// every evaluator. Set from cmd.GetArgs() in the server dispatch paths.
Argv []string
// MaxRequestBodyBytes caps how many bytes a request body may carry
// (applies to every route). Zero means the default, DefaultMaxRequestBody.
MaxRequestBodyBytes int64
// WebSocketOrigins restricts which browser origins may upgrade: an
// origin allowlist, "*" to allow every origin, or empty for the
// same-origin default. Non-browser clients send no Origin header and
// are always allowed.
WebSocketOrigins []string
}
ServerConfig holds the configuration for the HTTP server