Local-first token, cost and cache observability for
Kilo Code — both the VS Code extension
(kilocode.kilo-code) and the kilo CLI, which have shared one
config surface since 7.0.33.
Kilo has no MCP package format: servers are declared in its own config file. So this is a config listing — the exact block to paste.
Requires the observer binary already on your PATH. This is
wiring only — the block below declares an MCP server that runs
observer; it does not download or bundle it.
npm i -g @superbased/observer # or: pipx install superbased-observer
observer start # run the local daemonMerge this into ~/.config/kilo/kilo.jsonc (every project) or a
project's own kilo.jsonc / .kilo/kilo.jsonc (project wins).
If you already have an mcp key, add the
observer entry to it rather than replacing it:
{
"mcp": {
"observer": {
"type": "local",
"command": [
"observer",
"serve"
],
"enabled": true
}
}
}In the extension you can do the same through Settings → MCP → Add Server (local stdio). Restart Kilo afterwards.
mcp_settings.json (VS Code globalStorage) are not migrated into
kilo.jsonc — Kilo-Org/kilocode#6481. If your MCP servers disappeared
after an update, re-add them here.
| Key | Value | Why |
|---|---|---|
type |
local |
Kilo's discriminator for a command-launched server (the other is remote). |
command |
observer serve |
An ARRAY here — argv, not command+args. Note the difference from every other listing in this repository. |
enabled |
true |
Written verbatim by observer's own OpenCode registrar, which is where this entry comes from. |
Kilo documents environment (not env) and timeout too.
Neither is emitted: observer's server takes no environment, and the
documented default timeout is ample for a local process.
This block is not hand-typed. Kilo CLI is a documented fork of OpenCode and kept its config shape, so the entry is the one observer's real OpenCode MCP registrar writes, transposed. A changed launch argument reaches this page the moment that registrar changes.
The observer server exposes observer's project, session,
cost and cache queries as tools, reading the local
~/.observer/observer.db. It makes no network calls of its own.
Kilo capture is unaffected either way: observer's watcher reads Kilo's own
kilo.db and the legacy extension's task files whether or not this entry
exists.
Kilo's plugin API is first-party-documented as identical to OpenCode's, and
observer's OpenCode npm plugin declares this same server from a
plugin array entry — see ../opencode/. That is a package
install rather than a config paste. Use one or the other, not both.
observer init writes no Kilo config today — internal/mcp
has no Kilo client row — so this hand-added entry cannot duplicate anything
observer wrote. It CAN duplicate the OpenCode plugin above if you install
both: that plugin's config hook adds the same key, and a second copy pasted
here loads the same tool schema twice.
The automatic detect-and-skip observer init performs for the Claude Code
plugin is claude-code-only (internal/claudeplugin); no equivalent
probe exists for Kilo. Documented, not built.
- Docs: https://superbased.app/
- Source: https://github.com/superbasedapp/observer
- License: Apache-2.0