{"id":"text-extract-between","version":"1.0.0","description":"Extract exact substrings between start and end markers, left to right and non-overlapping.","supported_operations":["text extract between","extract text between markers","substring between start and end markers"],"unsupported_operations":["regular expressions","nested or balanced delimiters","case-insensitive search","overlapping matches","grapheme cluster matching","read files"],"semantics":["text is a UTF-8 bounded string of at most 250 KiB. Empty text yields matches [] and truncated false.","start and end are non-empty literal strings of at most 4096 UTF-8 bytes. They may be equal.","Search is exact UTF-16 code-unit equality, left to right, without regex, case folding, or Unicode normalization.","After a complete match, search continues after the end marker so matches never overlap. Nested markers inside a match are not treated as new starts.","If start equals end, each pair of consecutive occurrences yields the contents between them, which may be empty.","If a start marker is found and no end marker follows it, the tool throws unclosed start marker.","max_matches is a JSON integer 1..1000 and defaults to 100. At most that many matches are returned.","truncated is true when at least one further complete match exists after max_matches were collected; exceeding the cap does not throw."],"limits":{"max_text_bytes":256000,"max_marker_bytes":4096,"default_max_matches":100,"max_matches":1000},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["text","start","end"],"properties":{"text":{"type":"string","maxLength":256000},"start":{"type":"string","minLength":1,"maxLength":4096},"end":{"type":"string","minLength":1,"maxLength":4096},"max_matches":{"type":"integer","minimum":1,"maximum":1000}}},"output_schema":{"type":"object","additionalProperties":false,"required":["matches","truncated"],"properties":{"matches":{"type":"array","maxItems":1000,"items":{"type":"string"}},"truncated":{"type":"boolean"}}},"examples":[{"input":{"text":"pre[one]mid[two]post","start":"[","end":"]"},"output":{"matches":["one","two"],"truncated":false}}],"execute_url":"/v1/tools/text-extract-between/versions/1.0.0/execute"}