原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Subconscious

作者:vishaltorc版本 0.2.0i★ –i在你的电脑上运行
注册名称io.github.vishaltorc/subconscious-mcp

安装

概览

作者提供的说明(英文原文)

Local-first semantic memory for MCP agents. Recall, remember, forget, echo, drift, stats over stdio.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 搜索与 AI 记忆

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 注册中心没有列出需要填写的密钥。

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "subconscious": {
      "command": "uvx",
      "args": [
        "subconscious-mcp"
      ]
    }
  }
}

在终端中运行这条命令

claude mcp add subconscious -- uvx subconscious-mcp

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "subconscious": {
      "command": "uvx",
      "args": [
        "subconscious-mcp"
      ]
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "subconscious": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "subconscious-mcp"
      ]
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月9日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 vishaltorc 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“搜索与 AI 记忆”中的其他服务器比较i

  • 星标数多于此分类中其他 5749 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 5749 个服务器的 16% 更新
  • 基础检查结果等于或优于此分类中其他 5749 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Subconscious 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.2.0)于5个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。

有什么可以替代它?

同一分类中有:Context7, Codebase Memory, Exa

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Context7

Up-to-date docs for AI agents

作者:upstash广泛使用↓ 97.3万/周★ 6.4万3天前更新

电脑或云端

Codebase Memory

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

作者:DeusData广泛使用↓ 1.8万/周★ 4.8万23天前更新

在你的电脑上运行

Exa

Connect AI agents to Exa for web search, content fetching, and multi-step research.

作者:exa-labs广泛使用★ 52132个月前更新

在云端运行✓ exa.ai

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

subconscious-mcp

Local-first semantic memory for MCP agents. Recall, remember, forget, echo, drift detection, stats over stdio.

The server runs as an MCP stdio process on your machine. It exposes six tools that let an agent ask "have I seen this task before?" and, if so, get the previous answer back in milliseconds without re-running the work. Inspired by bat echolocation: even a recall miss reports how close the nearest memory was, an echo tool senses nearby memories without retrieving answers, and every recall outcome is logged so drift_report can flag cached answers that are absorbing too broad a family of queries (first-fill semantic drift).

Embeddings come from sentence-transformers/all-MiniLM-L6-v2 (384-dim, runs on CPU). Storage is a persistent local ChromaDB collection. No data leaves your machine.


Install

# From PyPI:

pip install subconscious-mcp

Local development:

git clone https://github.com/vishaltorc/subconscious-mcp cd subconscious-mcp pip install -e ".[dev]"

After install you can run the server from anywhere:

subconscious-mcp --help

The first time a tool is called, the embedding model (~80MB) is downloaded into the local Hugging Face cache. Subsequent starts are fast.


Configure your MCP client

Claude Desktop

Edit your config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add an mcpServers entry:

{

"mcpServers": { "subconscious-mcp": { "command": "subconscious-mcp", "args": [] } } }

If subconscious-mcp isn't on Claude Desktop's PATH, use the absolute path printed by which subconscious-mcp, e.g. "command": "/Users/you/.local/bin/subconscious-mcp".

Then quit and restart Claude Desktop. The new tools appear under the 🔌 indicator.

Claude Code

Option A. Register from the CLI (recommended):

claude mcp add subconscious-mcp -- subconscious-mcp

Option B. Edit ~/.claude.json (or your project's .mcp.json) and add:

{

"mcpServers": { "subconscious-mcp": { "command": "subconscious-mcp", "args": [], "type": "stdio" } } }

Reload the Claude Code session and the six tools become available.

A copy-pasteable file is in examples/claude_desktop_config.json and examples/claude_code_config.json.


Ambient memory

Beyond the explicit tools, subconscious-mcp can capture your work automatically through Claude Code hooks. Three commands get you there:

pip install subconscious-mcp

claude mcp add subconscious-mcp -- subconscious-mcp subconscious-mcp install-hooks

install-hooks edits your Claude Code settings.json (default ~/.claude/settings.json) to register two hooks: a SessionStart hook and a Stop hook. It backs up the existing file first (settings.json.bak. ), writes atomically, and is idempotent: running it again when both hooks are already present is a no-op. Pass --dry-run to print the planned change without writing, and --settings to target a different settings file.

What gets captured: when a session ends, the Stop hook reads the tail of the transcript, extracts the last user-request to assistant-outcome exchange, redacts secrets (best effort, see Privacy), and writes one episode per session into ~/.subconscious-mcp/data/context.db (a plain SQLite inbox). The hooks never load the embedding model or ChromaDB; the MCP server embeds and ingests pending episodes at its next startup.

What SessionStart injects: at the start of a session it prints this project's most recent episodes (up to 3) plus a one-line nudge to call recall before starting non-trivial work. Claude Code absorbs that text as context.

Capture is per-project automatically. The namespace is derived from the git repository root folder name (falling back to the current directory basename), so each project's episodes and curated memory stay isolated without any configuration. Set namespace explicitly in config to override.


Privacy

Everything stays on your machine. Episodes captured by the ambient hooks live in ~/.subconscious-mcp/data/context.db, a plain SQLite file you can inspect with any SQL client:

sqlite3 ~/.subconscious-mcp/data/context.db 'SELECT ts, namespace, substr(content,1,80) FROM episodes ORDER BY ts DESC LIMIT 10'

Before an episode is written, the captured text passes through a best-effort redactor. It currently masks these shapes:

  • OpenAI / Anthropic sk- keys (including sk-ant-, sk-proj-)
  • PyPI tokens (pypi-)
  • GitHub classic tokens (ghp_, gho_, ghu_, ghs_, ghr_) and fine-grained tokens (github_pat_)
  • Slack tokens (xoxb-, xoxa-, xoxp-, xoxr-, xoxs-)
  • AWS access key ids (AKIA...)
  • Bearer authorization tokens
  • PEM private key headers (-----BEGIN ... PRIVATE KEY-----)
  • KEY=value env assignments where the name ends in KEY / TOKEN / SECRET / PASSWORD / PASSWD (the value is masked, the name is kept)

Redaction is best effort, not a guarantee. Known gaps it does NOT catch: AWS secret access keys (bare 40-char strings), bare JWTs outside a Bearer prefix, passwords inside connection strings (postgres://user:pass@host), Stripe secret keys (sk_live_ / sk_test_, underscore form), and npm tokens. Treat capture as a convenience, not a vault.

To turn capture off entirely, set capture_enabled=false in config or SUBCONSCIOUS_CAPTURE_ENABLED=false in the environment. The Stop hook then captures nothing.

To wipe everything subconscious-mcp has stored (curated memory, episodes, echo logs, server logs) in one line:

rm -rf ~/.subconscious-mcp

Tools

recall(task, threshold=0.85, top_k=1)

Semantic search for a previously remembered task.

argtypedefaultmeaning
taskstr(required)the task description to look up
thresholdfloat0.85minimum cosine similarity for a hit
top_kint1how many candidates to consider
tagslist[str]nulloptional; candidate must share at least one

Returns:

{

"hit": true, "similarity": 0.91, "answer": "...", "task_text": "...", "entry_id": "uuid", "stored_at": 1731000000.0, "tags": ["..."] }

On a miss, hit is false, answer is null, and similarity is the best similarity observed in `top_k`. Callers can see how close they came.

When tags is supplied, the miss similarity reflects the best match within the fetched window intersected with the tag filter, and can be 0.0 even when a tag-matching entry exists beyond the window (raise top_k to widen the window).

remember(task, answer, tags=[], ttl_seconds=null, skip_if_duplicate=false)

Persist a (task, answer) pair. Returns {stored, entry_id, embedding_dim}.

ttl_seconds=null means never expire. Pass an integer to have the entry filtered out of future recalls after that many seconds.

Before storing, the nearest curated entry is probed. If its cosine similarity falls in the near-duplicate band [0.75, 0.92], the result also carries warning="near_duplicate" with nearest_task, nearest_similarity, and nearest_entry_id (a write-time first-fill drift guard that complements drift_report). The entry is still stored. Pass skip_if_duplicate=true to skip the write instead, in which case the result is {stored: false, ...} with the same warning fields. Ambient capture episodes never trigger the warning.

The band [0.75, 0.92] is deliberately independent of default_threshold (0.85), so it straddles the recall threshold: the warning fires on neighbours that recall might or might not return. Similarities above 0.92 are treated as update-territory (basically the same task) and are intentionally not warned. To act on a warning, recall the nearest_entry_id (or look it up) to inspect the existing entry, then decide whether to merge, update, or proceed.

echo(task, top_k=5)

Sonar ping: return the nearest non-expired entries without their answers.

argtypedefaultmeaning
taskstr(required)the task description to ping with
top_kint5how many nearest entries to report
tagslist[str]nulloptional; candidate must share at least one

Returns:

{

"count": 47, "echoes": [ {"entry_id": "uuid", "similarity": 0.91, "task_text": "...", "stored_at": 1731000000.0, "tags": ["..."], "kind": "memory"} ] }

Use it to sense whether a task sits in known territory before committing to a recall. Because no answer is returned, an echo can never propagate a stale or wrong cached answer. Echo calls don't count toward the hit rate and aren't written to the echo log.

Each echo carries a kind: "memory" for curated remember entries, "episode" for ingested ambient capture. Episodes surface in echo but never in recall answers.

drift_report(min_hits=3, min_spread=0.08)

Analyze the echo log for first-fill semantic drift candidates: entries whose recall hits span a wide similarity band across distinct query phrasings. A wide band means one cached answer is absorbing a broad family of queries that may carry subtly different interpretations (see validation/results.md for the failure mode this detects).

argtypedefaultmeaning
min_hitsint3minimum recorded hits before an entry is considered
min_spreadfloat0.08minimum (max - min) hit-similarity band to flag

Returns:

{

"analyzed_recalls": 412, "entries_with_hits": 38, "candidates": [ { "entry_id": "uuid", "task_text": "Pull out all digits...", "still_stored": true, "hits": 5, "distinct_queries": 4, "similarity_min": 0.82, "similarity_max": 0.94, "similarity_spread": 0.12 } ] }

Flagged entries are review candidates: forget them, split them into more specific entries, or raise the recall threshold for that family.

forget(entry_id)

Delete the entry with this id. Returns {"forgotten": true} if it existed, else false.

stats()

Returns {"total_entries", "last_hit_at", "hit_rate_last_100"}. hit_rate_last_100 is a sliding window over the most recent 100 recall calls. Useful to see whether memory is actually paying off.


Configuration

Configuration is resolved in priority order:

  1. Environment variables (highest)
  2. ~/.subconscious-mcp/config.json
  3. Built-in defaults
keydefaultenv var
storage_dir~/.subconscious-mcp/dataSUBCONSCIOUS_STORAGE_DIR
embedding_modelall-MiniLM-L6-v2SUBCONSCIOUS_EMBEDDING_MODEL
default_threshold0.85SUBCONSCIOUS_DEFAULT_THRESHOLD
default_ttl_secondsnull
log_levelINFOSUBCONSCIOUS_LOG_LEVEL
echo_log_enabledtrueSUBCONSCIOUS_ECHO_LOG_ENABLED
echo_log_max_bytes5000000SUBCONSCIOUS_ECHO_LOG_MAX_BYTES
namespacedefaultSUBCONSCIOUS_NAMESPACE

| capture_enabled | true | `SUBCONSC

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx