Seven Dpt Mcp

io.github.pierreb4由 GitHub 账号 pierreb4 发布v0.1.5更新于 Oct 24, 2026

Feynman's twelve-problems method as an MCP server: dormant problems + an evoke loop for new tricks.

已验证STDIO仅桌面效率与工作流知识与记忆

概览

AI 生成的概览

一个本地 MCP 服务器,保存一小组长期问题,并提供用新想法检验这些问题的循环。

可以做什么
它把大约十二个长期问题持久保存在本地 JSON 文件中,并提供添加、更新、列出和查看问题的工具。evoke 工具接收一个新技巧或方法,返回已保存的问题以及用于重新框定问题的脚手架。spark(带下一步的候选想法)可以被记录、更新结果,并通过唤醒条件评估,从而浮现成熟的项目。
适用场景
如果你希望助手跨项目和会话携带一组稳定的开放问题,并用新方法不断检验它们,就值得添加。它适合想法会长期积累的研究型或探索型工作。它不是任务管理器,也不是通用笔记库。
运行要求
作为本地 stdio 进程运行,通常通过 npm 包 seven-dpt-mcp 配合 npx 启动,需要 Node.js。无需账号或 API 密钥。状态保存在 ~/.local/share/seven-dpt/store.json 的 JSON 文件中,可用环境变量 SEVEN_DPT_DB 覆盖。仅支持桌面端。
安装前请注意
服务器写入本地 JSON 存储,采用最后写入者胜出的方式,多个会话同时使用可能丢失更新。首次运行会用五个自带示例问题初始化存储;这些只是普通记录,可以编辑或清除。可选的会话启动钩子会以 --digest 运行该包并读取存储。不涉及凭据或支付。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Seven Dpt Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

seven-dpt-mcp

A tiny, local MCP server that gives Claude (in any project) a persistent set of long-running problems and a loop for cracking them — Feynman's twelve favorite problems method, driven by the tripartite model of inspiration.

  • Feynman's method (via Gian-Carlo Rota): keep ~a dozen problems dormant in mind; every time you meet a new trick, test it against all of them.
  • Inspiration = evocation + transcendence + approach motivation (Thrash & Elliot): a stimulus evokes a possibility, you transcend the problem's current framing, then you're motivated to act on it.

The server holds state and scaffolding; the connected model does the thinking — no LLM runs inside the server, no API key.

Tools

ToolPurpose
add_problemAdd a long-running problem to your set (refused past the ~12 cap until you retire/merge something — or pass overCap)
update_problemEdit, retire, solve, or reopen a problem. Closing takes a resolution — why, plus the re-open trigger; a merge is a retirement whose resolution names the absorber
list_problemsSee your open problems
get_problemOne problem + every spark (idea, next step, outcome) — the memory
evokeThe loop. Feed it a trick; returns your problems + a scaffold walking evocation → transcendence → approach
capture_sparkPersist a candidate idea + concrete next step against a problem (+ optional costToOpen — the forward effort estimate — prior — your stated p(works), immutable, for later calibration — and the claim-typing trio: claimType universal/existential-bounded, forbids — one observation the spark rules out — and exhaustion — when to abandon rather than re-park. All write-once)
update_sparkRecord a spark's outcome — status (tried/worked/failed), cost (actual effort spent), value (graded payoff, 0 for a miss). Log failures too; the zero-value outcomes are the signal a background-effort policy is learned from. Can backfill claimType/forbids/exhaustion while unset (write-once: never revises)
wake_statusEvaluate every parked problem/spark's wakeCondition right now — ripeness, progress, per-atom current/target echoes

Storage: ~/.local/share/seven-dpt/store.json (override with SEVEN_DPT_DB). One store, shared by every project = one brain.

Wake conditions (0.1.4)

Retiring a problem parks it with a re-open trigger — but a trigger written in prose is a wait owned by "someone will remember." A wakeCondition makes it computable: a small predicate (all/any over atoms like sparkCount, a date gate, fileMatches / fileLines / fileCount on a path, or an explicit manual note) attached when you retire/solve a problem (update_problem), park a spark (update_spark), or capture one born gated (capture_spark). The ambient digest evaluates every condition at session start and surfaces what's ripe (with an act/re-park pointer), what's ripening (with current/target progress), and — loudly — any condition whose source became unreadable: a wake source that vanished must scream, not sit at 0% forever. Everything echoes its aim (prior-ledger.jsonl 12/20), so a wrong path or unit is visible when you arm it, not months later. No auto-reopen: ripeness is surfaced, you decide. --wake prints the full ledger from the CLI.

Claim typing (0.1.5)

A parked spark with a wake condition can revive — but nothing says when it may die, so an unfalsifiable hope can ride the digest forever. 0.1.5 gives every spark an optional claim-typing trio, all write-once on the same anti-hindsight model as prior:

  • claimType — universal ("this always holds") vs existential-bounded ("this holds somewhere, within a stated frame"). A frame-bounded null is not a claim-failure; typing the claim keeps a frame-kill from being read as a lever-kill.
  • forbids — one concrete observation the spark rules out. If nothing is forbidden, nothing can refute it, and the spark is a mood, not a claim.
  • exhaustion — the retirement predicate, the dual of wakeCondition: the condition under which the spark is abandoned rather than re-parked.

Set them at capture, or backfill later while unset (update_spark); revision after the fact is refused with a visible notice — rewriting what a claim forbids after seeing results is the conventionalist stratagem the fields exist to block. ledger_invariants.py flags ORPHANED-EXISTENTIAL sparks (parked with a wake, no exhaustion — can revive but never die), and calibration.py stamps the claimType mix of every scored cohort.

How it bootstraps

On first run (no store file yet), the store seeds itself with seven-dpt's own three open product problems — auto-detection of recurring issues, the background-spend policy, and proactive surfacing. Design decision, made deliberately: the seeds are tool-generic (identical for every install, about the tool rather than about you), so the server dogfoods its own method from minute one and the ambient digest has something to show before you add your own problems. They are ordinary rows in your store — edit, replace, or clear them freely; an existing store is never touched. So the moment it runs it is already "taking care of its own problems": while you work on anything else, those sit in context and can be sparked by unrelated discoveries. The policy for how/when/how-much to chase background problems is deliberately not coded — it's meant to be learned later from the accumulated spark → outcome history, which is why update_spark exists.

That history is the reward channel: each spark carries a prior (your stated probability-it-works at capture — immutable afterwards, so stated credences can be calibrated against realized outcomes once enough sparks resolve), a costToOpen (the forward effort estimate, set at capture and preserved), a cost (the actual effort, once chased to a verdict), and a value (graded payoff, 0 for a miss). analysis/reservation_value.py turns it into a Pandora's-Box / Gittins reservation-value ranking — but it gates on data sufficiency and refuses to emit numbers until enough resolved sparks (with cost + value, including failures) accrue, so the policy is never fit on false precision. A Bayesian companion, analysis/reservation_value_bayes.py, was retired on 2026-10-10 (it is in git history): nothing ever invoked it, and the de-bias map it applied to spark priors was fitted on another program's ledger, where it has the opposite sign to this store's own sparks. analysis/calibration.py is the audit half of the prior loop: it scores stated priors against realized outcomes (reliability table, Brier/skill, drift check) from any two-line JSONL ledger of pre-registered priors + resolutions, and --json persists that ledger's de-bias map and buckets for analysis/self_check.py. No map is applied to spark priors. The store's own reading — resolved sparks' mean stated prior against the share that worked, with a Wilson interval — is one line of the session digest once ten sparks with a prior have resolved, and --priors lists each spark's prior beside its outcome. --split YYYY-MM-DD partitions the curve at a changepoint (a model upgrade re-prices estimates — don't pool across one untested), and a scope stamp reports the claimType mix of scored pairs, since a frame-bounded null scored as a claim-failure is the one bias the audit can't see from numbers alone. analysis/ledger_invariants.py audits the program the same ledger records, not any single probe: deterministic invariants for the failure class where every result is locally sound and the project is still wrong — a park-streak check (K straddles-zero verdicts in a row on the primary metric means the instrument, not the ideas, is the suspect), power-at-preregistration (a gate below the banked MDE is unresolvable before it runs), channel-liveness stamps, and ORPHANED-EXISTENTIAL (a parked spark with a wake but no exhaustion can revive but never die — unfalsifiable-in-practice spend). It reports its own note-classification coverage, exits 1 on alerts, supports --asof retrodiction, and --json emits ALERT markers a hook or wakeCondition (fileMatches on the output) can gate on.

Install (turn on for all projects)

Via npm (recommended)

Published on npm — no build step. Register it for every project (user scope):

bash
claude mcp add --scope user seven-dpt -- npx -y seven-dpt-mcp

From source (alternative)

bash
npm install && npm run build# Register for every project (user scope). Use an ABSOLUTE node path — hooks and MCP# servers don't source your shell profile, so nvm-style setups need one:claude mcp add --scope user seven-dpt -- "$(command -v node)" "$(pwd)/dist/index.js"

Then make the problems ambient — merge into ~/.claude/settings.json so every session opens with your dormant problems in context:

jsonc
{  "hooks": {    "SessionStart": [      { "matcher": "startup", "hooks": [{ "type": "command", "command": "npx -y seven-dpt-mcp --digest", "timeout": 10 }] },      { "matcher": "resume",  "hooks": [{ "type": "command", "command": "npx -y seven-dpt-mcp --digest", "timeout": 10 }] },      { "matcher": "clear",   "hooks": [{ "type": "command", "command": "npx -y seven-dpt-mcp --digest", "timeout": 10 }] }    ]  }}

(Installed from source instead? Replace each command with an absolute node path + /absolute/path/to/seven-dpt-mcp/dist/index.js --digest — hooks don't source your shell profile, so nvm-style setups need the absolute path.)

(--digest prints nothing when no problems are open; a fresh install prints the three seeded ones — that's the bootstrap working, not noise.)

Validate the idea

  1. Add a few of your own long-running problems — add_problem.
  2. When you hit an interesting technique in any repo, evoke it; watch Claude test it against every problem and reframe the ones that light up.
  3. Let it capture_spark the hits, then update_spark once you've tried them.
  4. Days later, get_problem — if that accumulated trail feels useful, the idea's proven.

Known MVP limits (intentional)

  • JSON file, last-write-wins (fine for one user).
  • evoke matching is done by the connected model, not pre-ranked by embeddings.

License

Apache-2.0 — see LICENSE.

来源:README.md,提交 b16635f

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.5最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分