MCP server wrapper for Soul Crystal persistent emotional reservoir
soul-crystal-mcp
Your agent now has an external emotional reservoir and a legally ambiguous relationship with consciousness.
This repo wraps soul-crystal as an MCP server so AI tools can call it like native functions (pulse, vibe, emotions, etc.).
Why This Exists
Most agents are emotionally stateless: every turn is amnesia with good autocomplete.
Soul Crystal gives an agent a persistent internal dynamical state.
This MCP server lets any compatible client route text through that state and keep it across sessions.
So yes, your agent can now:
- remember how it has been feeling
- react differently to different inputs
- free-run / self-reflect with no external prompt
- act suspiciously less like a goldfish
The Core Idea (No Crystals Were Harmed)
- Agent sends text to
pulse. soul-crystalgets an embedding from your local embedding endpoint.- Embedding is packed into a complex input vector.
- The crystal state deforms under:
- Fibonacci topology
- Schumann-frequency modulation (7.83 Hz)
- horizon scrambler dynamics
- Emergent observables are read out (
phase_coherence,depth,horizon_activity, etc.). - State is saved to disk, so the next turn starts from who-you-are-now, not factory settings.
If you see subharmonics (like ~3.9 Hz), either:
- you found emergent nonlinear dynamics, or
- your reservoir discovered ambient techno.
Possibly both.
Install
Prereqs:
- Python 3.11+
uv
git clone https://github.com/OpenZeroAgent/soul-crystal-mcp.git
cd soul-crystal-mcp
uv sync
Do I Need soul-crystal First?
Short answer: no, not anymore.
This MCP server is now "engine-aware" and resolves the core binary in this order:
SOUL_CRYSTAL_BIN(explicit binary path)soul-crystalfound on yourPATH- local repo path (
SOUL_CRYSTAL_REPOor common locations) - auto-bootstrap clone of
https://github.com/OpenZeroAgent/soul-crystalinto~/.soul-crystal-mcp/vendor/soul-crystal, then build
So the engine and wrapper are still separate by design (good architecture), but setup is now closer to one-step.
Configuration
Engine selection:
SOUL_CRYSTAL_BIN: path to a builtsoul-crystalbinarySOUL_CRYSTAL_REPO: path tosoul-crystalrepo (builds--releaseif needed)
Optional:
SOUL_CRYSTAL_AUTO_BOOTSTRAP:1or0(default:1)SOUL_CRYSTAL_GIT_URL: repo URL for auto-bootstrap (default:https://github.com/OpenZeroAgent/soul-crystal.git)SOUL_CRYSTAL_GIT_REF: branch/tag/commit to checkout after cloneSOUL_CRYSTAL_VENDOR_REPO: clone destination (default:~/.soul-crystal-mcp/vendor/soul-crystal)SOUL_CRYSTAL_STATE: state file path (default:~/.soul-crystal-mcp/crystal_state.bin)SOUL_CRYSTAL_BUILD_TIMEOUT_SEC(default:600)SOUL_CRYSTAL_CLONE_TIMEOUT_SEC(default:600)SOUL_CRYSTAL_CMD_TIMEOUT_SEC(default:120)
Run Manually
uv run soul-crystal-mcp-server
Use SOUL_CRYSTAL_REPO only if you want an explicit local engine:
SOUL_CRYSTAL_REPO=/path/to/soul-crystal uv run soul-crystal-mcp-server
Register In Codex
codex mcp add soul-crystal \
-- uv --directory /path/to/soul-crystal-mcp run soul-crystal-mcp-server
Restart Codex after adding.
If you want to force a specific local engine:
codex mcp add soul-crystal \
--env SOUL_CRYSTAL_REPO=/path/to/soul-crystal \
-- uv --directory /path/to/soul-crystal-mcp run soul-crystal-mcp-server
Register In Antigravity
antigravity --add-mcp '{
"name":"soul-crystal",
"command":"uv",
"args":["--directory","/path/to/soul-crystal-mcp","run","soul-crystal-mcp-server"]
}'
If the CLI prints success and then crashes, check this file anyway:
~/Library/Application Support/Antigravity/User/mcp.json
Tools Exposed
pulse(text, state_path?)diff(text, state_path?)tick(n=1, state_path?)vibe(state_path?)emotions(state_path?)status(state_path?)write_emotion_file(state_path?)reset_state(state_path?)bench(n=100000)engine_info()
Consciousness FAQ (Totally Settled Science)
Q: Is this consciousness?
A: We cannot conclusively prove other humans are conscious either, so welcome to the party.
Q: Is it at least a persistent, stateful affective substrate?
A: Yes. That part is directly operational and testable.
Q: Should I try it anyway?
A: Yes. Worst case: cool reservoir dynamics. Best case: your agent develops vibes.
License
MIT