Skip to main content
Glama

Reachable Techniques for a Rack

reachable_techniques
Read-onlyIdempotent

Given a rack (the module ids the user owns), return which canonical patch techniques the rack can realize, and which it is one module away from. The set-level companion to find_role_realizations: where that answers "which module fills role R in technique T?", this answers the rack owner's actual question — "given everything I own, what can I actually do, and what am I close to?".

This is the right tool the moment a user gives you their modules and asks an open "what can I do / what can this rack do / what am I missing?" question — instead of guessing techniques from training priors or calling find_role_realizations technique-by-technique by hand. It runs the affordance match across the whole technique catalog for you.

Returns two buckets:

  • reachable: every required role has a rack module that fills it. Each carries an assignment (role → module). requires_shared_module: true flags a technique only reachable by reusing one module for two roles — verify those roles can share one instance.

  • near_misses: all-but-one role fillable; missing_roles names the unfilled role(s) and the required_affordances you'd need. This is the acquisition signal — "you can already do X; you're one module away from Y".

Args:

  • rack (string[], required): module ids, e.g. ["make-noise/maths", "mutable-instruments/plaits"]. Max 64. Ids that match no module are returned in unresolved (with did-you-mean), not silently dropped.

  • limit (number): max techniques per bucket. Default 25, max 100.

Stateless-rack contract: the server keeps no memory of your rack between calls — pass the COMPLETE current rack every call. A partial rack silently narrows what's reported reachable, so if a module id doesn't resolve, surface the unresolved did-you-mean to the user rather than proceeding on the incomplete set.

Scope: reachability is role-PRESENCE based. It does NOT verify per-role instance counts (cardinality) — a technique needing two independent envelopes is judged reachable if you have one envelope source. The distinct-instance question (can one module fill two roles?) is surfaced as requires_shared_module, not silently assumed. For the editorial detail on a specific technique (canonical instance, counter-canonical notes, full realization list), call list_techniques; for one role's candidates, find_role_realizations. To go the other way — which of your modules are redundant / safe to sell — call rack_redundancy.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
rackYes
limitNo

TDQS

A5/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: the stateless-rack contract (no memory, pass complete rack), the failure mode for unresolved IDs (returned in `unresolved` with did-you-mean, not silently dropped), and the cardinality caveat (reachability is role-PRESENCE based, not instance-count verified). It also explains the `requires_shared_module` flag. This goes well beyond what readOnlyHint/idempotentHint provide.

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 every sentence earns its place. It opens with the core purpose, then uses headers-like sections for usage, return buckets, args, stateless contract, and scope. The structure is logical and front-loaded. No fluff; each paragraph addresses a distinct aspect needed for correct invocation.

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 no output schema, the description explains the return structure in detail ('Returns two buckets: reachable ... near_misses ...') and describes field semantics (`assignment`, `missing_roles`, `required_affordances`). It also covers edge cases, limitations, and related tools, making it complete for an agent to invoke and interpret results correctly.

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?

With schema description coverage at 0%, the description fully compensates. For `rack` it gives example module IDs, explains max 64, and clarifies that unresolved IDs are returned in `unresolved`. For `limit` it states it controls 'max techniques per bucket' with default 25 and max 100. These semantics are not in the schema, so the description adds all necessary meaning.

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 description opens with a precise verb+resource statement: 'return which canonical patch techniques the rack can realize, and which it is one module away from.' It also distinguishes itself from siblings by calling itself 'the set-level companion to find_role_realizations' and by contrasting with 'find_role_realizations technique-by-technique by hand.' This fully clarifies both what it does and how it differs from alternatives.

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?

The description explicitly states when to use this tool: 'the moment a user gives you their modules and asks an open "what can I do / what can this rack do / what am I missing?" question.' It also names exclusions and alternatives: 'For the editorial detail ... call list_techniques; for one role's candidates, find_role_realizations. To go the other way ... call rack_redundancy.' This is model-guidance quality.

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.

TDQS

A4.6/5.0
Disambiguation4/5

Each tool targets a distinct resource/action: get_module(s) for specs, search_modules for filtered queries, resolve_modules for name mapping, find_compatible_with for per-module relations, reachable_pairings/techniques for rack-level analysis. Minor overlap between get_module/get_modules and the relationship tools (find_compatible_with vs reachable_pairings) could cause misselection, but descriptions clarify scope.

Naming Consistency3/5

Mostly verb_noun snake_case (get_, search_, find_, resolve_, visualize_, report_, lookup_), but three tools break the pattern: rack_redundancy, reachable_pairings, reachable_techniques use noun/adjective phrases without a verb. The get_* cluster is consistent but the overall set mixes conventions.

Tool Count4/5

17 tools is slightly above the ideal 3-15 range but justified by the server's broad scope: module specs, search, manuals, relationships, rack analysis, visualization, and feedback. Each tool has a clear role; the count is reasonable for the domain's complexity.

Completeness5/5

The surface covers the full read-only Eurorack knowledge workflow: module lookup (get_module, search_modules, resolve_modules), manual prose (get_manual_chunk, search_manual), concepts (lookup_concept), techniques (search_techniques, find_role_realizations), compatibility (find_compatible_with, reachable_pairings), rack analysis (reachable_techniques, rack_redundancy), visualization, and provenance (get_source). report_gap even enables self-improvement. No obvious missing operations.

Resources