Find tools by intent, not memory.
Semantic search for MCP tools. 95% fewer tokens, ~15ms latency, graceful Ollama-offline fallback, trace IDs you can paste into a bug report.
Install
ollama pull nomic-embed-text
pip install tool-compass
tool-compass sync
CLI
tool-compass search "generate an AI image"
tool-compass describe comfy:comfy_generate
tool-compass doctor
MCP tool
compass(
intent="generate an AI image",
top_k=3
)
Result
# comfy:comfy_generate 0.91
# tokens_saved: 20,500
# trace_id: 9f3a1c7b
Why Tool Compass
Stop loading all 77 tools into context. Find the right one — and keep finding it when things go sideways.
Semantic Discovery
compass(intent) finds tools by meaning. Describe what you want to do — get the right tool, not a list of all of them.
95% Token Savings
38,500 tokens → 2,000 per request. HNSW vector index, nomic-embed-text, ~15ms query latency, ~95% accuracy@3.
Progressive Disclosure
compass() → describe() → execute(). Load only the schema you need, only when you actually need it.
Graceful degradation
Ollama down? Compass falls back to keyword search over the same index, marks results degraded, and tells you exactly what to start.
Trace IDs in every response
Every MCP call gets an 8-char trace_id plumbed into logs, success envelopes, and error envelopes. Paste it into a bug report and grep the logs.
Production observability
/ready does a deep probe (index + Ollama + backends). /metrics emits Prometheus text with embed p95, orphan vectors, per-backend up/down.
What's new in v2.5
Remote HTTP backends, hybrid search, full-schema describe(), per-tool timeouts, allow/deny, and an execute CLI — a 12-feature pass, each closed by an adversarial cross-wave re-audit.
HTTP / remote backends
Front remote and SaaS MCP servers over streamable-http, not just local stdio subprocesses. Optional bearer-token auth on your own gateway endpoint.
Hybrid search + exact-name boost
Semantic (HNSW) and lexical signals fused with Reciprocal Rank Fusion on the healthy path — describe what you want, or paste a tool name and it ranks #1.
Full-schema describe()
The complete inputSchema (required fields, descriptions, enums, defaults) is preserved through sync, so an agent can build a correct execute() call in one hop.
Per-tool timeouts & allow/deny
Override the 15s default per backend or per tool for slow image/video backends; expose a safe subset of a broad backend with allow/deny globs.
execute CLI
tool-compass execute <tool> '<json>' runs a proxied tool call from the terminal — smoke-test a backend without wiring up an agent.
Ops hardening
Active liveness probe surfaces hung-but-connected backends; analytics retention keeps the local DB bounded; schema-aware change detection re-syncs revised tools.
Quick Start
Install & Index
# Prerequisites: Ollama running locally
ollama pull nomic-embed-text
# Install the CLI + gateway
pip install tool-compass
# Build the search index from your configured backends
tool-compass sync
# Start the MCP gateway (or `tool-compass serve`)
tool-compassOne-shot CLI
# Search by intent without starting a server
tool-compass search "generate an AI image" --top 3 --json
# Inspect a tool's schema
tool-compass describe comfy:comfy_generate
# Diagnostics dump — version, config, Ollama reachability
tool-compass doctorMCP tool call
compass(
intent="I need to generate an AI image from text",
top_k=3,
min_confidence=0.3
)
# Returns (excerpt):
# {
# "matches": [{
# "tool": "comfy:comfy_generate",
# "confidence": 0.912
# }],
# "tokens_saved": 20500,
# "trace_id": "9f3a1c7b"
# }Graceful Ollama-down
# Ollama stopped mid-session? compass still answers:
compass(intent="read a file")
# Returns:
# {
# "matches": [{
# "tool": "bridge:read_file",
# "degraded": true
# }],
# "warnings": [
# "Semantic search unavailable: Ollama at
# http://localhost:11434 is unreachable.
# Try: ollama serve"
# ]
# }Gateway Tools
Nine MCP tools — one semantic entry point for your entire MCP ecosystem.
| Tool | Description |
|---|---|
| compass(intent) | Hybrid semantic + lexical search with exact-name boost — describe your intent, or paste a tool name |
| describe(tool) | Get the full inputSchema (required fields, descriptions, enums, defaults) before calling |
| execute(tool, args) | Run any indexed tool directly through the gateway |
| compass_categories() | List all tool categories and connected MCP servers |
| compass_status(active) | System health; active=True runs a live backend liveness probe |
| compass_analytics(timeframe) | Usage statistics, accuracy metrics, and performance data |
| compass_chains(action) | Discover and manage common multi-tool workflows |
| compass_sync(force) | Rebuild the HNSW search index from connected backends |
| compass_audit() | Full system diagnostic — index integrity, server health |
HTTP Endpoints
Start the gateway in HTTP mode with PORT=8000 tool-compass for operator-grade endpoints.
| Endpoint | Purpose |
|---|---|
| /health | Liveness probe — always 200 if the process is up. |
| /ready | Deep readiness probe; 503 with a JSON breakdown when a check fails. |
| /metrics | Prometheus text — search, backend, and embed latency metrics. |
| MCP JSON-RPC | Standard MCP streamable-http transport at the root. HOST defaults to 127.0.0.1; expose via a reverse proxy or set gateway_auth_token (TOOL_COMPASS_GATEWAY_AUTH_TOKEN) for built-in bearer-token auth. |