Skip to content

Plugins, MCP, and LSP ​

Plugins ​

FieldDescriptionDefault
Plugins.DisabledPluginsPlugin ids turned off in this workspace[]
Plugins.PluginRootsExtra plugin root directories maintained outside .craft/plugins/[]
Plugins.PluginRegistriesPlugin marketplace sources available for catalog discovery[]
Plugins.DisableDefaultPluginRegistryIgnore the host-provided default official plugin registryfalse

Official DotCraft Desktop and Docker hosts supply the official plugin marketplace as the default registry through DOTCRAFT_DEFAULT_PLUGIN_REGISTRY_URL. Marketplace sources added through Desktop are stored in the global configuration; a workspace PluginRegistries value follows the normal workspace-over-global precedence. Docker Stack deployments persist the global configuration and marketplace cache under state/dotcraft.

Plugins.PluginRegistries entry fields:

FieldDescriptionDefault
NameMarketplace identity. Required for manual entries and must match the marketplace document; maintained automatically when added through Desktop or AppServerEmpty
SourceTypeSource kind: git, local, or archiveInferred when omitted
UrlGit URL, local directory, archive URL, or archive fileEmpty
RefGit branch, tag, or commit to check outSource default
SparsePathsRepository-relative paths included in a Git checkout[]
MarketplacePathMarketplace document path inside the source root.craft/plugins/marketplace.json
LastUpdatedUTC timestamp of the last successful add or refreshEmpty
LastRevisionResolved Git revision from the last successful fetchEmpty

When SourceType is omitted, an existing directory or archive file is read locally; other values are treated as archive URLs. Ref and SparsePaths apply only to Git sources.

See Plugin Market for source syntax, the marketplace document, and lifecycle behavior.

Local plugin development override example:

json
{
  "Plugins": {
    "PluginRoots": ["/path/to/local/plugins"]
  }
}

Plugin settings files ​

Plugin-defined settings do not live under Plugins in the main config.json. A plugin declares "settings": "./settings.schema.json" in .craft-plugin/plugin.json, and the host reads two dedicated files:

ScopePath
Personal<UserDataPath>/plugin-config.json; the official app uses ~/.craft/plugin-config.json
Workspace<DataPath>/plugin-config.json; the default is <workspace>/.craft/plugin-config.json

The root object is keyed directly by canonical plugin id:

json
{
  "acme.review-core": {
    "checklistLimit": 5,
    "tone": "concise"
  }
}

Effective settings resolve as schema defaults, then personal values, then workspace values. Objects merge recursively; arrays and scalar values replace the lower layer. A namespace is rejected as a whole when it contains an undeclared field or an invalid value. Removing a workspace value reveals the personal value or schema default below it.

These files are for small JSON configuration, not blobs, databases, or caches. Plugin data remains separate at <UserDataPath>/plugins/<id>/data when UserDataPath is configured, or <DataPath>/plugin-data/<id> otherwise. Disabling, removing, or reinstalling a plugin does not delete either its configuration namespace or data directory.

MCP servers ​

FieldDescriptionDefault
McpServersMCP server configuration map{}
Tools.DeferredLoading.StrategyDeferred tool loading strategy: Off, Auto, Simulated, or NativeAuto
Tools.DeferredLoading.AlwaysLoadedToolsMCP tool names always loaded upfront[]
Tools.DeferredLoading.DeferThresholdMinimum MCP tool count before MCP tools are deferred10
Tools.DeferredLoading.MaxSearchResultsMaximum deferred tool search results per query5

Each McpServers entry accepts only the fields defined by its current schema. Unknown properties cause configuration parsing to fail.

MCP example:

json
{
  "McpServers": {
    "everything": {
      "command": "npx",
      "arguments": ["-y", "@modelcontextprotocol/server-everything"]
    }
  },
  "Tools": {
    "DeferredLoading": {
      "Strategy": "Auto",
      "DeferThreshold": 10
    }
  }
}

With Tools.DeferredLoading.Strategy = Auto, all modes use the canonical SearchTools operation. OpenAI Responses maps it to the provider's client-executed tool_search wire type, Anthropic returns native tool references, and chat-completions injects the discovered schemas on the next model request.

LSP ​

FieldDescriptionDefault
LspServersLSP server configuration map{}
Tools.Lsp.EnabledEnables built-in LSP toolsfalse
Tools.Lsp.MaxFileSizeMax LSP file size10485760

Each LspServers entry likewise accepts only the fields defined by its current schema.