If you need GPIO, unless it's high bandwidth stuff, a MCP2221A break out and I2C ADC/expander is probably better anyway. You can stack as many MCP23017 as you need on one of them.
Yes, if you actually do need GPIO, you can still just attach something external unless you need close-to-realtime reactions or high bandwidth.
MCP2221A breakout boards seem to be relatively expensive though (about $10?), my ugly solution would be something like an ESP32 receiving commands over Serial and setting its GPIO pins. Very overkill and a waste of a very capable chip, but ESP32 start at $1.50 or so, that’s hard to beat.
Good idea with the ESP32. As for the MCP2221A boards, there's a fresh supply of them for under $5 from China and they just work out of the box on Linux with off the shelf python library so no having to futz with the brains of the ESP32.
Where are you getting the MCP2221A for $5? I’m assuming you’re in the US? Here in Germany, the lowest price I found was 11€ on AliExpress. Or is there a better source I’m missing?
If you need GPIO, unless it's high bandwidth stuff, a MCP2221A break out and I2C ADC/expander is probably better anyway. You can stack as many MCP23017 as you need on one of them.