Skip to content
WARM logo
MCP server
Registry

WARM MCP Server

Local persistent memory for AI agents with recall, search, forgetting, and encrypted storage.

WARM scores 19 (Limited), with no SPDX license recorded. It installs as a local process. It does not declare tools yet. Filed under AI and memory. Install configs are generated for 10 clients. Being listed in the registry is not the same as being vendor-official.

by writerslogicNo license
Trust score
19Limited
Trust score 19 of 100, Limited

Limited trust

19 of 100 from six public signals. Nobody can buy a point.

  • No license recorded.
How we score trust
Scorecard

License, quality and maintenance

How grades work
Trust breakdown

Where the 19 comes from

0 + 6 + 0 + 0 + 10 + 3 = 19. Each factor is capped, so no single signal can carry a listing.

Registry0 / 30

Active in the official MCP registry, plus a known vendor namespace.

Registry: 0 of 30 points.
Maintenance6 / 20

How recently the repository saw a commit or release.

Maintenance: 6 of 20 points.
Popularity0 / 20

GitHub stars and weekly downloads, on a log scale.

Popularity: 0 of 20 points.
License0 / 10

A clear, OSI-style open-source license.

License: 0 of 10 points.
Security10 / 10

Not archived, a secure install path, a pinned version.

Security: 10 of 10 points.
Docs3 / 10

A real summary, a README with depth, listed tools.

Docs: 3 of 10 points.

Install

Pick your client, copy the config, paste it in.

Needs Cursor or VS Code installed on this device. The button opens the app and asks you to confirm before it adds the server.

~/Library/Application Support/Claude/claude_desktop_config.json
{  "mcpServers": {    "writerslogic-warm": {      "command": "npx",      "args": [        "-y",        "writerslogic-warm-mcp@0.1.5"      ]    }  }}

Environment variables

This server does not declare environment variables.

Tools show up when the registry metadata or the repository README lists them. Public READMEs are read directly. A GitHub token is used only when one is already configured.

About

WARM

WritersLogic Adaptive Retention & Memory.

Hybrid search, graph indexing, and vector-symbolic memory.

Local memory for agents and apps: full-text and vector search, a memory API and a vector-symbolic fact store in one embeddable Rust engine that makes no network calls.

CI MSRV 1.89 OpenSSF Scorecard OpenSSF Best Practices License: Apache-2.0 WARM MCP MCP server – quality and maintenance score on Glama

Bemula forgetting score, DeepSeek backbone LongMemEval dev, gpt-4o reader and judge VIBE llama-128-ip max recall@100, one thread

Website · Docs · Get started · Standards and provenance · Results · Capabilities · Limits · Contribute

What it is

WARM is a Rust library that stores text, vectors and facts in a directory on your machine and finds them again. It ships with Node.js bindings, C, WASM and UniFFI bindings, an HTTP server with a Python client, and an MCP server. There are no service calls, no telemetry and no model downloads unless you turn on a feature that asks for one.

CapabilityWhat you get
Document searchChunking, stemmed BM25 over blocked postings, Boolean and phrase queries, hybrid fusion with embeddings you supply, metadata filters, byte offsets
Vector indexGraph index with a memory-mapped vertex file, an updatable delta for inserts and deletes, optional query-aware routing trained on sample queries
Memory APIremember, recall, forget and explain with time validity and supersession; conversation memory with source provenance
StorageAtomic replace and delete, crash-safe journal and checkpoints, verified compaction, one writer per store
SecurityOptional AES-256-GCM storage encryption with documented coverage and limits, signed audit log, COSE/SCITT provenance
Vector-symbolic layerSparse hypervectors with bind, bundle and permute, triples with multi-hop queries, Hopfield cleanup

Who it's for

You are buildingWhat you get
An agent or assistant that needs memoryA memory API with forgetting that removes facts from the store, and an MCP server for editors and agent hosts
A local-first or offline appEmbedded search and storage in one directory, with no server process and optional encryption
A service that needs vector or text searchwarm-server over HTTP with tenants and scoped keys, or the library in-process
Research on vector-symbolic memoryThe bind/bundle algebra, meaning memory and capacity experiments with their result files

Headline results

Every row links to the committed file it comes from. These are single machines and stated protocols, not a substitute for testing your own data.

ResultConditionsSource file
Bemula forgetting score 0.322; best published row 0.310 (LangMem)Full split: 50 dialogues, 135 forget requests. Agent and judge both deepseek-v4-flash-0731 through OpenRouter pinned to DeepSeek, temperature 0; the judge snapshot is inferred from the authors' run metadata. Recall k=5 hybrid with text-embedding-3-small. Compared with the paper's published DeepSeek rows; a same-day rerun of the suite's naive RAG baseline scored 0.075. One run.bemula_v1.json
LongMemEval dev 89.75 of 100 correct (mean of 4 runs, range 87 to 93)Official generation and judge prompts, gpt-4o-2024-08-06 as reader and judge, top 10 context. Retrieval is the reference turn ranking over cached Qwen3 scores, not native conversation-memory recall. k was chosen on dev; there is no held-out result.longmemeval_official_dev_summary.json
VIBE llama-128-ip strict recall@100 up to 0.99687 at 1,457 QPSOfficial test queries, one thread, query-aware graph (ef=512). Neither frozen RoarGraph configuration reached 0.99. Behind at 0.95 and 0.99 QPS (see below).query_aware_graph_v1/README.md
VIBE yi-128-ip at recall 0.95: 3,214 QPS against 1,953 (MLANN RF80)Same protocol; compared only with the frozen RoarGraph and MLANN configurations measured there. Recall 0.99 was not reached.query_aware_graph_v1/README.md
SIFT-1M at recall@10 0.95: 23,918 QPS against hnswlib 8,125 (2.94x, interval 2.75 to 3.01); 3.09x at 0.99, 1.40x faster build, 1.83x less serving RSS, 3.74x faster cold startCore Ultra 9 185H at 4b7a849f, 10,000 queries issued one at a time from one client thread, index built with 8 threads; WARM through the Rust API, hnswlib through its Python binding; Bonferroni-adjusted bootstrap intervalsheavy-ann-sift-...-185h-22c-27g.json
BM25 search on SciFact, NFCorpus and the memory corpus: 1.66x to 2.00x the single-thread QPS of the fastest of tantivy 0.27, Lucene 10.6 and SQLite FTS5, with 1.69x to 2.91x less serving memory and 3.1x to 5.7x faster cold start, at tied nDCG@10Two machines (Core Ultra 9 185H at 4b7a849f, Modal 8 vCPU at 7ba2d4fe, same engine source), 5 and 3 interleaved serve rounds, Bonferroni-adjusted bootstrap intervals exclude parity for every win. Lexical only, one chunk per documentCOMPARISON.md, standard-text-beir-scifact-...-185h-22c-27g.json
SciFact nDCG@10 hybrid 0.729, above its own BM25 (0.688) and dense (0.645)5,183 documents, 300 queries, MiniLM embeddings supplied by the harness. NFCorpus: 0.355 against 0.323 and 0.317.public_scifact.json, public_nfcorpus.json

Where it's behind

ResultConditionsSource file
ann-benchmarks at recall 0.95: sift 2,819 QPS against faiss-ivfpqfs 3,788 (0.74x); glove 1,019 against ScaNN 1,535 (0.66x)Official ann-benchmarks runner, each run pinned to one CPU, AVX2 hostann_benchmarks_harness_wl02_v1.json
VIBE llama-128-ip QPS: 24.6% behind RoarGraph at recall 0.95, 54.8% behind MLANN RF80 at 0.99One thread, official test queriesquery_aware_graph_v1/README.md
SIFT-1M index file 1,389 MiB against hnswlib's 752 (0.54x, no interval); peak build RSS 0.94x of hnswlib'sSame run as the SIFT-1M row abovedocs/benchmarks/GAPS.md
BEIR FiQA (57,600 documents) single-thread BM25 QPS: 1,269 against Lucene 10.6's 1,625 (0.78x); p50 and p99 latency also behindCore Ultra 9 185H at 4b7a849f, 5 interleaved serve rounds; serving memory (1.26x less than SQLite FTS5) and cold start (2.37x faster than tantivy) still winstandard-text-beir-fiqa-...-185h-22c-27g.json
Text ingest: peak build memory 1.1x to 2.1x SQLite FTS5's on every corpus; ingest time behind SQLite FTS5 on SciFact, NFCorpus and memory (0.46x to 0.97x), tied on FiQASame runs, both machinesdocs/benchmarks/GAPS.md
glove-100-angular with the sparse vector path: recall@10 0.252 at 33.7 QPS against FAISS HNSW 0.832 at 4,111 QPSOne thread, Apple M4; the sparse path is experimentalpublic_glove-100-angular.json

Method, intervals and every loss: docs/benchmarks and the benchmarks pages.

Generated from benchmarks/results/competitive/ by warm-bench table; method and caveats in docs/benchmarks/COMPARISON.md. W = WARM ahead (95% interval excludes parity), T = tie, L = a comparator is ahead, - = no verdict (unpinned source revision, no interval, or not comparable). Rows are compared only within one machine.

DatasetMachineMetricWARMBest otherAdvantage
sift-128-euclideanlinux-x86_64-intel-ultra-9-185h-22c-27gQPS @ recall@10 >= 0.95 (QPS)23,918hnswlib 8,1252.94xW
sift-128-euclideanlinux-x86_64-intel-ultra-9-185h-22c-27gp99 latency @ 0.95 (us)97hnswlib 2512.60xW
sift-128-euclideanlinux-x86_64-intel-ultra-9-185h-22c-27gBuild time (s)121.44hnswlib 170.021.40xW
sift-128-euclideanlinux-x86_64-intel-ultra-9-185h-22c-27gRSS, serving (MiB)490hnswlib 8981.83xW
sift-128-euclideanlinux-x86_64-intel-ultra-9-185h-22c-27gIndex size (MiB)1,389.1hnswlib 751.80.54x-
beir:fiqalinux-x86_64-intel-ultra-9-185h-22c-27gnDCG@100.2654SQLite FTS5 0.26780.99xT
beir:fiqalinux-x86_64-intel-ultra-9-185h-22c-27gQPS (single thread) (QPS)1,269Apache Lucene 10.6.0 (JVM) 1,6250.78xL
beir:fiqalinux-x86_64-intel-ultra-9-185h-22c-27gp99 latency (us)1,828Apache Lucene 10.6.0 (JVM) 1,4860.81xL
beir:fiqalinux-x86_64-intel-ultra-9-185h-22c-27gIngest/build time (s)1.55SQLite FTS5 1.440.93xT
beir:fiqalinux-x86_64-intel-ultra-9-185h-22c-27gPeak RSS, serving (MiB)31SQLite FTS5 391.26xW
beir:fiqalinux-x86_64-intel-ultra-9-185h-22c-27gOn-disk size (MiB)9.7Apache Lucene 10.6.0 (JVM) 12.11.25xW
memorymodal-x86_64-8vcpu-32gnDCG@100.4561Apache Lucene 10.6.0 (JVM) 0.46270.99xT
memorymodal-x86_64-8vcpu-32gQPS (single thread) (QPS)4,138tantivy 2,1851.89xW
memorymodal-x86_64-8vcpu-32gp99 latency (us)533tantivy 7981.50xW
memorymodal-x86_64-8vcpu-32gIngest/build time (s)1.91SQLite FTS5 1.750.92xL
memorymodal-x86_64-8vcpu-32gPeak RSS, serving (MiB)17SQLite FTS5 412.42xW
memorymodal-x86_64-8vcpu-32gOn-disk size (MiB)3.5Apache Lucene 10.6.0 (JVM) 10.32.92xW
memorylinux-x86_64-intel-ultra-9-185h-22c-27gnDCG@100.4561Apache Lucene 10.6.0 (JVM) 0.46270.99xT
memorylinux-x86_64-intel-ultra-9-185h-22c-27gQPS (single thread) (QPS)8,417tantivy 4,9621.70xW
memorylinux-x86_64-intel-ultra-9-185h-22c-27gp99 latency (us)284tantivy 4821.70xW
memorylinux-x86_64-intel-ultra-9-185h-22c-27gIngest/build time (s)0.87SQLite FTS5 0.840.97xL
memorylinux-x86_64-intel-ultra-9-185h-22c-27gPeak RSS, serving (MiB)14SQLite FTS5 241.69xW
memorylinux-x86_64-intel-ultra-9-185h-22c-27gOn-disk size (MiB)3.5Apache Lucene 10.6.0 (JVM) 10.32.92xW
beir:nfcorpusmodal-x86_64-8vcpu-32gnDCG@100.2916SQLite FTS5 0.29141.00xT
beir:nfcorpusmodal-x86_64-8vcpu-32gQPS (single thread) (QPS)12,373tantivy 7,3331.69xW
beir:nfcorpusmodal-x86_64-8vcpu-32gp99 latency (us)164tantivy 2801.71xW
beir:nfcorpusmodal-x86_64-8vcpu-32gIngest/build time (s)0.44SQLite FTS5 0.200.46xL
beir:nfcorpusmodal-x86_64-8vcpu-32gPeak RSS, serving (MiB)15SQLite FTS5 452.91xW
beir:nfcorpusmodal-x86_64-8vcpu-32gOn-disk size (MiB)1.0Apache Lucene 10.6.0 (JVM) 1.51.55xW
beir:nfcorpuslinux-x86_64-intel-ultra-9-185h-22c-27gnDCG@100.2916SQLite FTS5 0.29141.00xT
beir:nfcorpuslinux-x86_64-intel-ultra-9-185h-22c-27gQPS (single thread) (QPS)23,585tantivy 14,2071.66xW
beir:nfcorpuslinux-x86_64-intel-ultra-9-185h-22c-27gp99 latency (us)153tantivy 2451.60xW
beir:nfcorpuslinux-x86_64-intel-ultra-9-185h-22c-27gIngest/build time (s)0.15SQLite FTS5 0.140.94xL
beir:nfcorpuslinux-x86_64-intel-ultra-9-185h-22c-27gPeak RSS, serving (MiB)13SQLite FTS5 282.22xW
beir:nfcorpuslinux-x86_64-intel-ultra-9-185h-22c-27gOn-disk size (MiB)1.0Apache Lucene 10.6.0 (JVM) 1.51.55xW
beir:scifactmodal-x86_64-8vcpu-32gnDCG@100.7027Apache Lucene 10.6.0 (JVM) 0.70221.00xT
beir:scifactmodal-x86_64-8vcpu-32gQPS (single thread) (QPS)5,534tantivy 3,1061.78xW
beir:scifactmodal-x86_64-8vcpu-32gp99 latency (us)236tantivy 4742.01xW
beir:scifactmodal-x86_64-8vcpu-32gIngest/build time (s)0.58SQLite FTS5 0.300.52xL
beir:scifactmodal-x86_64-8vcpu-32gPeak RSS, serving (MiB)31SQLite FTS5 702.23xW
beir:scifactmodal-x86_64-8vcpu-32gOn-disk size (MiB)1.3Apache Lucene 10.6.0 (JVM) 2.01.53xW
beir:scifactlinux-x86_64-intel-ultra-9-185h-22c-27gnDCG@100.7027Apache Lucene 10.6.0 (JVM) 0.70221.00xT
beir:scifactlinux-x86_64-intel-ultra-9-185h-22c-27gQPS (single thread) (QPS)12,254tantivy 6,1332.00xW
beir:scifactlinux-x86_64-intel-ultra-9-185h-22c-27gp99 latency (us)220tantivy 4021.83xW
beir:scifactlinux-x86_64-intel-ultra-9-185h-22c-27gIngest/build time (s)0.22SQLite FTS5 0.200.91xL
beir:scifactlinux-x86_64-intel-ultra-9-185h-22c-27gPeak RSS, serving (MiB)29SQLite FTS5 531.84xW
beir:scifactlinux-x86_64-intel-ultra-9-185h-22c-27gOn-disk size (MiB)1.3Apache Lucene 10.6.0 (JVM) 2.01.53xW

Get started

Clone once: git clone https://github.com/writerslogic/warm && cd warm. Run the offline agent-memory demo with cargo run --release --example demo-offline-agent.

From your own Rust project, add the current Apache-2.0 source:

cargo add warm-rust

The historical v0.6.1 source remains AGPL-3.0-or-later; it is available from that Git tag, not as a warm-rust 0.6.1 release on crates.io.

use writerslogic_warm::{DocumentInput, WarmCore, SearchOptions};

let dir = tempfile::tempdir()?;
let warm = WarmCore::new(4096, Some(dir.path().display().to_string()), None)?;
warm.memorize_document(DocumentInput {
    id: "backups".into(),
    text: "Restore deleted documents from verified backups.".into(),
    source_uri: Some("operations.md".into()),
    version: Some("1".into()),
    metadata: Some(serde_json::json!({ "project": "alpha" })),
    chunk_words: None, overlap_words: None, store_text: None, embeddings: None, title_weight: None,
})?;
let hits = warm.search_documents("restore backups", &SearchOptions::default())?;
println!("{} {:?}", hits[0].document_id, hits[0].source_uri);

Unreleased Rust API change: WarmCore::query, query_batch, and analyze_components return Result. Handle the result with ? or an explicit error branch; deferred-encoding failures no longer become successful partial query results. get_document, list_documents, get_document_info, and list_document_info also return Result; retained-text and checkpoint decoding failures propagate instead of panicking, and reads no longer hydrate the entire checkpoint or hold store locks during text I/O.

Install the Node.js package and its platform-specific native binary:

npm install warm-sdk

To build from source, run npm ci --omit=optional && npm run build with Rust installed. The WARM release includes listDocuments for scoped pruning. See the integration guide for source provenance, namespace isolation, dry runs and deletion limits.

const { WarmMemorySystem } = require('warm-sdk')
const { DocumentMemory } = require('warm-sdk/semantic')

async function main() {
  const dir = require('node:fs').mkdtempSync(require('node:path').join(require('node:os').tmpdir(), 'warm-readme-'))
  const memory = new DocumentMemory(new WarmMemorySystem(4096, dir))
  await memory.memorize({
    id: 'backups', text: 'Restore deleted documents from verified backups.',
    sourceUri: 'operations.md', version: '1', metadata: { project: 'alpha' },
  })
  const [hit] = await memory.search('restore backups', { filter: { project: 'alpha' } })
  console.log(hit.documentId, hit.sourceUri, hit.text)
  await memory.flush()
}
main().catch(error => { console.error(error); process.exit(1) })

The Python package warm-sdk is an HTTP client for warm-server, which stores vectors you supply. (warm-python provides native vector search and phase vectors, but no document search.)

cargo build --release --features server --bin warm-server
WARM_API_KEY=change-me target/release/warm-server --input-dim 384 &
uv pip install warm-sdk
from writerslogic_warm_sdk import WarmClient

client = WarmClient(url="http://127.0.0.1:8080", api_key="change-me", tenant_id="demo")
client.add_documents([{"id": "a", "vector": [0.1] * 384, "text": "hello", "metadata": {}}])
print(client.query([0.1] * 384, top_k=1)["matches"][0]["id"])

Endpoints, flags, tenants and limits are in the server docs. A runnable Python quickstart with a toy embedder is in examples/quickstart/python.

warm-mcp serves a store to any Model Context Protocol client over stdio or HTTP:

npx -y writerslogic-warm-mcp                                # stdio; downloads a verified binary on first run
npx -y writerslogic-warm-mcp --transport http               # http://127.0.0.1:8765/mcp

The MCP package is a separate launcher. To build the server from source:

cargo build --release --features mcp,security --bin warm-mcp   # add local-models for semantic recall
./target/release/warm-mcp                                       # stdio
./target/release/warm-mcp --transport http                      # http://127.0.0.1:8765/mcp

Client setup, data directory and the one-writer rule: MCP integration.

For normalized content from multiple applications, see the organizational knowledge adapter.

The five-minute quickstart walks through ingest, search, a SQLite FTS5 comparison and encryption in Rust, Python and Node, and CI runs that code on every pull request. For a whole agent memory with no embeddings and no network, run cargo run --example demo-offline-agent.

What ships today

CapabilityStatusDocumented limit
Hybrid document search (BM25 + exact cosine, filters, byte offsets)ShipsExact scan of eligible chunks; benchmark your corpus before assuming capacity (guide)
Boolean lexical search (+required, -excluded, quoted phrases)ShipsFlat queries only, no nesting; an empty or only-excluded query matches nothing (design)
Atomic replace/delete, crash-safe journal, verified compaction, process lockShipsOne writer per store; compaction is not secure erasure
Vector index (qgraph vertex graph, memory-mapped)ShipsBuild time and serving RSS behind hnswlib on SIFT-1M (gaps)
Updatable vector index (durable delta for inserts and deletes)ShipsSingle writer; format in VECTOR-UPDATES.md
Query-aware graph routing (trained on sample queries)Ships (opt-in)Needs representative training queries; tested on VIBE llama and yi (report)
Memory API: remember, recall, forget, explainShipsForgetting removes a fact from the store; it does not cover what a model inferred (docs)
Conversation memory (conversation-memory)ShipsBounded context with exact source provenance; native recall not yet benchmarked on LongMemEval end to end
Meaning memory: triples, multi-hop, Hopfield cleanupShips (runtime opt-in)Tested on synthetic and 2,120-fact sets (research_bench_16384_256.json)
Union-bundle membership (experimental)ResearchAt D = 16,384: positive gap to N = 500 (4% false positives), tested to 2,500 (benchmark_scaling_results.json)
Sparse vector index (memorize_vector)ExperimentalNot competitive with HNSW (results)
Encrypted stores (security)ShipsAES-256-GCM, Argon2id; covers the log, index caches and the text segment. Metadata, file names and sizes are not encrypted
Signed audit log, credential-gated access, COSE/SCITT/C2PA (provenance)ShipsHost must authenticate DIDs; PoSME, RATS, did:web not implemented
On-device models (local-models: Qwen3 embed/rerank/LLM)ShipsLocal weights only; never downloads
warm-server HTTP API, multi-tenant (server)ShipsSingle node; TLS, per-tenant scoped keys (guide)
MCP server (mcp: warm-mcp, stdio and HTTP)ShipsEncryption needs security; semantic recall needs local-models
Node.js bindingsShips on npm and from sourceNative binaries are selected by platform at install time
C, Go, .NET, Java, Kotlin, Swift and WebAssembly bindingsSource availableRequire local builds; the language packages and native bundles are not yet published (runtime guides)
PythonClient + phase substrateNo in-process document search
Query-private search (private-search)ExperimentalFor searching an index someone else holds; hides the query vector from the scorer only (notes)

Every capability above except document search and the vector index is behind a Cargo feature or runtime option that is off by default; Cargo features lists them all.

Architecture

flowchart TB
  subgraph bindings["Bindings and servers"]
    rust["Rust crate"]
    node["Node.js (napi)"]
    ffi["C, WASM, UniFFI"]
    python["Python: warm-sdk"]
    server["warm-server (HTTP)"]
    mcp["warm-mcp (stdio, HTTP)"]
  end
  subgraph engine["Engine API"]
    core["WarmCore: documents, vectors, facts, mutation gate"]
    prov["Security and provenance: signed audit log, COSE/SCITT"]
  end
  subgraph indexes["Indexes and memory"]
    text["Text index: blocked postings, BM25, Boolean and phrase"]
    vector["Vector index (qgraph): vertex file, updatable delta, query-aware projection"]
    memory["Memory API: remember, recall, forget, conversation memory"]
    vsa["Vector-symbolic layer: bind, bundle, Hopfield cleanup"]
  end
  subgraph storage["Storage"]
    journal["Journal and checkpoints"]
    segments["Append-only segments (CRC32, LZ4)"]
    mapped["Memory-mapped files"]
    crypto["AES-256-GCM encryption (optional)"]
  end
  python --> server
  rust --> core
  node --> core
  ffi --> core
  server --> core
  mcp --> core
  core --> text
  core --> vector
  core --> memory
  core --> vsa
  core --> prov
  memory --> text
  text --> journal
  vector --> journal
  memory --> journal
  journal --> segments
  segments --> mapped
  segments --> crypto

Module map: docs/ARCHITECTURE.md.

Limits

  • Not anonymous. Hypervector sketches and term counts are not encryption; anyone with a store can encode candidate text and compare. storeText: false keeps term counts, IDs and embeddings, so it is not a privacy control.
  • Document search is conventional. It does not use the hypervectors; the holographic parts are the algebra and the meaning memory.
  • One writer per store. A second writing process fails at open with a lock error.
  • Capacity numbers are points, not guarantees, and are stated only over the tested range (capacity).
  • Benchmark results are single machines. Conditions are in each results file; the single-core ann-benchmarks run and the VIBE high-recall points are losses (see Where it's behind).
  • Masking is obfuscation. Client-side vector masking preserves every pairwise similarity.
  • A store is a directory and WarmCore::new(.., None, ..) uses the current directory.

Full statement: docs/PRIVACY.md. Report vulnerabilities privately via SECURITY.md.

Contributing

CONTRIBUTING.md: setup, the checks CI runs, DCO sign-off (git commit -s, no CLA). Start with a good first issue or Discussions. See the Code of Conduct. Benchmark changes regenerate the results file they touch; the README cites files, not remembered figures.

License

Apache-2.0. See LICENSE. Use, modify and embed it in open-source or proprietary software, including network services, with no copyleft obligation. The historical v0.6.1 source remains available under its AGPL-3.0-or-later license.

Frequently asked questions

What is WARM MCP Server?

Local persistent memory for AI agents with recall, search, forgetting, and encrypted storage.

How do I install WARM MCP Server in Claude Desktop, Cursor, or VS Code?

Pick your client in the Install section on this page and copy the generated config into the client's config file. Step-by-step guides: Claude Desktop, Cursor, and VS Code. WARM MCP Server runs locally from the npm package writerslogic-warm-mcp with the command npx -y writerslogic-warm-mcp@0.1.5.

Does WARM MCP Server support remote (HTTP) connections?

No remote endpoint is listed for WARM MCP Server. It runs locally on your machine over stdio, started by your MCP client.

How is WARM MCP Server's trust score calculated?

WARM MCP Server scores 19 out of 100 (Limited). The score adds six capped public signals: registry status, maintenance, popularity, license, documentation, and security. Nobody can pay for points. Read the methodology for the full formula.

Reviews

No reviews yet

—Be the first to review

5 star0 reviews at 5 stars
4 star0 reviews at 4 stars
3 star0 reviews at 3 stars
2 star0 reviews at 2 stars
1 star0 reviews at 1 stars

No published reviews yet. Used it? Tell the next person how it went.

Add badge to your README

Paste either snippet into the repository README. The image links to this listing.

Listed on MCPpedia

Top 5 MCP servers

Daily or weekly. Confirm by email, unsubscribe any time.

How often

Manage this listing

Claim this server