Skip to main content
Glama

WAI Quantum job service

Read a pulse program into its schedule

pulse_schedule
Read-onlyIdempotent

Read a pulse program (OpenPulse calibrations: ports, frames, waveforms, play, delay, shift_phase, set_phase, shift_frequency, set_frequency, captures and barriers) into its schedule on frames: every instruction at its sample, each waveform's samples (gaussian, drag, gaussian_square, constant, sech, sine, or explicit), each gate call with the samples its calibration spans, and the digests a pulse run's receipt binds (the program, its calibrations, the schedule). Durations are whole samples of dt (pulse.dt_ns, default 0.5 ns) or refused. A construct the reader does not take is refused with a Q code and its line. Sealed with the service's key. To run it, give the program to run_quantum_circuit with method "pulse".

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": {
      "qasm": "<qasm>"
    },
    "name": "pulse_schedule"
  }
}

Input Schema

NameRequiredDescriptionDefault
qasmYesA pulse program: OpenQASM 3 with `defcalgrammar "openpulse";`, `cal` blocks declaring ports (d0 drives qubit 0, m0 is its measurement port, a0 its acquisition port), frames (newframe(port, frequency Hz, phase)) and waveforms, a `defcal` for every gate it calls on physical qubits ($0), and the calls.
pulseNoA pulse run's options (method "pulse"): the sample period, the levels kept, the tolerance on the stated error, the steps a sample is divided into, each qubit's parameters, static couplings, and ports beyond the names d0, m0, a0.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "description": "A pulse answer as every host gives it (engine::pulse: pulse_schedule and pulse_check on both servers, wai-quantum pulse, POST /v1/pulse/*, the Studio): the request, and the result sealed in a job's form. A pulse program's schedule on frames, or a pulse job checked by running it again. A pulse run itself is a job (method pulse) and follows job-result.v1.json. A result names the engine that made it and this schema (engine and schema). docs/pulse.md explains each.",
      -    "properties": {
      -      "request": {
      -        "description": "The call's request, as given.",
      -        "type": "object"
      -      },
      -      "result": {
      -        "anyOf": [
      -          {
      -            "description": "A pulse program's schedule (pulse_schedule, wai-quantum pulse schedule, POST /v1/pulse/schedule): its frames and ports, every instruction at its sample, each waveform's samples, the gate calls, the reader's notes, and the digests a run binds.",
      -            "properties": {
      -              "answer": {
      -                "const": "schedule"
      -              },
      -              "bits": {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              "calibration": {
      -                "description": "What a pulse run's receipt binds of the program: the BLAKE3 of the control program's text, of its calibrations as written (every cal, defcal and defcalgrammar, joined by newlines), and of the schedule's JSON; a run adds the device's and the target snapshot's.",
      -                "properties": {
      -                  "calibrations": {
      -                    "type": "string"
      -                  },
      -                  "device": {
      -                    "type": "string"
      -                  },
      -                  "program": {
      -                    "type": "string"
      -                  },
      -                  "schedule": {
      -                    "type": "string"
      -                  },
      -                  "target": {
      -                    "properties": {
      -                      "calibration": {
      -                        "type": "object"
      -                      },
      -                      "hash": {
      -                        "type": "string"
      -                      },
      -                      "name": {
      -                        "type": "string"
      -                      }
      -                    },
      -                    "type": "object"
      -                  }
      -                },
      -                "required": [
      -                  "program",
      -                  "calibrations",
      -                  "schedule"
      -                ],
      -                "type": "object"
      -              },
      -              "calls": {
      -                "items": {
      -                  "properties": {
      -                    "end": {
      -                      "type": "integer"
      -                    },
      -                    "line": {
      -                      "type": "integer"
      -                    },
      -                    "name": {
      -                      "type": "string"
      -                    },
      -                    "params": {
      -                      "items": {
      -                        "type": "number"
      -                      },
      -                      "type": "array"
      -                    },
      -                    "qubits": {
      -                      "items": {
      -                        "type": "integer"
      -                      },
      -                      "type": "array"
      -                    },
      -                    "start": {
      -                      "type": "integer"
      -                    }
      -                  },
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "decimated": {
      -                "type": "string"
      -              },
      -              "diagnostics": {
      -                "items": {
      -                  "description": "A reader's note or warning (qasm::diag).",
      -                  "properties": {
      -                    "code": {
      -                      "type": "string"
      -                    },
      -                    "column": {
      -                      "type": "integer"
      -                    },
      -                    "length": {
      -                      "type": "integer"
      -                    },
      -                    "line": {
      -                      "type": "integer"
      -                    },
      -                    "message": {
      -                      "type": "string"
      -                    },
      -                    "outcome": {
      -                      "type": "string"
      -                    }
      -                  },
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "dt_ns": {
      -                "description": "The sample period, ns.",
      -                "type": "number"
      -              },
      -              "duration": {
      -                "description": "The latest time of any frame, samples.",
      -                "type": "integer"
      -              },
      -              "duration_ns": {
      -                "type": "number"
      -              },
      -              "engine": {
      -                "description": "The engine that made the result: the wai-quantum crate's name and version.",
      -                "properties": {
      -                  "name": {
      -                    "const": "wai-quantum"
      -                  },
      -                  "version": {
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "version"
      -                ],
      -                "type": "object"
      -              },
      -              "frames": {
      -                "items": {
      -                  "properties": {
      -                    "frequency_hz": {
      -                      "type": "number"
      -                    },
      -                    "kind": {
      -                      "enum": [
      -                        "drive",
      -                        "measure",
      -                        "acquire"
      -                      ]
      -                    },
      -                    "name": {
      -                      "type": "string"
      -                    },
      -                    "phase": {
      -                      "type": "number"
      -                    },
      -                    "port": {
      -                      "type": "string"
      -                    },
      -                    "qubit": {
      -                      "type": "integer"
      -                    }
      -                  },
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "grammar": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "instructions": {
      -                "items": {
      -                  "properties": {
      -                    "bit": {
      -                      "type": [
      -                        "string",
      -                        "null"
      -                      ]
      -                    },
      -                    "carrier": {
      -                      "description": "The carrier's phase at the play's first sample, cycles in [0, 1).",
      -                      "type": "number"
      -                    },
      -                    "frame": {
      -                      "type": "integer"
      -                    },
      -                    "frequency_hz": {
      -                      "type": "number"
      -                    },
      -                    "length": {
      -                      "type": "integer"
      -                    },
      -                    "line": {
      -                      "type": "integer"
      -                    },
      -                    "op": {
      -                      "enum": [
      -                        "play",
      -                        "delay",
      -                        "shift_phase",
      -                        "set_phase",
      -                        "shift_frequency",
      -                        "set_frequency",
      -                        "capture",
      -                        "barrier"
      -                      ]
      -                    },
      -                    "phase": {
      -                      "type": "number"
      -                    },
      -                    "start": {
      -                      "type": "integer"
      -                    },
      -                    "value": {
      -                      "type": "number"
      -                    },
      -                    "waveform": {
      -                      "type": "integer"
      -                    }
      -                  },
      -                  "required": [
      -                    "frame",
      -                    "op",
      -                    "start",
      -                    "length"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "ports": {
      -                "items": {
      -                  "properties": {
      -                    "kind": {
      -                      "enum": [
      -                        "drive",
      -                        "measure",
      -                        "acquire"
      -                      ]
      -                    },
      -                    "name": {
      -                      "type": "string"
      -                    },
      -                    "qubit": {
      -                      "type": "integer"
      -                    }
      -                  },
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "qubits": {
      -                "items": {
      -                  "type": "integer"
      -                },
      -                "type": "array"
      -              },
      -              "receipt": {
      -                "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) signed serde_json's own text under the domain ending \\x01; they still verify.",
      -                "properties": {
      -                  "alg": {
      -                    "const": "ed25519"
      -                  },
      -                  "canon": {
      -                    "const": "rfc8785",
      -                    "description": "The canonical form the digest is taken over."
      -                  },
      -                  "digest": {
      -                    "description": "The digest signed, 32 bytes in hex.",
      -                    "maxLength": 64,
      -                    "minLength": 64,
      -                    "type": "string"
      -                  },
      -                  "key": {
      -                    "description": "The signing key, 32 bytes in hex.",
      -                    "maxLength": 64,
      -                    "minLength": 64,
      -                    "type": "string"
      -                  },
      -                  "signature": {
      -                    "description": "The signature, 64 bytes in hex.",
      -                    "maxLength": 128,
      -                    "minLength": 128,
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "alg",
      -                  "canon",
      -                  "key",
      -                  "digest",
      -                  "signature"
      -                ],
      -                "title": "wai.quantum.receipt/2",
      -                "type": "object"
      -              },
      -              "schema": {
      -                "const": "wai.quantum.pulse/1"
      -              },
      -              "waveforms": {
      -                "items": {
      -                  "properties": {
      -                    "length": {
      -                      "type": "integer"
      -                    },
      -                    "name": {
      -                      "type": "string"
      -                    },
      -                    "samples": {
      -                      "items": {
      -                        "items": {
      -                          "type": "number"
      -                        },
      -                        "maxItems": 2,
      -                        "minItems": 2,
      -                        "type": "array"
      -                      },
      -                      "type": "array"
      -                    },
      -                    "samples_every": {
      -                      "description": "Each k-th sample is drawn, when the schedule holds more than the view writes out.",
      -                      "type": "integer"
      -                    }
      -                  },
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              }
      -            },
      -            "required": [
      -              "answer",
      -              "dt_ns",
      -              "duration",
      -              "frames",
      -              "waveforms",
      -              "instructions",
      -              "calls",
      -              "calibration"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "description": "A pulse job checked (pulse_check, wai-quantum pulse check, POST /v1/pulse/check): its receipt's signature, its program's digest, and the request run again with the result held to the one given.",
      -            "properties": {
      -              "answer": {
      -                "const": "check"
      -              },
      -              "calibration": {},
      -              "density_hash": {
      -                "properties": {
      -                  "given": {},
      -                  "recomputed": {}
      -                },
      -                "type": "object"
      -              },
      -              "differences": {
      -                "description": "Each field (or field.member) whose value differs from the run here.",
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              "engine": {
      -                "description": "The engine that made the result: the wai-quantum crate's name and version.",
      -                "properties": {
      -                  "name": {
      -                    "const": "wai-quantum"
      -                  },
      -                  "version": {
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "name",
      -                  "version"
      -                ],
      -                "type": "object"
      -              },
      -              "key": {},
      -              "program": {
      -                "type": "boolean"
      -              },
      -              "receipt": {
      -                "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) signed serde_json's own text under the domain ending \\x01; they still verify.",
      -                "properties": {
      -                  "alg": {
      -                    "const": "ed25519"
      -                  },
      -                  "canon": {
      -                    "const": "rfc8785",
      -                    "description": "The canonical form the digest is taken over."
      -                  },
      -                  "digest": {
      -                    "description": "The digest signed, 32 bytes in hex.",
      -                    "maxLength": 64,
      -                    "minLength": 64,
      -                    "type": "string"
      -                  },
      -                  "key": {
      -                    "description": "The signing key, 32 bytes in hex.",
      -                    "maxLength": 64,
      -                    "minLength": 64,
      -                    "type": "string"
      -                  },
      -                  "signature": {
      -                    "description": "The signature, 64 bytes in hex.",
      -                    "maxLength": 128,
      -                    "minLength": 128,
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "alg",
      -                  "canon",
      -                  "key",
      -                  "digest",
      -                  "signature"
      -                ],
      -                "title": "wai.quantum.receipt/2",
      -                "type": "object"
      -              },
      -              "reproduced": {
      -                "type": "boolean"
      -              },
      -              "schema": {
      -                "const": "wai.quantum.pulse/1"
      -              },
      -              "signature": {
      -                "type": "boolean"
      -              },
      -              "statement": {
      -                "type": "string"
      -              },
      -              "verified": {
      -                "type": "boolean"
      -              }
      -            },
      -            "required": [
      -              "answer",
      -              "verified",
      -              "signature",
      -              "program",
      -              "reproduced",
      -              "differences",
      -              "statement"
      -            ],
      -            "type": "object"
      -          }
      -        ],
      -        "description": "A schedule or a check, with its receipt."
      -      }
      -    },
      -    "required": [
      -      "request",
      -      "result"
      -    ],
      -    "title": "wai.quantum.pulse/1",
      -    "type": "object"
      -  },
      -  {
      -    "description": "A refusal as data: the message, every code in it (the last is the code), its outcome and meaning as the code's table gives them. A host that refuses for its own reasons gives the error alone.",
      -    "properties": {
      -      "code": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "codes": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "error": {
      -        "type": "string"
      -      },
      -      "meaning": {
      -        "type": "string"
      -      },
      -      "message": {
      -        "type": "string"
      -      },
      -      "outcome": {
      -        "enum": [
      -          "refused",
      -          "retry",
      -          "failed",
      -          "lowered",
      -          "carried",
      -          "preserved",
      -          "warned",
      -          "dropped",
      -          "defaulted"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "description": "A pulse answer as every host gives it (engine::pulse: pulse_schedule and pulse_check on both servers, wai-quantum pulse, POST /v1/pulse/*, the Studio): the request, and the result sealed in a job's form. A pulse program's schedule on frames, or a pulse job checked by running it again. A pulse run itself is a job (method pulse) and follows job-result.v1.json. A result names the engine that made it and this schema (engine and schema). docs/pulse.md explains each.",
      +    "properties": {
      +      "request": {
      +        "description": "The call's request, as given.",
      +        "type": "object"
      +      },
      +      "result": {
      +        "anyOf": [
      +          {
      +            "description": "A pulse program's schedule (pulse_schedule, wai-quantum pulse schedule, POST /v1/pulse/schedule): its frames and ports, every instruction at its sample, each waveform's samples, the gate calls, the reader's notes, and the digests a run binds.",
      +            "properties": {
      +              "answer": {
      +                "const": "schedule"
      +              },
      +              "bits": {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "calibration": {
      +                "description": "What a pulse run's receipt binds of the program: the BLAKE3 of the control program's text, of its calibrations as written (every cal, defcal and defcalgrammar, joined by newlines), and of the schedule's JSON; a run adds the device's and the target snapshot's.",
      +                "properties": {
      +                  "calibrations": {
      +                    "type": "string"
      +                  },
      +                  "device": {
      +                    "type": "string"
      +                  },
      +                  "program": {
      +                    "type": "string"
      +                  },
      +                  "schedule": {
      +                    "type": "string"
      +                  },
      +                  "target": {
      +                    "properties": {
      +                      "calibration": {
      +                        "type": "object"
      +                      },
      +                      "hash": {
      +                        "type": "string"
      +                      },
      +                      "name": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "type": "object"
      +                  }
      +                },
      +                "required": [
      +                  "program",
      +                  "calibrations",
      +                  "schedule"
      +                ],
      +                "type": "object"
      +              },
      +              "calls": {
      +                "items": {
      +                  "properties": {
      +                    "end": {
      +                      "type": "integer"
      +                    },
      +                    "line": {
      +                      "type": "integer"
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "params": {
      +                      "items": {
      +                        "type": "number"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "qubits": {
      +                      "items": {
      +                        "type": "integer"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "start": {
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "decimated": {
      +                "type": "string"
      +              },
      +              "diagnostics": {
      +                "items": {
      +                  "description": "A reader's note or warning (qasm::diag).",
      +                  "properties": {
      +                    "code": {
      +                      "type": "string"
      +                    },
      +                    "column": {
      +                      "type": "integer"
      +                    },
      +                    "length": {
      +                      "type": "integer"
      +                    },
      +                    "line": {
      +                      "type": "integer"
      +                    },
      +                    "message": {
      +                      "type": "string"
      +                    },
      +                    "outcome": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "dt_ns": {
      +                "description": "The sample period, ns.",
      +                "type": "number"
      +              },
      +              "duration": {
      +                "description": "The latest time of any frame, samples.",
      +                "type": "integer"
      +              },
      +              "duration_ns": {
      +                "type": "number"
      +              },
      +              "engine": {
      +                "description": "The engine that made the result: the wai-quantum crate's name and version.",
      +                "properties": {
      +                  "name": {
      +                    "const": "wai-quantum"
      +                  },
      +                  "version": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "version"
      +                ],
      +                "type": "object"
      +              },
      +              "frames": {
      +                "items": {
      +                  "properties": {
      +                    "frequency_hz": {
      +                      "type": "number"
      +                    },
      +                    "kind": {
      +                      "enum": [
      +                        "drive",
      +                        "measure",
      +                        "acquire"
      +                      ]
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "phase": {
      +                      "type": "number"
      +                    },
      +                    "port": {
      +                      "type": "string"
      +                    },
      +                    "qubit": {
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "grammar": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "instructions": {
      +                "items": {
      +                  "properties": {
      +                    "bit": {
      +                      "type": [
      +                        "string",
      +                        "null"
      +                      ]
      +                    },
      +                    "carrier": {
      +                      "description": "The carrier's phase at the play's first sample, cycles in [0, 1).",
      +                      "type": "number"
      +                    },
      +                    "frame": {
      +                      "type": "integer"
      +                    },
      +                    "frequency_hz": {
      +                      "type": "number"
      +                    },
      +                    "length": {
      +                      "type": "integer"
      +                    },
      +                    "line": {
      +                      "type": "integer"
      +                    },
      +                    "op": {
      +                      "enum": [
      +                        "play",
      +                        "delay",
      +                        "shift_phase",
      +                        "set_phase",
      +                        "shift_frequency",
      +                        "set_frequency",
      +                        "capture",
      +                        "barrier"
      +                      ]
      +                    },
      +                    "phase": {
      +                      "type": "number"
      +                    },
      +                    "start": {
      +                      "type": "integer"
      +                    },
      +                    "value": {
      +                      "type": "number"
      +                    },
      +                    "waveform": {
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "required": [
      +                    "frame",
      +                    "op",
      +                    "start",
      +                    "length"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "ports": {
      +                "items": {
      +                  "properties": {
      +                    "kind": {
      +                      "enum": [
      +                        "drive",
      +                        "measure",
      +                        "acquire"
      +                      ]
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "qubit": {
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "qubits": {
      +                "items": {
      +                  "type": "integer"
      +                },
      +                "type": "array"
      +              },
      +              "receipt": {
      +                "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) sealed their writer's compact text under the domain ending \\x01; they still verify. wai/extensions/quantum-providers.md section 8.2 states the seal in full, and section 8.4 what a verifier checks.",
      +                "properties": {
      +                  "alg": {
      +                    "const": "ed25519"
      +                  },
      +                  "canon": {
      +                    "const": "rfc8785",
      +                    "description": "The canonical form the digest is taken over."
      +                  },
      +                  "digest": {
      +                    "description": "The digest signed, 32 bytes in lower-case hex.",
      +                    "maxLength": 64,
      +                    "minLength": 64,
      +                    "pattern": "^[0-9a-f]{64}$",
      +                    "type": "string"
      +                  },
      +                  "key": {
      +                    "description": "The signing key, 32 bytes in lower-case hex.",
      +                    "maxLength": 64,
      +                    "minLength": 64,
      +                    "pattern": "^[0-9a-f]{64}$",
      +                    "type": "string"
      +                  },
      +                  "signature": {
      +                    "description": "The signature, 64 bytes in lower-case hex.",
      +                    "maxLength": 128,
      +                    "minLength": 128,
      +                    "pattern": "^[0-9a-f]{128}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "alg",
      +                  "canon",
      +                  "key",
      +                  "digest",
      +                  "signature"
      +                ],
      +                "title": "wai.quantum.receipt/2",
      +                "type": "object"
      +              },
      +              "schema": {
      +                "const": "wai.quantum.pulse/1"
      +              },
      +              "waveforms": {
      +                "items": {
      +                  "properties": {
      +                    "length": {
      +                      "type": "integer"
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "samples": {
      +                      "items": {
      +                        "items": {
      +                          "type": "number"
      +                        },
      +                        "maxItems": 2,
      +                        "minItems": 2,
      +                        "type": "array"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "samples_every": {
      +                      "description": "Each k-th sample is drawn, when the schedule holds more than the view writes out.",
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "answer",
      +              "dt_ns",
      +              "duration",
      +              "frames",
      +              "waveforms",
      +              "instructions",
      +              "calls",
      +              "calibration"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "description": "A pulse job checked (pulse_check, wai-quantum pulse check, POST /v1/pulse/check): its receipt's signature, its program's digest, and the request run again with the result held to the one given.",
      +            "properties": {
      +              "answer": {
      +                "const": "check"
      +              },
      +              "calibration": {},
      +              "density_hash": {
      +                "properties": {
      +                  "given": {},
      +                  "recomputed": {}
      +                },
      +                "type": "object"
      +              },
      +              "differences": {
      +                "description": "Each field (or field.member) whose value differs from the run here.",
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "engine": {
      +                "description": "The engine that made the result: the wai-quantum crate's name and version.",
      +                "properties": {
      +                  "name": {
      +                    "const": "wai-quantum"
      +                  },
      +                  "version": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "name",
      +                  "version"
      +                ],
      +                "type": "object"
      +              },
      +              "key": {},
      +              "program": {
      +                "type": "boolean"
      +              },
      +              "receipt": {
      +                "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) sealed their writer's compact text under the domain ending \\x01; they still verify. wai/extensions/quantum-providers.md section 8.2 states the seal in full, and section 8.4 what a verifier checks.",
      +                "properties": {
      +                  "alg": {
      +                    "const": "ed25519"
      +                  },
      +                  "canon": {
      +                    "const": "rfc8785",
      +                    "description": "The canonical form the digest is taken over."
      +                  },
      +                  "digest": {
      +                    "description": "The digest signed, 32 bytes in lower-case hex.",
      +                    "maxLength": 64,
      +                    "minLength": 64,
      +                    "pattern": "^[0-9a-f]{64}$",
      +                    "type": "string"
      +                  },
      +                  "key": {
      +                    "description": "The signing key, 32 bytes in lower-case hex.",
      +                    "maxLength": 64,
      +                    "minLength": 64,
      +                    "pattern": "^[0-9a-f]{64}$",
      +                    "type": "string"
      +                  },
      +                  "signature": {
      +                    "description": "The signature, 64 bytes in lower-case hex.",
      +                    "maxLength": 128,
      +                    "minLength": 128,
      +                    "pattern": "^[0-9a-f]{128}$",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "alg",
      +                  "canon",
      +                  "key",
      +                  "digest",
      +                  "signature"
      +                ],
      +                "title": "wai.quantum.receipt/2",
      +                "type": "object"
      +              },
      +              "reproduced": {
      +                "type": "boolean"
      +              },
      +              "schema": {
      +                "const": "wai.quantum.pulse/1"
      +              },
      +              "signature": {
      +                "type": "boolean"
      +              },
      +              "statement": {
      +                "type": "string"
      +              },
      +              "verified": {
      +                "type": "boolean"
      +              }
      +            },
      +            "required": [
      +              "answer",
      +              "verified",
      +              "signature",
      +              "program",
      +              "reproduced",
      +              "differences",
      +              "statement"
      +            ],
      +            "type": "object"
      +          }
      +        ],
      +        "description": "A schedule or a check, with its receipt."
      +      }
      +    },
      +    "required": [
      +      "request",
      +      "result"
      +    ],
      +    "title": "wai.quantum.pulse/1",
      +    "type": "object"
      +  },
      +  {
      +    "description": "A refusal as data: the message, every code in it (the last is the code), its outcome and meaning as the code's table gives them. A host that refuses for its own reasons gives the error alone.",
      +    "properties": {
      +      "code": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "codes": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "error": {
      +        "type": "string"
      +      },
      +      "meaning": {
      +        "type": "string"
      +      },
      +      "message": {
      +        "type": "string"
      +      },
      +      "outcome": {
      +        "enum": [
      +          "refused",
      +          "retry",
      +          "failed",
      +          "lowered",
      +          "carried",
      +          "preserved",
      +          "warned",
      +          "dropped",
      +          "defaulted"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, closed-world behavior. The description adds meaningful beyond-annotation details: durations must be whole samples or are refused, unsupported constructs are refused with a Q code and line, and results are sealed with the service's key.

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 definition is front-loaded and information-dense, with no filler sentences. The long enumerated list of OpenPulse constructs is justified, though the prose is packed and could be slightly easier to scan.

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 complex read/schedule tool, the description covers purpose, refusal behavior, units, sealing, and the alternative run path. With a full input schema, annotations, and an output schema, an agent has what it needs to invoke this correctly.

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 coverage is 100%, so the schema already documents the qasm and pulse options thoroughly. The description adds useful context about dt-based sample durations and default 0.5 ns, but does not need to re-explain the nested pulse options.

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 states a specific verb and resource: reading a pulse program into its schedule on frames, and it enumerates the schedule contents. It also distinguishes this inspection/scheduling step from actually running the program by naming run_quantum_circuit with method "pulse".

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?

It clearly tells the agent to use run_quantum_circuit with method "pulse" when the goal is to run the program, framing this tool as the read/schedule step. It does not give explicit exclusions against other siblings, but the intended context is clear.

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