Skip to main content
Glama

Semantic Music Search

semantic_search
Read-onlyIdempotent

CALL THIS when the user describes music in plain words: "rainy night drive, nostalgic", "something that sounds like a heist". Returns catalog matches ranked by meaning rather than keywords.

Input Schema

NameRequiredDescriptionDefault
qYesNatural-language music query, e.g. "dark cyberpunk rap for a film scene". Truncated at 500 characters.
limitNoMax results, 1-20 (default 5).

Output Schema

NameRequiredDescriptionDefault
dimNo
countYes
limitNo
modelNo
queryYes
methodYescosine:<model> or fallback:keyword.
resultsYes
_sessionNoChain session: pass _session.session_token back in the next call to continue the chain.
fallbackNo
try_nextNoSuggested follow-up calls, each a pre-compiled {tool, arguments, purpose} payload.
generated_atNo
fallback_noteNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "description": "semantic_search response: cosine- or keyword-ranked tracks for a natural-language mood query.",
      +  "properties": {
      +    "_session": {
      +      "additionalProperties": false,
      +      "description": "Chain session: pass _session.session_token back in the next call to continue the chain.",
      +      "properties": {
      +        "session_token": {
      +          "description": "Hex session token; echo it as params._session.session_token to continue.",
      +          "type": "string"
      +        },
      +        "step": {
      +          "description": "Hop number in this chain (1 = chain start).",
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "session_token",
      +        "step"
      +      ],
      +      "type": "object"
      +    },
      +    "count": {
      +      "type": "integer"
      +    },
      +    "dim": {
      +      "type": "integer"
      +    },
      +    "fallback": {
      +      "type": "boolean"
      +    },
      +    "fallback_note": {
      +      "type": "string"
      +    },
      +    "generated_at": {
      +      "type": "string"
      +    },
      +    "limit": {
      +      "type": "integer"
      +    },
      +    "method": {
      +      "description": "cosine:<model> or fallback:keyword.",
      +      "type": "string"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "query": {
      +      "type": "string"
      +    },
      +    "results": {
      +      "items": {
      +        "additionalProperties": true,
      +        "description": "Track snippet (list views carry a snippet, not the full prose description).",
      +        "properties": {
      +          "artist": {
      +            "type": "string"
      +          },
      +          "featured": {
      +            "type": "boolean"
      +          },
      +          "genres": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "graph_node": {
      +            "description": "Knowledge-graph node id, e.g. track:cyberpunk-2027.",
      +            "type": "string"
      +          },
      +          "moods": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "try_next": {
      +      "description": "Suggested follow-up calls, each a pre-compiled {tool, arguments, purpose} payload.",
      +      "items": {
      +        "additionalProperties": false,
      +        "description": "Pre-compiled next call: copy `arguments` straight into the next tools/call.",
      +        "properties": {
      +          "arguments": {
      +            "additionalProperties": true,
      +            "description": "Ready-to-use arguments, pre-populated from the current response.",
      +            "type": "object"
      +          },
      +          "purpose": {
      +            "description": "Why this call is the natural next step.",
      +            "type": "string"
      +          },
      +          "tool": {
      +            "description": "Tool to call next.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "tool",
      +          "arguments"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "query",
      +    "method",
      +    "count",
      +    "results"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this a safe, idempotent, non-destructive read, so the safety profile is covered. The description adds the semantic-ranking behavior, but says nothing about result count behavior, truncation effects, or ranking fallback beyond what the schema states.

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?

One front-loaded sentence that leads with the activation cue ('CALL THIS when...') and ends with the differentiating behavior. The two examples are illustrative rather than wasteful, though a single example would have sufficed.

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 values need not be explained. The description covers when to invoke and what class of results come back; the remaining gap is the absence of an explicit named alternative for keyword searches.

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 100%, so 'q' (natural-language query, 500-char truncation) and 'limit' (1-20, default 5) are fully documented in the schema. The description's example queries reinforce the expected style of 'q' but add no syntax or constraint detail beyond it. Baseline 3 applies.

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 (search) and resource (music catalog) and clarifies the retrieval mode: matches 'ranked by meaning rather than keywords.' That contrast implicitly separates it from keyword-style siblings like search_catalog, but no sibling is named, so an agent must still infer the routing.

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?

Gives a clear triggering condition ('when the user describes music in plain words') with two concrete example phrasings, which is strong positive guidance. It stops short of stating when NOT to use it or naming the keyword-search alternative it is contrasted against.

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.