Telys — on-device memory

Telys — on-device memory

Local
@thyn-aiPythonApache-2.0Updated Yesterday

Private on-device memory & retrieval for AI assistants — offline vector + lexical search.

telys

Public SDK for Telys — embedded, on-device memory & retrieval. In-process, zero cloud roundtrips at query time.

This package contains the complete developer-facing surface: the Telys/Collection facades, query/filter types, the EmbeddingProvider interface, the Tuner/TuningPlan interfaces, the full MCP server (telys/mcp.py — 19 tools, protocol 2025-06-18, stdio), a runtime loader, and the telys CLI. The numerical kernel (libame_kernel) the tools drive is a separately distributed, signed on-device runtime fetched by telys login (free community license) — the same arrangement as MCP servers that front hosted or signed-binary backends.

Install

As a CLI (recommended — isolated env, on your PATH, not pinned to one Python):

pipx install telys

telys login          # sign in → free device license + signed runtime; fully offline thereafter

As a library (to import telys in your own project):

python -m venv .venv && . .venv/bin/activate
pip install telys

Plain pip install --user telys works too, but pip may warn that its user-scripts dir isn't on your PATH (a macOS --user quirk) — pipx avoids that entirely. Runtime platforms: macOS arm64, Linux x86_64/arm64 (Windows: run under WSL2).

from telys import Telys
db = Telys("./memory")
col = db.create_collection("docs", dim=768, partition_by="tenant_id")   # dim is arbitrary — 384/768/1024/1536/3072…
col.add(vectors, ids=ids, metadata=metadata)          # bring your own vectors (embedding-agnostic, any dimension)
hits = col.search(qvec, where={"tenant_id": "acme"}, top_k=10, explain=True)

The runtime is required for execution; the embedder is optional — col.add(vectors, …) and col.add_texts(…) both need the runtime, but only *_texts needs an embedder (bring your own via telys.embedding.CallableEmbedder, or use the on-device bigram embedder).

For local development, install the runtime as a package instead of via the CLI:

pip install "telys[runtime]"   # or: pip install telys-runtime

MCP server

MCP registry

telys mcp runs Telys as a Model Context Protocol server over stdio, exposing 19 tools — the full memory surface (CRUD, filtered queries, lexical search, compaction / IVF / tuning, plus a repo auto-indexer) — to any MCP client (Claude Desktop/Code, Cursor, Codex, Qwen Code, …). Everything is local and offline. Introspection (initialize/tools/list) needs no credentials; executing memory tools requires the one-time free telys login (device authorization, free community plan) — fully offline thereafter, no API key in the client config.

pipx install telys
telys login            # free device license + signed on-device runtime
telys runtime verify   # confirm the runtime the tools drive is present
telys mcp              # serve JSON-RPC 2.0 (protocol 2025-06-18) on stdin/stdout

You rarely start it by hand — telys mcp install writes the server entry into your clients — or add this block to a client's MCP config yourself:

{
  "mcpServers": {
    "telys": {
      "command": "telys",
      "args": ["mcp"]
    }
  }
}

Registry: io.github.thyn-ai/telys on the Official MCP Registry. Server source: packages/telys-sdk/telys/mcp.py. MCP docs: docs.telys.ai/mcp.

ToolWhat it doesRequired arguments
telys_searchSemantic + lexical search over a memory collectioncollection, query
telys_addAdd text documents (collection auto-created if absent)collection, texts
telys_create_collectionCreate a collection (fix name + partition key up front)name
telys_list_collectionsList saved collections in the active store—
telys_statsRow counts and index state for one collectioncollection
telys_upsertAdd-or-replace rows by id (the idempotent write)collection, texts, ids
telys_updateRe-embed/replace EXISTING ids (strict: ids required)collection, texts, ids
telys_deleteTombstone rows by idcollection, ids
telys_idsList live external ids, optionally where-scopedcollection
telys_countLive row count, optionally where-scopedcollection
telys_getExact row lookup by id (re-reads repo source slices)collection, ids
telys_search_lexicalOn-device BM25 keyword searchcollection, query
telys_compactFlush tombstones, merge delta into the base layoutcollection
telys_build_ivfBuild per-partition IVF indexes (recall-floor calibrated)collection
telys_build_lexicalFit the BM25 lexical indexcollection
telys_tuneProduce (and optionally apply) a TuningPlancollection
telys_index_repoWalk + chunk + ingest a repo, incrementally refreshed—
telys_repo_searchSearch the auto-indexed repo (re-indexes first, always fresh)query
telys_workspace_infoReport the configured workspace, repo_id and file count—

Every tool ships a rich description (what it does, when to use it, parameters with defaults, failure modes) and static MCP annotations (readOnlyHint / destructiveHint / idempotentHint / openWorldHint) — openWorldHint: false throughout: the server makes no network calls. Listing the tools needs no credentials and no runtime: initialize + tools/list answer from the static tool registry; only actual tool calls load the signed runtime lazily.

Documentation

Full documentation lives at docs.telys.ai:

Links