Skip to main content
Glama
metamug

plunger

Official

save_request

Idempotent

Store an HTTP request in Plunger's Saved list without sending it, so you can re-run it by name later with send_request. Use overwrite to replace an existing saved name.

Instructions

Save a request in the user's Saved list without sending it, so it can be re-run by name with send_request (saved_request). Describe it like send_request. {{placeholders}} are kept as written, including in Authorization headers. An existing name is refused unless overwrite is true, which replaces it, so a mistake can be fixed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoFull URL. May use {{variables}}, e.g. "{{base}}/users/{{id}}". Required unless saved_request is given.
bodyNoA raw text body, sent as-is. Use instead of `json` for non-JSON payloads.
formNoForm fields, sent as application/x-www-form-urlencoded.
jsonNoA JSON body (any JSON value). Sent with Content-Type: application/json.
nameYesThe name to save it under, shown in Plunger's Saved list.
groupNoFile it under a group, such as "Jira" or "Jira/Issues". Left out, a new request has no group and a replaced one keeps its group; an empty string takes it out of its group.
methodNoGET, POST, PUT, PATCH, DELETE, HEAD or OPTIONS. Defaults to GET.
selectNoReturn only these values instead of the whole body, e.g. ["$.data[0].id", "header:Location", "status"]. Saves context on a big response; `json`, `body` and the headers are then left out. `[?(@.name=='Done')]` keeps the array items whose field equals the value. If every path fails the whole response is returned with the reasons; if only some fail, the values that could be read come back and `problems` names the rest.
extractNoKeep values from the response as variables for later requests, e.g. [{"name": "token", "from": "json:$.access_token"}]. `from` is `json:$.path`, `header:Name` or `status`. A name like token or password is kept as a hidden secret.
headersNoRequest headers, e.g. {"Accept": "application/json", "Authorization": "Bearer {{token}}"}. A list of {"name", "value"} objects or "Name: value" strings is accepted too.
overwriteNoReplace a saved request that already has this name (otherwise an existing name is refused).
variablesNoExtra or overriding {{variable}} values for this request only. The user's own variables (including secrets) are already available by name; you don't need their values.
insecure_tlsNoSkip TLS certificate checks, e.g. for a local server with a self-signed certificate.
timeout_secsNoSeconds to wait for a response (1-600). Defaults to the user's setting (20).
saved_requestNoSend a saved request by name (see list_saved_requests). Any other field given here overrides that part of it.
max_body_charsNoLongest body to return, in characters (default 50000). A longer JSON body comes back as an outline of its shape (keys, types, array lengths) with a hint to use `select`; a longer text body is cut and marked with `body_cut_from_chars`.
include_headersNoWhich response headers to return: `all`, `none`, or `relevant` (location, link, retry-after, content-type, content-disposition, etag, rate-limit headers and set-cookie names). Left out: `all`, or `none` when `select` is used.
follow_redirectsNoFollow redirects (default true). Set false to receive the redirect response itself and read its `Location` header.
use_saved_bearerNoAttach the Bearer token the user saved in Plunger. Off by default: only turn it on for a host the user asked you to call with their credentials.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes
bodyNo
groupNoThe group a saved request is filed under (`Jira`, `Jira/Issues`).
methodYes
headersYes
optionsNoWhat a saved request carries besides its form: `timeout_secs`, `follow_redirects`, `insecure_tls` and `select`. They apply when it is sent by name, unless the call gives its own.
saved_idNoSet when saved under `save_as`; it now shows in Plunger's Saved list.
body_typeYesnone, json, form-data or raw.
not_savedNoFields of the call that a saved request does not keep (only said when there are some).
form_fieldsNomultipart -F fields: "name=value" or "name=@file".
variables_usedYes{{variables}} the request uses.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare idempotentHint and destructiveHint; the description adds real behavior beyond them – nothing is sent, `{{placeholders}}` are preserved verbatim even inside Authorization headers, and name collisions are refused unless overwrite replaces the entry. It does not discuss where the saved item lives or whether saving has side effects on existing variables.

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?

Four tight sentences with no filler; the core action and the no-send constraint are front-loaded, followed by the naming and overwrite rules. Dense but each sentence carries information.

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?

For a 19-parameter save tool with an output schema and full schema coverage, the description covers the distinguishing behaviors (no send, placeholder handling, name collision). It stops short of describing interaction with groups or variables, but nothing essential to calling it correctly is missing.

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 description coverage is 100% across 19 parameters, so the schema already carries the per-parameter burden and the baseline is 3. The description adds the placeholder-preservation rule (which the schema only hints at via the {{token}} header example) and reiterates the overwrite rule, but supplies no syntax guidance for the many request-building fields.

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 a request in the user's Saved list') plus the crucial negative scope ('without sending it'), which separates it from the sibling send_request. An agent can identify this tool without opening the 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?

Explicitly routes the agent: save here so it can later be re-run by name via send_request's `saved_request` parameter, and notes that an existing name is refused unless `overwrite` is true. Clear context and a named alternative, though it does not state when a request should not be saved at all (e.g. one-off calls).

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