Skip to content
Early access Kaleidoscope needs a key to run. Email contact@kleosresearch.xyz and we will send you one.

MCP reference

Kaleidoscope publishes two MCP tools. search reads memory, remember writes it. Nothing else is callable by a model.

kscope init registers the server with every editor it finds. Each one starts kscope mcp --profile with the project’s profile and talks to it over stdio at MCP protocol revision 2025-11-25.

Machine-readable tool reference · Install

Send exactly one of query or memory_id. Every other field applies to a ranked query and is refused alongside memory_id.

fieldnotes
queryRanked selection. Hits come back under selected_hits.
memory_idAddressed read of one mem_... record. No ranking, no filtering.
top_kMemories served, in rank order. Five is a normal value.
candidate_poolHow many results each retrieval channel may propose before the final cut. Independent of top_k.
maximum_context_bytesThe byte budget the served set is bounded to.
ledgerOnly true is accepted.
as_ofRFC 3339 instant validity is evaluated at. Omitted means now.
scopeproject, branch, artifact. An omitted axis matches every memory.
channelsRestrict which retrieval channels contribute.
{"query": "how do we handle database migrations", "top_k": 5}

Omit a knob and you get its published default. A value above its ceiling is refused rather than clamped.

A search writes nothing to your vault. It ranks, bounds and returns, so repeating it is safe, and many agents can search one vault at once. ledger is still accepted as true so callers that send it keep working; false is refused, because a ranked search is always the bounded one.

fieldwhennotes
modealwayscreate, update, or delete.
content_mdcreate, updateThe memory as you want to read it back. Must begin with # .
semantic_deltacreate, updateThe structure committed with it. Fields below.
memory_idupdate, deleteWhich memory.
expected_version_idupdate, deleteThe active version you are allowed to replace.
itemsinstead of the pair aboveUp to 50 creates in one call, applied in order.

Inside semantic_delta:

keynotes
titleRequired. Your words — nothing scrapes it out of content_md.
memory_typeRequired. Reuse an accepted name; types are append-only.
factsRequired, at least one. Each is subject, predicate, object; predicates are snake_case.
entitiesEvery surface your facts name, each with n, kind and is. Declare all of them or none.
occurred_atWhen the facts are about, as {t, grain}. Kaleidoscope parses no date out of prose.
scopeproject, branch, artifact.
evidence, corrections, propose, temporal, contextOptional.
{
"mode": "create",
"content_md": "# Ana owns the billing service\n\nAna took it over after the payments team split.",
"semantic_delta": {
"memory_type": "decision",
"title": "Ana owns the billing service",
"entities": [
{"n": "Ana", "kind": "person", "is": "backend engineer on my team"},
{"n": "billing service", "kind": "service", "is": "the service that issues invoices"}
],
"facts": [{"subject": "Ana", "predicate": "owns", "object": "billing service"}]
}
}

Write the is gloss properly. It is what the engine matches on when it decides whether two mentions of a name are the same thing, so Ana | person | backend engineer on my team finds far more than Ana alone.

remember infers nothing. The entities, facts and dates it stores are the ones you state.

A refusal names the field and what to change it to. Fix it and resend.

The tool schema your host discovered is the authority for the values a build accepts. Print the same contract from the shell:

Terminal window
kscope schema remember
kscope schema

Lifecycle and import, maintenance, ontology and diagnostics are operator commands. They are absent from the tool list an agent discovers, and search results carry no handle that would reach them.

Discovering the two tools is not the same as using them well. Give your agent the skill.