lore-knowledge-mcp 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 David Gutowsky
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,269 @@
1
+ Metadata-Version: 2.4
2
+ Name: lore-knowledge-mcp
3
+ Version: 0.5.0
4
+ Summary: Unified knowledge management MCP server with document intelligence and research workflows
5
+ Author: David Gutowsky
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/davidgut1982/lore-mcp
8
+ Project-URL: Documentation, https://github.com/davidgut1982/lore-mcp#readme
9
+ Project-URL: Repository, https://github.com/davidgut1982/lore-mcp.git
10
+ Project-URL: Issues, https://github.com/davidgut1982/lore-mcp/issues
11
+ Keywords: mcp,knowledge-management,ai,claude,research,documentation
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: System Administrators
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Software Development :: Libraries
22
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
+ Classifier: Topic :: System :: Systems Administration
24
+ Classifier: Topic :: Text Processing :: Indexing
25
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
26
+ Requires-Python: >=3.11
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: mcp>=0.4.0
30
+ Requires-Dist: aiofiles>=23.2.1
31
+ Requires-Dist: asyncpg>=0.28.0
32
+ Requires-Dist: jsonschema>=4.17.0
33
+ Requires-Dist: python-dotenv>=1.0.0
34
+ Requires-Dist: python-frontmatter>=1.0.0
35
+ Requires-Dist: markdown>=3.4.0
36
+ Requires-Dist: tiktoken>=0.5.0
37
+ Requires-Dist: pyyaml>=6.0
38
+ Requires-Dist: psycopg2-binary>=2.9.7
39
+ Requires-Dist: sentry-sdk>=1.32.0
40
+ Provides-Extra: supabase
41
+ Requires-Dist: supabase>=1.0.0; extra == "supabase"
42
+ Provides-Extra: dev
43
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
44
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
45
+ Requires-Dist: black>=23.0.0; extra == "dev"
46
+ Requires-Dist: mypy>=1.5.0; extra == "dev"
47
+ Requires-Dist: ruff>=0.1; extra == "dev"
48
+ Requires-Dist: pre-commit>=3.3.0; extra == "dev"
49
+ Provides-Extra: docs
50
+ Requires-Dist: mkdocs>=1.5.0; extra == "docs"
51
+ Requires-Dist: mkdocs-material>=9.0.0; extra == "docs"
52
+ Requires-Dist: mkdocstrings[python]>=0.22.0; extra == "docs"
53
+ Provides-Extra: test
54
+ Requires-Dist: pytest>=7.0.0; extra == "test"
55
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
56
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
57
+ Requires-Dist: httpx>=0.24.0; extra == "test"
58
+ Requires-Dist: factory-boy>=3.3.0; extra == "test"
59
+ Dynamic: license-file
60
+
61
+ # Lore
62
+
63
+ **The operational knowledge layer for engineers and their AI agents.**
64
+
65
+ [![Version](https://img.shields.io/badge/version-0.5.0-blue)](https://github.com/davidgut1982/lore-mcp)
66
+ [![Python](https://img.shields.io/badge/python-3.11+-green)](https://python.org)
67
+ [![MCP](https://img.shields.io/badge/MCP-compatible-purple)](https://modelcontextprotocol.io)
68
+ [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-supported-blue)](https://postgresql.org)
69
+ [![CI](https://github.com/davidgut1982/lore-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/davidgut1982/lore-mcp/actions/workflows/ci.yml)
70
+
71
+ ---
72
+
73
+ ## The Problem
74
+
75
+ Your agents are capable. But every session, they start from zero — no knowledge of your infrastructure, no memory of what broke last month, no idea why you made that architecture call.
76
+
77
+ You re-explain. They re-discover. Context vanishes when the session ends.
78
+
79
+ **Lore fixes that.**
80
+
81
+ ```
82
+ Without Lore: With Lore:
83
+ ───────────────── ──────────────────────────────────
84
+ Agent session starts Agent queries Lore on startup
85
+ "How does our infra work?" Gets: topology, gotchas, runbooks,
86
+ You re-explain everything recent incidents, verified decisions
87
+ Session ends, context lost Knowledge persists across all sessions
88
+ Next agent starts informed
89
+ ```
90
+
91
+ ---
92
+
93
+ ## What Lore Does
94
+
95
+ ### Knowledge Base
96
+
97
+ Structured operational knowledge your agents query in real time.
98
+
99
+ ```python
100
+ # Capture a hard-won gotcha
101
+ kb_add(topic="proxmox", title="LXC resolv.conf inherits from host — breaks without Tailscale",
102
+ content="...", author="david", source_type="human")
103
+
104
+ # Agent queries before touching anything
105
+ kb_search(query="proxmox lxc dns") # returns the gotcha instantly
106
+ ```
107
+
108
+ ### Investigations
109
+
110
+ Structured debugging with a traceable paper trail from symptom to resolution.
111
+
112
+ ```python
113
+ investigation_add(topic="anki-media", title="Media not loading after container restart",
114
+ content="Hypothesis: mount collision between container volumes...")
115
+
116
+ investigation_log_experiment(title="Mount collision test", hypothesis="...",
117
+ results={"collision": True}, conclusion="Confirmed. Remove duplicate mount.")
118
+ ```
119
+
120
+ Six months later, a different engineer hits the same issue. The trail is there.
121
+
122
+ ### Journal
123
+
124
+ Permanent record of milestones, architecture decisions, and buying decisions.
125
+
126
+ ```python
127
+ journal_append(entry_type="milestone",
128
+ content="Migrated monitoring stack to ops bastion. Rationale: centralized visibility.",
129
+ tags=["monitoring", "migration"])
130
+ ```
131
+
132
+ ---
133
+
134
+ ## Attribution
135
+
136
+ In a multi-agent system, provenance matters. Every Lore entry carries `author`, `source_type`, and `verified`.
137
+
138
+ ```
139
+ kb_search("proxmox lxc networking")
140
+
141
+ Results:
142
+ [1] "LXC resolv.conf inherits from host — Tailscale breaks containers"
143
+ author: david | source_type: human | verified: true
144
+
145
+ [2] "LXC container DNS fix after Tailscale install"
146
+ author: engineer-agent | source_type: agent | verified: null
147
+
148
+ [3] "LXC DNS configuration reference"
149
+ author: research-agent | source_type: agent | verified: false
150
+ ```
151
+
152
+ Agents know: result 1 is production-safe. Result 2, spot-check first. Result 3, review before acting.
153
+
154
+ ---
155
+
156
+ ## Quick Start
157
+
158
+ ### Solo (SQLite — no server needed)
159
+
160
+ ```bash
161
+ pip install lore-mcp
162
+ export DB_BACKEND=sqlite KNOWLEDGE_DATA_DIR=~/.lore
163
+ lore-mcp
164
+ ```
165
+
166
+ Add to Claude Code (`~/.claude.json` or project `.mcp.json`):
167
+
168
+ ```json
169
+ {
170
+ "mcpServers": {
171
+ "lore": {
172
+ "command": "lore-mcp",
173
+ "env": {
174
+ "DB_BACKEND": "sqlite",
175
+ "KNOWLEDGE_DATA_DIR": "/home/yourname/.lore"
176
+ }
177
+ }
178
+ }
179
+ }
180
+ ```
181
+
182
+ ### Team (PostgreSQL)
183
+
184
+ ```bash
185
+ pip install lore-mcp
186
+ export DB_BACKEND=local DB_HOST=localhost DB_PORT=5432 \
187
+ DB_NAME=lore DB_USER=lore_user DB_PASSWORD=yourpassword
188
+ lore-mcp --host 0.0.0.0 --port 5555
189
+ ```
190
+
191
+ All agents on your team point at `http://your-server:5555/mcp`. One shared knowledge layer.
192
+
193
+ ---
194
+
195
+ ## Tool Reference
196
+
197
+ ### Knowledge Base
198
+ | Tool | What it does |
199
+ |---|---|
200
+ | `kb_add` | Add an entry. Accepts `author`, `source_type` for attribution. |
201
+ | `kb_search` | Semantic search with optional topic filter. |
202
+ | `kb_get` | Fetch full entry by ID. |
203
+ | `kb_list` | List entries, filter by topic. |
204
+ | `kb_update` | Update content, tags, or set `verified` flag. |
205
+ | `kb_delete` | Delete entry (requires `confirm=true`). |
206
+
207
+ ### Investigations
208
+ | Tool | What it does |
209
+ |---|---|
210
+ | `investigation_add` | Open or add to an investigation (topic, title, content, tags). |
211
+ | `investigation_list` | List investigations, filter by topic. |
212
+ | `investigation_get` | Fetch full investigation by ID. |
213
+ | `investigation_log_experiment` | Log a structured experiment with hypothesis, methodology, results, conclusion. |
214
+ | `investigation_list_experiments` | List all logged experiments. |
215
+
216
+ ### Journal
217
+ | Tool | What it does |
218
+ |---|---|
219
+ | `journal_append` | Add a milestone, decision, or reflection. |
220
+ | `journal_list` | List recent entries (default 20). |
221
+ | `journal_get` | Fetch entry by ID. |
222
+ | `snapshot_config` | Snapshot a config object to the journal. |
223
+
224
+ ### Document Ingestion
225
+ | Tool | What it does |
226
+ |---|---|
227
+ | `kb_ingest_doc` | Ingest a markdown file into the KB. |
228
+ | `kb_ingest_dir` | Batch-ingest a directory, with change detection. |
229
+ | `kb_sync_status` | Check what's changed since last sync. |
230
+
231
+ ### MCP Index
232
+ | Tool | What it does |
233
+ |---|---|
234
+ | `mcp_index_scan` | Scan all configured MCP servers and index their tools. |
235
+ | `mcp_index_search` | Search indexed tools by description. |
236
+ | `mcp_index_get_server` | Get all tools for a specific MCP server. |
237
+ | `mcp_index_rebuild` | Force a full rescan. |
238
+
239
+ ### Search
240
+ | Tool | What it does |
241
+ |---|---|
242
+ | `multi_search` | Search across KB, investigations, journal, and transcripts at once. |
243
+ | `search_local` | Search local files by content. |
244
+ | `search_transcripts` | Search Whisper transcript segments. |
245
+ | `deduplicate_results` | Deduplicate a result set by similarity. |
246
+ | `cluster_results` | Cluster results by topic. |
247
+
248
+ ---
249
+
250
+ ## Backends
251
+
252
+ | Backend | Use case | Setup |
253
+ |---|---|---|
254
+ | SQLite | Solo / local dev / single machine | No server, one env var |
255
+ | PostgreSQL | Team / shared / production | Self-hosted DB |
256
+ | Supabase | Cloud PostgreSQL | Managed, zero-ops |
257
+
258
+ ---
259
+
260
+ ## How It's Different
261
+
262
+ | Tool | Built for | What it remembers | Agent-native |
263
+ |---|---|---|---|
264
+ | OB1 / personal memory | One person | Your thoughts and captures | No |
265
+ | Mem0 / Zep | App developers | User preferences, conversations | Partially |
266
+ | Confluence / Notion | Human teams | Documentation (human-browsed) | No |
267
+ | **Lore** | **Engineering teams + AI agents** | **How your systems work** | **Yes** |
268
+
269
+ Lore is not a second brain. It's the operational intelligence layer your agents need to work in your environment — not just any environment.
@@ -0,0 +1,209 @@
1
+ # Lore
2
+
3
+ **The operational knowledge layer for engineers and their AI agents.**
4
+
5
+ [![Version](https://img.shields.io/badge/version-0.5.0-blue)](https://github.com/davidgut1982/lore-mcp)
6
+ [![Python](https://img.shields.io/badge/python-3.11+-green)](https://python.org)
7
+ [![MCP](https://img.shields.io/badge/MCP-compatible-purple)](https://modelcontextprotocol.io)
8
+ [![PostgreSQL](https://img.shields.io/badge/PostgreSQL-supported-blue)](https://postgresql.org)
9
+ [![CI](https://github.com/davidgut1982/lore-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/davidgut1982/lore-mcp/actions/workflows/ci.yml)
10
+
11
+ ---
12
+
13
+ ## The Problem
14
+
15
+ Your agents are capable. But every session, they start from zero — no knowledge of your infrastructure, no memory of what broke last month, no idea why you made that architecture call.
16
+
17
+ You re-explain. They re-discover. Context vanishes when the session ends.
18
+
19
+ **Lore fixes that.**
20
+
21
+ ```
22
+ Without Lore: With Lore:
23
+ ───────────────── ──────────────────────────────────
24
+ Agent session starts Agent queries Lore on startup
25
+ "How does our infra work?" Gets: topology, gotchas, runbooks,
26
+ You re-explain everything recent incidents, verified decisions
27
+ Session ends, context lost Knowledge persists across all sessions
28
+ Next agent starts informed
29
+ ```
30
+
31
+ ---
32
+
33
+ ## What Lore Does
34
+
35
+ ### Knowledge Base
36
+
37
+ Structured operational knowledge your agents query in real time.
38
+
39
+ ```python
40
+ # Capture a hard-won gotcha
41
+ kb_add(topic="proxmox", title="LXC resolv.conf inherits from host — breaks without Tailscale",
42
+ content="...", author="david", source_type="human")
43
+
44
+ # Agent queries before touching anything
45
+ kb_search(query="proxmox lxc dns") # returns the gotcha instantly
46
+ ```
47
+
48
+ ### Investigations
49
+
50
+ Structured debugging with a traceable paper trail from symptom to resolution.
51
+
52
+ ```python
53
+ investigation_add(topic="anki-media", title="Media not loading after container restart",
54
+ content="Hypothesis: mount collision between container volumes...")
55
+
56
+ investigation_log_experiment(title="Mount collision test", hypothesis="...",
57
+ results={"collision": True}, conclusion="Confirmed. Remove duplicate mount.")
58
+ ```
59
+
60
+ Six months later, a different engineer hits the same issue. The trail is there.
61
+
62
+ ### Journal
63
+
64
+ Permanent record of milestones, architecture decisions, and buying decisions.
65
+
66
+ ```python
67
+ journal_append(entry_type="milestone",
68
+ content="Migrated monitoring stack to ops bastion. Rationale: centralized visibility.",
69
+ tags=["monitoring", "migration"])
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Attribution
75
+
76
+ In a multi-agent system, provenance matters. Every Lore entry carries `author`, `source_type`, and `verified`.
77
+
78
+ ```
79
+ kb_search("proxmox lxc networking")
80
+
81
+ Results:
82
+ [1] "LXC resolv.conf inherits from host — Tailscale breaks containers"
83
+ author: david | source_type: human | verified: true
84
+
85
+ [2] "LXC container DNS fix after Tailscale install"
86
+ author: engineer-agent | source_type: agent | verified: null
87
+
88
+ [3] "LXC DNS configuration reference"
89
+ author: research-agent | source_type: agent | verified: false
90
+ ```
91
+
92
+ Agents know: result 1 is production-safe. Result 2, spot-check first. Result 3, review before acting.
93
+
94
+ ---
95
+
96
+ ## Quick Start
97
+
98
+ ### Solo (SQLite — no server needed)
99
+
100
+ ```bash
101
+ pip install lore-mcp
102
+ export DB_BACKEND=sqlite KNOWLEDGE_DATA_DIR=~/.lore
103
+ lore-mcp
104
+ ```
105
+
106
+ Add to Claude Code (`~/.claude.json` or project `.mcp.json`):
107
+
108
+ ```json
109
+ {
110
+ "mcpServers": {
111
+ "lore": {
112
+ "command": "lore-mcp",
113
+ "env": {
114
+ "DB_BACKEND": "sqlite",
115
+ "KNOWLEDGE_DATA_DIR": "/home/yourname/.lore"
116
+ }
117
+ }
118
+ }
119
+ }
120
+ ```
121
+
122
+ ### Team (PostgreSQL)
123
+
124
+ ```bash
125
+ pip install lore-mcp
126
+ export DB_BACKEND=local DB_HOST=localhost DB_PORT=5432 \
127
+ DB_NAME=lore DB_USER=lore_user DB_PASSWORD=yourpassword
128
+ lore-mcp --host 0.0.0.0 --port 5555
129
+ ```
130
+
131
+ All agents on your team point at `http://your-server:5555/mcp`. One shared knowledge layer.
132
+
133
+ ---
134
+
135
+ ## Tool Reference
136
+
137
+ ### Knowledge Base
138
+ | Tool | What it does |
139
+ |---|---|
140
+ | `kb_add` | Add an entry. Accepts `author`, `source_type` for attribution. |
141
+ | `kb_search` | Semantic search with optional topic filter. |
142
+ | `kb_get` | Fetch full entry by ID. |
143
+ | `kb_list` | List entries, filter by topic. |
144
+ | `kb_update` | Update content, tags, or set `verified` flag. |
145
+ | `kb_delete` | Delete entry (requires `confirm=true`). |
146
+
147
+ ### Investigations
148
+ | Tool | What it does |
149
+ |---|---|
150
+ | `investigation_add` | Open or add to an investigation (topic, title, content, tags). |
151
+ | `investigation_list` | List investigations, filter by topic. |
152
+ | `investigation_get` | Fetch full investigation by ID. |
153
+ | `investigation_log_experiment` | Log a structured experiment with hypothesis, methodology, results, conclusion. |
154
+ | `investigation_list_experiments` | List all logged experiments. |
155
+
156
+ ### Journal
157
+ | Tool | What it does |
158
+ |---|---|
159
+ | `journal_append` | Add a milestone, decision, or reflection. |
160
+ | `journal_list` | List recent entries (default 20). |
161
+ | `journal_get` | Fetch entry by ID. |
162
+ | `snapshot_config` | Snapshot a config object to the journal. |
163
+
164
+ ### Document Ingestion
165
+ | Tool | What it does |
166
+ |---|---|
167
+ | `kb_ingest_doc` | Ingest a markdown file into the KB. |
168
+ | `kb_ingest_dir` | Batch-ingest a directory, with change detection. |
169
+ | `kb_sync_status` | Check what's changed since last sync. |
170
+
171
+ ### MCP Index
172
+ | Tool | What it does |
173
+ |---|---|
174
+ | `mcp_index_scan` | Scan all configured MCP servers and index their tools. |
175
+ | `mcp_index_search` | Search indexed tools by description. |
176
+ | `mcp_index_get_server` | Get all tools for a specific MCP server. |
177
+ | `mcp_index_rebuild` | Force a full rescan. |
178
+
179
+ ### Search
180
+ | Tool | What it does |
181
+ |---|---|
182
+ | `multi_search` | Search across KB, investigations, journal, and transcripts at once. |
183
+ | `search_local` | Search local files by content. |
184
+ | `search_transcripts` | Search Whisper transcript segments. |
185
+ | `deduplicate_results` | Deduplicate a result set by similarity. |
186
+ | `cluster_results` | Cluster results by topic. |
187
+
188
+ ---
189
+
190
+ ## Backends
191
+
192
+ | Backend | Use case | Setup |
193
+ |---|---|---|
194
+ | SQLite | Solo / local dev / single machine | No server, one env var |
195
+ | PostgreSQL | Team / shared / production | Self-hosted DB |
196
+ | Supabase | Cloud PostgreSQL | Managed, zero-ops |
197
+
198
+ ---
199
+
200
+ ## How It's Different
201
+
202
+ | Tool | Built for | What it remembers | Agent-native |
203
+ |---|---|---|---|
204
+ | OB1 / personal memory | One person | Your thoughts and captures | No |
205
+ | Mem0 / Zep | App developers | User preferences, conversations | Partially |
206
+ | Confluence / Notion | Human teams | Documentation (human-browsed) | No |
207
+ | **Lore** | **Engineering teams + AI agents** | **How your systems work** | **Yes** |
208
+
209
+ Lore is not a second brain. It's the operational intelligence layer your agents need to work in your environment — not just any environment.
@@ -0,0 +1,163 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "lore-knowledge-mcp"
7
+ version = "0.5.0"
8
+ description = "Unified knowledge management MCP server with document intelligence and research workflows"
9
+ readme = "README.md"
10
+ license = {text = "MIT"}
11
+ authors = [
12
+ {name = "David Gutowsky"},
13
+ ]
14
+ keywords = ["mcp", "knowledge-management", "ai", "claude", "research", "documentation"]
15
+ classifiers = [
16
+ "Development Status :: 4 - Beta",
17
+ "Intended Audience :: Developers",
18
+ "Intended Audience :: System Administrators",
19
+ "License :: OSI Approved :: MIT License",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Topic :: Software Development :: Libraries",
26
+ "Topic :: Software Development :: Libraries :: Python Modules",
27
+ "Topic :: System :: Systems Administration",
28
+ "Topic :: Text Processing :: Indexing",
29
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
30
+ ]
31
+ requires-python = ">=3.11"
32
+ dependencies = [
33
+ "mcp>=0.4.0",
34
+ "aiofiles>=23.2.1",
35
+ "asyncpg>=0.28.0",
36
+ "jsonschema>=4.17.0",
37
+ "python-dotenv>=1.0.0",
38
+ "python-frontmatter>=1.0.0",
39
+ "markdown>=3.4.0",
40
+ "tiktoken>=0.5.0",
41
+ "pyyaml>=6.0",
42
+ "psycopg2-binary>=2.9.7",
43
+ "sentry-sdk>=1.32.0",
44
+ ]
45
+
46
+ [project.optional-dependencies]
47
+ supabase = [
48
+ "supabase>=1.0.0",
49
+ ]
50
+ dev = [
51
+ "pytest>=7.0.0",
52
+ "pytest-asyncio>=0.21.0",
53
+ "black>=23.0.0",
54
+ "mypy>=1.5.0",
55
+ "ruff>=0.1",
56
+ "pre-commit>=3.3.0",
57
+ ]
58
+ docs = [
59
+ "mkdocs>=1.5.0",
60
+ "mkdocs-material>=9.0.0",
61
+ "mkdocstrings[python]>=0.22.0",
62
+ ]
63
+ test = [
64
+ "pytest>=7.0.0",
65
+ "pytest-asyncio>=0.21.0",
66
+ "pytest-cov>=4.0.0",
67
+ "httpx>=0.24.0",
68
+ "factory-boy>=3.3.0",
69
+ ]
70
+
71
+ [project.scripts]
72
+ lore-mcp = "lore.server:main"
73
+
74
+ [project.urls]
75
+ Homepage = "https://github.com/davidgut1982/lore-mcp"
76
+ Documentation = "https://github.com/davidgut1982/lore-mcp#readme"
77
+ Repository = "https://github.com/davidgut1982/lore-mcp.git"
78
+ Issues = "https://github.com/davidgut1982/lore-mcp/issues"
79
+
80
+ [tool.setuptools.packages.find]
81
+ where = ["src"]
82
+
83
+ [tool.setuptools.package-data]
84
+ lore = ["py.typed"]
85
+
86
+ [tool.black]
87
+ line-length = 88
88
+ target-version = ['py311']
89
+ include = '\.pyi?$'
90
+ exclude = '''
91
+ /(
92
+ \.git
93
+ | \.hg
94
+ | \.mypy_cache
95
+ | \.tox
96
+ | \.venv
97
+ | _build
98
+ | buck-out
99
+ | build
100
+ | dist
101
+ )/
102
+ '''
103
+
104
+ [tool.mypy]
105
+ python_version = "3.11"
106
+ warn_return_any = true
107
+ warn_unused_configs = true
108
+ disallow_untyped_defs = true
109
+ disallow_incomplete_defs = true
110
+ check_untyped_defs = true
111
+ disallow_untyped_decorators = true
112
+ no_implicit_optional = true
113
+ warn_redundant_casts = true
114
+ warn_unused_ignores = true
115
+ warn_no_return = true
116
+ warn_unreachable = true
117
+ strict_equality = true
118
+
119
+ [tool.ruff]
120
+ line-length = 100
121
+ target-version = "py311"
122
+
123
+ [tool.ruff.lint]
124
+ select = ["E", "F", "I", "UP"]
125
+ ignore = [
126
+ "E501", # line too long — handler code has long strings
127
+ "UP007", # X | Y union syntax — keep Optional[] for clarity
128
+ "F401", # unused imports — some are re-exported
129
+ ]
130
+
131
+ [tool.ruff.lint.isort]
132
+ known-first-party = ["lore"]
133
+
134
+ [tool.ruff.format]
135
+ quote-style = "double"
136
+ indent-style = "space"
137
+
138
+ [tool.pytest.ini_options]
139
+ minversion = "7.0"
140
+ addopts = "-ra -q --strict-markers"
141
+ testpaths = ["tests"]
142
+ markers = [
143
+ "integration: marks tests as integration tests (deselect with '-m \"not integration\"')",
144
+ "slow: marks tests as slow (deselect with '-m \"not slow\"')",
145
+ ]
146
+
147
+ [tool.coverage.run]
148
+ source = ["src"]
149
+ branch = true
150
+
151
+ [tool.coverage.report]
152
+ exclude_lines = [
153
+ "pragma: no cover",
154
+ "def __repr__",
155
+ "if self.debug:",
156
+ "if settings.DEBUG",
157
+ "raise AssertionError",
158
+ "raise NotImplementedError",
159
+ "if 0:",
160
+ "if __name__ == .__main__.:",
161
+ "class .*\\bProtocol\\):",
162
+ "@(abc\\.)?abstractmethod",
163
+ ]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """Lore — unified knowledge-management MCP server (KB + investigations + journal + MCP-index)."""
2
+
3
+ __version__ = "0.5.0"