Local-first MCP discovery proxy for token-efficient tool search. Aggregates tools, prompts, and resources from upstream MCP sources into a searchable catalog with lexical FTS5 and optional vector embeddings.
lazy-tool provides 5 tools with complete input schemas and descriptions. Naming follows verb_noun convention (search_, inspect_, invoke_, get_, read_). Descriptions are substantive (100-200 chars), explaining WHAT each tool does and WHEN to use it. However, parameter descriptions lack actionable constraints (no enums, ranges, or format guidance). Output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is absent from visible code. Risk annotations (READ_ONLY, WRITE) are present but not mapped to tool annotations in the MCP schema. Tool composition is sound: search_tools discovers capabilities, inspect_capability provides details, and invoke/get/read execute them, but no guidance on error recovery or retry logic.
Fetch an upstream MCP prompt (prompts/get). Use proxy_tool_name from search_tools hits with kind=prompt.
Return catalog record, configured source, and last reindex health for one capability. Use the exact proxy_tool_name (canonical name) from search_tools.
Call an upstream MCP tool only (search_tools hit with kind=tool). For prompts use get_proxy_prompt; for concrete resources use read_proxy_resource.
Read an upstream MCP resource by URI (resources/read). Use search hits with kind=resource from resources/list; resource templates are not supported here.
Search the local MCP catalog: tools, prompts, and resources (lexical FTS5 + optional vector embeddings). Returns ranked hits with scoring breakdown, next-step hints, and Anthropic tool_use blocks.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination) for search_tools, inspect_capability, or invoke_proxy_tool. This breaks downstream tool chaining and forces agents to guess field names.
Parameter descriptions lack actionable constraints. 'query' is described as 'natural language query' but no guidance on length, format, or examples. 'limit' has no min/max bounds. 'source_ids' array has no item type or cardinality constraints. LLMs will pass unbounded or malformed values.
No error handling guidance. Tools lack descriptions of failure modes, recovery steps, or actionable error messages. If invoke_proxy_tool fails, the LLM has no guidance on whether to retry, call search_tools again, or escalate.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Risk annotations (READ_ONLY, WRITE) are metadata but not mapped to MCP tool annotations (readOnlyHint, destructiveHint). The protocol cannot distinguish safe from destructive tools without explicit schema hints.
invoke_proxy_tool accepts arbitrary 'input' object with no schema validation. LLMs can pass malformed arguments that upstream tools reject. No guidance on what fields upstream tools expect or how to structure the input.