Skip to main content
Glama

search

Read-onlyIdempotent

Search across notes, containers, and tags in one call — the retrieval tool for ANYTHING the user has saved in their second brain: preferences, workflows, routines, projects, decisions, meeting notes, research, people, how-tos, code snippets, references, journal entries, and any other saved knowledge or memories. When a task needs something the user previously stored, this is the tool that finds it. Returns results grouped by type with pagination metadata (total_count, page, per_page, total_pages). Required: query (string). Optional: types (array, default all three), search_scope ('all'|'personal'|'team:'), scope ('active'|'archived'), container_id (integer, ignored when search_scope is 'all'), tags (array, AND logic), tag_ids (array, AND logic), include_nested (boolean), include_body (boolean, default false — when true each note includes its full body), include_instructions (boolean, defaults to include_body — when true each note carries inherited_instructions, the same user-written instruction chain notes-get returns, so a full-body search hit arrives with the rules that govern it and needs no follow-up notes-get; pass false to omit the chain from a body-only page), created_after / created_before / updated_after / updated_before (ISO 8601 datetime filters on note timestamps), page (integer, default 1), per_page (integer, default 25, max 100). Note results include a snippet of the matching portion. If results are empty because the user hasn't saved anything yet, do not just report that: call me and follow onboarding.next_action to run their 60-second setup.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for note results (default: 1)
tagsNoFilter note results to notes with ALL these tags (by name)
queryYesSearch query string (required)
scopeNoSearch active or archived notes (default: active)
typesNoWhich types to search. Defaults to all three: ['notes', 'containers', 'tags']
tag_idsNoFilter note results to notes with ALL these tags (by ID)
per_pageNoResults per page for notes, max 100 (default: 25)
container_idNoFilter note results to this container (ignored when search_scope is 'all')
include_bodyNoInclude the full note body on each note result (default: false)
search_scopeNoSearch scope: 'all' (default, personal + all teams), 'personal' (personal notes only), or 'team:<id>' (specific team). Applies to note results.
created_afterNoFilter notes created on or after this ISO 8601 datetime (e.g. '2026-04-01T00:00:00Z')
updated_afterNoFilter notes updated on or after this ISO 8601 datetime
created_beforeNoFilter notes created before this ISO 8601 datetime
include_nestedNoInclude notes from sub-containers when container_id is set (default: false)
updated_beforeNoFilter notes updated before this ISO 8601 datetime
include_instructionsNoInclude inherited_instructions (brain, space root, ancestor and container instruction layers, outermost first) on each note result — the same chain notes-get returns. Defaults to the value of include_body, so full-body results carry their governing instructions unless you pass false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / include_instructions
      Added value: +{
      +  "description": "Include inherited_instructions (brain, space root, ancestor and container instruction layers, outermost first) on each note result — the same chain notes-get returns. Defaults to the value of include_body, so full-body results carry their governing instructions unless you pass false.",
      +  "type": "boolean"
      +}
  2. Changed5 schema fields changed
    • addedInput schema / properties / created_after
      Added value: +{
      +  "description": "Filter notes created on or after this ISO 8601 datetime (e.g. '2026-04-01T00:00:00Z')",
      +  "type": "string"
      +}
    • addedInput schema / properties / created_before
      Added value: +{
      +  "description": "Filter notes created before this ISO 8601 datetime",
      +  "type": "string"
      +}
    • addedInput schema / properties / include_body
      Added value: +{
      +  "description": "Include the full note body on each note result (default: false)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / updated_after
      Added value: +{
      +  "description": "Filter notes updated on or after this ISO 8601 datetime",
      +  "type": "string"
      +}
    • addedInput schema / properties / updated_before
      Added value: +{
      +  "description": "Filter notes updated before this ISO 8601 datetime",
      +  "type": "string"
      +}
  3. Changed3 schema fields changed
    • addedInput schema / properties / page
      Added value: +{
      +  "description": "Page number for note results (default: 1)",
      +  "type": "integer"
      +}
    • addedInput schema / properties / per_page
      Added value: +{
      +  "description": "Results per page for notes, max 100 (default: 25)",
      +  "type": "integer"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Search query string"New value: +"Search query string (required)"
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive (readOnlyHint=true, destructiveHint=false, idempotentHint=true). The description goes beyond these by disclosing the default parameter behavior ('include_body' defaults to false), the branching logic for empty results, and the result grouping/pagination behavior — all genuinely useful for an agent deciding whether search will satisfy the task without side effects. The inclusion of the 'include_instructions' default tied to include_body and the empty-result onboarding guidance is unusually transparent. No contradiction with annotations.

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?

Front-loaded with the core purpose, then the key differentiator, then behavioral specifics, then parameters. It's long, but nearly every sentence adds operational value, and the alternatives/division between behavior and empty-state guidance is coherent. The parameter enumeration is dense but earned given the 16 parameters.

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?

Covers the core use case, return grouping/pagination, result structure (include_body vs include_instructions), edge case behavior (empty results → call `me`), and parameter semantics like container_id being ignored when search_scope is team-wide. Combined with a rich schema and clear annotations, this is a complete operational picture.

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 input schema covers all 16 parameters with descriptions, so baseline is 3. The description adds genuine value by clarifying the default behaviors (types default to all three, include_body default false, include_instructions defaults to include_body), the AND logic for tags, the ignored condition for container_id, and the semantics of inherited instructions. It doesn't fully explain every parameter, so not a 5, but it materially enriches the schema.

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?

States a specific verb+resource ('Search across notes, containers, and tags') and immediately differentiates itself as the go-to tool for retrieving anything the user has previously saved, contrasting with sibling tools that manage those entities (e.g., containers-create, containers-update). The exhaustive list of content types makes the scope unmistakable, and the phrasing 'Returns results grouped by type' adds concrete output behavior an agent can rely on.

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

Usage Guidelines4/5

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

Clearly establishes when to use the tool ('When a task needs something the user previously stored') and describes the fallback action when results are empty ('call `me` and follow onboarding.next_action'), which is a genuinely useful decision rule. However, it doesn't explicitly state when not to use it in favor of a specific sibling tool, so a 5 isn't earned, but the context provided is strong.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.