Skip to main content
Glama

Get one request

spicrawl_request_get
Read-onlyIdempotent

The full log record of one past API call by its request id. Every response carries its id in the X-Request-Id header (and error bodies carry it too), so this is the tool for debugging a failed or slow scrape: it shows status, error_code/error_detail, attempts, the engine and proxy (tier, country, provider, sticky) actually used, whether and how the target blocked it (vendor/signal/rule), per-stage latency spans and credits charged. Returns not_found both for unknown ids and for ones older than your retention window, and for another project's request unless your key has the read scope.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe request id (a ULID, from X-Request-Id or a spicrawl_requests_list row's `id`).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe request id (X-Request-Id).
urlNoThe target URL as requested.
proxyNoWhat proxy was asked for versus what served. Never an exit IP or credentials.
spansNoLatency in milliseconds per stage; null means not measured. Stages do not sum to total_ms.
engineNoThe rendering tier that served it: fetch, js or browser. Absent when refused before a tier was chosen.
statusNoTerminal outcome: success, failed, timeout, blocked, rejected or cancelled. Only success is charged.
blockedNoPresent only when a bot challenge was detected.
attemptsNoDispatch attempts including retries.
bytes_inNo
featuresNoFeatures the request used; free-form.
url_hostNo
bytes_outNo
created_atNoWhen the request arrived, RFC 3339 UTC.
error_codeNoThe problem code the caller got, e.g. ERR::UPSTREAM::CHALLENGE. Absent on success.
project_idNo
http_statusNoThe target's HTTP status; absent when no response was received.
proxy_bytesNo
error_detailNo
credits_microNoCredits charged in micro-credits (1 credit = 1000000); 0 unless success.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "attempts": {
      +      "description": "Dispatch attempts including retries.",
      +      "type": "number"
      +    },
      +    "blocked": {
      +      "additionalProperties": true,
      +      "description": "Present only when a bot challenge was detected.",
      +      "properties": {
      +        "rule": {
      +          "type": "string"
      +        },
      +        "signal": {
      +          "type": "string"
      +        },
      +        "vendor": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "bytes_in": {
      +      "type": "number"
      +    },
      +    "bytes_out": {
      +      "type": "number"
      +    },
      +    "created_at": {
      +      "description": "When the request arrived, RFC 3339 UTC.",
      +      "type": "string"
      +    },
      +    "credits_micro": {
      +      "description": "Credits charged in micro-credits (1 credit = 1000000); 0 unless success.",
      +      "type": "number"
      +    },
      +    "engine": {
      +      "description": "The rendering tier that served it: fetch, js or browser. Absent when refused before a tier was chosen.",
      +      "type": "string"
      +    },
      +    "error_code": {
      +      "description": "The problem code the caller got, e.g. ERR::UPSTREAM::CHALLENGE. Absent on success.",
      +      "type": "string"
      +    },
      +    "error_detail": {
      +      "type": "string"
      +    },
      +    "features": {
      +      "additionalProperties": {},
      +      "description": "Features the request used; free-form.",
      +      "type": "object"
      +    },
      +    "http_status": {
      +      "description": "The target's HTTP status; absent when no response was received.",
      +      "type": "number"
      +    },
      +    "id": {
      +      "description": "The request id (X-Request-Id).",
      +      "type": "string"
      +    },
      +    "project_id": {
      +      "type": "string"
      +    },
      +    "proxy": {
      +      "additionalProperties": true,
      +      "description": "What proxy was asked for versus what served. Never an exit IP or credentials.",
      +      "properties": {
      +        "country": {
      +          "description": "Where the exit actually served from; compare with requested_country.",
      +          "type": "string"
      +        },
      +        "endpoint_id": {
      +          "type": "string"
      +        },
      +        "endpoints": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Every exit touched, in attempt order."
      +        },
      +        "provider": {
      +          "type": "string"
      +        },
      +        "reason": {
      +          "type": "string"
      +        },
      +        "requested_country": {
      +          "type": "string"
      +        },
      +        "requested_tier": {
      +          "type": "string"
      +        },
      +        "source": {
      +          "description": "pool, custom or direct.",
      +          "type": "string"
      +        },
      +        "sticky": {
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "proxy_bytes": {
      +      "type": "number"
      +    },
      +    "spans": {
      +      "additionalProperties": true,
      +      "description": "Latency in milliseconds per stage; null means not measured. Stages do not sum to total_ms.",
      +      "properties": {
      +        "admission_ms": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "dispatch_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms"
      +        },
      +        "engine_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms"
      +        },
      +        "extract_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms"
      +        },
      +        "queue_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms",
      +          "description": "Wait for a slot; high means capacity shortage, not a slow page."
      +        },
      +        "total_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms"
      +        },
      +        "upstream_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms"
      +        },
      +        "worker_ms": {
      +          "$ref": "#/properties/spans/properties/admission_ms"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "status": {
      +      "description": "Terminal outcome: success, failed, timeout, blocked, rejected or cancelled. Only success is charged.",
      +      "type": "string"
      +    },
      +    "url": {
      +      "description": "The target URL as requested.",
      +      "type": "string"
      +    },
      +    "url_host": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing the auth requirement (needs `read` scope for other projects' requests) and precise failure semantics — not_found is returned both for unknown ids and for ids past the retention window. It also enumerates the content actually returned (status, error_code/detail, attempts, engine/proxy, block rules, latency spans, credits).

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?

Front-loaded with purpose, then the provenance of the id, the debugging use case, the record contents, and the failure conditions — every clause carries information, and the multi-item lists are compact rather than padded.

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?

With an output schema already present, return shape needn't be explained, yet the description still completes the picture with auth prerequisites, retention-window behavior, and cross-project access rules. Nothing an agent needs to call and interpret this 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% and the single `id` parameter is already documented as a ULID from X-Request-Id or a list row. The description repeats rather than extends this (mentioning the X-Request-Id header), so it adds no meaning beyond the schema — baseline 3 for a fully-covered single param.

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 — 'The full log record of one past API call by its request id' — and the singular 'one ... by its request id' clearly contrasts with the plural spicrawl_requests_list sibling. An agent can distinguish this from the list tool and from session/batch tools 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 names the use case: 'this is the tool for debugging a failed or slow scrape.' It gives clear context for when to reach for it, but does not name an alternative or state an explicit when-not (e.g. preferring requests_list for scanning many).

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