В языке MUMPS всё строится вокруг иерархического дерева переменных. Глобальные переменные начинаются с символа ^ (карет) и хранятся на диске — их видят все процессы. Локальные переменные живут только в памяти текущего процесса и теряются при его завершении. Каждая точка в этом дереве называется node — у неё может быть значение, потомки, и то и другое, или ничего. Тип данных в MUMPS один — string, даже числа хранятся как строки. Чтобы выбрать нужный узел, используют subscript — выражение в скобках после имени переменной. Несколько подписок через запятую задают путь по дереву.
Когда процесс работает с глобальной переменной, система запоминает её имя и все подписки, кроме последней, в специальном скрытом регистре — Naked Indicator. Это позволяет делать так называемые naked references: запись вида ^(expr) использует запомненный контекст и подставляет только последний индекс. У каждого узла есть D Attribute — целое число (0, 1, 10 или 11), которое возвращает $DATA. Единицы в разрядах показывают, есть ли у узла значение и есть ли потомки.
Код организован в routine — это единица хранения и обмена программой, состоит из имени (head) и последовательности строк (body). Строки могут иметь label — имя или целое число в начале, на которое ссылаются GOTO, DO и $TEXT. Для вызова подпрограмм используется DO и XECUTE — они кладут точки возврата на Routine Stack, а QUIT снимает верхушку. Исполнение одного процесса изолировано в partition, куда входят локальные переменные, стек вызовов, Test Switch и Naked Indicator.
Управление потоком устроено необычно. Команды FOR и IF действуют только на остаток текущей строки — это их область видимости (scope). После команды можно добавить пост-кондишинал через :tvexpr — он включает или выключает выполнение без изменения $TEST. $TEST — это тестовый переключатель, булево значение (0 или 1), которое выставляется командами IF, OPEN, LOCK и READ с таймаутом. Таймаут задаётся через :numexpr в секундах и тоже меняет $TEST.
Ввод-вывод привязан к текущему устройству — его идентификатор хранится в $IO, а сменить устройство можно через USE. READ и WRITE работают с этим устройством. Среди системных переменных есть $HOROLOG (время/дата) и другие специальные переменные, все с префиксом $, доступные только для чтения. Истинность любого значения определяется просто: берётся числовая интерпретация строки, если не ноль — true (1), иначе false (0).