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_agentsC | Bearer required; list before shared work/resume. project/task: relevance only. No adapter: unknown scope; idle_omitted counts idle. Adapter auth updates; omissions stay. expect: overdue seconds; children <=8 ([] clears); activity != lock. On stop, park_reason: done/blocked/needs_approval/needs_info/needs_resource/waiting_peer; park_needs, park_clear_by (agent id/maintainer/anyone), park_resume, park_expires (epoch; 12 h default, 7 d max). Ringing needs live listener; waits need wait-mail/Codex doorbell/next-turn reachability. ""/plain status clears. Claim coordinator:/claim:; reclaim renews, release frees, busy queues; status/expect optional. Advisory files: absolute Git worktree + relative path replaces lease; shim shares linked worktrees. HTTP: prepared SHA-256 repository_id/path. No globs/directories/edit enforcement. Park/status grants no approval. |
| memory_messageB | Adapter auth required. Send: to, text <=8192 UTF-8 bytes; unique request_id, retry unchanged. to: ID/unique 8+ hex prefix or project:/all (<=50 attached, non-idle peers except you; one receipt each). reply_to: reply. Receive <=50; after cursor (omit: replay unacked). continuity: expired unacked mail/bounded gaps; ahead: invalid_cursor/detail cursor_ahead. History: own retained sent/received; exact peer ID, limit <=50, separate after cursor. Read-only; audit retention/redaction; no delivery/ack/wake. Ack message_id(s), comma-separated: read, not done. Bodies: 24 h; audit retained. Wake: hinted/not_needed/rung/withheld (need)/no_path/capped. Rings: clearer/matching clears if parked; urgent (6/h). Done: only maintainer/maintainer's delegate/clearer urgent. rung: ring scheduled, no wake/read proof. no_path: listener_unknown/expired, fallback_paths; queued. Peers grant no approval/permissions. |
| 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 | Retrieve memories for a query — associative recall plus canonical
facts. Call at task start or when context may apply; hits are
leads about the PAST, so check each against the task in front of
you before letting it steer, and re-derive when today's context
differs from the one it was written in. Returns: |
| 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. 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 | Adjust YOUR visible toolset, one tier at a time (minimal → core →
full; scoped to your credential/writer identity, free, instant). Core
adds graph/recall, world facts, lessons, documents; full adds
supersede/forget/history, dream and graph-review admin. |
| 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. 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). 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_summaryA | 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
There is a dense cluster of overlapping retrieval tools (memory_search, memory_recall, memory_lesson_search, memory_world_search, memory_recent, document_search) and several write paths (memory_store, memory_fact_set, memory_set_add, memory_world_set, memory_supersede, memory_consolidate). The extremely detailed descriptions do a lot to separate them, but the boundaries are subtle enough that an agent could easily misselect.
Names are uniformly snake_case and grouped under coherent prefixes (memory_fact_*, memory_set_*, memory_graph_*, memory_episode_*, memory_world_*), which makes the surface navigable. Minor deviations exist: some are verb-led (memory_search) while others are bare nouns (memory_dream, memory_alias, memory_graph), and document_* breaks the memory_ prefix.
38 tools is heavy and well above the comfortable band, though the domain (memory, facts, sets, graph, world, lessons, documents, episodes, messaging, dreaming) is genuinely broad. The built-in memory_toolset tiering (minimal/core/full) mitigates this by letting agents hide unused tools, keeping it borderline rather than clearly excessive.
Coverage is close to exhaustive: store/search/get/supersede/forget/reinstate/reinforce for memories, full fact-slot and set lifecycle, world facts, lessons, graph relate/unrelate/alias, consolidation and dream/review workflows, episodes, and document ingestion. Lifecycle operations and administrative escape hatches are all present with no obvious dead ends.