Skip to main content
Glama

Playlist Policy Save

playlist_policy_save

Save one school's policy after the server checks it. Every source is a capture_file that playlist_policy_open named and a quote of 300 characters or fewer copied verbatim from that capture's cleaned text; the quote check is exact, with no fuzzy matching. The server also checks that every course code is one of the school's CourseShelf learning units, every award_title appears in the award_types section, and every min_credits is a positive number. It never alters the policy. It returns policy_id, status, and every error in plain words: a policy with errors is saved as rejected, so correct it and save again.

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": {
      "unitid": "<unitid>",
      "built_by": "<built_by>",
      "policy": "<policy>"
    },
    "name": "playlist_policy_save"
  }
}

Input Schema

NameRequiredDescriptionDefault
policyYes
unitidYesThe school, by its IPEDS UNITID
built_byYesWho built this policy: a short string naming the agent and model. Stored with the saved policy. A save without it is rejected.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / built_by
      Added value: +{
      +  "description": "Who built this policy: a short string naming the agent and model. Stored with the saved policy. A save without it is rejected.",
      +  "examples": [
      +    "claude-opus chat",
      +    "openai gpt build-agent"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / policy / properties / designations / items / properties / abbreviation
      Added value: +{
      +  "description": "Optional: the designation's printed abbreviation, exactly as printed. The designation's quote must contain its name or this abbreviation.",
      +  "examples": [
      +    "SI"
      +  ],
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedInput schema / required
      Previous value: -[
      -  "unitid",
      -  "policy"
      -]New value: +[
      +  "unitid",
      +  "built_by",
      +  "policy"
      +]
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) by disclosing that the server validates before writing, that it 'never alters the policy', that failed policies are still written as rejected, and exactly what the response carries. The rejection-on-error behavior is a non-obvious trait an agent would otherwise misjudge.

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?

Five tight sentences, front-loaded with purpose then validation rules then return/retry behavior. No sentence is redundant and each one carries a constraint or a behavior the caller needs.

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?

With no output schema, the description correctly explains the return (policy_id, status, plain-word errors). It covers validation and the retry path for a nested, three-parameter write tool; the only gap is what happens on re-save of an identical policy, which idempotentHint=false hints at but the text never resolves.

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?

Adds real meaning beyond the 67%-covered schema: capture_file must match the name playlist_policy_open used, quotes must be ≤300 characters copied verbatim from cleaned text with exact (non-fuzzy) matching, course codes must resolve to CourseShelf learning units, award_title must appear in the award_types section, and min_credits must be positive. unitid and built_by are left to the schema, so not a full 5.

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 and resource ('Save one school's policy') plus the governing condition ('after the server checks it'), and ties the inputs back to the sibling that produces them ('a capture_file that playlist_policy_open named'). An agent can distinguish this from playlist_policy_open and the other playlist_* tools without opening a schema.

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 operating context: the save is validated, a policy with errors is persisted as rejected, and the agent should 'correct it and save again' — an explicit retry loop. It stops short of naming alternatives (e.g. when to use playlist_save or get_policy instead), so no exclusions are stated.

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.