Skip to main content
Glama
rosettawang

crystallography-mcp

by rosettawang

Crystallography MCP server

Просмотр CIF, межплоскостные расстояния, порошковые дифрактограммы и идентификация полиморфов триацилглицеринов на основе pymatgen.

Создан 21 августа 2026 года для работы с лаурелатовым ореховым жиром, но применим в любой области.

Почему это, а не VESTA MCP

У VESTA нет скриптового интерфейса — ни документированных аргументов командной строки, ни пакетного режима, ни макросов, ни работы без графического интерфейса. MCP-обёртка над ним могла бы только запускать open -a VESTA file.cif и делать скриншоты окна. pymatgen предоставляет доступ к реальной науке, поэтому именно его оборачивает этот сервер.

Оставьте VESTA для визуального просмотра человеком. В этом он действительно хорош.

Related MCP server: mofstructure-mcp

Установка

Требуется Python ≥3.10 (текущая версия pymatgen требует именно его) и собственное виртуальное окружение:

python3 -m venv ~/.venvs/crystal
~/.venvs/crystal/bin/python -m pip install -r requirements.txt

Зарегистрируйте в Claude Code на уровне пользователя, чтобы он загружался в каждой сессии:

claude mcp add -s user crystallography -- \
  "$HOME/.venvs/crystal/bin/python" \
  "$HOME/Documents/crystallography-mcp/server.py"

Проверьте и удалите:

claude mcp list
claude mcp remove -s user crystallography

Сервер работает с любым MCP-клиентом, не только с Claude Code — это обычный stdio-сервер, поэтому укажите клиенту на <venv python> server.py.

Инструменты

Инструмент

Что делает

list_datablocks

Перечисляет структуры внутри CIF. Вызывайте первым на незнакомом файле.

read_structure

Ячейка, объём, состав, плотность, пространственная группа spglib

d_spacings

d и 2θ для конкретных отражений [h,k,l]

powder_pattern

Полная расчётная дифрактерограмма с индексами hkl и относительными интенсивностями

fingerprint_structure

Вердикт α / β′ / β по структурным коротким межплоскостным расстояниям

fingerprint_pattern

Вердикт α / β′ / β по экспериментальной дифрактерограмме (список или двухколоночный файл)

compare_structures

Сопоставление pymatgen StructureMatcher + среднеквадратичное смещение

Ловушка с несколькими датаблоками

Некоторые депонированные CIF-файлы содержат более одной структуры. vanlangevelde2000_CLC_MPM_bprime.cif содержит обе структуры: CLC (a = 57.368 Å, шаблон β′, который важен) и MPM (a = 76.21 Å). Молча взять блок 0 — это способ проанализировать не ту структуру. list_datablocks существует именно для того, чтобы это было видно.

Полиморфные отпечатки

Диагностические короткие межплоскостные расстояния субъячейки, Å:

Форма

Линии

Сигнатура

α

4.15

одиночная широкая линия, гексагональная субъячейка

β′

4.34 / 4.11 + 3.85 / 3.80

дублет, орторомбическая перпендикулярная

β

4.60, 3.85, 3.70

сильный синглет 4.6, триклинная параллельная

Проверено на обоих решённых шаблонах с известными ответами:

  • vanlangevelde2000_CLC_MPM_bprime.cif блок 0 → BETA_PRIME

  • vanlangevelde1999_PPP_beta.cifBETA

А также на синтетических дифрактерограммах, построенных из каждого набора эталонных линий → верный вердикт во всех трёх случаях.

Известные ограничения

  • Интенсивности не уровня Ритвельда. Табулированные форм-факторы, фактор Дебая–Уоллера опущен. Положения пиков точны; относительные интенсивности достаточны для ранжирования линий, но не для уточнения заселённостей.

  • Поиск пиков намеренно прост — локальные максимумы с фильтром значимости на плоском фоне. Для слабой или зашумлённой дифрактерограммы уменьшите min_prominence и просмотрите найденный список перед тем, как доверять вердикту.

  • spglib может не совпадать с заявленной в CIF пространственной группой. Он заново выводит симметрию из координат, а в опубликованных структурах с длинными цепями часто есть разупорядоченные или расщеплённые концевые сайты. Ослабьте symprec перед выводами.

  • compare_structures, возвращающий False для разных длин цепей, — это ожидаемо, а не ошибка — шаблон C16 никогда не совпадёт с жиром C10/C12.

Примечание о происхождении

Этот сервер нашёл реальную ошибку в R&D/modeling/baynutfat/structure.py: трансляция I-центрирования применялась дважды для β′-CLC (в CIF уже перечислены все 8 центрированных операторов), что оставляло 4 дублированных атома углерода — 284 C вместо 280. Положения пиков не пострадали, структурные факторы были слегка искажены. Теперь это защищено приёмочным тестом T10 и modeling/tests/crosscheck_pymatgen.py.

Это аргумент в пользу наличия второй реализации.

Цитирование

Если результат этого сервера попадёт в публикацию, цитируйте pymatgen — именно он выполняет основную работу:

S.P. Ong et al., Comput. Mater. Sci. 68, 314–319 (2013).

А если вы что-то визуализировали в VESTA рядом с ним, VESTA тоже просит цитирования:

K. Momma and F. Izumi, J. Appl. Crystallogr. 44, 1272–1276 (2011).

Лицензия

MIT — см. LICENSE.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for deconstructing and analyzing Metal-Organic Framework (MOF) structures, including SBU and ligand identification, guest removal, and COF stacking analysis. It enables AI agents to perform automated chemical informatics and structural characterization on crystal structures via CIF files.
    1
  • A
    license
    B
    quality
    B
    maintenance
    Headless PyMOL for molecular visualization, GROMACS/LAMMPS MD trajectories, and clathrate-hydrate cage analysis: H-bond networks, F3/F4 order parameters, and TRACE cage perception + occupancy.
    32
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rosettawang/crystallography-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server