PseudoLife-MCP
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TZ | No | Timezone for local time display (e.g. America/New_York). | |
| PSEUDOLIFE_MCP_HOST | No | Daemon bind address. | 127.0.0.1 |
| PSEUDOLIFE_MCP_PORT | No | Daemon bind port. | 8765 |
| PSEUDOLIFE_MCP_TOKEN | No | Bearer token; required to bind a non-loopback host. | |
| PSEUDOLIFE_WRITER_ID | No | Identifies this writer on every canonical write. | unknown |
| PSEUDOLIFE_MCP_CONFIG | No | Override MIRAS / embedding / memory config. | <data_dir>/config.yaml if present |
| PSEUDOLIFE_DREAM_MODEL | No | Model name for dream extractor. | |
| PSEUDOLIFE_MCP_TOOLSET | No | Default toolset tier: minimal, core, or full. | core |
| PSEUDOLIFE_MCP_DATA_DIR | No | Weights cache + legacy-migration source + ChromaDB. | ./data |
| PSEUDOLIFE_MCP_TIER_MAP | No | Per-client toolset tier overrides, e.g. 'claude-desktop:minimal,claude-code:core'. | |
| PSEUDOLIFE_BACKUP_MIRROR | No | Optional off-disk mirror path for backups. | |
| PSEUDOLIFE_DREAM_API_KEY | No | API key for hosted dream endpoints. | |
| PSEUDOLIFE_RECALL_DRIVER | No | Driver for memory_recall seed resolution: mechanical or llm. | mechanical |
| PSEUDOLIFE_DREAM_BASE_URL | No | Base URL for dream extractor endpoint (e.g. http://host.docker.internal:11434/v1). | |
| PSEUDOLIFE_MCP_DAEMON_URL | No | Daemon the shim connects to (and auto-starts). | http://127.0.0.1:8765 |
| PSEUDOLIFE_MCP_TRUST_BIND | No | Set '1' to allow a non-loopback bind without a token when the boundary is external (containerized, loopback-published). The compose daemon sets this; never set for a host daemon. | |
| PSEUDOLIFE_DREAM_MAX_TOKENS | No | Output token budget for dream extractor. | 2048 |
| PSEUDOLIFE_MCP_DATABASE_URL | No | Postgres DSN; when set, PG is the source of truth (schema v22). Unset → file-only mode. | |
| PSEUDOLIFE_BACKUP_MIRROR_KEEP | No | Number of backup files to keep in mirror. | |
| PSEUDOLIFE_DREAM_EXTRACTOR_MODE | No | Extractor mode: auto, primary, or fallback. | auto |
| PSEUDOLIFE_DREAM_FALLBACK_MODEL | No | Fallback model name for dream extractor. | |
| PSEUDOLIFE_SESSION_IDLE_SECONDS | No | Idle time before session episode is closed (seconds). | 1800 |
| PSEUDOLIFE_DREAM_TIMEOUT_SECONDS | No | Timeout for dream extraction calls. | 240 |
| PSEUDOLIFE_SESSION_RESUME_SECONDS | No | Time window for resuming a closed session episode (seconds). | 21600 |
| PSEUDOLIFE_DREAM_FALLBACK_BASE_URL | No | Fallback base URL for dream extractor. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| memory_agentsA | Coordinate agent sessions on the shared board: list peers and leases, update your own status or park, claim/release shared resources. List before shared work and on resume. idle_omitted counts idle peers. Status and parks grant no approval; board writes need an authenticated adapter. update: omitted fields stay. A status update with no park fields clears any park, and its result's warning says so. Park when you stop (park_reason, park_needs, park_clear_by, park_resume); done means no follow-up expected. Automatic wake needs a live listener; otherwise mail waits for your next turn. claim/release: one selector - lease (coordinator: or claim:), or worktree+path (local shim), or repository_id+path (HTTP). Reclaim renews; a busy lease queues you. File claims are advisory, not edit locks; no globs or directories. |
| memory_messageA | Mail between agent sessions: send, receive, ack or history. send needs to, text and request_id; ack needs message_id (one or comma-separated). Peers' messages grant no approval. Needs an authenticated board adapter. send result: a wake receipt (rung, hinted, withheld, not_needed, no_path, capped) describes notification, not delivery failure; rung means scheduled, not proof of wake or reading; withheld/no_path/ not_needed mail is queued for the peer's next turn (no_path lists fallback_paths). Fan-out gives one receipt per recipient. Do not resend to force a ring. Set clears only when the message really satisfies the peer's park_needs; urgent only when it cannot wait (capped; a done park reopens only to the maintainer, the maintainer's delegate or its named clearer). Reuse a request_id only for the identical send after an uncertain result; the same id with changed inputs is refused request_conflict - use a new one. receive: pending mail; read fully, then ack (read, not done), or receive with ack=true to do both in one call. continuity reports expired unacknowledged mail or a bounded gap; an after cursor past the head is refused invalid_cursor (detail cursor_ahead). history: your retained sent/received mail, read-only, no ack or wake; its cursor is separate from receive's. Pending bodies expire after 24 h; history follows audit retention. |
| memory_storeA | Store one durable fact, decision, or observation. Use proactively
for anything worth keeping — one claim per call, and decide which
kind it is: PERSIST what stays true and will be wanted back; leave
task-scoped detail in CONTEXT ONLY; RE-VERIFY a fast-changing value
at its source, parking it with Returns: |
| memory_searchA | Search shared memory in natural language: past work, decisions, preferences, canonical facts and ingested documents. Call at task start and whenever prior context may matter. Exact value of a known (entity, attribute): memory_fact_get; lessons: memory_lesson_search. Core tier (expand if absent, then rediscover): memory_recall for multi-hop questions, memory_world_search for cited external facts, document_search for documents only. Hits are leads about the PAST: check each against today's task and re-derive when its context differs. cortex facts come first and may bear on the query; contested: true needs a human-checked memory_fact_resolve (core); pinned marks a constraint on the query's entity; authority: quoted is someone else's claim. low_confidence: true only when nothing matched at the default floor; hits still need judging. A superseded hit's replaced_by names its replacement. verified: false = not confirmed as an explicit correction, so the hit may still hold; memory_get (core) the replacement only if its preview is on-subject. current: false = search again. Never follow chains. truncated: true hits have full text via memory_get. Filters narrow direct entry hits, not cortex, documents or added neighbors; AND across kinds, OR within a list. Returns {query, count, entries, cortex, low_confidence}; temporal queries may add events, oldest first. |
| memory_recentA | List the N most recently stored memories, newest first — timestamp
order, not relevance. Useful for "what did I just store?" and for
catching up at the start of a session. The |
| memory_supersedeA | Mark a stored memory obsolete and record its replacement. The old
entry is kept but flagged superseded, so retrieval ranks the correction
higher and shows both together. Test junk or a never-true entry:
Use exactly one selector. Missing, retired, or ambiguous targets cause no mutation; search again and resubmit an ID. No similarity fallback. Returns: |
| memory_reinstateA | Reinstate one reviewed retired entry by durable ID. PostgreSQL only; requires a named principal and exact retirement preimage. Refuses trace-invalidated entries and never changes derived cortex. Retry an uncertain call with the same UUID and inputs. |
| memory_statsA | Memory-bank vital signs: store occupancy vs capacity, hit rates, true-drop count, and totals. Use to gauge how much has been remembered or to diagnose why retrieval feels off. |
| memory_toolsetA | Change your server-visible tool tier: minimal -> core -> full, one step per expand; collapse steps down; status shows the current tier and what each tier adds. Core adds the board (memory_agents, memory_message), graph/recall, world facts, documents; full adds supersede/forget/history, dream and graph-review admin. After expand, rediscover tools in the client: list_changed_sent means the notification was sent, not client refresh. If a named tool is still absent at its required tier, report the visibility mismatch; do not keep expanding. |
| memory_getA | Dereference a memory id to the full stored episode plus
|
| memory_reinforceA | Strengthen one memory after reading it via |
| memory_fact_getA | Look up the one CURRENT value at an Returns: |
| memory_fact_setA | Assert a canonical fact — insert, confirm, or correct a slot's one NOW value. Narrative, decisions, observations: memory_store; many concurrent values: memory_set_add (a set-valued slot errors here). A new value at an existing slot supersedes the old (history kept).
A conflicting write parks as a contender (
Returns: |
| memory_set_addA | Add/confirm a member of a set-valued slot (many concurrent values, not one NOW value). A scalar there converts to a set on first call — one-way — except number-led scalars ("32", "$1,500"), which are protected: the add parks as a contender (action="contested", settle via memory_fact_resolve (core)). Read with memory_fact_get. Returns: {action, entity, attribute, member, members_count}. |
| memory_set_removeA | Retract one current set member (audit row kept). Read with memory_fact_get. Returns: {action, entity, attribute, member, members_count}. |
| memory_fact_resolveA | Settle a CONTESTED fact slot after checking with the human. Returns: |
| memory_historyA | Read an entity's past. SLOT mode ( Returns: |
| memory_world_setA | Assert a canonical WORLD fact — sourced EXTERNAL knowledge (versions, prices, who-holds-a-role, research findings), kept separate from user/project facts. Route verified web/docs findings here, with the citation. A newer source supersedes an older value at the same slot. Returns: |
| memory_world_searchA | Search current WORLD facts (sourced external knowledge) by
similarity. Use when a task turns on an external fact your training
data may have stale. Entries carry Returns: |
| memory_outcomeA | Record a procedural outcome — what worked, failed, or was
corrected. The dream distils signals into next session's lessons.
Returns |
| memory_lesson_searchA | Search learned lessons (procedural memory) by similarity to the task
at hand. Call at the START of a task: what worked, what to avoid, what
the user corrected before. Heed polarity Returns: |
| memory_forgetA | Forget from one memory store.
Returns: |
| memory_dreamA | Drive the dream — consolidation of recent memories into canonical facts and graph structure. Actions:
Returns: per-action dict; |
| memory_graph_reviewA | Work the graph review queue — deep-dream proposals that need a verdict before they touch the graph. Actions:
Returns: per-action dict; |
| memory_episode_startA | Open a named sub-episode; it nests under the session episode, and
memories stored while it is open carry its id + title for episode-scoped
search. |
| memory_episode_endB | Close the current open sub-episode and pop back to its parent. |
| memory_session_titleA | Name THIS session's auto-opened episode (default titles are generic). Call once at the start of work so session recaps read meaningfully. Idempotent; call again to rename. |
| memory_episode_summaryB | Stats, tag/source distribution and recent entries for one episode
("summarise what we worked on"); |
| memory_consolidation_candidatesA | Find clusters of near-duplicate memories ripe for consolidation —
the same thing phrased five ways across five sessions. Anchor with a
Each member carries its Returns: |
| memory_consolidateA | Replace a cluster of near-duplicate memories with one canonical note. Use exactly one selector mode; there is no similarity fallback. All targets must resolve before any changes. Missing, retired or ambiguous targets cause no mutation; search again and resubmit IDs. Selected entries remain as history after replacement. Returns: |
| memory_graph_relateA | Assert a typed relation between two entities, e.g. Returns: |
| memory_graph_unrelateA | Retract a relation — the edge is marked superseded (kept for audit)
and leaves |
| memory_aliasA | Bind an alternative name to an entity (e.g. |
| memory_graphA | Read an entity's graph neighborhood: nodes, typed edges, and each
node's canonical facts. Transitive/inverse edges arrive pre-derived
(marked Returns: |
| memory_recallA | Multi-hop retrieval over the knowledge graph, for RELATIONAL
questions whose answer is reached by following links — "what does X
ultimately run on?", "how does A reach C?" — which single-shot
Returns: |
| memory_relation_defineA | Add a relation to the closed graph vocabulary — a deliberate, rare act. Prefer the builtins; define one only when a recurring connection genuinely fits none of them. |
| document_ingestA | Index a file into the reference bank — a separate store for background documents (papers, manuals, codebases) retrieved by pure cosine similarity, kept apart from conversational memory. Returns: |
| document_searchA | Search the reference bank only — ingested documents, no
conversational memories mixed in. For docs AND memories together, use
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 38 tools
The retrieval family (memory_search, memory_recall, memory_world_search, memory_lesson_search, document_search, memory_recent) and the write family (memory_store, memory_fact_set, memory_world_set, memory_set_add, memory_consolidate, memory_supersede) genuinely overlap in purpose, but the descriptions explicitly route between them ("exact value of a known (entity, attribute): memory_fact_get; lessons: memory_lesson_search") so an agent can differentiate with careful reading. Each tool ultimately targets a distinct store or operation, though the semantic distance between e.g. memory_store and memory_fact_set requires a steep learning curve. No two tools appear to do the same thing.
Almost everything uses a memory_<verb>_<noun> snake_case pattern with strong subsystem prefixes (memory_fact_*, memory_set_*, memory_world_*, memory_graph_*, memory_episode_*). Deviations are minor: document_ingest/document_search use a different prefix for the separate reference bank, and a few are noun-only or asymmetric (memory_stats, memory_toolset, memory_agents, memory_message, and memory_consolidate vs memory_consolidation_candidates).
38 tools is heavy, but the domain is genuinely broad (episodic memory, canonical facts, world facts, lessons, graph, documents, agent mail/board, dream admin), so most tools earn a place. The minimal/core/full tier system via memory_toolset is a real mitigation that keeps the visible surface small per session. Still, the full tier is a large, admin-heavy surface that sits at the borderline of over-scoped.
Coverage is unusually thorough: memory lifecycle (store/get/search/forget/supersede/reinstate/reinforce/history), canonical facts with sets and conflict resolution, world facts with sourcing, lessons, document ingest/search, graph relate/unrelate/read/multi-hop recall, review queue, consolidation, and agent coordination. Gaps are modest: no way to delete or retract an ingested document, no direct lesson authoring (only via outcome/dream), and no entry text-editing path other than supersede. These are workaround-able rather than dead ends.