Skip to main content
Glama

devtune_save_agent_picks_setup

DestructiveIdempotent

Save an Agent Picks setup for a published public category. A project has one setup per category and can add as many as it needs. Without setup, this updates the project's setup for category_id, or adds one when it has none: the project's own copy of DevTune's setup for the category, with its requests and how it recognizes each tool. With setup, it updates that setup, whose category is fixed: saving it with a category another of the project's setups uses is refused as category_in_use, and with any other category_id as category_fixed. The body: category_id, the project's own tool_key (or null), up to six competitor_tool_keys from the category's tools (DevTune's own public boards are exempt), environment_ids and the ordered agent_models to test. Ids come from the published catalogue; one outside it is refused as invalid_setup. Pi, OpenCode and Muse Code need Agent Picks Pro or Enterprise (agent_not_in_plan). devtune_get_agent_picks_catalogue lists the valid ids. A copy or custom job setup may also change its content, each part unchanged when absent: requests by intent (the text, or "omitted" to leave it out; saving a left-out request's text asks it again; at least one request stays active, and improve is taken only by a setup that has had one), request_ending (empty sends requests as written) and recognition (tools [{tool_key, signals}] for tools the setup already measures, and building_blocks). A public board's setup takes none (invalid_setup). Refusals: names_tool when a request or the ending names a measured tool by name, alias or domain; rule_matches_starter when recognition matches a selected test app's starter files, so every run there would count as a pick; building_block_tool when a tool's package also matches a building-block package, exact names and prefixes alike; invalid_pattern when a pattern the setup keeps can't run; setup_changed when another save changed the setup after this one read it (read it again and save); customer_requests_off when tests of customer-written requests are switched off and the save changes the requests or ending. Returns the saved requests, request_ending and recognition (null for a public board's setup); a save that sends them as they stand changes nothing. For a custom job use devtune_save_agent_picks_job. Starts no test. Requires actions.write and Agent Picks. The OAuth member, or the member who created the API key, needs project management rights.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "category_id": "<category_id>",
      "tool_key": "<tool_key>",
      "environment_ids": "<environment_ids>",
      "agent_models": "<agent_models>"
    },
    "name": "devtune_save_agent_picks_setup"
  }
}

Input Schema

NameRequiredDescriptionDefault
setupNoThe Agent Picks setup to use: its id or its category slug. Optional while the project has one setup. With several, omitting it is refused as agent_picks_setup_required, and a setup the project does not have as agent_picks_setup_not_found; both list the project setups in details.setups (id, category_slug, category_name). The response echoes the setup used as setup {id, category_slug}.
requestsNo
tool_keyYes
category_idYes
recognitionNo
agent_modelsYes
request_endingNo
environment_idsYes
competitor_tool_keysNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / agent_models / items / properties / agent / enum
      Previous value: -[
      -  "claude_code",
      -  "codex",
      -  "opencode",
      -  "pi"
      -]New value: +[
      +  "claude_code",
      +  "codex",
      +  "opencode",
      +  "pi",
      +  "muse_code"
      +]
  2. Changed3 schema fields changed
    • addedInput schema / properties / recognition
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "building_blocks": {
      +      "additionalProperties": {},
      +      "type": "object"
      +    },
      +    "tools": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "signals": {
      +            "additionalProperties": {},
      +            "type": "object"
      +          },
      +          "tool_key": {
      +            "maxLength": 63,
      +            "minLength": 1,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "tool_key",
      +          "signals"
      +        ],
      +        "type": "object"
      +      },
      +      "maxItems": 35,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / request_ending
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / requests
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "add": {
      +      "maxLength": 300,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "hosted": {
      +      "maxLength": 300,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "improve": {
      +      "maxLength": 300,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "recommend": {
      +      "maxLength": 300,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / competitor_tool_keys / maxItems
      Previous value: -6New value: +200
  4. Changed1 schema field changed
    • addedInput schema / properties / setup
      Added value: +{
      +  "description": "The Agent Picks setup to use: its id or its category slug. Optional while the project has one setup. With several, omitting it is refused as agent_picks_setup_required, and a setup the project does not have as agent_picks_setup_not_found; both list the project setups in details.setups (id, category_slug, category_name). The response echoes the setup used as setup {id, category_slug}.",
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
  5. Added

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructive/idempotent/write, and the description adds substantial context beyond them: the partial-update contract ('each part unchanged when absent'), the invariant that at least one request stays active, that a no-op save changes nothing, and a full refusal taxonomy with error codes (category_in_use, category_fixed, invalid_setup, names_tool, rule_matches_starter, building_block_tool, invalid_pattern, setup_changed, customer_requests_off). It also discloses auth requirements (actions.write, Agent Picks, project management rights) and the returned fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, and most clauses carry genuine signal (error codes, invariants). But it is one dense run-on paragraph with nested parentheticals, making it hard to scan for the refusals or the body contract when an agent needs them mid-call.

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?

This is a complex nine-parameter, nested-object mutation with no output schema, and the description still covers permissions, the update-vs-create branch, partial-update semantics, refusals, and return values (including null for a public board's setup). Nothing an agent needs to call it correctly is conspicuously missing.

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?

Schema description coverage is only 11% (one of nine params documented), so the description carries most of the burden and largely succeeds: it explains setup optionality and echo, tool_key nullable, up to six competitor_tool_keys from the category's tools, environment_ids, ordered agent_models, requests-by-intent with the 'omitted' sentinel and improve restriction, request_ending semantics (empty sends as written), and recognition's tools/building_blocks shape. Gaps remain — the four intent keys (add/hosted/improve/recommend) are never enumerated and the 'six competitor_tool_keys' guidance sits oddly next to a maxItems of 200.

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?

The first sentence gives a specific verb and resource ('Save an Agent Picks setup for a published public category') and explicitly routes job-based callers elsewhere ('For a custom job use devtune_save_agent_picks_job'). It does not differentiate from the other setup-mode siblings such as devtune_clear_agent_picks_setup or devtune_update_agent_picks_settings, and the dense middle body blurs the core action somewhat.

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?

Explicit branching conditions: without a setup it updates the project's category setup or adds one; with a setup it updates that fixed-category setup. It names the alternative tool for custom jobs, points at devtune_get_agent_picks_catalogue for valid ids, and states 'Starts no test', which is a real when-not signal for an agent that might otherwise assume execution.

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.

Resources