Skip to main content
Glama
norrietaylor

io.github.norrietaylor/distillery-mcp

Official
by norrietaylor

distillery_search

Find knowledge entries by semantic similarity to a natural-language query, returning ranked results with relevance scores. Filter by type, author, tags, status, or dates; optionally expand via related-entry graph hops.

Instructions

Search knowledge entries using semantic similarity (cosine distance, ranked descending).

USE WHEN: finding entries that match a natural-language question or topic. Each result includes a similarity score (0-1, higher is more relevant).

By default, only entries with status in (active, pending_review) are considered — archived entries are hidden. Pass status="archived" to search only archived entries, status="any" to include every status, or include_archived=true to add archived entries to the default candidate set.

When expand_graph=true, after the semantic search returns its seed result set, the tool BFS-expands 1 or 2 hops via entry_relations to surface structurally connected entries. Graph entries are scored at parent_score * 0.5 ** depth, marked with provenance="graph", and merged into the result list (sorted by descending score, truncated to limit). Seeds are tagged provenance="search". The envelope gains a graph_expansion summary. When expand_graph=false (default), the existing envelope is unchanged — strictly additive.

PARAMS:

  • query (str, required): Natural-language search query.

  • entry_type (str | list[str], optional): Filter by type, or a list of types matched with OR (e.g. ["session", "reference"]).

  • author (str, optional): Filter by author.

  • project (str, optional): Filter by project scope.

  • tags (list[str], optional): Filter by tags (AND match).

  • status (str, optional): Filter by status.

  • source (str, optional): Filter by origin.

  • session_id (str, optional): Filter by session identifier.

  • date_from (str, optional): ISO 8601 lower bound.

  • date_to (str, optional): ISO 8601 upper bound.

  • limit (int, optional, default=10): Max results (1-200).

  • tag_prefix (str, optional): Filter tags by namespace prefix.

  • include_archived (bool, optional, default=False): Include archived entries in the candidate set.

  • published_after (str, optional): ISO 8601 inclusive lower bound on metadata.published_at (poller-recorded publication timestamp). Used by /radar to bound the candidate set by the configured digest window.

  • published_before (str, optional): ISO 8601 inclusive upper bound on metadata.published_at.

  • include_evergreen (bool, optional, default=False): When False (default) and published_after/published_before is set, also drops entries flagged metadata.backfill=true so first-poll backfill items don't surface as "new intelligence". Set to True to surface older / evergreen items explicitly. See issue #444.

  • expand_graph (bool, optional, default=False): When true, expand the seed result set via entry_relations and merge the neighbours into the results.

  • expand_hops (int, optional, default=1): Depth of graph expansion when expand_graph=true. Must be 1 or 2.

  • output_mode (str, optional, default="summary"): Response shape. Valid: [summary, full, ids]. "summary" returns score plus a compact entry (id/title/~200-char content_preview, no full body — default, keeps responses small to conserve context). "full" returns score plus the entire entry (pre-output_mode behaviour). "ids" returns score + id only.

RETURNS (success): { results: [{ score: float, ... }], count: int }. Result shape follows output_mode: "summary" (default) nests a compact entry (no full content); "full" nests the complete entry; "ids" returns score + id only. When expand_graph=true each result also has provenance ("search" or "graph"); graph results additionally carry depth and parent_id, and the envelope includes graph_expansion: { seed_count, expanded_count }. RETURNS (error): { error: true, code: "INVALID_PARAMS" | "BUDGET_EXCEEDED" | "INTERNAL", message: "..." }

RELATED: distillery_list (for filter-based browsing without semantic ranking), distillery_find_similar (to compare against arbitrary text)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tagsNo
limitNo
queryYes
authorNo
sourceNo
statusNo
date_toNo
projectNo
date_fromNo
entry_typeNo
session_idNo
tag_prefixNo
expand_hopsNo
output_modeNosummary
expand_graphNo
published_afterNo
include_archivedNo
published_beforeNo
include_evergreenNo
Behavior5/5

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

With no annotations provided, the description carries the full burden and meets it thoroughly. It discloses the default status candidate set, the graph expansion mechanism (BFS hops, scoring formula parent_score * 0.5 ** depth, provenance tagging, additive merging), the output_mode effects on result shape, and the exact error code list. Nothing about the tool's runtime behavior is omitted.

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?

The description is long, but it is extremely well-structured: a one-line purpose, then USE WHEN, then a clearly formatted PARAMS block, then RETURNS (success and error), then RELATED. It is front-loaded with the core semantics. Every section earns its place given the tool's complexity (19 params, graph expansion, multiple output modes); there is no redundancy or filler.

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

Completeness5/5

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

Given 19 parameters, no output schema, and no annotations, the description is fully self-sufficient. It explains every parameter, the exact return envelope shape for each output_mode, the graph_expansion summary fields, and the error contract. It also covers edge cases like archived status handling, published windows, and evergreen inclusion. There is nothing an agent would need to infer or look up elsewhere.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does comprehensively. Every single parameter is described with its purpose, defaults, and sometimes extra context (e.g., include_evergreen explains the backfill flag and references issue #444, published_after notes it is used by /radar). The PARAMS section adds meaning far beyond the schema's bare types and defaults.

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

Purpose5/5

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

The opening sentence states a precise verb (Search), a specific resource (knowledge entries), and the method (semantic similarity using cosine distance, ranked descending). It explicitly differentiates from related tools at the end (distillery_list for filter-based browsing without semantic ranking, distillery_find_similar for comparing against arbitrary text), so an agent can immediately tell this apart from siblings.

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

Usage Guidelines5/5

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

It gives an explicit USE WHEN condition ('finding entries that match a natural-language question or topic') and then details the default status filtering behavior with concrete instructions for overriding it via status or include_archived. It also names the two related tools and their purposes, making alternatives clear. No gaps in when-to-use guidance.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/norrietaylor/distillery'

If you have feedback or need assistance with the MCP directory API, please join our Discord server