goat
Allows receiving and answering questions via Slack, enabling interaction with the fact store through Slack messages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@goattell me about my habits from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
goat
A personal assistant backend. It stores facts in Postgres or SQLite, fills them from importers on a schedule, and answers questions about them over Slack, MCP, SMS, or a terminal REPL.
Facts carry two timestamps: when the fact is about, and when goat learned it. Re-running an importer with unchanged data writes nothing.
Install
uv add "goat-butler @ git+https://github.com/phin-tech/goat"Extras: postgres, agent (pydantic-ai), cli, mcp, slack, sms,
weather, migrations, and all for every one of them. SQLite needs none.
uv add "goat-butler[all] @ git+https://github.com/phin-tech/goat"To work on goat itself:
git clone https://github.com/phin-tech/goat
cd goat
uv sync
uv run pytestThe suite runs against both SQLite and Postgres. Postgres comes from
docker compose up -d.
Related MCP server: Cairn
Start a shed
A shed is one deployment: a directory with a shed.py that builds a Shed, and
a .env holding the credentials. goat init writes both.
uv run goat init ~/my-shed
cd ~/my-shed
uv sync
goat migrate
goat ingest
goat replDefaults to SQLite, so this runs with no database server and no API key. Set a
model provider key in .env for goat brief and the REPL's ask.
.env can hold 1Password references instead of secrets. goat resolves them at
startup via the op CLI, so the file is safe to read aloud or paste:
OPENROUTER_API_KEY=op://Private/OpenRouter/credentialCommands
| scaffold a new shed |
| create or update the schema |
| run every importer |
| compose a brief; |
| inspect the store |
| interactive session |
| serve the store over MCP on stdio |
What goes where
goat holds the mechanism: the store, importers, delivery, tools, the CLI. A shed
holds the values: coordinates, model, credentials, prompt, schedule.
OpenMeteoImporter lives in goat because a latitude is a constructor argument.
The latitude lives in your shed.
Docs
docs/design/fact-store.md— schema, decisions, and the ones that were reverseddocs/mcp.md— MCP server and Claude Desktop configdocs/slack.md— Slack app setupdocs/weather.md— weather sourcesskills/— Claude Code skills for setup and daily use
This server cannot be deployed
Maintenance
Related MCP Connectors
- KogniteOAuthdev.kognite
Hosted agent memory: store, search, and recall facts across sessions from any MCP client.
- GoMindOAuthcom.gominddb
Persistent knowledge graph for AI agents. Remember, recall, and forget facts.
Memory for AI agents that knows what is still true. Typed bi-temporal facts, EU-hosted.
Hosted long-term memory for AI agents via MCP. Recalld updates facts as information changes and retrieves relevant context. Connect with a Recalld EU account.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA privacy-first personal context engine that ingests personal photos and message exports, extracts cited facts, and serves a queryable profile over MCP for natural-language questions like 'when did I last see Sarah?'.MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents to assert and recall typed facts with idempotent writes, freshness, and assurance verdicts. Provides MCP tools for persistent memory across sessions via SQLite-backed storage.12 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI harnesses to maintain a persistent memory layer backed by a local SQLite file, providing MCP tools to add, search, deprecate, and synchronize facts without deleting history.MIT
- AlicenseAqualityCmaintenanceEnables AI agents and MCP clients to store, retrieve, and manage bi-temporal, graph-aware facts in an embedded SQLite memory engine with token-budgeted recall and contradiction tracking.61MIT