# State Machine Designer — MCP tool `findutils:state_machine_designer`

Validate a finite state machine given as nodes and edges and return a normalized machine config plus issues. Checks for missing ids, dangling transitions, duplicate labels, missing or multiple initial states, unreachable states, and outgoing transitions from final states. The config matches the designer's "Export Code" output ({ id, initial, states: { State: { EVENT: Target } } }).

- Category: validation
- MCP server: https://mcp.findutils.com/ (Streamable HTTP, no API keys, 120 req/min per IP)
- REST endpoint: POST https://api.findutils.com/api/tools/state-machine-designer/execute (no API keys, 60 req/min per IP)
- Reference page: https://findutils.com/mcp/state-machine-designer/
- Same tool on the other surface: https://findutils.com/api/state-machine-designer/

## Connect

```bash
claude mcp add findutils --transport http https://mcp.findutils.com/
```

Claude Desktop (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "findutils": {
      "url": "https://mcp.findutils.com/"
    }
  }
}
```

## Call the tool (verified example)

```bash
curl -X POST https://mcp.findutils.com/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "state_machine_designer",
      "arguments": {
        "nodes": [
          {
            "id": "s1",
            "data": {
              "label": "Idle",
              "stateType": "initial"
            }
          },
          {
            "id": "s2",
            "data": {
              "label": "Done",
              "stateType": "final"
            }
          }
        ],
        "edges": [
          {
            "source": "s1",
            "target": "s2",
            "label": "FINISH"
          }
        ]
      }
    }
  }'
```

## Input schema

| Argument | Type | Required | Description |
|---|---|---|---|
| `nodes` | array | yes | States: [{ id, data: { label, stateType: initial\|normal\|final, description? } }]. Flat { id, label, stateType } objects are also accepted. |
| `edges` | array | yes | Transitions: [{ source, target, label }] where label is the event name (uppercased in the config; "EVENT" when missing). |
| `machine_id` | string | no | Id written into the config. Default: "stateMachine". Default: `"stateMachine"`. |

Example arguments (verified):

```json
{
  "nodes": [
    {
      "id": "s1",
      "data": {
        "label": "Idle",
        "stateType": "initial"
      }
    },
    {
      "id": "s2",
      "data": {
        "label": "Done",
        "stateType": "final"
      }
    }
  ],
  "edges": [
    {
      "source": "s1",
      "target": "s2",
      "label": "FINISH"
    }
  ]
}
```

## Also a REST endpoint

```bash
curl -X POST https://api.findutils.com/api/tools/state-machine-designer/execute \
  -H "Content-Type: application/json" \
  -d '{
    "nodes": [
      {
        "id": "s1",
        "data": {
          "label": "Idle",
          "stateType": "initial"
        }
      },
      {
        "id": "s2",
        "data": {
          "label": "Done",
          "stateType": "final"
        }
      }
    ],
    "edges": [
      {
        "source": "s1",
        "target": "s2",
        "label": "FINISH"
      }
    ]
  }'

# Parameter schema
curl https://api.findutils.com/api/tools/state-machine-designer
```

Full REST reference: https://findutils.com/api/state-machine-designer/ · OpenAPI 3.1 spec: https://findutils.com/api/openapi.json

---
Full catalog: POST https://mcp.findutils.com/ with method `tools/list` · https://findutils.com/mcp/ · https://findutils.com/llms.txt
