Skip to main content
Glama
dpdanpittman

mcp-server-quint

by dpdanpittman

quint_run

Simulate Quint specifications with random execution to verify invariants and detect violations through counterexample traces.

Instructions

Simulate a Quint specification with random execution. Runs the state machine and optionally checks an invariant. Returns pass/fail and a counterexample trace if the invariant is violated.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceNoQuint specification source code (.qnt content)
file_pathNoPath to a .qnt file on disk
initNoInit action name (default: "init")
stepNoStep action name (default: "step")
invariantNoInvariant to check during simulation
max_samplesNoNumber of simulation runs (default: 10000)
max_stepsNoMax steps per run (default: 20)
seedNoRandom seed for reproducibility

Implementation Reference

  • Tool definition and handler for 'quint_run'. It uses 'runWithSource' to invoke the 'quint run' command with the provided simulation arguments (init, step, invariant, max_samples, max_steps, seed).
    server.tool(
      "quint_run",
      "Simulate a Quint specification with random execution. Runs the state machine and optionally checks an invariant. Returns pass/fail and a counterexample trace if the invariant is violated.",
      {
        ...sourceSchema,
        init: z.string().optional().describe('Init action name (default: "init")'),
        step: z.string().optional().describe('Step action name (default: "step")'),
        invariant: z
          .string()
          .optional()
          .describe("Invariant to check during simulation"),
        max_samples: z
          .number()
          .optional()
          .describe("Number of simulation runs (default: 10000)"),
        max_steps: z
          .number()
          .optional()
          .describe("Max steps per run (default: 20)"),
        seed: z.number().optional().describe("Random seed for reproducibility"),
      },
      async ({
        source,
        file_path,
        init,
        step,
        invariant,
        max_samples,
        max_steps,
        seed,
      }) => {
        try {
          const result = await runWithSource(source, file_path, (f) => {
            const args = ["run"];
            if (init) args.push(`--init=${init}`);
            if (step) args.push(`--step=${step}`);
            if (invariant) args.push(`--invariant=${invariant}`);
            if (max_samples != null) args.push(`--max-samples=${max_samples}`);
            if (max_steps != null) args.push(`--max-steps=${max_steps}`);
            if (seed != null) args.push(`--seed=${seed}`);
            args.push(f);
            return args;
          });
          return formatResult(result);
        } catch (err) {
          return {
            content: [{ type: "text", text: `Error: ${err.message}` }],
            isError: true,
          };
        }
      },
    );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dpdanpittman/mcp-server-quint'

If you have feedback or need assistance with the MCP directory API, please join our Discord server