Skip to content

BlockWerk

by blockwerk.tech · remote · no sign-in to list tools · v1.1.2 · published by tech.blockwerk

Build, run and analyse block-diagram simulations: PID, Bode, FFT, optimisation and code export.

Deletes · 8Final · 1Changes · 15

42 tools: 8 can delete or cancel things, 1 do something that can't be undone, 15 change things and 18 only read.

Scanned Oct 21, 2026

5 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http blockwerk https://blockwerk-mcp-worker.blockwerk.workers.dev/

Findings

Matches of fixed checks, with the text they matched.

5 warn
  • The server marks "evaluate_spec_mask" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "evaluate_spec_mask" says "evaluate": a word for a change.

    What this check looks for
  • The server marks "get_canvas_preview" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "get_canvas_preview" says "get": a word for reading.

    What this check looks for
  • The server marks "optimize_parameters" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "find": a word for reading.

    What this check looks for
  • The server marks "cancel_job" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "cancel_job" says "cancel": a word for removing or ending something.

    What this check looks for
  • The server marks "generate_code" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "generate_code" says "generate": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

42 tools

Deletes or cancels 8Claude Code: deny
  • batch_commandsExecutes multiple canvas manipulation and background job commands in a single round-trip.No findings

    Why it is in this group

    • The description's first verb is "execute": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Executes multiple canvas manipulation and background job commands in a single round-trip. Use "handle" strings to refer to blocks added earlier in the same batch. When adding TextNote annotations, set "anchors" to the handles/IDs of the described blocks so auto-layout keeps each note next to them.

    Annotations the server declares

    • title: Run command batch
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • cancel_jobCancel a running background job.1 finding

    Why it is in this group

    • The name "cancel_job" says "cancel": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "cancel_job" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The name "cancel_job" says "cancel": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    Cancel a running background job.

    Annotations the server declares

    • title: Cancel job
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • clear_canvasRemove all blocks and connections from the canvas.No findings

    Why it is in this group

    • The description's first verb is "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Remove all blocks and connections from the canvas. This is a destructive action that asks the user for approval in the BlockWerk tab.

    Annotations the server declares

    • title: Clear canvas
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • delete_blockDelete a block and all its connections from the canvas.No findings

    Why it is in this group

    • The name "delete_block" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete a block and all its connections from the canvas. This is a destructive action that asks the user for approval in the BlockWerk tab.

    Annotations the server declares

    • title: Delete block
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • load_diagramAtomically replaces the entire canvas with a complete diagram defined as a BlockWerk project JSON string.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Atomically replaces the entire canvas with a complete diagram defined as a BlockWerk project JSON string. The JSON has a "blocks" array (each block needs a unique "id" and "type"; "x"/"y"/"params" are optional) and a "connections" array (each connection needs a unique "id" plus "fromBlockId", "fromPortId", "toBlockId", "toPortId"; a missing id fails validation of the whole load). Block types and port ids are listed by get_available_blocks. This is a destructive action that asks the user for approval in the BlockWerk tab.

    Annotations the server declares

    • title: Load diagram
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • load_templateReplaces the entire canvas with one of the built-in verified diagrams, by id from get_templates.No findings

    Why it is in this group

    • The description's first verb is "replace": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Replaces the entire canvas with one of the built-in verified diagrams, by id from get_templates. The template carries its topology, parameters and simulation settings. Returns the block and connection counts, the verified simulation settings, and the attribution when the model is based on third-party material. This is a destructive action that asks the user for approval in the BlockWerk tab.

    Annotations the server declares

    • title: Load diagram template
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • redo_last_ai_actionRedoes the last undone canvas modification.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Redoes the last undone canvas modification.

    Annotations the server declares

    • title: Redo last AI action
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
  • undo_last_ai_actionUndoes the last canvas modification made by the AI (add block, connect, delete, update parameter).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Undoes the last canvas modification made by the AI (add block, connect, delete, update parameter).

    Annotations the server declares

    • title: Undo last AI action
    • readOnlyHint: false
    • destructiveHint: true
    • openWorldHint: false
Can't be undone 1Claude Code: ask
  • get_canvas_previewCaptures a visual screenshot preview of the canvas branded with the official BlockWerk watermark badge and returns the live interactive URL to view and edit the diagram online.1 finding

    Why it is in this group

    • The name "get_canvas_preview" says "get": a word for reading.
    • The description's first verb is "capture": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "get_canvas_preview" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "get_canvas_preview" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Captures a visual screenshot preview of the canvas branded with the official BlockWerk watermark badge and returns the live interactive URL to view and edit the diagram online.

    Annotations the server declares

    • title: Get canvas preview
    • readOnlyHint: true
    • openWorldHint: false
Changes things 15Claude Code: ask
  • add_blockAdd a new block to the canvas.No findings

    Why it is in this group

    • The name "add_block" says "add": a word for a change.
    Description, as the server wrote it
    Add a new block to the canvas. Returns the new block ID.

    Annotations the server declares

    • title: Add block
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • auto_tune_pidAutomatically tunes a PID controller using the Ziegler-Nichols ultimate cycle method.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Automatically tunes a PID controller using the Ziegler-Nichols ultimate cycle method. Finds the ultimate gain (Ku) and oscillation period (Tu) via binary search, then applies ZN formulas. No prior knowledge of the plant required.

    Annotations the server declares

    • title: Auto-tune PID
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • calculate_metricsCalculates step response metrics from signal data: rise time, settling time, overshoot percentage, and steady-state error.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Calculates step response metrics from signal data: rise time, settling time, overshoot percentage, and steady-state error.

    Annotations the server declares

    • title: Calculate signal metrics
    • readOnlyHint: true
    • openWorldHint: false
  • connect_blocksConnect an output port of one block to an input port of another.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Connect an output port of one block to an input port of another. Automatically resolves common port aliases (e.g., "in" -> "signal" for uPlotDisplay, "in" -> "error" for PIDController, "+" / "-" for Subtraction).

    Annotations the server declares

    • title: Connect blocks
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • evaluate_spec_maskEvaluates signal data against automated design specifications and tolerance corridors (rise time, settling time, overshoot %, steady-state error, min/max limits).1 finding

    Why it is in this group

    • The name "evaluate_spec_mask" says "evaluate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "evaluate_spec_mask" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "evaluate_spec_mask" says "evaluate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Evaluates signal data against automated design specifications and tolerance corridors (rise time, settling time, overshoot %, steady-state error, min/max limits).

    Annotations the server declares

    • title: Evaluate spec mask
    • readOnlyHint: true
    • openWorldHint: false
  • export_diagramExports the current canvas project as a complete BlockWerk JSON string.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Exports the current canvas project as a complete BlockWerk JSON string.

    Annotations the server declares

    • title: Export diagram
    • readOnlyHint: true
    • openWorldHint: false
  • generate_codeGenerates standalone production code (C++, Python, Rust) from the current canvas diagram.1 finding

    Why it is in this group

    • The name "generate_code" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_code" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "generate_code" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates standalone production code (C++, Python, Rust) from the current canvas diagram. Returns structured code files, interfaces (inputs/outputs), execution order, and diagnostics.

    Annotations the server declares

    • title: Generate code
    • readOnlyHint: true
    • openWorldHint: false
  • optimize_multi_parameterOptimizes 2–6 parameters simultaneously using Nelder-Mead simplex search, for example Kp, Ki and Kd of a PID controller at once.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Optimizes 2–6 parameters simultaneously using Nelder-Mead simplex search, for example Kp, Ki and Kd of a PID controller at once.

    Annotations the server declares

    • title: Optimize multiple parameters
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • optimize_parametersFinds the optimal value for a single parameter using golden-section search.1 finding

    Why it is in this group

    • The description's first verb is "find": a word for reading.
    • The server marks it as not read-only (readOnlyHint: false).

    Findings

    • Warn

      The server marks "optimize_parameters" as not read-only (readOnlyHint: false), and its words say it reads.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false}; The description's first verb is "find": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Finds the optimal value for a single parameter using golden-section search. Minimizes IAE (integral absolute error), overshoot, or settling_time within a [min, max] range. Converges in about 10 simulations.

    Annotations the server declares

    • title: Optimize parameter
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • run_simulationTriggers a new simulation run with the current canvas state and settings, refreshing the signal data.No findings

    Why it is in this group

    • The name "run_simulation" says "run": a word for a change.
    Description, as the server wrote it
    Triggers a new simulation run with the current canvas state and settings, refreshing the signal data.

    Annotations the server declares

    • title: Run simulation
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • start_optimizationStart a parameter optimization job in the background.No findings

    Why it is in this group

    • The name "start_optimization" says "start": a word for a change.
    Description, as the server wrote it
    Start a parameter optimization job in the background.

    Annotations the server declares

    • title: Start background optimization
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • sweep_parameterRuns simulations across a list of values for one parameter, returning control quality metrics (IAE, overshoot, settling_time, steady_state_error) per value.No findings

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    Description, as the server wrote it
    Runs simulations across a list of values for one parameter, returning control quality metrics (IAE, overshoot, settling_time, steady_state_error) per value. Requires measureBlockId and setpoint.

    Annotations the server declares

    • title: Sweep parameter
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • tidy_layoutAutomatically rearrange all blocks on the canvas into a clean, left-to-right flow.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Automatically rearrange all blocks on the canvas into a clean, left-to-right flow.

    Annotations the server declares

    • title: Tidy layout
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • update_architect_memoryUpdates the persistent memory of the Architect.No findings

    Why it is in this group

    • The name "update_architect_memory" says "update": a word for a change.
    Description, as the server wrote it
    Updates the persistent memory of the Architect. Provide a JSON object with keys to update/merge.

    Annotations the server declares

    • title: Update architect memory
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
  • update_paramsUpdate one or more parameters of an existing block.No findings

    Why it is in this group

    • The name "update_params" says "update": a word for a change.
    Description, as the server wrote it
    Update one or more parameters of an existing block.

    Annotations the server declares

    • title: Update block parameters
    • readOnlyHint: false
    • destructiveHint: false
    • openWorldHint: false
Only reads 18Claude Code: allow
  • analyze_topologyAnalyzes the block diagram structure: detects feedback loops, signal paths, and system order.No findings

    Why it is in this group

    • The name "analyze_topology" says "analyze": a word for reading.
    Description, as the server wrote it
    Analyzes the block diagram structure: detects feedback loops, signal paths, and system order.

    Annotations the server declares

    • title: Analyze topology
    • readOnlyHint: true
    • openWorldHint: false
  • describe_canvasReturns a structured description of all blocks and connections currently on the canvas.No findings

    Why it is in this group

    • The name "describe_canvas" says "describe": a word for reading.
    Description, as the server wrote it
    Returns a structured description of all blocks and connections currently on the canvas. Set "compact" to true for a token-efficient summary.

    Annotations the server declares

    • title: Describe canvas
    • readOnlyHint: true
    • openWorldHint: false
  • explain_simulationAnalyze the last completed simulation and return a structured diagnosis: signal anomalies (NaN, divergence, oscillation), solver health (rejection rate, efficiency), algebraic loop…No findings

    Why it is in this group

    • The name "explain_simulation" says "explain": a word for reading.
    Description, as the server wrote it
    Analyze the last completed simulation and return a structured diagnosis: signal anomalies (NaN, divergence, oscillation), solver health (rejection rate, efficiency), algebraic loops, and optional stability margins. Returns JSON with severity-tagged findings and actionable suggestions.

    Annotations the server declares

    • title: Explain simulation
    • readOnlyHint: true
    • openWorldHint: false
  • get_ai_historyReturns the list of recent canvas operations performed by the AI, showing what can be undone.No findings

    Why it is in this group

    • The name "get_ai_history" says "get": a word for reading.
    Description, as the server wrote it
    Returns the list of recent canvas operations performed by the AI, showing what can be undone.

    Annotations the server declares

    • title: Get AI action history
    • readOnlyHint: true
    • openWorldHint: false
  • get_analysis_measurementsRetrieves the currently active pinned measurements and their computed values across plotted signals in the Analysis panel.No findings

    Why it is in this group

    • The name "get_analysis_measurements" says "get": a word for reading.
    Description, as the server wrote it
    Retrieves the currently active pinned measurements and their computed values across plotted signals in the Analysis panel.

    Annotations the server declares

    • title: Get analysis measurements
    • readOnlyHint: true
    • openWorldHint: false
  • get_architect_memoryReturns the persistent memory object of the Architect.No findings

    Why it is in this group

    • The name "get_architect_memory" says "get": a word for reading.
    Description, as the server wrote it
    Returns the persistent memory object of the Architect.

    Annotations the server declares

    • title: Get architect memory
    • readOnlyHint: true
    • openWorldHint: false
  • get_available_blocksReturns the block types in the library with their descriptions, configurable parameters, and exact input/output port IDs.No findings

    Why it is in this group

    • The name "get_available_blocks" says "get": a word for reading.
    Description, as the server wrote it
    Returns the block types in the library with their descriptions, configurable parameters, and exact input/output port IDs. Without a filter it returns a compact list of all types; with a list of type IDs it returns full details for those types. Example port IDs: Step out "out"; Sum in "in", out "out"; Gain in "in", out "out"; PIDController in "error","reset", out "out"; uPlotDisplay in "signal". Common aliases (e.g. "in" for PID error, "in" for uPlotDisplay signal, "+" / "-" for Subtraction) are resolved automatically.

    Annotations the server declares

    • title: List available blocks
    • readOnlyHint: true
    • openWorldHint: false
  • get_bode_dataComputes magnitude and phase frequency response (Bode data) between two blocks.No findings

    Why it is in this group

    • The name "get_bode_data" says "get": a word for reading.
    Description, as the server wrote it
    Computes magnitude and phase frequency response (Bode data) between two blocks. Traces path backwards from outputBlockId. Returns analytic response if the path contains only linear blocks, otherwise runs numerical sweep.

    Annotations the server declares

    • title: Get Bode data
    • readOnlyHint: true
    • openWorldHint: false
  • get_engine_statusReturns the simulation engine status, including supported solvers, active background jobs, and compilation/WASM capabilities.No findings

    Why it is in this group

    • The name "get_engine_status" says "get": a word for reading.
    Description, as the server wrote it
    Returns the simulation engine status, including supported solvers, active background jobs, and compilation/WASM capabilities.

    Annotations the server declares

    • title: Get engine status
    • readOnlyHint: true
    • openWorldHint: false
  • get_fft_dataComputes FFT (frequency spectrum) of a Scope signal.No findings

    Why it is in this group

    • The name "get_fft_data" says "get": a word for reading.
    Description, as the server wrote it
    Computes FFT (frequency spectrum) of a Scope signal. Returns frequencies and magnitudes.

    Annotations the server declares

    • title: Get FFT data
    • readOnlyHint: true
    • openWorldHint: false
  • get_job_statusCheck the status and progress of a background job.No findings

    Why it is in this group

    • The name "get_job_status" says "get": a word for reading.
    Description, as the server wrote it
    Check the status and progress of a background job.

    Annotations the server declares

    • title: Get job status
    • readOnlyHint: true
    • openWorldHint: false
  • get_signal_dataReturns time series data from a Scope block output for analysis.No findings

    Why it is in this group

    • The name "get_signal_data" says "get": a word for reading.
    Description, as the server wrote it
    Returns time series data from a Scope block output for analysis.

    Annotations the server declares

    • title: Get signal data
    • readOnlyHint: true
    • openWorldHint: false
  • get_templatesLists the built-in, verified BlockWerk diagrams: classic control systems (PID loop, cruise control, inverted pendulum), signal processing, electrical and physics models.No findings

    Why it is in this group

    • The name "get_templates" says "get": a word for reading.
    Description, as the server wrote it
    Lists the built-in, verified BlockWerk diagrams: classic control systems (PID loop, cruise control, inverted pendulum), signal processing, electrical and physics models. Each entry gives an id, what the diagram does, its difficulty and the blocks it uses. Returns metadata only; load_template puts a diagram on the canvas by id.

    Annotations the server declares

    • title: List diagram templates
    • readOnlyHint: true
    • openWorldHint: false
  • identify_fopdtAnalyzes a step response from a plant to identify its First-Order Plus Dead Time (FOPDT) parameters: Gain (K), Time Constant (tau), and Dead Time (theta).No findings

    Why it is in this group

    • The description's first verb is "analyze": a word for reading.
    Description, as the server wrote it
    Analyzes a step response from a plant to identify its First-Order Plus Dead Time (FOPDT) parameters: Gain (K), Time Constant (tau), and Dead Time (theta). Requires a completed simulation with a step input connected to the plant. Returns the calculated parameters.

    Annotations the server declares

    • title: Identify FOPDT model
    • readOnlyHint: true
    • openWorldHint: false
  • list_jobsList all recent background jobs and their status.No findings

    Why it is in this group

    • The name "list_jobs" says "list": a word for reading.
    Description, as the server wrote it
    List all recent background jobs and their status.

    Annotations the server declares

    • title: List jobs
    • readOnlyHint: true
    • openWorldHint: false
  • validate_canvasPerforms pre-flight topological and numerical integrity checks on the canvas.No findings

    Why it is in this group

    • The name "validate_canvas" says "validate": a word for reading.
    Description, as the server wrote it
    Performs pre-flight topological and numerical integrity checks on the canvas. Detects unconnected required input ports, isolated blocks, parameter domain anomalies, and direct algebraic feedthrough loops.

    Annotations the server declares

    • title: Validate canvas
    • readOnlyHint: true
    • openWorldHint: false
  • validate_engineering_unitsChecks the consistency of engineering units across the diagram.No findings

    Why it is in this group

    • The name "validate_engineering_units" says "validate": a word for reading.
    Description, as the server wrote it
    Checks the consistency of engineering units across the diagram. Detects incompatible connections and missing units.

    Annotations the server declares

    • title: Validate engineering units
    • readOnlyHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.1.2. Values in angle brackets are yours to fill in.

claude mcp add --transport http blockwerk https://blockwerk-mcp-worker.blockwerk.workers.dev/

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__blockwerk__describe_canvas",
      "mcp__blockwerk__get_available_blocks",
      "mcp__blockwerk__get_share_link",
      "mcp__blockwerk__analyze_topology",
      "mcp__blockwerk__get_signal_data",
      "mcp__blockwerk__get_analysis_measurements",
      "mcp__blockwerk__get_architect_memory",
      "mcp__blockwerk__validate_engineering_units",
      "mcp__blockwerk__validate_canvas",
      "mcp__blockwerk__get_templates",
      "mcp__blockwerk__identify_fopdt",
      "mcp__blockwerk__get_job_status",
      "mcp__blockwerk__list_jobs",
      "mcp__blockwerk__explain_simulation",
      "mcp__blockwerk__get_bode_data",
      "mcp__blockwerk__get_fft_data",
      "mcp__blockwerk__get_engine_status",
      "mcp__blockwerk__get_ai_history"
    ],
    "ask": [
      "mcp__blockwerk__add_block",
      "mcp__blockwerk__connect_blocks",
      "mcp__blockwerk__update_params",
      "mcp__blockwerk__export_diagram",
      "mcp__blockwerk__tidy_layout",
      "mcp__blockwerk__calculate_metrics",
      "mcp__blockwerk__evaluate_spec_mask",
      "mcp__blockwerk__update_architect_memory",
      "mcp__blockwerk__get_canvas_preview",
      "mcp__blockwerk__run_simulation",
      "mcp__blockwerk__sweep_parameter",
      "mcp__blockwerk__optimize_parameters",
      "mcp__blockwerk__optimize_multi_parameter",
      "mcp__blockwerk__auto_tune_pid",
      "mcp__blockwerk__start_optimization",
      "mcp__blockwerk__generate_code"
    ],
    "deny": [
      "mcp__blockwerk__delete_block",
      "mcp__blockwerk__load_diagram",
      "mcp__blockwerk__clear_canvas",
      "mcp__blockwerk__batch_commands",
      "mcp__blockwerk__load_template",
      "mcp__blockwerk__cancel_job",
      "mcp__blockwerk__undo_last_ai_action",
      "mcp__blockwerk__redo_last_ai_action"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as blockwerk. Review it before you use it.