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.
- tool_compass-2.0.4/.github/workflows/docker.yml +46 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/workflows/test.yml +39 -2
- {tool_compass-2.0.2 → tool_compass-2.0.4}/CHANGELOG.md +50 -5
- {tool_compass-2.0.2 → tool_compass-2.0.4}/CONTRIBUTING.md +4 -4
- {tool_compass-2.0.2 → tool_compass-2.0.4}/Dockerfile +3 -2
- {tool_compass-2.0.2 → tool_compass-2.0.4}/PKG-INFO +22 -15
- {tool_compass-2.0.2 → tool_compass-2.0.4}/README.md +277 -270
- {tool_compass-2.0.2 → tool_compass-2.0.4}/SECURITY.md +2 -2
- tool_compass-2.0.4/_version.py +40 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/analytics.py +4 -3
- tool_compass-2.0.2/backend_client.py → tool_compass-2.0.4/backend_client_mcp.py +8 -2
- {tool_compass-2.0.2 → tool_compass-2.0.4}/backend_client_simple.py +7 -2
- {tool_compass-2.0.2 → tool_compass-2.0.4}/docs/assets/social-preview.svg +6 -1
- tool_compass-2.0.4/docs/assets/tool-compass-logo-dark-bg.jpg +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/embedder.py +19 -15
- {tool_compass-2.0.2 → tool_compass-2.0.4}/gateway.py +35 -26
- {tool_compass-2.0.2 → tool_compass-2.0.4}/llms.txt +3 -3
- tool_compass-2.0.4/logo.png +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/pyproject.toml +128 -128
- tool_compass-2.0.4/scripts/check-org-urls.sh +44 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/sync_manager.py +2 -5
- {tool_compass-2.0.2 → tool_compass-2.0.4}/ui.py +44 -25
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.dockerignore +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.env.example +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/dependabot.yml +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.github/workflows/publish.yml +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/.gitignore +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/AUDIT_REPORT.md +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/CODE_OF_CONDUCT.md +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/LICENSE +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/chain_indexer.py +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/compass_config.example.json +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/config.py +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/docker-compose.yml +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/docs/assets/social-preview.png +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/indexer.py +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/pytest.ini +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/requirements-dev.txt +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/requirements.txt +0 -0
- {tool_compass-2.0.2 → tool_compass-2.0.4}/setup.py +0 -0
- {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
|
|
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.
|
|
123
|
-
[2.0.
|
|
124
|
-
[2.0.
|
|
125
|
-
[
|
|
126
|
-
[
|
|
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/
|
|
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/
|
|
306
|
-
- **Bugs**: Open an [Issue](https://github.com/
|
|
307
|
-
- **Security**: Use [GitHub Security Advisories](https://github.com/
|
|
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/
|
|
30
|
+
LABEL maintainer="Tool Compass <github.com/mcp-tool-shop-org/tool-compass>"
|
|
31
31
|
LABEL description="Semantic search gateway for MCP tools"
|
|
32
|
-
|
|
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.
|
|
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:
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
[](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/
|
|
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/
|
|
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/
|
|
281
|
-
- [Integradio](https://github.com/
|
|
282
|
-
- [Backpropagate](https://github.com/
|
|
283
|
-
- [Comfy Headless](https://github.com/
|
|
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/
|
|
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>
|