How to pass dynamic arguments into Wordsmith chop parameters
Your only problem here is limit but would something like this work for you?
{# Default tags permitted #}
{% set defaultTags = &quot;&lt;p&gt;&quot; %}

{# Concatenate default + custom tags #}
{% set allowedTags = defaultTags ~ matrixBlock.tagList ?? null %}

{# Limit - use if provided or set to unlimited using a huge number #}
{% set limit = matrixBlock.maxChars ?? 1000000000000000 %}

{% if intro %}
    {% set intro = intro|md|chop(limit= limit, unit='c', allowedTags=allowedTags) %}
{% endif %}