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.
- footprinter_cli-1.0.0/LICENSE +21 -0
- footprinter_cli-1.0.0/PKG-INFO +229 -0
- footprinter_cli-1.0.0/README.md +177 -0
- footprinter_cli-1.0.0/footprinter/__init__.py +8 -0
- footprinter_cli-1.0.0/footprinter/access.py +444 -0
- footprinter_cli-1.0.0/footprinter/api/__init__.py +1 -0
- footprinter_cli-1.0.0/footprinter/api/db.py +61 -0
- footprinter_cli-1.0.0/footprinter/api/entities.py +250 -0
- footprinter_cli-1.0.0/footprinter/api/search.py +47 -0
- footprinter_cli-1.0.0/footprinter/api/semantic.py +33 -0
- footprinter_cli-1.0.0/footprinter/api/server.py +66 -0
- footprinter_cli-1.0.0/footprinter/api/status.py +15 -0
- footprinter_cli-1.0.0/footprinter/bundled/__init__.py +0 -0
- footprinter_cli-1.0.0/footprinter/bundled/config.example.yaml +161 -0
- footprinter_cli-1.0.0/footprinter/bundled/patterns/context_patterns.yaml +18 -0
- footprinter_cli-1.0.0/footprinter/bundled/patterns/extensions.yaml +283 -0
- footprinter_cli-1.0.0/footprinter/bundled/patterns/filename_patterns.yaml +61 -0
- footprinter_cli-1.0.0/footprinter/bundled/patterns/mime_mappings.yaml +68 -0
- footprinter_cli-1.0.0/footprinter/bundled/patterns/salesforce_rules.yaml +84 -0
- footprinter_cli-1.0.0/footprinter/bundled/patterns/security_patterns.yaml +27 -0
- footprinter_cli-1.0.0/footprinter/cli/__init__.py +128 -0
- footprinter_cli-1.0.0/footprinter/cli/__main__.py +6 -0
- footprinter_cli-1.0.0/footprinter/cli/_common.py +332 -0
- footprinter_cli-1.0.0/footprinter/cli/_policy_helpers.py +646 -0
- footprinter_cli-1.0.0/footprinter/cli/_prompt.py +220 -0
- footprinter_cli-1.0.0/footprinter/cli/api_cmd.py +32 -0
- footprinter_cli-1.0.0/footprinter/cli/connect.py +591 -0
- footprinter_cli-1.0.0/footprinter/cli/data.py +879 -0
- footprinter_cli-1.0.0/footprinter/cli/delete.py +128 -0
- footprinter_cli-1.0.0/footprinter/cli/ingest.py +579 -0
- footprinter_cli-1.0.0/footprinter/cli/mcp_cmd.py +750 -0
- footprinter_cli-1.0.0/footprinter/cli/mcp_setup.py +306 -0
- footprinter_cli-1.0.0/footprinter/cli/search.py +393 -0
- footprinter_cli-1.0.0/footprinter/cli/search_cmd.py +69 -0
- footprinter_cli-1.0.0/footprinter/cli/setup.py +1836 -0
- footprinter_cli-1.0.0/footprinter/cli/status.py +729 -0
- footprinter_cli-1.0.0/footprinter/cli/status_cmd.py +104 -0
- footprinter_cli-1.0.0/footprinter/cli/upsert.py +794 -0
- footprinter_cli-1.0.0/footprinter/cli/vectorize_cmd.py +215 -0
- footprinter_cli-1.0.0/footprinter/cli/view.py +322 -0
- footprinter_cli-1.0.0/footprinter/connectors/__init__.py +171 -0
- footprinter_cli-1.0.0/footprinter/connectors/config_utils.py +141 -0
- footprinter_cli-1.0.0/footprinter/db/__init__.py +37 -0
- footprinter_cli-1.0.0/footprinter/db/browser.py +198 -0
- footprinter_cli-1.0.0/footprinter/db/chats.py +610 -0
- footprinter_cli-1.0.0/footprinter/db/clients.py +307 -0
- footprinter_cli-1.0.0/footprinter/db/emails.py +279 -0
- footprinter_cli-1.0.0/footprinter/db/files.py +741 -0
- footprinter_cli-1.0.0/footprinter/db/folders.py +659 -0
- footprinter_cli-1.0.0/footprinter/db/messages.py +192 -0
- footprinter_cli-1.0.0/footprinter/db/policies.py +151 -0
- footprinter_cli-1.0.0/footprinter/db/projects.py +673 -0
- footprinter_cli-1.0.0/footprinter/db/search.py +573 -0
- footprinter_cli-1.0.0/footprinter/db/sql_utils.py +168 -0
- footprinter_cli-1.0.0/footprinter/db/status.py +320 -0
- footprinter_cli-1.0.0/footprinter/db/uploads.py +70 -0
- footprinter_cli-1.0.0/footprinter/ingest/__init__.py +0 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/__init__.py +33 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/browser.py +54 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/chat.py +57 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/ingest.py +146 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/local_files.py +68 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/local_folders.py +52 -0
- footprinter_cli-1.0.0/footprinter/ingest/adapters/protocol.py +174 -0
- footprinter_cli-1.0.0/footprinter/ingest/browser_indexer.py +216 -0
- footprinter_cli-1.0.0/footprinter/ingest/chat_dedup.py +156 -0
- footprinter_cli-1.0.0/footprinter/ingest/chat_indexer.py +515 -0
- footprinter_cli-1.0.0/footprinter/ingest/chat_parsers/__init__.py +8 -0
- footprinter_cli-1.0.0/footprinter/ingest/chat_parsers/chatgpt_parser.py +229 -0
- footprinter_cli-1.0.0/footprinter/ingest/chat_parsers/claude_parser.py +161 -0
- footprinter_cli-1.0.0/footprinter/ingest/cli.py +827 -0
- footprinter_cli-1.0.0/footprinter/ingest/content_extractors.py +117 -0
- footprinter_cli-1.0.0/footprinter/ingest/database.py +36 -0
- footprinter_cli-1.0.0/footprinter/ingest/db/__init__.py +1 -0
- footprinter_cli-1.0.0/footprinter/ingest/db/connector_schema.py +47 -0
- footprinter_cli-1.0.0/footprinter/ingest/db/migration.py +328 -0
- footprinter_cli-1.0.0/footprinter/ingest/db/schema.py +1043 -0
- footprinter_cli-1.0.0/footprinter/ingest/db/security.py +6 -0
- footprinter_cli-1.0.0/footprinter/ingest/file_indexer.py +261 -0
- footprinter_cli-1.0.0/footprinter/ingest/file_scanner.py +277 -0
- footprinter_cli-1.0.0/footprinter/ingest/folder_indexer.py +226 -0
- footprinter_cli-1.0.0/footprinter/ingest/full_content_extractor.py +321 -0
- footprinter_cli-1.0.0/footprinter/ingest/orchestrator.py +125 -0
- footprinter_cli-1.0.0/footprinter/ingest/pipe_runner.py +217 -0
- footprinter_cli-1.0.0/footprinter/ingest/processing.py +165 -0
- footprinter_cli-1.0.0/footprinter/ingest/registry.py +201 -0
- footprinter_cli-1.0.0/footprinter/ingest/run_record.py +91 -0
- footprinter_cli-1.0.0/footprinter/ingest/status.py +346 -0
- footprinter_cli-1.0.0/footprinter/mcp/__init__.py +0 -0
- footprinter_cli-1.0.0/footprinter/mcp/__main__.py +5 -0
- footprinter_cli-1.0.0/footprinter/mcp/db.py +57 -0
- footprinter_cli-1.0.0/footprinter/mcp/errors.py +102 -0
- footprinter_cli-1.0.0/footprinter/mcp/extraction.py +226 -0
- footprinter_cli-1.0.0/footprinter/mcp/server.py +39 -0
- footprinter_cli-1.0.0/footprinter/mcp/tools/__init__.py +0 -0
- footprinter_cli-1.0.0/footprinter/mcp/tools/navigation.py +70 -0
- footprinter_cli-1.0.0/footprinter/mcp/tools/read.py +75 -0
- footprinter_cli-1.0.0/footprinter/mcp/tools/search.py +158 -0
- footprinter_cli-1.0.0/footprinter/mcp/tools/semantic.py +79 -0
- footprinter_cli-1.0.0/footprinter/mcp/tools/status.py +15 -0
- footprinter_cli-1.0.0/footprinter/paths.py +91 -0
- footprinter_cli-1.0.0/footprinter/permissions.py +1160 -0
- footprinter_cli-1.0.0/footprinter/semantic/__init__.py +13 -0
- footprinter_cli-1.0.0/footprinter/semantic/chunking.py +52 -0
- footprinter_cli-1.0.0/footprinter/semantic/embeddings.py +23 -0
- footprinter_cli-1.0.0/footprinter/semantic/hybrid_search.py +273 -0
- footprinter_cli-1.0.0/footprinter/semantic/vector_store.py +471 -0
- footprinter_cli-1.0.0/footprinter/services/__init__.py +49 -0
- footprinter_cli-1.0.0/footprinter/services/access_service.py +342 -0
- footprinter_cli-1.0.0/footprinter/services/chat_service.py +85 -0
- footprinter_cli-1.0.0/footprinter/services/client_service.py +267 -0
- footprinter_cli-1.0.0/footprinter/services/content_service.py +181 -0
- footprinter_cli-1.0.0/footprinter/services/email_service.py +89 -0
- footprinter_cli-1.0.0/footprinter/services/file_service.py +83 -0
- footprinter_cli-1.0.0/footprinter/services/folder_service.py +122 -0
- footprinter_cli-1.0.0/footprinter/services/includes.py +19 -0
- footprinter_cli-1.0.0/footprinter/services/ingest_service.py +231 -0
- footprinter_cli-1.0.0/footprinter/services/project_service.py +262 -0
- footprinter_cli-1.0.0/footprinter/services/roles.py +25 -0
- footprinter_cli-1.0.0/footprinter/services/search_service.py +177 -0
- footprinter_cli-1.0.0/footprinter/services/semantic_service.py +360 -0
- footprinter_cli-1.0.0/footprinter/services/status_service.py +18 -0
- footprinter_cli-1.0.0/footprinter/services/visit_service.py +65 -0
- footprinter_cli-1.0.0/footprinter/source_registry.py +194 -0
- footprinter_cli-1.0.0/footprinter/utils/__init__.py +7 -0
- footprinter_cli-1.0.0/footprinter/utils/hash_utils.py +59 -0
- footprinter_cli-1.0.0/footprinter/utils/logging_config.py +68 -0
- footprinter_cli-1.0.0/footprinter/utils/mime.py +30 -0
- footprinter_cli-1.0.0/footprinter/utils/text.py +6 -0
- footprinter_cli-1.0.0/footprinter/utils/time.py +11 -0
- footprinter_cli-1.0.0/footprinter/visibility.py +1272 -0
- footprinter_cli-1.0.0/footprinter_cli.egg-info/PKG-INFO +229 -0
- footprinter_cli-1.0.0/footprinter_cli.egg-info/SOURCES.txt +158 -0
- footprinter_cli-1.0.0/footprinter_cli.egg-info/dependency_links.txt +1 -0
- footprinter_cli-1.0.0/footprinter_cli.egg-info/entry_points.txt +2 -0
- footprinter_cli-1.0.0/footprinter_cli.egg-info/requires.txt +26 -0
- footprinter_cli-1.0.0/footprinter_cli.egg-info/top_level.txt +1 -0
- footprinter_cli-1.0.0/pyproject.toml +95 -0
- footprinter_cli-1.0.0/setup.cfg +4 -0
- footprinter_cli-1.0.0/tests/test_access_control_bypasses.py +197 -0
- footprinter_cli-1.0.0/tests/test_access_control_docs.py +66 -0
- footprinter_cli-1.0.0/tests/test_access_recalculate.py +927 -0
- footprinter_cli-1.0.0/tests/test_build_status_filter.py +178 -0
- footprinter_cli-1.0.0/tests/test_bundled.py +108 -0
- footprinter_cli-1.0.0/tests/test_e2e_install.py +650 -0
- footprinter_cli-1.0.0/tests/test_e2e_pipeline.py +203 -0
- footprinter_cli-1.0.0/tests/test_edit_recalculate.py +150 -0
- footprinter_cli-1.0.0/tests/test_examples.py +84 -0
- footprinter_cli-1.0.0/tests/test_files_rename.py +136 -0
- footprinter_cli-1.0.0/tests/test_files_surface.py +91 -0
- footprinter_cli-1.0.0/tests/test_inherit_resolution.py +155 -0
- footprinter_cli-1.0.0/tests/test_logging.py +183 -0
- footprinter_cli-1.0.0/tests/test_no_project_root.py +93 -0
- footprinter_cli-1.0.0/tests/test_package_init.py +39 -0
- footprinter_cli-1.0.0/tests/test_paths_no_test_marker.py +59 -0
- footprinter_cli-1.0.0/tests/test_pip_install_e2e.py +118 -0
- footprinter_cli-1.0.0/tests/test_prompt_safety.py +309 -0
- footprinter_cli-1.0.0/tests/test_resolver.py +334 -0
- footprinter_cli-1.0.0/tests/test_security_layer.py +1869 -0
- 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
|
+
[](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
|
+
[](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).
|