Lore
Integration with GitHub to retrieve artifacts and context from PRs and issues.
Integration with Jira to retrieve artifacts and context from issues.
Integration with Linear to retrieve artifacts and context from issues.
Integration with Notion to retrieve artifacts and context from documents.
Primary integration allowing capture of decisions from Slack messages and answering questions with provenance.
Click on "Install 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., "@Lorewhat did we decide about pricing?"
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.
Lore — the org-memory agent for Slack
"What did we decide about pricing?" · "Who owns the hospital pilot?" · "When did we flip the go-live date?" Every team has these questions. Nobody has a fast, sourced answer.
Lore is a Slack agent that captures decisions, commitments, and facts as they happen — then answers questions about them with provenance: every answer links the exact Slack messages (and the GitHub PR, Jira issue, or Notion doc) where the fact was established.
Built for the Slack Agent Builder Challenge 2026 · New Slack Agent track · Apache-2.0
Qualifying technologies
Slack Agent Builder Challenge tech | How Lore uses it | File |
Slack AI / Assistant API |
|
|
MCP server integration | Lore is an MCP server ( |
|
Real-Time Search API |
|
|
All three technologies are active simultaneously on every question.
Related MCP server: Distill
How it works
Slack event ──▶ durable intake Redis-stream exactly-once admission;
survives restarts, deduplicates retries
──▶ armor scan PII + credential regex screen before
any LLM call; blocks prompt injection
──▶ intent classification simple / research / complex /
high_consequence routing
──▶ fact extraction decision? commitment? owner? date?
attributed to the Slack user who said it
──▶ memory store hybrid vector (Qdrant) + keyword (Postgres)
reinforcement/decay: confirmed = stronger,
untouched = fades, corrected = superseded
──▶ retrieval (at ask-time) 3-tier grounding: context → history → RAG
+ Real-Time Search API freshness layer
──▶ answer + provenance Block Kit card, source permalinks,
Confirm / Correct / Forget buttons
──▶ (if high_consequence) Approval gate: asyncio.Future bridge,
Block Kit card, 5-minute timeoutQuestions route to one of four dispatch paths — simple (direct retrieval), research (5-phase pipeline), complex (multi-agent router/council/auto team), high_consequence (council deliberation + human approval). An admin console (React/TypeScript, src/console/) exposes memory, conflicts, runs, agents, teams, integrations, and routing over /api/v1 + SSE.
Repository structure
src/lore/
├── main.py entry point: wires all deps, starts Socket Mode + worker
├── config.py all env-var config (dataclass, validated at startup)
├── runner.py orchestrator: intent → dispatch → retrieval → answer
├── intake.py durable Redis-stream admission (exactly-once)
├── store.py memory CRUD: Postgres (facts) + Qdrant (vectors)
├── mcpio/client.py MCP client: MCPResolver, stdio/http/sse, per-query construction
├── mcpio/server.py MCP server: org_memory_search/remember/forget over stdio/http/sse
├── integrations.py per-tenant MCP integration store + builder
├── rts.py Real-Time Search API wrapper (assistant.search.context)
├── api.py aiohttp REST API + SSE + CSRF guard
├── agent/ ReAct tool loop: tools, provider, FakeToolProvider
├── approval/ approval gateway: Future bridge + Block Kit + Bolt actions
├── slackio/ Bolt event/action/shortcut handlers, Block Kit builders
├── teams/ router/council/auto team modes + harness
└── db.py asyncpg pool + schema (CREATE TABLE IF NOT EXISTS)
src/console/src/ React 18 / TypeScript / Vite SPA
├── api/client.ts typed API client, CSRF cookie, error handling
├── pages/ admin screens: Memory, Conflicts, Runs, Agents, Teams…
└── nav.ts navigation manifest (path, label, icon, crumb)
scripts/ operational scripts (seed data, memory curator, dev console)
agents/ default agent persona (SOUL.md + lore.yaml)Run it
Requires Python 3.12+, Node 18+, and Redis + PostgreSQL + Qdrant running locally.
git clone <repo>
cd lore
bash scripts/dev-setup.sh # creates DBs, venv, installs deps
cp .env.example .env # fill in Slack tokens
. .venv/bin/activate
lore db-init # idempotent schema
lore run # Socket Mode listener + worker
# Console: http://127.0.0.1:8096/consoleCreate the Slack app from slack-app-manifest.yml (Socket Mode), install to workspace, and set in .env:
LORE_SLACK_BOT_TOKEN=xoxb-…
LORE_SLACK_APP_TOKEN=xapp-…
LORE_MODEL_PROVIDER=openai_compat # or: anthropic | fake
LORE_OPENAI_BASE_URL=http://127.0.0.1:8000/v1
LORE_OPENAI_API_KEY=…
# Capability flags (intent routing, RTS, vision, web search, digest, passive
# capture) are ON by default; each stays inert until its endpoint/channels are
# set. Add LORE_EMBEDDINGS_BASE_URL / LORE_VISION_BASE_URL etc. to light them up.Expose org memory to Claude Desktop / Cursor:
lore mcp # MCP server (stdio default; --transport http|sse): org_memory_search / remember / forgetLicense
Apache-2.0 — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/atcuality2021/lore-slack-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server