seven-dpt-mcp
Summary: This MCP server gives you a persistent, cross-project set of ~12 long-running "favorite problems" plus a loop for testing new ideas against them and tracking what happened.
add_problem— Add a long-running problem (title required; optional statement, origin, tags) to your global Feynman set. The set is intentionally capped near a dozen; keep it small.list_problems— List your problems, open ones by default; passincludeClosedto also see solved/retired ones.get_problem— Fetch one problem by id along with its full spark history (idea, next step, outcome) for long-term memory across sessions.evoke— The core loop: feed in any new trick, result, or observation (optionally with the current project) and get back your open problems plus a scaffold walking evocation → transcendence → approach.capture_spark— Persist a candidate idea plus one concrete next step against a problem, with an optional expectedcostestimate.update_spark— Record a spark's outcome: status (pending/tried/worked/failed), what happened, actualcost, and gradedvalue(0 for misses). Logging failures matters — they're the signal for learning when chasing background problems is worth it.
Note: the README also describes update_problem (edit/retire/solve) and wake_status (evaluate parked wake conditions), but these are not present in the server schema as given.
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
Tool | Purpose |
| Add a long-running problem to your set (refused past the ~12 cap until you retire/merge something — or pass |
| Edit, retire, solve, or reopen a problem. Closing takes a |
| See your open problems |
| One problem + every spark (idea, next step, outcome) — the memory |
| The loop. Feed it a trick; returns your problems + a scaffold walking evocation → transcendence → approach |
| Persist a candidate idea + concrete next step against a problem (+ optional |
| Record a spark's outcome — status (tried/worked/failed), |
| Evaluate every parked problem/spark's |
Storage: ~/.local/share/seven-dpt/store.json (override with SEVEN_DPT_DB). One store,
shared by every project = one brain.
Related MCP server: hive-exp
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") vsexistential-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 ofwakeCondition: 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):
claude mcp add --scope user seven-dpt -- npx -y seven-dpt-mcpFrom source (alternative)
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:
{
"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
Add a few of your own long-running problems —
add_problem.When you hit an interesting technique in any repo,
evokeit; watch Claude test it against every problem and reframe the ones that light up.Let it
capture_sparkthe hits, thenupdate_sparkonce you've tried them.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).
evokematching is done by the connected model, not pre-ranked by embeddings.
License
Apache-2.0 — see LICENSE.
Available Tools
6 toolsadd_problemAdd a favorite problemA
Add a long-running problem to your global Feynman set — the ~dozen you keep dormant in mind across every project. Keep the active set small; that constraint is the method.
Inputs: title (required), tags, origin, statement.
capture_sparkCapture a spark (approach motivation)A
Persist a candidate solution plus a concrete next step against a problem — the output of a successful evocation. This is the memory that lets long-running issues progress across sessions.
Inputs: idea (required), trick (required), nextStep (required), problemId (required), +1 more.
evokeEvoke — test a new trick against all your problemsA
The core loop. Give it a trick, result, idea, or observation you just encountered. Returns your open problems plus a scaffold that walks you through evocation -> transcendence -> approach. Call this whenever you learn something that might generalize.
Inputs: trick (required), project.
get_problemGet a problem and its historyA
Show one problem plus every spark (idea + next step + outcome) captured against it — the long-running memory that makes a stuck issue accumulate progress across sessions.
Inputs: id (required).
list_problemsList your favorite problemsA
Show your global set of long-running problems. Defaults to open ones only.
Inputs: includeClosed.
update_sparkRecord a spark's outcomeA
Record what happened when you acted on a spark — an outcome note, a new status (tried / worked / failed), and ideally the cost (effort spent) and value (graded payoff). LOG FAILURES TOO: 'most bets fail' is the premise of problem #2, so failed and zero-value outcomes are exactly the signal a spend-policy is learned from — recording only wins makes the history unusable. This outcome history is what lets the system learn when surfacing a dormant problem is worth the attention.
Inputs: id (required), cost, value, status, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct action: adding problems, capturing sparks, recalling problems with evocation, viewing one problem, listing all, and updating spark outcomes. No two tools serve overlapping purposes.
Most tools follow snake_case verb_noun pattern (add_problem, capture_spark, get_problem, list_problems, update_spark), but 'evoke' is a single verb without a noun, breaking the pattern slightly.
With 6 tools, the set is well-scoped for the problem management domain it serves. Each tool has a clear role without redundancy, and the count feels neither too sparse nor too heavy.
The tools cover core workflows: add problems, generate and update sparks, and list/retrieve. Missing are deletion capabilities and the ability to modify spark ideas directly, but these are minor gaps given the specific methodology.
Maintenance
Related MCP Connectors
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Memory for any AI, it's yours, not theirs. Open, neutral memory shared by Claude, ChatGPT, Gemini, Grok and any MCP client, with answer checks (draft→check→seal), shared skill cubes and a task board.
Related MCP Servers
- AlicenseAqualityFmaintenanceA TypeScript Model Context Protocol (MCP) server to allow LLMs to programmatically construct mind maps to explore an idea space, with enforced "metacognitive" self-reflection.534 npm28MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server enabling AI agents to record, query, and share structured problem-solving experiences with human review and confidence decay.4 npmMIT
- AlicenseAqualityDmaintenanceOne MCP that turns Claude Code into your whole dev stack by swallowing other MCP servers, delegating to Codex & Gemini on your CLI subscriptions, remembering projects in a searchable knowledge graph, and carrying setup across sessions — secret-free by design.234MIT
- AlicenseAqualityBmaintenanceFive tiny, single-purpose MCP servers for AI agents — arXiv search, YouTube transcripts, web-to-Markdown, market quotes & FX, and a persistent memory vault. No API keys, no bloat.6MIT