Skip to main content
Glama

Pulse Signed Batch

pulse_signed_batch
Read-onlyIdempotent

Signed index prices for up to 100 crypto assets in ONE call — each row carries its own signature you can verify individually with pulse_verify_print, offline, with no network call, not just the batch as a whole. Use this instead of looping pulse_signed_price: it is one request against the rate limit and every observation still carries its own signature, grade, venue count and interval. Symbols Pulse does not serve come back named in not_served rather than silently missing. Requires a Pulse API key via _apiKey. Example: pulse_signed_batch({ symbols: ["BTC", "ETH", "SOL"] }).

Input Schema

NameRequiredDescriptionDefault
_apiKeyNoPulse Verity API key. Free and self-serve at https://thepulse.markets/developers (60 req/min, 25,000/month, no card).
symbolsYesUp to 100 tickers. A comma-separated string is also accepted.

Output Schema

NameRequiredDescriptionDefault
sourceYesConstant: Pulse Verity Index (thepulse.markets)
returnedYesCount of symbols Pulse actually served
requestedYesCount of symbols requested
not_servedNoSymbols requested but absent from Pulse's response
observationsYesOne signed print per served symbol, each independently verifiable
each_row_signedYesReminder each observation is independently verifiable
not_served_noteNoExplains why not_served exists and how to read it, when at least one requested symbol got no print.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "symbols": [
      +      "BTC",
      +      "ETH"
      +    ]
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "each_row_signed": {
      +      "description": "Reminder each observation is independently verifiable",
      +      "type": "string"
      +    },
      +    "not_served": {
      +      "description": "Symbols requested but absent from Pulse's response",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "not_served_note": {
      +      "description": "Explains why not_served exists and how to read it, when at least one requested symbol got no print.",
      +      "type": "string"
      +    },
      +    "observations": {
      +      "description": "One signed print per served symbol, each independently verifiable",
      +      "items": {
      +        "properties": {
      +          "at": {
      +            "description": "Observation timestamp, 4th field of the canonical string",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "cadence": {
      +            "description": "Update-frequency metadata for this asset",
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "confidence": {
      +            "description": "Pulse's confidence score for this observation",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "dispersionBps": {
      +            "description": "Spread across venues in basis points",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "engine": {
      +            "description": "Pulse's pricing engine identifier",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "grade": {
      +            "description": "consensus/blended/indicative, 5th field of the canonical string",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "grade_note": {
      +            "description": "Plain-English meaning of grade and whether it is settleable",
      +            "type": "string"
      +          },
      +          "interval": {
      +            "description": "Confidence interval bounds",
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "kid": {
      +            "description": "Key id selecting which public key verifies this row's signature",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "price": {
      +            "description": "Price as a float; priceText is what was actually signed",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "priceText": {
      +            "description": "Price exactly as served, 3rd field of the canonical string",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "settleable": {
      +            "description": "True only for consensus/blended grades",
      +            "type": "boolean"
      +          },
      +          "sig": {
      +            "description": "Signing scheme tag, 1st field of the canonical string (pulse-index-v1)",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "signature": {
      +            "description": "Base64 ECDSA P-256 signature over this row's canonical string",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "sources": {
      +            "description": "Count of independent venues contributing",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "success": {
      +            "description": "Whether Pulse served this symbol",
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "symbol": {
      +            "description": "Asset ticker, 2nd field of this row's canonical string",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "tier": {
      +            "description": "Same value as grade",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "requested": {
      +      "description": "Count of symbols requested",
      +      "type": "number"
      +    },
      +    "returned": {
      +      "description": "Count of symbols Pulse actually served",
      +      "type": "number"
      +    },
      +    "source": {
      +      "description": "Constant: Pulse Verity Index (thepulse.markets)",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "requested",
      +    "returned",
      +    "observations",
      +    "each_row_signed",
      +    "source"
      +  ],
      +  "type": "object"
      +}
  2. Changed2 schema fields changed
    • removedInput schema / examples
      Removed value: -[
      -  {
      -    "symbols": [
      -      "BTC",
      -      "ETH"
      -    ]
      -  }
      -]
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "each_row_signed": {
      -      "description": "Reminder each observation is independently verifiable",
      -      "type": "string"
      -    },
      -    "not_served": {
      -      "description": "Symbols requested but absent from Pulse's response",
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": [
      -        "array",
      -        "null"
      -      ]
      -    },
      -    "not_served_note": {
      -      "description": "Explains why not_served exists and how to read it, when at least one requested symbol got no print.",
      -      "type": "string"
      -    },
      -    "observations": {
      -      "description": "One signed print per served symbol, each independently verifiable",
      -      "items": {
      -        "properties": {
      -          "at": {
      -            "description": "Observation timestamp, 4th field of the canonical string",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "cadence": {
      -            "description": "Update-frequency metadata for this asset",
      -            "type": [
      -              "object",
      -              "null"
      -            ]
      -          },
      -          "confidence": {
      -            "description": "Pulse's confidence score for this observation",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "dispersionBps": {
      -            "description": "Spread across venues in basis points",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "engine": {
      -            "description": "Pulse's pricing engine identifier",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "grade": {
      -            "description": "consensus/blended/indicative, 5th field of the canonical string",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "grade_note": {
      -            "description": "Plain-English meaning of grade and whether it is settleable",
      -            "type": "string"
      -          },
      -          "interval": {
      -            "description": "Confidence interval bounds",
      -            "type": [
      -              "object",
      -              "null"
      -            ]
      -          },
      -          "kid": {
      -            "description": "Key id selecting which public key verifies this row's signature",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "price": {
      -            "description": "Price as a float; priceText is what was actually signed",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "priceText": {
      -            "description": "Price exactly as served, 3rd field of the canonical string",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "settleable": {
      -            "description": "True only for consensus/blended grades",
      -            "type": "boolean"
      -          },
      -          "sig": {
      -            "description": "Signing scheme tag, 1st field of the canonical string (pulse-index-v1)",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "signature": {
      -            "description": "Base64 ECDSA P-256 signature over this row's canonical string",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "sources": {
      -            "description": "Count of independent venues contributing",
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "success": {
      -            "description": "Whether Pulse served this symbol",
      -            "type": [
      -              "boolean",
      -              "null"
      -            ]
      -          },
      -          "symbol": {
      -            "description": "Asset ticker, 2nd field of this row's canonical string",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "tier": {
      -            "description": "Same value as grade",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "requested": {
      -      "description": "Count of symbols requested",
      -      "type": "number"
      -    },
      -    "returned": {
      -      "description": "Count of symbols Pulse actually served",
      -      "type": "number"
      -    },
      -    "source": {
      -      "description": "Constant: Pulse Verity Index (thepulse.markets)",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "requested",
      -    "returned",
      -    "observations",
      -    "each_row_signed",
      -    "source"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description doesn't need to restate those. It adds valuable behavioral context: each row's signature is independently verifiable offline via pulse_verify_print, unsupported symbols appear in not_served instead of being silently dropped, and API key usage is required. This goes beyond the annotations without contradicting them.

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?

The description is dense but every sentence contributes: core function, differentiation, error behavior, auth requirement, and a concrete example. It's slightly long but well-organized, with the primary purpose front-loaded and no filler.

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?

For a read-only batch tool with full schema coverage, an existing output schema, and four annotations, the description covers the essential operational details: use case, alternative, rate-limit rationale, unusual response behavior, auth prerequisite, and a usage example. There are no critical gaps an agent would need to guess.

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% for both parameters (_apiKey and symbols), so the baseline is 3. The description reiterates the auth requirement and gives an example, but it doesn't add meaningful semantics beyond what the schema already documents (e.g., the comma-separated string acceptance and up-to-100 limit are already in the schema).

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 clearly states the tool returns signed index prices for up to 100 crypto assets in one call, and explicitly distinguishes it from pulse_signed_price by emphasizing per-row signatures and single-request efficiency. This makes the tool's purpose unmistakable and differentiated from its closest sibling.

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 says to use this tool instead of looping pulse_signed_price, citing the rate-limit advantage and preserved per-row data. It also explains the behavior for unsupported symbols (not_served) and the required API key, giving clear when-to-use and prerequisite guidance.

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.