Each TCP End-point provides a byte-stream interface to an application which automatically implies that there must be some limit on the size of this stream. This reassembly buffer can have a variable size and is indicated by the 16-bit window size option in TCP header. It is dynamic and decreases when an application is yet to read data from its buffer and increases again after the application reads it.
IPv4 allows the maximum size of a datagram to be 65,535 bytes and hence the maximum amount of TCP data it can contain is < 65,535 bytes. But, the link that actually transfers the data may not be able to transmit such large packets. They have a limit called MTU (Maximum Transmission Unit). When the size of the packets exceeds this, fragmentation happens. To avoid fragmentation, TCP can let the peer know the maximum size of the segment it's willing to accept by seeing its own MTU.
Sometimes a small MSS can also indicate a small reassembly buffer that any TCP implementation is guaranteed to support if the MSS sent by a client is lesser than the least possible MTU (usually 1500 bytes). For example, a sender sending MSS of 536 doesn't indicate a small MTU but a small reassembly buffer but a MSS of 1460 may indicate a MTU of 1500 bytes.