selfctl is a personal MCP server that exposes your digital self — identity, memory, focus, and tool access — through programmable APIs. Built with FastAPI and powered by Pydantic, it lets tools and agents interact with you like a structured service.
- Command-style API interface (
/command) - Static profile, manifest, and preferences (JSON-based)
- Working memory and focus control
- OpenAPI schema support
- Ready to deploy on Fly.io, Render, etc.
git clone https://github.com/your-username/selfctl.git
cd selfctlbrew install pyenv
pyenv install 3.11.9
pyenv virtualenv 3.11.9 selfctl-env
pyenv local selfctl-envUpdate your ~/.zshrc (if using zsh):
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"Then reload:
exec zshpip install --upgrade pip
pip install -r requirements.txtuvicorn main:app --reloadVisit http://127.0.0.1:8000/docs for the Swagger UI.
curl -X POST http://127.0.0.1:8000/command \
-H "Content-Type: application/json" \
-d '{"id": "test1", "command": "whoami"}'Command Manifest
curl http://127.0.0.1:8000/manifestTo run with Docker:
docker build -t selfctl .
docker run -p 8000:8000 selfctlselfctl/ ├── main.py # FastAPI app ├── requirements.txt # Dependencies ├── Dockerfile # Container setup ├── README.md # You are here ├── .python-version # Pyenv local version ├── data/ # Externalized profile data │ ├── profile.json │ ├── manifest.json │ └── preferences.json