Skip to main content
Glama
aiexp1

Tanod MCP server

utilpeek: verify a JWT signature and claims with a secret, a PEM public key or a JWK Set

verify_jwt
Read-onlyIdempotent

Validate a JWT signature and claims against an HMAC secret, PEM public key, or JWK Set, returning valid true/false and the failure reason.

Instructions

utilpeek: Verify a JWT signature and claims. To read the claims without a key use decode_jwt. Returns valid true or false for a JWT checked with PyJWT against one key (HMAC secret, PEM public key or JWK Set), with a reason: bad signature, expired, wrong audience or issuer, algorithm not allowed. Algorithm none is refused; the key type fixes the algorithm family. Input: token and exactly one of secret, public_key or jwks; optional algorithms, audience, issuer, leeway_seconds. Pure computation, no network; secrets and keys are not echoed. A failed check is a normal charged result (valid false). No JWKS URL fetch: send the key set. Malformed input is a 422 (not charged). Typically under 0.1 s. Price: USD 0.001. Free: 10 utilpeek calls per IP per UTC day. The submitted text is never logged or stored. Docs: https://tanod.dev/learn/jwt-decode-verify-api.html

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
jwksNoJWK Set object {"keys": [...]} (asymmetric keys; oct keys are ignored). The key is picked by the token kid.
tokenYesCompact JWT to verify.
issuerNoRequired iss.
secretNoHMAC secret (HS256/384/512).
audienceNoRequired aud (a string, or a list of which one must match).
algorithmsNoAllow-list that narrows the default for the key type; none is refused.
public_keyNoPEM public key (RS*, PS*, ES*, EdDSA).
leeway_secondsNoClock skew allowed for exp, nbf and iat (0-300).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
algNo
kidNo
noteNo
errorNoOnly on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object.
validNo
detailNo
headerNo
reasonNo
payloadNo
key_sourceNo
leeway_secondsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations with concrete failure reasons (bad signature, expired, wrong audience/issuer, disallowed algorithm), the refusal of alg=none, the key-type-to-algorithm-family binding, charging semantics (failed check is a normal charged result; malformed input is a 422 and not charged), no echoing or logging of secrets, and typical latency. The annotations only cover the safety profile (readOnly/idempotent/non-destructive), so this description adds substantial independent value. The 'no network' claim sits in mild tension with openWorldHint=true, but that hint describes the domain of possible inputs (arbitrary tokens/issuers) rather than outbound calls, so it is not a contradiction.

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?

Dense and front-loaded: purpose and the sibling routing come first, then the behavioral/charging facts. It is somewhat overloaded with pricing, the free-tier quota and a docs URL, which are useful but not invocation-critical, keeping it just short of ideal brevity.

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 present the description need not explain return values, and it still covers the important edges: pseudo-claims of failure, the 422-on-malformed-input path, the no-network/no-echo guarantee, and the exactly-one-key constraint. An agent has everything needed to call it correctly on the first attempt.

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 coverage is 100%, so the baseline is 3, but the description adds a real constraint absent from the schema: 'exactly one of `secret`, `public_key` or `jwks`' (the schema only marks token required) plus the note that the key type fixes the algorithm family and that oct keys inside a JWKS are ignored. It stops short of illustrating formats, but the mutual-exclusion rule is a genuine semantic addition.

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 precise verb+resource ('Verify a JWT signature and claims') and immediately differentiates from the sibling decode_jwt ('To read the claims without a key use decode_jwt'). It also names the accepted key types (HMAC secret, PEM public key, JWK Set), so an agent can distinguish it from adjacent crypto utilities like hmac_sign_verify 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing to decode_jwt, an explicit constraint that exactly one of secret/public_key/jwks must be supplied, and an explicit when-NOT condition ('No JWKS URL fetch: send the key set'). The agent knows both the trigger and the alternative.

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

Deploy Server

Other Tools