tool-compass 2.0.2__tar.gz → 2.0.4__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 (43) hide show
  1. tool_compass-2.0.4/.github/workflows/docker.yml +46 -0
  2. {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/workflows/test.yml +39 -2
  3. {tool_compass-2.0.2 → tool_compass-2.0.4}/CHANGELOG.md +50 -5
  4. {tool_compass-2.0.2 → tool_compass-2.0.4}/CONTRIBUTING.md +4 -4
  5. {tool_compass-2.0.2 → tool_compass-2.0.4}/Dockerfile +3 -2
  6. {tool_compass-2.0.2 → tool_compass-2.0.4}/PKG-INFO +22 -15
  7. {tool_compass-2.0.2 → tool_compass-2.0.4}/README.md +277 -270
  8. {tool_compass-2.0.2 → tool_compass-2.0.4}/SECURITY.md +2 -2
  9. tool_compass-2.0.4/_version.py +40 -0
  10. {tool_compass-2.0.2 → tool_compass-2.0.4}/analytics.py +4 -3
  11. tool_compass-2.0.2/backend_client.py → tool_compass-2.0.4/backend_client_mcp.py +8 -2
  12. {tool_compass-2.0.2 → tool_compass-2.0.4}/backend_client_simple.py +7 -2
  13. {tool_compass-2.0.2 → tool_compass-2.0.4}/docs/assets/social-preview.svg +6 -1
  14. tool_compass-2.0.4/docs/assets/tool-compass-logo-dark-bg.jpg +0 -0
  15. {tool_compass-2.0.2 → tool_compass-2.0.4}/embedder.py +19 -15
  16. {tool_compass-2.0.2 → tool_compass-2.0.4}/gateway.py +35 -26
  17. {tool_compass-2.0.2 → tool_compass-2.0.4}/llms.txt +3 -3
  18. tool_compass-2.0.4/logo.png +0 -0
  19. {tool_compass-2.0.2 → tool_compass-2.0.4}/pyproject.toml +128 -128
  20. tool_compass-2.0.4/scripts/check-org-urls.sh +44 -0
  21. {tool_compass-2.0.2 → tool_compass-2.0.4}/sync_manager.py +2 -5
  22. {tool_compass-2.0.2 → tool_compass-2.0.4}/ui.py +44 -25
  23. {tool_compass-2.0.2 → tool_compass-2.0.4}/.dockerignore +0 -0
  24. {tool_compass-2.0.2 → tool_compass-2.0.4}/.env.example +0 -0
  25. {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  26. {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  27. {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/dependabot.yml +0 -0
  28. {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/workflows/publish.yml +0 -0
  29. {tool_compass-2.0.2 → tool_compass-2.0.4}/.gitignore +0 -0
  30. {tool_compass-2.0.2 → tool_compass-2.0.4}/AUDIT_REPORT.md +0 -0
  31. {tool_compass-2.0.2 → tool_compass-2.0.4}/CODE_OF_CONDUCT.md +0 -0
  32. {tool_compass-2.0.2 → tool_compass-2.0.4}/LICENSE +0 -0
  33. {tool_compass-2.0.2 → tool_compass-2.0.4}/chain_indexer.py +0 -0
  34. {tool_compass-2.0.2 → tool_compass-2.0.4}/compass_config.example.json +0 -0
  35. {tool_compass-2.0.2 → tool_compass-2.0.4}/config.py +0 -0
  36. {tool_compass-2.0.2 → tool_compass-2.0.4}/docker-compose.yml +0 -0
  37. {tool_compass-2.0.2 → tool_compass-2.0.4}/docs/assets/social-preview.png +0 -0
  38. {tool_compass-2.0.2 → tool_compass-2.0.4}/indexer.py +0 -0
  39. {tool_compass-2.0.2 → tool_compass-2.0.4}/pytest.ini +0 -0
  40. {tool_compass-2.0.2 → tool_compass-2.0.4}/requirements-dev.txt +0 -0
  41. {tool_compass-2.0.2 → tool_compass-2.0.4}/requirements.txt +0 -0
  42. {tool_compass-2.0.2 → tool_compass-2.0.4}/setup.py +0 -0
  43. {tool_compass-2.0.2 → tool_compass-2.0.4}/tool_manifest.py +0 -0
@@ -0,0 +1,46 @@
1
+ name: Publish to GHCR
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+
8
+ env:
9
+ REGISTRY: ghcr.io
10
+ IMAGE_NAME: ${{ github.repository }}
11
+
12
+ jobs:
13
+ build-and-push:
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ contents: read
17
+ packages: write
18
+
19
+ steps:
20
+ - uses: actions/checkout@v6
21
+
22
+ - name: Log in to GHCR
23
+ uses: docker/login-action@v3
24
+ with:
25
+ registry: ${{ env.REGISTRY }}
26
+ username: ${{ github.actor }}
27
+ password: ${{ secrets.GITHUB_TOKEN }}
28
+
29
+ - name: Extract metadata
30
+ id: meta
31
+ uses: docker/metadata-action@v5
32
+ with:
33
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
34
+ tags: |
35
+ type=semver,pattern={{version}}
36
+ type=semver,pattern={{major}}.{{minor}}
37
+ type=sha
38
+ type=raw,value=latest,enable={{is_default_branch}}
39
+
40
+ - name: Build and push
41
+ uses: docker/build-push-action@v6
42
+ with:
43
+ context: .
44
+ push: true
45
+ tags: ${{ steps.meta.outputs.tags }}
46
+ labels: ${{ steps.meta.outputs.labels }}
@@ -1,15 +1,46 @@
1
1
  # Tool Compass CI Pipeline
2
- # Runs tests on every push and PR
2
+ # Runs tests on pushes and PRs that touch code or config
3
3
 
4
4
  name: Tests
5
5
 
6
6
  on:
7
7
  push:
8
8
  branches: [main, develop]
9
+ paths:
10
+ - '*.py'
11
+ - 'tests/**'
12
+ - 'scripts/**'
13
+ - 'requirements*.txt'
14
+ - 'pyproject.toml'
15
+ - 'Dockerfile'
16
+ - '.github/workflows/**'
9
17
  pull_request:
10
18
  branches: [main]
19
+ paths:
20
+ - '*.py'
21
+ - 'tests/**'
22
+ - 'scripts/**'
23
+ - 'requirements*.txt'
24
+ - 'pyproject.toml'
25
+ - 'Dockerfile'
26
+ - '.github/workflows/**'
27
+ workflow_dispatch:
28
+
29
+ concurrency:
30
+ group: ${{ github.workflow }}-${{ github.ref }}
31
+ cancel-in-progress: true
11
32
 
12
33
  jobs:
34
+ lint:
35
+ name: Org URL sanity check
36
+ runs-on: ubuntu-latest
37
+ steps:
38
+ - name: Checkout repository
39
+ uses: actions/checkout@v6
40
+
41
+ - name: Check for stale org/user URLs
42
+ run: bash scripts/check-org-urls.sh
43
+
13
44
  test:
14
45
  name: Python ${{ matrix.python-version }} on ${{ matrix.os }}
15
46
  runs-on: ${{ matrix.os }}
@@ -18,7 +49,7 @@ jobs:
18
49
  fail-fast: false
19
50
  matrix:
20
51
  os: [ubuntu-latest, windows-latest, macos-latest]
21
- python-version: ['3.10', '3.11', '3.12']
52
+ python-version: ['3.10', '3.11', '3.12', '3.13']
22
53
 
23
54
  steps:
24
55
  - name: Checkout repository
@@ -53,6 +84,12 @@ jobs:
53
84
  file: coverage.xml
54
85
  fail_ci_if_error: false
55
86
 
87
+ - name: Audit dependencies for vulnerabilities
88
+ if: matrix.python-version == '3.11' && matrix.os == 'ubuntu-latest'
89
+ run: |
90
+ pip-audit -r requirements.txt
91
+ continue-on-error: true # Warn-only until clean baseline established
92
+
56
93
  # Integration tests (requires Ollama)
57
94
  integration:
58
95
  name: Integration Tests
@@ -7,6 +7,47 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.3] - 2026-02-14
11
+
12
+ ### Fixed
13
+ - `categorize_tool()` now falls back to description matching when name has no category keywords
14
+ - `analytics.last_success_at` stores real timestamps instead of the literal string "CURRENT_TIMESTAMP"
15
+ - `SyncEmbedder` no longer crashes when called from inside a running event loop (Gradio, FastMCP)
16
+ - UI `run_async` helper replaced with deterministic loop detection (no more `RuntimeError` roulette)
17
+ - Removed discarded `sequence_hash` read in chain detection
18
+
19
+ ### Changed
20
+ - Private `_backends` dict access replaced with public `is_backend_connected()` API
21
+ - `backend_client.py` renamed to `backend_client_mcp.py` (experimental; not used at runtime)
22
+ - Version reporting unified via `_version.py` module (reads from `importlib.metadata` or `pyproject.toml`)
23
+ - UI singletons protected with `threading.Lock` (Gradio is multi-threaded)
24
+ - Runtime assumptions documented in `gateway.py`
25
+
26
+ ### Infrastructure
27
+ - Python 3.13 added to CI test matrix (3.10–3.13, 12 matrix jobs)
28
+ - `actions/checkout` normalized to v6 across all workflows
29
+ - `pip-audit` dependency vulnerability scan added (warn-only)
30
+ - `scripts/**` added to CI path triggers
31
+
32
+ ### Tests
33
+ - 23 new tests: `backend_client_simple.py` API, `run_async` loop safety, `SyncEmbedder` loop safety, `_version.py` (387 → 410 tests)
34
+
35
+ ## [2.0.2] - 2026-02-14
36
+
37
+ ### Fixed
38
+ - Windows subprocess stability with `SimpleBackendManager` (#11)
39
+ - Auto-fix lint issues with ruff (#13)
40
+
41
+ ### Changed
42
+ - Migrated all repository URLs to `mcp-tool-shop-org` GitHub organization
43
+ - Updated CI actions to latest major versions (checkout v6, setup-python v6, codecov v5)
44
+
45
+ ### Infrastructure
46
+ - Added GHCR Docker publish workflow
47
+ - Added `llms.txt` for LLM discoverability
48
+ - Added social preview assets
49
+ - Updated dependency version ranges (black, pytest, pytest-cov, isort, gradio)
50
+
10
51
  ## [2.0.1] - 2026-01-18
11
52
 
12
53
  ### Added
@@ -115,12 +156,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
115
156
 
116
157
  | Version | Date | Highlights |
117
158
  |---------|------|------------|
159
+ | 2.0.3 | 2026-02-14 | Bug fixes, async safety, CI hygiene, 410 tests |
160
+ | 2.0.2 | 2026-02-14 | Org migration, CI updates, Windows fix |
118
161
  | 2.0.0 | 2026-01-17 | Gradio UI, error handling, polish |
119
162
  | 1.1.0 | 2026-01-16 | Workflows, analytics, sync |
120
163
  | 1.0.0 | 2026-01-15 | Initial release |
121
164
 
122
- [Unreleased]: https://github.com/mcp-tool-shop/tool-compass/compare/v2.0.1...HEAD
123
- [2.0.1]: https://github.com/mcp-tool-shop/tool-compass/compare/v2.0.0...v2.0.1
124
- [2.0.0]: https://github.com/mcp-tool-shop/tool-compass/compare/v1.1.0...v2.0.0
125
- [1.1.0]: https://github.com/mcp-tool-shop/tool-compass/compare/v1.0.0...v1.1.0
126
- [1.0.0]: https://github.com/mcp-tool-shop/tool-compass/releases/tag/v1.0.0
165
+ [Unreleased]: https://github.com/mcp-tool-shop-org/tool-compass/compare/v2.0.3...HEAD
166
+ [2.0.3]: https://github.com/mcp-tool-shop-org/tool-compass/compare/v2.0.2...v2.0.3
167
+ [2.0.2]: https://github.com/mcp-tool-shop-org/tool-compass/compare/v2.0.1...v2.0.2
168
+ [2.0.1]: https://github.com/mcp-tool-shop-org/tool-compass/compare/v2.0.0...v2.0.1
169
+ [2.0.0]: https://github.com/mcp-tool-shop-org/tool-compass/compare/v1.1.0...v2.0.0
170
+ [1.1.0]: https://github.com/mcp-tool-shop-org/tool-compass/compare/v1.0.0...v1.1.0
171
+ [1.0.0]: https://github.com/mcp-tool-shop-org/tool-compass/releases/tag/v1.0.0
@@ -29,7 +29,7 @@ This project follows the [Contributor Covenant](https://www.contributor-covenant
29
29
 
30
30
  ```bash
31
31
  # Clone the repository
32
- git clone https://github.com/mikeyfrilot/tool-compass.git
32
+ git clone https://github.com/mcp-tool-shop-org/tool-compass.git
33
33
  cd tool-compass/tool_compass
34
34
 
35
35
  # Create virtual environment
@@ -302,9 +302,9 @@ async def get_instance() -> MyClass:
302
302
 
303
303
  ## Need Help?
304
304
 
305
- - **Questions**: Open a [Discussion](https://github.com/mikeyfrilot/tool-compass/discussions)
306
- - **Bugs**: Open an [Issue](https://github.com/mikeyfrilot/tool-compass/issues)
307
- - **Security**: Use [GitHub Security Advisories](https://github.com/mikeyfrilot/tool-compass/security/advisories/new) (do not open public issues)
305
+ - **Questions**: Open a [Discussion](https://github.com/mcp-tool-shop-org/tool-compass/discussions)
306
+ - **Bugs**: Open an [Issue](https://github.com/mcp-tool-shop-org/tool-compass/issues)
307
+ - **Security**: Use [GitHub Security Advisories](https://github.com/mcp-tool-shop-org/tool-compass/security/advisories/new) (do not open public issues)
308
308
 
309
309
  ---
310
310
 
@@ -27,9 +27,10 @@ RUN pip install --no-cache-dir --upgrade pip && \
27
27
  # =============================================================================
28
28
  FROM python:3.11-slim as production
29
29
 
30
- LABEL maintainer="Tool Compass <github.com/your-org/tool-compass>"
30
+ LABEL maintainer="Tool Compass <github.com/mcp-tool-shop-org/tool-compass>"
31
31
  LABEL description="Semantic search gateway for MCP tools"
32
- LABEL version="2.0"
32
+ # Keep in sync with pyproject.toml [project] version
33
+ LABEL version="2.0.3"
33
34
 
34
35
  # Security: Run as non-root user
35
36
  RUN groupadd -r compass && useradd -r -g compass compass
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tool-compass
3
- Version: 2.0.2
3
+ Version: 2.0.4
4
4
  Summary: Semantic MCP tool discovery gateway - find tools by intent, not memory
5
5
  Project-URL: Homepage, https://github.com/mcp-tool-shop-org/tool-compass
6
6
  Project-URL: Documentation, https://github.com/mcp-tool-shop-org/tool-compass#readme
7
7
  Project-URL: Repository, https://github.com/mcp-tool-shop-org/tool-compass.git
8
8
  Project-URL: Issues, https://github.com/mcp-tool-shop-org/tool-compass/issues
9
9
  Project-URL: Changelog, https://github.com/mcp-tool-shop-org/tool-compass/blob/main/CHANGELOG.md
10
- Author: Mikey Frilot
10
+ Author-email: mcp-tool-shop <64996768+mcp-tool-shop@users.noreply.github.com>
11
11
  License-Expression: MIT
12
12
  License-File: LICENSE
13
13
  Keywords: ai,anthropic,claude,hnsw,llm,mcp,model-context-protocol,semantic-search,tool-discovery,vector-search
@@ -44,16 +44,17 @@ Description-Content-Type: text/markdown
44
44
 
45
45
  <div align="center">
46
46
 
47
+ <img src="logo.png" alt="Tool Compass Logo" width="200">
48
+
47
49
  # Tool Compass
48
50
 
49
51
  **Semantic navigator for MCP tools - Find the right tool by intent, not memory**
50
52
 
51
- [![Tests](https://github.com/mcp-tool-shop-org/tool-compass/actions/workflows/test.yml/badge.svg)](https://github.com/mcp-tool-shop-org/tool-compass/actions/workflows/test.yml)
52
- [![codecov](https://codecov.io/gh/mcp-tool-shop-org/tool-compass/graph/badge.svg)](https://codecov.io/gh/mcp-tool-shop-org/tool-compass)
53
- [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg?logo=python&logoColor=white)](https://www.python.org/downloads/)
54
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
55
- [![Docker](https://img.shields.io/badge/docker-ready-blue.svg?logo=docker&logoColor=white)](https://www.docker.com/)
56
- [![GitHub stars](https://img.shields.io/github/stars/mcp-tool-shop-org/tool-compass?style=social)](https://github.com/mcp-tool-shop-org/tool-compass)
53
+ <a href="https://github.com/mcp-tool-shop-org/tool-compass/actions/workflows/test.yml"><img src="https://img.shields.io/github/actions/workflow/status/mcp-tool-shop-org/tool-compass/test.yml?branch=main&style=flat-square&label=CI" alt="CI"></a>
54
+ <a href="https://codecov.io/gh/mcp-tool-shop-org/tool-compass"><img src="https://img.shields.io/codecov/c/github/mcp-tool-shop-org/tool-compass?style=flat-square" alt="Codecov"></a>
55
+ <img src="https://img.shields.io/badge/python-3.10%2B-blue?style=flat-square&logo=python&logoColor=white" alt="Python 3.10+">
56
+ <a href="LICENSE"><img src="https://img.shields.io/github/license/mcp-tool-shop-org/tool-compass?style=flat-square" alt="License"></a>
57
+ <img src="https://img.shields.io/badge/docker-ready-blue?style=flat-square&logo=docker&logoColor=white" alt="Docker">
57
58
 
58
59
  *95% fewer tokens. Find tools by describing what you want to do.*
59
60
 
@@ -95,7 +96,7 @@ Tool Compass uses **semantic search** to find relevant tools from a natural lang
95
96
  ollama pull nomic-embed-text
96
97
 
97
98
  # Clone and setup
98
- git clone https://github.com/mikeyfrilot/tool-compass.git
99
+ git clone https://github.com/mcp-tool-shop-org/tool-compass.git
99
100
  cd tool-compass/tool_compass
100
101
 
101
102
  # Create virtual environment
@@ -119,7 +120,7 @@ python ui.py
119
120
 
120
121
  ```bash
121
122
  # Clone the repo
122
- git clone https://github.com/mikeyfrilot/tool-compass.git
123
+ git clone https://github.com/mcp-tool-shop-org/tool-compass.git
123
124
  cd tool-compass/tool_compass
124
125
 
125
126
  # Start with Docker Compose (requires Ollama running locally)
@@ -277,10 +278,10 @@ python gateway.py --sync
277
278
 
278
279
  Part of the **Compass Suite** for AI-powered development:
279
280
 
280
- - [File Compass](https://github.com/mikeyfrilot/file-compass) - Semantic file search
281
- - [Integradio](https://github.com/mikeyfrilot/integradio) - Vector-embedded Gradio components
282
- - [Backpropagate](https://github.com/mikeyfrilot/backpropagate) - Headless LLM fine-tuning
283
- - [Comfy Headless](https://github.com/mikeyfrilot/comfy-headless) - ComfyUI without the complexity
281
+ - [File Compass](https://github.com/mcp-tool-shop-org/file-compass) - Semantic file search
282
+ - [Integradio](https://github.com/mcp-tool-shop-org/integradio) - Vector-embedded Gradio components
283
+ - [Backpropagate](https://github.com/mcp-tool-shop-org/backpropagate) - Headless LLM fine-tuning
284
+ - [Comfy Headless](https://github.com/mcp-tool-shop-org/comfy-headless) - ComfyUI without the complexity
284
285
 
285
286
  ## Contributing
286
287
 
@@ -290,6 +291,12 @@ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
290
291
 
291
292
  For security vulnerabilities, please see [SECURITY.md](SECURITY.md). **Do not open public issues for security bugs.**
292
293
 
294
+ ## Support
295
+
296
+ - **Questions / help:** [Discussions](https://github.com/mcp-tool-shop-org/tool-compass/discussions)
297
+ - **Bug reports:** [Issues](https://github.com/mcp-tool-shop-org/tool-compass/issues)
298
+ - **Security:** [SECURITY.md](SECURITY.md)
299
+
293
300
  ## License
294
301
 
295
302
  [MIT](LICENSE) - see LICENSE file for details.
@@ -309,6 +316,6 @@ For security vulnerabilities, please see [SECURITY.md](SECURITY.md). **Do not op
309
316
 
310
317
  Tool Compass reduces entropy in the MCP ecosystem by organizing tools by semantic meaning.
311
318
 
312
- **[Documentation](https://github.com/mikeyfrilot/tool-compass#readme)** • **[Issues](https://github.com/mikeyfrilot/tool-compass/issues)** • **[Discussions](https://github.com/mikeyfrilot/tool-compass/discussions)**
319
+ **[Documentation](https://github.com/mcp-tool-shop-org/tool-compass#readme)** • **[Issues](https://github.com/mcp-tool-shop-org/tool-compass/issues)** • **[Discussions](https://github.com/mcp-tool-shop-org/tool-compass/discussions)**
313
320
 
314
321
  </div>