footprinter-cli 1.0.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.
Files changed (160) hide show
  1. footprinter_cli-1.0.0/LICENSE +21 -0
  2. footprinter_cli-1.0.0/PKG-INFO +229 -0
  3. footprinter_cli-1.0.0/README.md +177 -0
  4. footprinter_cli-1.0.0/footprinter/__init__.py +8 -0
  5. footprinter_cli-1.0.0/footprinter/access.py +444 -0
  6. footprinter_cli-1.0.0/footprinter/api/__init__.py +1 -0
  7. footprinter_cli-1.0.0/footprinter/api/db.py +61 -0
  8. footprinter_cli-1.0.0/footprinter/api/entities.py +250 -0
  9. footprinter_cli-1.0.0/footprinter/api/search.py +47 -0
  10. footprinter_cli-1.0.0/footprinter/api/semantic.py +33 -0
  11. footprinter_cli-1.0.0/footprinter/api/server.py +66 -0
  12. footprinter_cli-1.0.0/footprinter/api/status.py +15 -0
  13. footprinter_cli-1.0.0/footprinter/bundled/__init__.py +0 -0
  14. footprinter_cli-1.0.0/footprinter/bundled/config.example.yaml +161 -0
  15. footprinter_cli-1.0.0/footprinter/bundled/patterns/context_patterns.yaml +18 -0
  16. footprinter_cli-1.0.0/footprinter/bundled/patterns/extensions.yaml +283 -0
  17. footprinter_cli-1.0.0/footprinter/bundled/patterns/filename_patterns.yaml +61 -0
  18. footprinter_cli-1.0.0/footprinter/bundled/patterns/mime_mappings.yaml +68 -0
  19. footprinter_cli-1.0.0/footprinter/bundled/patterns/salesforce_rules.yaml +84 -0
  20. footprinter_cli-1.0.0/footprinter/bundled/patterns/security_patterns.yaml +27 -0
  21. footprinter_cli-1.0.0/footprinter/cli/__init__.py +128 -0
  22. footprinter_cli-1.0.0/footprinter/cli/__main__.py +6 -0
  23. footprinter_cli-1.0.0/footprinter/cli/_common.py +332 -0
  24. footprinter_cli-1.0.0/footprinter/cli/_policy_helpers.py +646 -0
  25. footprinter_cli-1.0.0/footprinter/cli/_prompt.py +220 -0
  26. footprinter_cli-1.0.0/footprinter/cli/api_cmd.py +32 -0
  27. footprinter_cli-1.0.0/footprinter/cli/connect.py +591 -0
  28. footprinter_cli-1.0.0/footprinter/cli/data.py +879 -0
  29. footprinter_cli-1.0.0/footprinter/cli/delete.py +128 -0
  30. footprinter_cli-1.0.0/footprinter/cli/ingest.py +579 -0
  31. footprinter_cli-1.0.0/footprinter/cli/mcp_cmd.py +750 -0
  32. footprinter_cli-1.0.0/footprinter/cli/mcp_setup.py +306 -0
  33. footprinter_cli-1.0.0/footprinter/cli/search.py +393 -0
  34. footprinter_cli-1.0.0/footprinter/cli/search_cmd.py +69 -0
  35. footprinter_cli-1.0.0/footprinter/cli/setup.py +1836 -0
  36. footprinter_cli-1.0.0/footprinter/cli/status.py +729 -0
  37. footprinter_cli-1.0.0/footprinter/cli/status_cmd.py +104 -0
  38. footprinter_cli-1.0.0/footprinter/cli/upsert.py +794 -0
  39. footprinter_cli-1.0.0/footprinter/cli/vectorize_cmd.py +215 -0
  40. footprinter_cli-1.0.0/footprinter/cli/view.py +322 -0
  41. footprinter_cli-1.0.0/footprinter/connectors/__init__.py +171 -0
  42. footprinter_cli-1.0.0/footprinter/connectors/config_utils.py +141 -0
  43. footprinter_cli-1.0.0/footprinter/db/__init__.py +37 -0
  44. footprinter_cli-1.0.0/footprinter/db/browser.py +198 -0
  45. footprinter_cli-1.0.0/footprinter/db/chats.py +610 -0
  46. footprinter_cli-1.0.0/footprinter/db/clients.py +307 -0
  47. footprinter_cli-1.0.0/footprinter/db/emails.py +279 -0
  48. footprinter_cli-1.0.0/footprinter/db/files.py +741 -0
  49. footprinter_cli-1.0.0/footprinter/db/folders.py +659 -0
  50. footprinter_cli-1.0.0/footprinter/db/messages.py +192 -0
  51. footprinter_cli-1.0.0/footprinter/db/policies.py +151 -0
  52. footprinter_cli-1.0.0/footprinter/db/projects.py +673 -0
  53. footprinter_cli-1.0.0/footprinter/db/search.py +573 -0
  54. footprinter_cli-1.0.0/footprinter/db/sql_utils.py +168 -0
  55. footprinter_cli-1.0.0/footprinter/db/status.py +320 -0
  56. footprinter_cli-1.0.0/footprinter/db/uploads.py +70 -0
  57. footprinter_cli-1.0.0/footprinter/ingest/__init__.py +0 -0
  58. footprinter_cli-1.0.0/footprinter/ingest/adapters/__init__.py +33 -0
  59. footprinter_cli-1.0.0/footprinter/ingest/adapters/browser.py +54 -0
  60. footprinter_cli-1.0.0/footprinter/ingest/adapters/chat.py +57 -0
  61. footprinter_cli-1.0.0/footprinter/ingest/adapters/ingest.py +146 -0
  62. footprinter_cli-1.0.0/footprinter/ingest/adapters/local_files.py +68 -0
  63. footprinter_cli-1.0.0/footprinter/ingest/adapters/local_folders.py +52 -0
  64. footprinter_cli-1.0.0/footprinter/ingest/adapters/protocol.py +174 -0
  65. footprinter_cli-1.0.0/footprinter/ingest/browser_indexer.py +216 -0
  66. footprinter_cli-1.0.0/footprinter/ingest/chat_dedup.py +156 -0
  67. footprinter_cli-1.0.0/footprinter/ingest/chat_indexer.py +515 -0
  68. footprinter_cli-1.0.0/footprinter/ingest/chat_parsers/__init__.py +8 -0
  69. footprinter_cli-1.0.0/footprinter/ingest/chat_parsers/chatgpt_parser.py +229 -0
  70. footprinter_cli-1.0.0/footprinter/ingest/chat_parsers/claude_parser.py +161 -0
  71. footprinter_cli-1.0.0/footprinter/ingest/cli.py +827 -0
  72. footprinter_cli-1.0.0/footprinter/ingest/content_extractors.py +117 -0
  73. footprinter_cli-1.0.0/footprinter/ingest/database.py +36 -0
  74. footprinter_cli-1.0.0/footprinter/ingest/db/__init__.py +1 -0
  75. footprinter_cli-1.0.0/footprinter/ingest/db/connector_schema.py +47 -0
  76. footprinter_cli-1.0.0/footprinter/ingest/db/migration.py +328 -0
  77. footprinter_cli-1.0.0/footprinter/ingest/db/schema.py +1043 -0
  78. footprinter_cli-1.0.0/footprinter/ingest/db/security.py +6 -0
  79. footprinter_cli-1.0.0/footprinter/ingest/file_indexer.py +261 -0
  80. footprinter_cli-1.0.0/footprinter/ingest/file_scanner.py +277 -0
  81. footprinter_cli-1.0.0/footprinter/ingest/folder_indexer.py +226 -0
  82. footprinter_cli-1.0.0/footprinter/ingest/full_content_extractor.py +321 -0
  83. footprinter_cli-1.0.0/footprinter/ingest/orchestrator.py +125 -0
  84. footprinter_cli-1.0.0/footprinter/ingest/pipe_runner.py +217 -0
  85. footprinter_cli-1.0.0/footprinter/ingest/processing.py +165 -0
  86. footprinter_cli-1.0.0/footprinter/ingest/registry.py +201 -0
  87. footprinter_cli-1.0.0/footprinter/ingest/run_record.py +91 -0
  88. footprinter_cli-1.0.0/footprinter/ingest/status.py +346 -0
  89. footprinter_cli-1.0.0/footprinter/mcp/__init__.py +0 -0
  90. footprinter_cli-1.0.0/footprinter/mcp/__main__.py +5 -0
  91. footprinter_cli-1.0.0/footprinter/mcp/db.py +57 -0
  92. footprinter_cli-1.0.0/footprinter/mcp/errors.py +102 -0
  93. footprinter_cli-1.0.0/footprinter/mcp/extraction.py +226 -0
  94. footprinter_cli-1.0.0/footprinter/mcp/server.py +39 -0
  95. footprinter_cli-1.0.0/footprinter/mcp/tools/__init__.py +0 -0
  96. footprinter_cli-1.0.0/footprinter/mcp/tools/navigation.py +70 -0
  97. footprinter_cli-1.0.0/footprinter/mcp/tools/read.py +75 -0
  98. footprinter_cli-1.0.0/footprinter/mcp/tools/search.py +158 -0
  99. footprinter_cli-1.0.0/footprinter/mcp/tools/semantic.py +79 -0
  100. footprinter_cli-1.0.0/footprinter/mcp/tools/status.py +15 -0
  101. footprinter_cli-1.0.0/footprinter/paths.py +91 -0
  102. footprinter_cli-1.0.0/footprinter/permissions.py +1160 -0
  103. footprinter_cli-1.0.0/footprinter/semantic/__init__.py +13 -0
  104. footprinter_cli-1.0.0/footprinter/semantic/chunking.py +52 -0
  105. footprinter_cli-1.0.0/footprinter/semantic/embeddings.py +23 -0
  106. footprinter_cli-1.0.0/footprinter/semantic/hybrid_search.py +273 -0
  107. footprinter_cli-1.0.0/footprinter/semantic/vector_store.py +471 -0
  108. footprinter_cli-1.0.0/footprinter/services/__init__.py +49 -0
  109. footprinter_cli-1.0.0/footprinter/services/access_service.py +342 -0
  110. footprinter_cli-1.0.0/footprinter/services/chat_service.py +85 -0
  111. footprinter_cli-1.0.0/footprinter/services/client_service.py +267 -0
  112. footprinter_cli-1.0.0/footprinter/services/content_service.py +181 -0
  113. footprinter_cli-1.0.0/footprinter/services/email_service.py +89 -0
  114. footprinter_cli-1.0.0/footprinter/services/file_service.py +83 -0
  115. footprinter_cli-1.0.0/footprinter/services/folder_service.py +122 -0
  116. footprinter_cli-1.0.0/footprinter/services/includes.py +19 -0
  117. footprinter_cli-1.0.0/footprinter/services/ingest_service.py +231 -0
  118. footprinter_cli-1.0.0/footprinter/services/project_service.py +262 -0
  119. footprinter_cli-1.0.0/footprinter/services/roles.py +25 -0
  120. footprinter_cli-1.0.0/footprinter/services/search_service.py +177 -0
  121. footprinter_cli-1.0.0/footprinter/services/semantic_service.py +360 -0
  122. footprinter_cli-1.0.0/footprinter/services/status_service.py +18 -0
  123. footprinter_cli-1.0.0/footprinter/services/visit_service.py +65 -0
  124. footprinter_cli-1.0.0/footprinter/source_registry.py +194 -0
  125. footprinter_cli-1.0.0/footprinter/utils/__init__.py +7 -0
  126. footprinter_cli-1.0.0/footprinter/utils/hash_utils.py +59 -0
  127. footprinter_cli-1.0.0/footprinter/utils/logging_config.py +68 -0
  128. footprinter_cli-1.0.0/footprinter/utils/mime.py +30 -0
  129. footprinter_cli-1.0.0/footprinter/utils/text.py +6 -0
  130. footprinter_cli-1.0.0/footprinter/utils/time.py +11 -0
  131. footprinter_cli-1.0.0/footprinter/visibility.py +1272 -0
  132. footprinter_cli-1.0.0/footprinter_cli.egg-info/PKG-INFO +229 -0
  133. footprinter_cli-1.0.0/footprinter_cli.egg-info/SOURCES.txt +158 -0
  134. footprinter_cli-1.0.0/footprinter_cli.egg-info/dependency_links.txt +1 -0
  135. footprinter_cli-1.0.0/footprinter_cli.egg-info/entry_points.txt +2 -0
  136. footprinter_cli-1.0.0/footprinter_cli.egg-info/requires.txt +26 -0
  137. footprinter_cli-1.0.0/footprinter_cli.egg-info/top_level.txt +1 -0
  138. footprinter_cli-1.0.0/pyproject.toml +95 -0
  139. footprinter_cli-1.0.0/setup.cfg +4 -0
  140. footprinter_cli-1.0.0/tests/test_access_control_bypasses.py +197 -0
  141. footprinter_cli-1.0.0/tests/test_access_control_docs.py +66 -0
  142. footprinter_cli-1.0.0/tests/test_access_recalculate.py +927 -0
  143. footprinter_cli-1.0.0/tests/test_build_status_filter.py +178 -0
  144. footprinter_cli-1.0.0/tests/test_bundled.py +108 -0
  145. footprinter_cli-1.0.0/tests/test_e2e_install.py +650 -0
  146. footprinter_cli-1.0.0/tests/test_e2e_pipeline.py +203 -0
  147. footprinter_cli-1.0.0/tests/test_edit_recalculate.py +150 -0
  148. footprinter_cli-1.0.0/tests/test_examples.py +84 -0
  149. footprinter_cli-1.0.0/tests/test_files_rename.py +136 -0
  150. footprinter_cli-1.0.0/tests/test_files_surface.py +91 -0
  151. footprinter_cli-1.0.0/tests/test_inherit_resolution.py +155 -0
  152. footprinter_cli-1.0.0/tests/test_logging.py +183 -0
  153. footprinter_cli-1.0.0/tests/test_no_project_root.py +93 -0
  154. footprinter_cli-1.0.0/tests/test_package_init.py +39 -0
  155. footprinter_cli-1.0.0/tests/test_paths_no_test_marker.py +59 -0
  156. footprinter_cli-1.0.0/tests/test_pip_install_e2e.py +118 -0
  157. footprinter_cli-1.0.0/tests/test_prompt_safety.py +309 -0
  158. footprinter_cli-1.0.0/tests/test_resolver.py +334 -0
  159. footprinter_cli-1.0.0/tests/test_security_layer.py +1869 -0
  160. footprinter_cli-1.0.0/tests/test_security_permissions.py +1113 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SwellCity Group
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 all
13
+ 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 THE
21
+ SOFTWARE.
@@ -0,0 +1,229 @@
1
+ Metadata-Version: 2.2
2
+ Name: footprinter-cli
3
+ Version: 1.0.0
4
+ Summary: A local context layer for your files, browser history, chats, and email — searchable, user-owned, MCP-served.
5
+ Author: SwellCity Group
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/swellcitygroup/footprinter
8
+ Project-URL: Repository, https://github.com/swellcitygroup/footprinter
9
+ Project-URL: Issues, https://github.com/swellcitygroup/footprinter/issues
10
+ Project-URL: Documentation, https://github.com/swellcitygroup/footprinter/blob/main/README.md
11
+ Project-URL: Changelog, https://github.com/swellcitygroup/footprinter/blob/main/CHANGELOG.md
12
+ Keywords: indexer,mcp,metadata,model-context-protocol,file-indexing,sqlite,context-engineering,personal-information-management
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Intended Audience :: End Users/Desktop
17
+ Classifier: Intended Audience :: Science/Research
18
+ Classifier: License :: OSI Approved :: MIT License
19
+ Classifier: Operating System :: MacOS
20
+ Classifier: Operating System :: POSIX :: Linux
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Topic :: Database
24
+ Classifier: Topic :: Text Processing :: Indexing
25
+ Classifier: Topic :: Scientific/Engineering :: Information Analysis
26
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
27
+ Requires-Python: >=3.11
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Requires-Dist: pyyaml<7.0,>=6.0.1
31
+ Requires-Dist: rich<14.0,>=13.7.0
32
+ Requires-Dist: mcp<2.0,>=1.0.0
33
+ Requires-Dist: fastapi<1.0,>=0.115.0
34
+ Requires-Dist: uvicorn<1.0,>=0.30.0
35
+ Requires-Dist: cryptography<46.0,>=42.0.0
36
+ Provides-Extra: semantic
37
+ Requires-Dist: chromadb<2.0,>=1.4; extra == "semantic"
38
+ Requires-Dist: onnxruntime<2.0,>=1.16.0; extra == "semantic"
39
+ Provides-Extra: parse
40
+ Requires-Dist: pypdf<6.0,>=3.0.0; extra == "parse"
41
+ Requires-Dist: python-docx<2.0,>=1.1.0; extra == "parse"
42
+ Requires-Dist: openpyxl<4.0,>=3.1.0; extra == "parse"
43
+ Requires-Dist: python-pptx<2.0,>=0.6.21; extra == "parse"
44
+ Provides-Extra: full
45
+ Requires-Dist: footprinter-cli[semantic]; extra == "full"
46
+ Requires-Dist: footprinter-cli[parse]; extra == "full"
47
+ Provides-Extra: dev
48
+ Requires-Dist: pytest<9.0,>=8.0.0; extra == "dev"
49
+ Requires-Dist: pytest-cov<6.0,>=4.1.0; extra == "dev"
50
+ Requires-Dist: ruff<1.0,>=0.1.0; extra == "dev"
51
+ Requires-Dist: httpx<1.0,>=0.27.0; extra == "dev"
52
+
53
+ # Footprinter
54
+
55
+ [![Tests](https://github.com/swellcitygroup/footprinter/actions/workflows/test.yml/badge.svg)](https://github.com/swellcitygroup/footprinter/actions/workflows/test.yml)
56
+
57
+ **A local context layer for your files, browser history, chats, and email — searchable, user-owned, and served to AI agents through [MCP](https://modelcontextprotocol.io/).**
58
+
59
+ Your work lives across a filesystem, a browser, an inbox, a chat history, and whatever other tools you reach for. Footprinter indexes those sources into a single local store, organizes them into the projects and groupings *you* define, and serves the result to AI agents through a governed access layer. You control what the agent can see. Everything stays on your machine.
60
+
61
+ ## Install
62
+
63
+ ```bash
64
+ pip install footprinter-cli
65
+ ```
66
+
67
+ The base install includes the indexing pipeline, CLI, MCP server, HTTP API, and token encryption. Optional extras add more capabilities:
68
+
69
+ ```bash
70
+ pip install footprinter-cli[full] # All optional extras (semantic + parse)
71
+ pip install footprinter-cli[semantic] # Semantic search (ChromaDB + ONNX embeddings)
72
+ pip install footprinter-cli[parse] # PDF, Word, Excel, PowerPoint content extraction
73
+ ```
74
+
75
+ ## Quick Start
76
+
77
+ ```bash
78
+ fp setup # Configure sources (interactive wizard)
79
+ fp ingest # Index your files
80
+ fp status # See what's indexed
81
+ fp search "meeting notes" # Find things
82
+ ```
83
+
84
+ **macOS note:** Browser history indexing requires Full Disk Access for your terminal app (System Settings > Privacy & Security > Full Disk Access).
85
+
86
+ ## Connect to Claude Desktop
87
+
88
+ Footprinter includes an MCP server that gives Claude Desktop (or any MCP client) structured access to your indexed data:
89
+
90
+ ```bash
91
+ fp setup mcp # Configure MCP for Claude Desktop
92
+ ```
93
+
94
+ Once configured, Claude can search your files, browse projects, and find related conversations — through natural language.
95
+
96
+ ## What It Indexes
97
+
98
+ | Source | What's captured |
99
+ |--------|----------------|
100
+ | **Local files** | Path, type, size, timestamps, content hash |
101
+ | **Browser history** | Safari and Chrome — URLs, titles, visit times |
102
+ | **Chat exports** | Claude and ChatGPT conversation exports |
103
+ | **Email** | Subject, sender, recipients, body, timestamps — ingested via [connector plugins](#connectors) |
104
+ | **Documents** | PDF, Word, Excel, PowerPoint content (with `[parse]` extra) |
105
+ | **Semantic embeddings** | Conceptual similarity across all sources (with `[semantic]` extra) |
106
+
107
+ Additional sources are available through [connector plugins](#connectors).
108
+
109
+ ## CLI Commands
110
+
111
+ All commands use the `fp` entry point.
112
+
113
+ | Command | Purpose |
114
+ |---------|---------|
115
+ | `fp setup` | Configure sources and integrations |
116
+ | `fp ingest` | Run the indexing pipeline |
117
+ | `fp status` | System health and data counts |
118
+ | `fp search` | Search across all indexed sources |
119
+ | `fp connect` | Manage optional integrations |
120
+ | `fp mcp` | MCP server and access policies |
121
+ | `fp api` | Start the HTTP API server |
122
+ | `fp view` | Browse indexed data (files, folders, projects, clients, chats, emails, visits) |
123
+ | `fp upsert` | Create or update records and assign relationships |
124
+ | `fp data` | Export data, generate templates, or import metadata corrections |
125
+ | `fp delete` | Soft-delete a record |
126
+ | `fp vectorize` | Manage per-record vectorization control |
127
+
128
+ Run `fp <command> --help` for full usage.
129
+
130
+ ## Connectors
131
+
132
+ Connector plugins add external data sources like email, cloud storage, and third-party services. They install alongside Footprinter and register automatically:
133
+
134
+ ```bash
135
+ pip install footprinter-<name>
136
+ ```
137
+
138
+ First-party and community connectors are in development — check the repository for updates.
139
+
140
+ Use `fp connect list` to see available connectors and their status.
141
+
142
+ ## Architecture
143
+
144
+ Single-process CLI with optional MCP server. SQLite database. No containers, no cloud, no accounts.
145
+
146
+ Sources are scanned into SQLite with bidirectional links connecting local files to remote backups via content hash matching. Embeddings are generated at ingest time for semantic search. The MCP server exposes indexed data with two-layer access control (visibility + permissions) — you decide what agents can see.
147
+
148
+ ## Optional Extras
149
+
150
+ | Extra | What it adds |
151
+ |-------|-------------|
152
+ | `[semantic]` | Semantic search via ChromaDB + ONNX embeddings |
153
+ | `[parse]` | PDF, Word, Excel, PowerPoint content extraction |
154
+ | `[full]` | All optional extras (semantic + parse) |
155
+
156
+ > **Privacy note:** The `[semantic]` extra installs ChromaDB, which bundles PostHog analytics.
157
+ > ChromaDB collects anonymous usage telemetry by default. Set `ANONYMIZED_TELEMETRY=False`
158
+ > in your environment to disable it. See
159
+ > [ChromaDB telemetry docs](https://docs.trychroma.com/docs/overview/telemetry) for details.
160
+
161
+ ## Requirements
162
+
163
+ - Python 3.11+
164
+ - macOS or Linux
165
+ - Full Disk Access on macOS (for browser history)
166
+
167
+ ## Documentation
168
+
169
+ - [Interfaces](https://github.com/swellcitygroup/footprinter/blob/main/reference/interfaces.md) — CLI commands, MCP tools, Python API
170
+ - [Data Model](https://github.com/swellcitygroup/footprinter/blob/main/reference/data-model.md) — database schema
171
+ - [Pipeline](https://github.com/swellcitygroup/footprinter/blob/main/reference/pipeline.md) — indexing stages and configuration
172
+ - [Access Control](https://github.com/swellcitygroup/footprinter/blob/main/reference/mcp-access-control.md) — MCP security model
173
+
174
+ ## Contributing
175
+
176
+ Bug fixes, documentation, and tests welcome. For new features or architectural changes, [open an issue](https://github.com/swellcitygroup/footprinter/issues) first to discuss the approach.
177
+
178
+ Connector plugins use an internal API that isn't stable yet — we're not accepting connector contributions at this time.
179
+
180
+ ### Development setup
181
+
182
+ ```bash
183
+ git clone https://github.com/swellcitygroup/footprinter.git
184
+ cd footprinter
185
+ python3 -m venv venv
186
+ ./venv/bin/pip install -e ".[dev]"
187
+ ```
188
+
189
+ ### Running tests
190
+
191
+ ```bash
192
+ pytest tests/ -v --tb=short
193
+ ```
194
+
195
+ ### Code style
196
+
197
+ - PEP 8
198
+ - Type hints on function signatures
199
+ - `logging` over `print()` in library code
200
+
201
+ ### Workflow
202
+
203
+ 1. Fork the repository
204
+ 2. Create a feature branch from `main`
205
+ 3. Write tests (TDD preferred — tests before implementation)
206
+ 4. Run the test suite
207
+ 5. Submit a PR targeting `main`
208
+
209
+ Never commit API keys, tokens, or credentials. Report security vulnerabilities privately — see [SECURITY.md](https://github.com/swellcitygroup/footprinter/blob/main/SECURITY.md).
210
+
211
+ ### Pull request expectations
212
+
213
+ - Tests must pass
214
+ - No breaking changes to existing CLI commands
215
+ - Fill out the PR template
216
+ - One logical change per PR
217
+
218
+ All PRs are reviewed by the maintainer. Expect reviews within one week. CI must pass before review begins.
219
+
220
+ No Contributor License Agreement required. By submitting a PR, you agree your contribution is licensed under the project's [MIT License](https://github.com/swellcitygroup/footprinter/blob/main/LICENSE).
221
+
222
+ ## Community
223
+
224
+ - [Code of Conduct](https://github.com/swellcitygroup/footprinter/blob/main/CODE_OF_CONDUCT.md)
225
+ - [Security Policy](https://github.com/swellcitygroup/footprinter/blob/main/SECURITY.md)
226
+
227
+ ## License
228
+
229
+ MIT — see [LICENSE](https://github.com/swellcitygroup/footprinter/blob/main/LICENSE).
@@ -0,0 +1,177 @@
1
+ # Footprinter
2
+
3
+ [![Tests](https://github.com/swellcitygroup/footprinter/actions/workflows/test.yml/badge.svg)](https://github.com/swellcitygroup/footprinter/actions/workflows/test.yml)
4
+
5
+ **A local context layer for your files, browser history, chats, and email — searchable, user-owned, and served to AI agents through [MCP](https://modelcontextprotocol.io/).**
6
+
7
+ Your work lives across a filesystem, a browser, an inbox, a chat history, and whatever other tools you reach for. Footprinter indexes those sources into a single local store, organizes them into the projects and groupings *you* define, and serves the result to AI agents through a governed access layer. You control what the agent can see. Everything stays on your machine.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pip install footprinter-cli
13
+ ```
14
+
15
+ The base install includes the indexing pipeline, CLI, MCP server, HTTP API, and token encryption. Optional extras add more capabilities:
16
+
17
+ ```bash
18
+ pip install footprinter-cli[full] # All optional extras (semantic + parse)
19
+ pip install footprinter-cli[semantic] # Semantic search (ChromaDB + ONNX embeddings)
20
+ pip install footprinter-cli[parse] # PDF, Word, Excel, PowerPoint content extraction
21
+ ```
22
+
23
+ ## Quick Start
24
+
25
+ ```bash
26
+ fp setup # Configure sources (interactive wizard)
27
+ fp ingest # Index your files
28
+ fp status # See what's indexed
29
+ fp search "meeting notes" # Find things
30
+ ```
31
+
32
+ **macOS note:** Browser history indexing requires Full Disk Access for your terminal app (System Settings > Privacy & Security > Full Disk Access).
33
+
34
+ ## Connect to Claude Desktop
35
+
36
+ Footprinter includes an MCP server that gives Claude Desktop (or any MCP client) structured access to your indexed data:
37
+
38
+ ```bash
39
+ fp setup mcp # Configure MCP for Claude Desktop
40
+ ```
41
+
42
+ Once configured, Claude can search your files, browse projects, and find related conversations — through natural language.
43
+
44
+ ## What It Indexes
45
+
46
+ | Source | What's captured |
47
+ |--------|----------------|
48
+ | **Local files** | Path, type, size, timestamps, content hash |
49
+ | **Browser history** | Safari and Chrome — URLs, titles, visit times |
50
+ | **Chat exports** | Claude and ChatGPT conversation exports |
51
+ | **Email** | Subject, sender, recipients, body, timestamps — ingested via [connector plugins](#connectors) |
52
+ | **Documents** | PDF, Word, Excel, PowerPoint content (with `[parse]` extra) |
53
+ | **Semantic embeddings** | Conceptual similarity across all sources (with `[semantic]` extra) |
54
+
55
+ Additional sources are available through [connector plugins](#connectors).
56
+
57
+ ## CLI Commands
58
+
59
+ All commands use the `fp` entry point.
60
+
61
+ | Command | Purpose |
62
+ |---------|---------|
63
+ | `fp setup` | Configure sources and integrations |
64
+ | `fp ingest` | Run the indexing pipeline |
65
+ | `fp status` | System health and data counts |
66
+ | `fp search` | Search across all indexed sources |
67
+ | `fp connect` | Manage optional integrations |
68
+ | `fp mcp` | MCP server and access policies |
69
+ | `fp api` | Start the HTTP API server |
70
+ | `fp view` | Browse indexed data (files, folders, projects, clients, chats, emails, visits) |
71
+ | `fp upsert` | Create or update records and assign relationships |
72
+ | `fp data` | Export data, generate templates, or import metadata corrections |
73
+ | `fp delete` | Soft-delete a record |
74
+ | `fp vectorize` | Manage per-record vectorization control |
75
+
76
+ Run `fp <command> --help` for full usage.
77
+
78
+ ## Connectors
79
+
80
+ Connector plugins add external data sources like email, cloud storage, and third-party services. They install alongside Footprinter and register automatically:
81
+
82
+ ```bash
83
+ pip install footprinter-<name>
84
+ ```
85
+
86
+ First-party and community connectors are in development — check the repository for updates.
87
+
88
+ Use `fp connect list` to see available connectors and their status.
89
+
90
+ ## Architecture
91
+
92
+ Single-process CLI with optional MCP server. SQLite database. No containers, no cloud, no accounts.
93
+
94
+ Sources are scanned into SQLite with bidirectional links connecting local files to remote backups via content hash matching. Embeddings are generated at ingest time for semantic search. The MCP server exposes indexed data with two-layer access control (visibility + permissions) — you decide what agents can see.
95
+
96
+ ## Optional Extras
97
+
98
+ | Extra | What it adds |
99
+ |-------|-------------|
100
+ | `[semantic]` | Semantic search via ChromaDB + ONNX embeddings |
101
+ | `[parse]` | PDF, Word, Excel, PowerPoint content extraction |
102
+ | `[full]` | All optional extras (semantic + parse) |
103
+
104
+ > **Privacy note:** The `[semantic]` extra installs ChromaDB, which bundles PostHog analytics.
105
+ > ChromaDB collects anonymous usage telemetry by default. Set `ANONYMIZED_TELEMETRY=False`
106
+ > in your environment to disable it. See
107
+ > [ChromaDB telemetry docs](https://docs.trychroma.com/docs/overview/telemetry) for details.
108
+
109
+ ## Requirements
110
+
111
+ - Python 3.11+
112
+ - macOS or Linux
113
+ - Full Disk Access on macOS (for browser history)
114
+
115
+ ## Documentation
116
+
117
+ - [Interfaces](https://github.com/swellcitygroup/footprinter/blob/main/reference/interfaces.md) — CLI commands, MCP tools, Python API
118
+ - [Data Model](https://github.com/swellcitygroup/footprinter/blob/main/reference/data-model.md) — database schema
119
+ - [Pipeline](https://github.com/swellcitygroup/footprinter/blob/main/reference/pipeline.md) — indexing stages and configuration
120
+ - [Access Control](https://github.com/swellcitygroup/footprinter/blob/main/reference/mcp-access-control.md) — MCP security model
121
+
122
+ ## Contributing
123
+
124
+ Bug fixes, documentation, and tests welcome. For new features or architectural changes, [open an issue](https://github.com/swellcitygroup/footprinter/issues) first to discuss the approach.
125
+
126
+ Connector plugins use an internal API that isn't stable yet — we're not accepting connector contributions at this time.
127
+
128
+ ### Development setup
129
+
130
+ ```bash
131
+ git clone https://github.com/swellcitygroup/footprinter.git
132
+ cd footprinter
133
+ python3 -m venv venv
134
+ ./venv/bin/pip install -e ".[dev]"
135
+ ```
136
+
137
+ ### Running tests
138
+
139
+ ```bash
140
+ pytest tests/ -v --tb=short
141
+ ```
142
+
143
+ ### Code style
144
+
145
+ - PEP 8
146
+ - Type hints on function signatures
147
+ - `logging` over `print()` in library code
148
+
149
+ ### Workflow
150
+
151
+ 1. Fork the repository
152
+ 2. Create a feature branch from `main`
153
+ 3. Write tests (TDD preferred — tests before implementation)
154
+ 4. Run the test suite
155
+ 5. Submit a PR targeting `main`
156
+
157
+ Never commit API keys, tokens, or credentials. Report security vulnerabilities privately — see [SECURITY.md](https://github.com/swellcitygroup/footprinter/blob/main/SECURITY.md).
158
+
159
+ ### Pull request expectations
160
+
161
+ - Tests must pass
162
+ - No breaking changes to existing CLI commands
163
+ - Fill out the PR template
164
+ - One logical change per PR
165
+
166
+ All PRs are reviewed by the maintainer. Expect reviews within one week. CI must pass before review begins.
167
+
168
+ No Contributor License Agreement required. By submitting a PR, you agree your contribution is licensed under the project's [MIT License](https://github.com/swellcitygroup/footprinter/blob/main/LICENSE).
169
+
170
+ ## Community
171
+
172
+ - [Code of Conduct](https://github.com/swellcitygroup/footprinter/blob/main/CODE_OF_CONDUCT.md)
173
+ - [Security Policy](https://github.com/swellcitygroup/footprinter/blob/main/SECURITY.md)
174
+
175
+ ## License
176
+
177
+ MIT — see [LICENSE](https://github.com/swellcitygroup/footprinter/blob/main/LICENSE).
@@ -0,0 +1,8 @@
1
+ """Footprinter — digital life indexer with AI-powered context."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("footprinter-cli")
7
+ except PackageNotFoundError:
8
+ __version__ = "0.0.0-dev"