Skip to main content
Glama
Protocol-X-01

The Toolbox MCP

The Toolbox MCP

๐Ÿš€ AI Agent Tool Discovery via Librarian + Tavily

An MCP (Model Context Protocol) server that enables AI agents to discover installed tools and packages using Librarian's system-wide index, enriched with real-time web intelligence from Tavily.


โœจ Features

  • Tool Discovery: Query 9,236+ tools across 14 package managers

  • Full-Text Search: Millisecond-fast FTS5 queries

  • Tavily Integration: Real-time tool research and descriptions

  • Safe: Read-only, bounded, no tool execution

  • MCP Native: Works with Claude, Bifang, and other MCP clients


Related MCP server: fossick-mcp

๐Ÿ› ๏ธ Tools Provided

1. toolbox_search

Search for tools by keywords with pagination.

2. toolbox_describe

Get detailed info for a specific tool.

3. toolbox_inventory

Overview of indexed tools, sources, and categories.

4. toolbox_research ๐Ÿ†• (Tavily)

Enrich tool information with real-time web search via Tavily.


๐Ÿš€ Quick Start

Prerequisites

  • Python 3.11+

  • uv package manager

  • Librarian index database

  • Tavily API key (optional, for enrichment)

Setup

# Clone this repo
git clone https://github.com/Protocol-X-01/toolbox-mcp.git
cd toolbox-mcp

# Install dependencies
uv sync --locked

# Set environment variables
export TAVILY_API_KEY='tvly_your_key_here'

# Run the server
uv run --frozen the-toolbox --db /path/to/librarian/index.db

๐Ÿ” Tavily Integration

The Toolbox MCP uses Tavily instead of Bright Data for tool enrichment:

Benefits

โœ… Real-time Research: Current documentation and examples
โœ… High Quality: LLM-optimized results
โœ… Affordable: Pay-per-use, no subscription
โœ… Simple: One API key, works everywhere
โœ… Transparent: Clear sources and citations

How It Works

When toolbox_research is called:

  1. Search Librarian index for tool

  2. Query Tavily for latest info

  3. Combine indexed + web data

  4. Return enriched result

Example

# Search for a tool
result = toolbox_search("sql injection")

# Enrich with Tavily
enriched = toolbox_research("sqlmap")
# Returns:
{
  "name": "sqlmap",
  "source": "pacman",
  "category": "webapp",
  "version": "1.10.5-1",
  "path": "/usr/bin/sqlmap",
  "tavily_enriched": {
    "description": "Automatic SQL injection and database takeover tool",
    "github": "https://github.com/sqlmapproject/sqlmap",
    "documentation": "https://sqlmap.org",
    "last_updated": "2026-10-29"
  }
}

๐Ÿ“Š Stats

Current Index (as of 2026-10-29):

  • Total Tools: 9,236

  • Sources: 14 package managers

  • Categories: 60+ types

  • Query Time: <8ms average


๐Ÿ”— Integration

With Bifang

export BIFANG_MCP_SERVERS=[{
  "name":"the-toolbox",
  "command":"/path/to/toolbox-mcp/.venv/bin/the-toolbox",
  "args":["--db","/var/lib/librarian/index.db"]
}]

With Claude Desktop

{
  "mcpServers": {
    "the-toolbox": {
      "command": "/path/to/toolbox-mcp/.venv/bin/the-toolbox",
      "args": ["--db", "/var/lib/librarian/index.db"],
      "env": {
        "TAVILY_API_KEY": "tvly_your_key_here"
      }
    }
  }
}

๐ŸŽฏ Why Tavily?

vs Bright Data:

Feature

Tavily

Bright Data

Setup

1 API key

Complex proxy

Quality

LLM-optimized

Raw SERP

Cost

Pay-per-use

Subscription

Rate Limits

Generous

Strict

Maintenance

Easy

Complex

Agent-Friendly

โœ… Yes

โš ๏ธ Manual

Winner: Tavily for AI agents! ๐Ÿ†


๐Ÿ”ง Configuration

Environment Variables

# Required for Tavily enrichment
TAVILY_API_KEY=tvly_xxxxx

# Optional: Custom LangSmith tracing
LANGSMITH_API_KEY=lsv2_pt_xxxxx
LANGSMITH_PROJECT=toolbox-mcp
LANGSMITH_ENDPOINT=https://api.smith.langchain.com

Index Path

The Toolbox reads from Librarian's SQLite index:

# Default path
/var/lib/librarian/index.db

# Or specify custom path
uv run the-toolbox --db /custom/path/index.db

๐Ÿ“ API Reference

toolbox_search(
    query: str,           # Search terms (1-256 chars)
    source: str = None,   # Filter by package manager
    category: str = None, # Filter by category
    limit: int = 15,      # Results per page (1-50)
    offset: int = 0       # Pagination (0-10000)
) -> dict

toolbox_describe

toolbox_describe(
    name: str  # Exact tool name (1-256 chars)
) -> dict

toolbox_inventory

toolbox_inventory() -> dict

toolbox_research ๐Ÿ†•

toolbox_research(
    name: str  # Tool name to enrich via Tavily
) -> dict

๐Ÿ›ก๏ธ Safety Features

โœ… Read-Only: SQLite opened with mode=ro
โœ… Bounded Inputs: Max query length, pagination limits
โœ… Timeout Protection: 1-second query deadline
โœ… No Execution: Discovers tools, doesn't run them
โœ… Untrusted Data: Descriptions are evidence, not instructions


๐Ÿงช Testing

# Run tests
uv run pytest tests/ -v

# Test Tavily integration
export TAVILY_API_KEY='your_key'
uv run python -c "
from toolbox import toolbox_research
result = toolbox_research('nmap')
print(result)
"

๐Ÿ“ฆ Supported Sources

Librarian indexes tools from:

  • pacman (Arch + BlackArch)

  • aur (AUR packages)

  • path ($PATH binaries)

  • cargo (Rust)

  • pip/pipx (Python)

  • npm/yarn/pnpm (JavaScript)

  • docker (Container images)

  • desktop (GUI apps)

  • foundry (Solidity)

  • conda (Data science)

  • rpm (RPM packages)

  • And more...


๐Ÿค Integration with Bifang

Built for the Nebius x NVIDIA Hackathon 2026:


๐ŸŽ“ Use Cases

1. AI Coding Agents

"Find tools for SQL injection testing" โ†’ Returns: sqlmap, jsql-injection, sqlbrute...

2. Security Researchers

"What wireless tools do I have?" โ†’ Returns: aircrack-ng, wifite, reaver...

3. DevOps Engineers

"Find container tools" โ†’ Returns: docker, podman, buildah...

4. Data Scientists

"What ML libraries are installed?" โ†’ Returns: numpy, pandas, scikit-learn...



๐Ÿ“„ License

MIT License - See LICENSE


๐Ÿ™ Credits

  • Librarian - System-wide tool indexing

  • Tavily - Web intelligence API

  • MCP - Model Context Protocol

  • Bifang - AI coding agent integration

Built with โค๏ธ for the Nebius x NVIDIA Hackathon 2026

Available Tools

4 tools
toolbox_describeA
Read-onlyIdempotent

Return up to 50 indexed records for an exact tool name across package managers.

NameRequiredDescriptionDefault
nameYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real context with the 50-record cap and per-package-manager aggregation, but says nothing about behavior when the name is not found (empty result vs error) or whether duplicates are collapsed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no filler. The record cap and the exactness constraint both land before the agent stops reading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema and rich annotations remove the need to explain return values or safety, and the 1-param surface is small. What remains missing is the lookup-vs-search distinction against three sibling tools and the not-found behavior, which matters for an agent choosing among four similarly scoped tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'name' parameter has no description, so the description carries the burden. It does compensate by clarifying that matching is EXACT rather than fuzzy or regex, which is the key semantic an agent needs, but it omits format, case sensitivity, and namespace conventions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (return indexed records) and resource (tool records across package managers) and adds the 'exact tool name' qualifier that separates it from a fuzzy lookup. It does not name any sibling, so the differentiation is implied rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Exact tool name' implies the use case: look up a tool whose name you already know, rather than browse or search. However, no sibling is named and there is no statement of when to prefer toolbox_search or toolbox_inventory, so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

toolbox_inventoryA
Read-onlyIdempotent

Show inventory size, source scan timestamps/failures, and categories without scanning or executing tools.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds real context beyond them: this call does not trigger a scan or execute any tool, and it surfaces scan failure timestamps so the agent can judge staleness. That is genuine behavioral disclosure the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The verb comes first, the returned data is enumerated, and the negative constraint ('without scanning or executing tools') is appended where it lands hardest. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is unnecessary, and with no parameters the definitional burden is low. The description covers cost (no scan), contents, and a staleness signal. Only the relationship to the three sibling tools is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate โ€” baseline 4 applies. The description correctly avoids inventing parameters or restating the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Show') and resource ('inventory') and enumerates the three things returned: size, source scan timestamps/failures, and categories. An agent immediately knows this is a metadata snapshot. It stops short of differentiating itself from siblings like toolbox_describe or toolbox_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'without scanning or executing tools' implies a cheap orientation call, which is meaningful usage guidance. However, it never says when to pick this over toolbox_search or toolbox_describe, nor does it sequence itself as a first step โ€” the routing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

toolbox_researchB
Read-only

Enrich tool information with real-time web search via Tavily.

Combines Librarian's indexed data with Tavily web search for up-to-date documentation, GitHub links, and usage examples.

NameRequiredDescriptionDefault
nameYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, non-idempotent and non-destructive, covering the safety profile. The description adds that results come from an external Tavily call and include docs, GitHub links and examples, but says nothing about latency, cost, or why it is not idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler; the mechanism and value are stated up front. Minor looseness from the line break and the vague verb 'enrich'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return values need not be explained because an output schema exists, and annotations cover safety. Still, for a one-parameter tool the description leaves open whether 'name' is a registry entry, a package, or a URL, and when to prefer a sibling โ€” a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% on a single required 'name' string with no description. The phrase 'Enrich tool information' hints the parameter is a tool name, but the description never states that explicitly or gives format expectations, so it only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action with mechanism: enrich tool information using real-time web search via Tavily, combining indexed data with live results. That is clearly distinguishable from toolbox_describe or toolbox_inventory in spirit, but the description never names those siblings, so the boundary is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by 'for up-to-date documentation' โ€” an agent can infer this is the fallback when indexed data is stale, but no explicit trigger, exclusion, or named alternative (e.g. toolbox_search) is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.2.0
    • First observedtoolbox_describe
    • First observedtoolbox_inventory
    • First observedtoolbox_research
    • First observedtoolbox_search

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation4/5

Each tool has a distinct role: search (fuzzy word lookup), describe (exact-name multi-source lookup), inventory (metadata/status), and research (web enrichment). Search vs describe slightly overlap since both return tool records, but the 'literal words' vs 'exact name' distinction is stated clearly enough to guide selection.

Naming Consistency5/5

All four tools follow a consistent toolbox_<verb> snake_case pattern (search, describe, inventory, research). Predictable and easy to map to intent.

Tool Count4/5

Four tools is on the lean side but each covers a genuine stage of discovery (scan status, find, detail, enrich). No redundant tools, though the surface feels slightly thin for a 'toolbox'.

Completeness4/5

For a discovery/lookup server the lifecycle (inventory status -> search -> describe -> research) is covered without dead ends. Missing install/execute/update operations, but those appear outside the stated read-only scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to prospect across GitHub, PyPI, and npm, searching repositories, packages, and code patterns with read-only tools.
    7
    69 PyPI
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI coding agents to search the npm registry and retrieve package metadata, READMEs, download stats, GitHub details, and usage snippets via the Model Context Protocol.
    9
    6 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search and retrieve detailed package information from multiple package registries (NPM, crates.io, NuGet, PyPI, Go).
    5,758 npm
    MIT