Cline
Global settings, project rules. Cline keeps MCP and provider settings in one ~/.cline/data/settings/ folder shared by the IDE extension, the CLI and the SDK, and reads rules from .cline/rules/. The Erebine bundle merges an MCP server entry and a custom provider into the settings and drops the rules into the project.
Cline ships as an IDE extension, a CLI and an SDK. All three resolve the same global settings folder, so one merge covers every one of them. Cline has a native MCP client, native custom OpenAI-compatible providers, and native project rules, so the Erebine bundle installs no extension and no adapter: it is three settings snippets and one rules file.
The Client-tab download carries four files, plus a README.txt:
| File | What it does |
|---|---|
cline_mcp_settings.json |
The mcpServers.erebine entry: streamable-HTTP URL, Authorization and workspace headers, timeout. Merge into ~/.cline/data/settings/cline_mcp_settings.json. |
providers.json |
The erebine provider's key, base URL and default model, and makes it the active provider. Merge into ~/.cline/data/settings/providers.json. Present only when this workspace advertises models. |
models.json |
Registers every advertised model under a custom erebine provider so the picker lists them. Merge into ~/.cline/data/settings/models.json. Present only when this workspace advertises models. |
erebine.md |
The Erebine tool-use rules. Save as .cline/rules/erebine.md at your project root. |
~/.cline/data is the data root.
CLINE_DATA_DIR moves it; when that
variable is set, the three settings files live under
$CLINE_DATA_DIR/settings/ instead.
See the general MCP integration documentation for the full tool catalog, the governed-execution model, and the security gates that apply to every MCP request.
Quick Start
Download the Cline bundle from the Chat page's Client tab (visible once a specific workspace is selected), then merge it:
- Merge
cline_mcp_settings.json,providers.jsonandmodels.jsoninto the files of the same name under~/.cline/data/settings/. Copy a file whole if it does not exist yet. - Set
lastUsedProviderto"erebine"inproviders.jsonif you merged into an existing file and want Erebine active on the next launch. - Save
erebine.mdas.cline/rules/erebine.mdat your project root. - Restart Cline: reload the IDE window, or start a new CLI session. The settings are read at startup.
- Prompt: Call the Erebine intelligence brief tool (
erebine.intelligence.brief) and summarize this workspace. The answer proves both halves of the bundle.
Both settings files carry your workspace API key.
cline_mcp_settings.json holds it in
the Authorization header and
providers.json holds it in
apiKey. Both live outside your
repository; delete the extracted copies rather
than leaving them in a tracked project tree.
erebine.md carries no secrets and is
safe to commit. Re-downloading rotates the key
and revokes the one in your previous bundle.
MCP Server
Cline reads MCP servers from one global file. In the
IDE, MCP Servers > Configure >
"Configure MCP Servers" opens it; from a
terminal, cline mcp edits it. The
SDK-based IDE extension and the CLI both resolve the
settings folder ~/.cline/data/settings/
(or $CLINE_DATA_DIR/settings); if your
CLI build reads ~/.cline/mcp.json
instead -- older docs name it -- merge the same
entry there. This is the whole entry:
{
"mcpServers": {
"erebine": {
"type": "streamableHttp",
"url": "https://api.erebine.ai/proj_ABC123/v1/mcp",
"headers": {
"Authorization": "Bearer <api_key>",
"X-Erebine-Workspace": "<workspace_id>"
},
"timeout": 60,
"disabled": false,
"autoApprove": []
}
}
}
typeis not optional. A URL entry without it is treated as legacy SSE, and the Erebine endpoint answers streamable HTTP.timeoutis in seconds, not milliseconds. The default is 60 and the accepted range is 1 to 3600.autoApprovelists the tools Cline may call without asking. It ships empty; add tool names to it once you trust them.<api_key>, a key with theinferencescope. Mint one witherectl keys --create --name "cline" --scopes inference.<workspace_id>, thews_xxxidentifier this connection pins to. List options witherectl workspaces list.
Inference Provider
Cline's custom-provider registry is two files.
models.json declares the provider and
its models; providers.json holds the
credentials and the current selection.
models.json registers the whole fleet
this workspace advertises:
{
"version": 1,
"providers": {
"erebine": {
"provider": {
"name": "Erebine - <workspace_id>",
"baseUrl": "https://api.erebine.ai/proj_ABC123/<workspace_id>/<endpoint-slug>/v1",
"defaultModelId": "<endpoint-slug>",
"protocol": "openai-chat",
"client": "openai-compatible",
"capabilities": ["streaming", "tools", "reasoning", "vision"]
},
"models": {
"<endpoint-slug>": {
"id": "<endpoint-slug>",
"name": "<model-name>",
"capabilities": ["streaming", "tools", "reasoning", "images"],
"contextWindow": 131072,
"maxTokens": 32000
}
}
}
}
}
providers.json carries the key and the
starting selection:
{
"version": 1,
"lastUsedProvider": "erebine",
"modes": {},
"providers": {
"erebine": {
"settings": {
"provider": "erebine",
"apiKey": "<api_key>",
"baseUrl": "https://api.erebine.ai/proj_ABC123/<workspace_id>/<endpoint-slug>/v1",
"model": "<endpoint-slug>",
"protocol": "openai-chat",
"client": "openai-compatible",
"headers": {
"X-Erebine-Augment-Corrective-Retries": "on"
},
"contextWindow": 131072,
"maxTokens": 32000,
"reasoning": {
"effort": "medium",
"enabled": true
}
},
"updatedAt": "1970-01-01T00:00:00.000Z",
"tokenSource": "manual"
}
}
}
- Model capabilities come from the descriptor:
toolswhen the model takes tool calls,reasoningwhen it has a reasoning parser,imageswhen it accepts image input. The provider row is the union over every model, and spells that last onevision. contextWindowandmaxTokensare the advertised window and output cap, emitted only when the model publishes them.reasoning.effortis the model's default effort, emitted only when it is one of Cline's seven levels (none,minimal,low,medium,high,xhigh,max). Those seven are theproviders.jsonvocabulary; the CLI's per-session override,cline --thinking <level>, takes the five it supports:none,low,medium,high,xhigh.updatedAtis a fixed epoch timestamp so the file is byte-stable between downloads. Cline rewrites it the next time it saves settings.
Keep providers.json valid.
Cline validates the whole file against its
schema and treats a file that fails as
empty, which signs you out of every
provider you had configured, not just Erebine.
updatedAt must be an ISO-8601
datetime and baseUrl must be a full
URL. Back the file up before merging.
Switch models in the picker, or with
cline --model <id>. The model
travels in the request payload, so one base URL
covers every id in models.json.
The routing mode chosen at download time decides how much of the fleet lands in the files:
- Direct (default): every generative model in the project, all in the picker.
- Semantic router: one entry pointing at the semantic router, which scores the fleet per request.
- Pinned: the resolved endpoint, pinned. One model.
A workspace with no advertised models yields an
MCP-only bundle: cline_mcp_settings.json
and the rules file, no provider files, and Cline
keeps whatever provider you already use.
Builds without a custom-provider registry
Older Cline builds have no
models.json. Take the same values
through the settings UI instead: pick the
OpenAI Compatible provider and
fill in three fields.
| Field | Value |
|---|---|
| Base URL | https://api.erebine.ai/proj_ABC123/<workspace_id>/<endpoint-slug>/v1, the baseUrl from providers.json |
| API Key | The apiKey from providers.json |
| Model ID | The model from providers.json, or any id listed in models.json |
Project Rules
.cline/rules/erebine.md carries the
shared Erebine tool-use rules every other client
receives through its own rules surface, plus a Cline
addendum that spells out the tool naming. Cline
concatenates every .md file in
.cline/rules/ into the system prompt as
context, so the rules apply to every task in the
project without replacing anything.
Without them the agent will sometimes ask you about workspace state instead of calling the Erebine tools to retrieve it.
.cline/rules/, not .clinerules/.
Cline still reads the older
.clinerules/ directory, but its own
source marks that path deprecated and
cline config edits
.cline/rules/. A project that
already keeps AGENTS.md can keep it:
Cline reads that too, and the files stack rather
than shadow each other.
Tool Names
SDK-based Cline builds namespace MCP tools with the
server name and sanitize the result to
[A-Za-z0-9_-]: the server name, two
underscores, then the tool name with dots replaced
by underscores. Sanitizing changes every Erebine
tool name, and when it does Cline appends an
underscore and an eight-character hash it derives
from the original dotted name, so every tool
carries a suffix:
erebine.intelligence.brief becomes
erebine__erebine_intelligence_brief_fc26e278.
Match a tool to the catalog by the
erebine_<group>_<verb>
segment between the double underscore and the hash.
The classic extension calls tools through
use_mcp_tool instead, with
server_name erebine and the
dotted tool_name
(erebine.intelligence.brief). The rules
file documents both spellings, so the model reaches
the catalog either way.
Cline does not surface MCP prompts. The six Erebine
prompts have no slash-command form here; call the
tools directly. Resources are read through
access_mcp_resource with a URI such as
erebine://workspace/current/brief on
builds that offer it. Both are documented on the
general MCP integration page.
CLI Setup
erectl prints the MCP server entry.
When the settings file does not exist yet, write it
straight out:
mkdir -p ~/.cline/data/settings
erectl mcp setup --client cline --workspace <uuid> > ~/.cline/data/settings/cline_mcp_settings.json
If the file already exists, merge the
mcpServers.erebine key into it instead
of overwriting: the file holds every MCP server Cline
knows about, and a redirect replaces all of them.
Cline does not expand the
{env:EREBINE_API_KEY} placeholder
erectl writes by default. Pass
--inline-api-key <key> for Cline,
or replace the placeholder in the file with the key
before restarting Cline.
The CLI prints the server entry to stdout. Pass
--out-dir <dir> to also write
providers.json, models.json
and the rules file, built from the workspace's
_direct models over the management API,
exactly as the dashboard's Direct bundle carries
them; --mcp-only keeps the model provider
you already use.
Capability Matrix
What the bundle wires into Cline, and how:
| Surface | Supported | Mechanism |
|---|---|---|
| Inference provider | yes | models.json plus providers.json |
| MCP tools | yes | Native MCP client, no bridge |
| Prompts | no | Cline does not surface MCP prompts |
| Resources | partial | access_mcp_resource, on builds that offer it |
| Project rules | yes | .cline/rules/erebine.md, read as context |
| Streaming transport | yes | Native streamable HTTP (type: streamableHttp) |
| OAuth | no | Bearer header from cline_mcp_settings.json |
| Sampling, elicitation, roots | no | The client advertises no capabilities to the server |
See the full per-client comparison in docs/mcp, Security.
Troubleshooting
The server shows as disconnected
Check type in the
mcpServers.erebine entry. Cline defaults
a URL entry with no type to legacy SSE,
and the Erebine endpoint answers streamable HTTP, so
the handshake never completes. Set
"type": "streamableHttp" and restart
Cline.
"Request timed out"
timeout is in seconds. A value copied
from a millisecond-based config reads as either far
too small or out of range: Cline clamps it to 1 to
3600. Long research and exec calls want a higher
number, not a bigger unit.
Signed out of every provider after merging
providers.json failed validation, and
Cline treats a file that fails its schema as empty.
Restore your backup, then re-merge and check the two
fields that most often break it:
updatedAt must be an ISO-8601 datetime
and baseUrl must be a full URL. The
provider id must match
^[a-z0-9][a-z0-9-]*$.
The model is missing from the picker
Either models.json was not merged, or
Cline has not restarted since. The custom-provider
registry is read once at startup. Reload the IDE
window or start a new CLI session. On a build with no
models.json support, use the
OpenAI Compatible provider fields
listed above.
401 Unauthorized on every tool call
The key in cline_mcp_settings.json is
missing, malformed, or revoked. Each Client-tab
download rotates your personal key and revokes the
previous one. Re-download the bundle, or replace the
Authorization header value with a key
carrying the inference scope.
403 Forbidden with code scope_insufficient
The key authenticated but does not carry the
inference scope the MCP surface
requires. Mint a replacement with
erectl keys --create --name "cline" --scopes inference.