MCP-сервер
Текст может содержать неточности, устаревшие данные или технические ошибки. Пожалуйста, проверяйте критически важную информацию перед использованием.
В Architeezy встроен сервер Model Context Protocol: через него ИИ-агент работает с моделями напрямую. Агенту доступны список проектов, чтение модели и её метамодели, запись изменений, создание представлений и перемещение блоков на диаграммах.
Конечная точка и аутентификация
Сервер использует транспорт Streamable HTTP по пути /mcp на том же хосте, что
и приложение, — https://architeezy.com/mcp в облачном сервисе.
Конечная точка доступна только аутентифицированным клиентам. Клиенту, который
поддерживает удалённые серверы с OAuth, не нужно ничего, кроме URL: он находит
сервер авторизации по метаданным защищённого ресурса на
/.well-known/oauth-protected-resource, а тот принимает динамическую
регистрацию клиентов. Клиент без поддержки OAuth отправляет в заголовке bearer
токен доступа, выпущенный для публичного клиента architeezy-api.
Агент действует от вашего имени: он видит те проекты, что видите вы, и может менять только то, что можете менять вы. Вызов инструмента сверх ваших прав возвращает ошибку.
Настройка клиентов
Claude Code
Добавьте сервер, а затем выполните /mcp внутри Claude Code, чтобы завершить
вход по OAuth:
claude mcp add --transport http architeezy https://architeezy.com/mcp
Visual Studio Code
Опишите сервер в файле .vscode/mcp.json вашего рабочего пространства или
откройте пользовательскую конфигурацию командой MCP: Open User
Configuration:
{
"servers": {
"architeezy": {
"type": "http",
"url": "https://architeezy.com/mcp"
}
}
}
При первом подключении VS Code откроет браузер для входа и подтверждения доступа.
Cursor
Опишите сервер в файле .cursor/mcp.json в проекте или в ~/.cursor/mcp.json,
чтобы он был доступен везде:
{
"mcpServers": {
"architeezy": {
"url": "https://architeezy.com/mcp"
}
}
}
Приложения Claude
На claude.ai откройте Customize → Connectors, нажмите
+, выберите Add custom connector и введите https://architeezy.com/mcp.
Вход по OAuth выполняется при подключении, после чего коннектор доступен в
приложениях Claude, вошедших в ту же учётную запись. Серверы Anthropic
обращаются к конечной точке от вашего имени, поэтому сервер в частной сети таким
способом недоступен.
Соглашения инструментов
Постраничная выдача. Каждый список принимает page (начиная с 0) и size
(по умолчанию 50, максимум 500) и отвечает полем items вместе с блоком page:
{
"items": [],
"page": { "size": 50, "number": 0, "totalElements": 30, "totalPages": 1 }
}
Сортировка. sort принимает field,direction, например name,asc.
Несколько условий разделяются символом ;.
Фильтрация. filter — объект JSON, где значение каждого ключа — массив.
Элементы массива — альтернативы; * в начале или конце значения задаёт
совпадение по префиксу, суффиксу или подстроке без учёта регистра; ведущий !
переворачивает условие.
{
"name": ["Order*", "Payment*"],
"project.id": ["019b2a78-5fa0-728a-b861-e51b5ad26984"]
}
Инструменты
Пространства моделирования и проекты
listScopes возвращает контейнеры верхнего уровня, в которых может находиться
проект, с признаками, сообщающими агенту, вправе ли он там что-либо создавать.
listProjects перечисляет доступные вам проекты, а createProject добавляет
проект в пространство моделирования по имени. listImportedProjects обходит
замыкание зависимостей проекта — именно так агент находит метамодели и общие
модели, на которых построен проект.
Модели
listAllowedModelKinds перечисляет типы моделей, которые можно создать в
проекте. В список попадают типы, определённые в самом проекте, типы из
импортируемых им проектов и типы из любого другого доступного вам
проекта-метамодели. Значение id — то, что ожидает createModel; если тип
пришёл из ещё не импортированного проекта, импорт добавится сам.
listModels находит модели; readModel возвращает одну из них в виде дерева
содержимого. Передайте objectId, чтобы прочитать поддерево отдельного объекта
вместо всей модели, и depth, чтобы остановиться на заданном уровне
вложенности. Большую модель дешевле читать по частям, чем целиком.
readMetamodel возвращает метамодель, стоящую за моделью, в компактном виде:
классификаторы, их супертипы, их признаки с типом и кратностью, а также литералы
перечислений. Агент читает её перед записью, чтобы отправлять существующие имена
классов и признаков.
updateModel применяет патч, deleteModel удаляет модель вместе с её
содержимым.
Объекты
deleteObjects удаляет объекты из модели одним атомарным пакетом. Удаление идёт
каскадом по композиции: потомки удаляемого объекта тоже удаляются и
перечисляются в ответе. Если на удаляемые объекты ссылаются из других мест
проекта, удаление по умолчанию не выполняется, а ссылки перечисляются в ответе;
с аргументом deleteIncomingReferencesInProject очищаются те ссылки, которые
очистить безопасно. Обязательную одиночную ссылку Architeezy не очищает никогда.
Представления
listRepresentationDescriptions перечисляет типы представлений, которые можно
создать для данного объекта; createRepresentation создаёт представление по
идентификатору описания. listRepresentations находит существующие
представления и возвращает идентификаторы, нужные инструментам работы с
диаграммами, вместе с URL, открывающим каждое из них в браузере.
deleteRepresentation удаляет представление, не затрагивая модель.
Раскладка диаграммы
readDiagramLayout возвращает геометрию диаграммы: дерево узлов с их children
и borderNodes и плоский список рёбер. Координаты задаются относительно
ближайшего родительского узла. У каждого узла и каждого ребра есть
targetObjectId, поэтому агент может перейти от блока на диаграмме к стоящему
за ним объекту с помощью readModel.
updateDiagramLayout записывает позиции и размеры обратно, объединяя их по id.
Он двигает и меняет размеры того, что уже есть на диаграмме, но узлов не создаёт
и не удаляет и не соглашается сменить узлу родителя. Пустой path ребра
возвращает автоматическую маршрутизацию.
Патчи модели
updateModel принимает частичное дерево содержимого и сливает его с моделью.
Каждая запись называет объект по id, его тип в виде <prefix>:<EClass> и
признаки, которые вы задаёте в data:
- Значение
idвидаtmp:<name>создаёт новый объект. Тот жеtmp:<name>, поставленный строковым значением в другом месте того же патча, укажет на этот новый объект. - Массивы композиции сливаются по id, поэтому указание одного потомка добавляет
или обновляет именно его, не затрагивая соседей. Добавьте целочисленный
ordinal, чтобы поместить потомка в заданную позицию. - Массивы множественных ссылок заменяются целиком, поэтому отправляйте полный нужный вам список.
- Значение ссылки записывается как
<uuid>внутри модели,<modelId>#<uuid>для другой модели в том же проекте и<prefix>:<EClass> <modelId>#<uuid>в полной канонической форме.
Патч применяется целиком либо не применяется вовсе; отклонённый патч оставляет модель ровно такой, какой она была.
Два необязательных аргумента делают запись безопасной для повторения:
idempotencyKey— тот же ключ с тем же телом возвращает первый ответ вместо повторного применения изменения. Тот же ключ с другим телом — ошибка.expectedLastModificationDateTime— отметка времени, которую агент увидел при чтении модели. Если с тех пор кто-то ещё выполнил запись, обновление отклоняется, а не затирает чужую работу.
Передавайте returnContent: "none", когда агенту не нужно получать дерево
обратно после применения патча.
Пример: добавление элемента и размещение его на диаграмме
Архитектор просит агента: добавь компонент приложения Billing Service в модель ArchiMate в проекте Showcase, сделай так, чтобы он обслуживал Ordering Service, и помести его на диаграмму.
1. Найти модель.
listModels { "filter": "{\"project.id\":[\"019b2a78-5fa0-728a-b861-e51b5ad26984\"]}" }
{
"items": [
{
"id": "019b2b46-fc08-795b-8929-4179a5ea98b9",
"name": "ArchiMate",
"type": "http://www.archimatetool.com/archimate#ArchimateModel",
"url": "https://architeezy.com/demo/showcase/dev/archimate",
"lastModificationDateTime": "2025-12-18T13:04:29.984441Z"
}
]
}
2. Изучить словарь. readMetamodel для пространства имён
http://www.archimatetool.com/archimate подтверждает, что
ApplicationComponent и ServingRelationship существуют, что Folder хранит
своё содержимое в elements, а у связи есть source и target.
3. Понять, куда что помещать. readModel с depth: 2 возвращает корень
модели и её папки. В ответе есть идентификаторы папок Application и
Relations, а также идентификатор существующего элемента Ordering Service.
4. Записать изменение.
updateModel {
"id": "019b2b46-fc08-795b-8929-4179a5ea98b9",
"expectedLastModificationDateTime": "2025-12-18T13:04:29.984441Z",
"returnContent": "none",
"data": {
"content": [
{
"id": "9abb47b3-0704-5e36-a76f-dde1426c31f2",
"eClass": "archimate:Folder",
"data": {
"elements": [
{
"id": "tmp:billing",
"eClass": "archimate:ApplicationComponent",
"data": { "name": "Billing Service" }
}
]
}
},
{
"id": "c9192668-0b87-563b-87c0-4550c3586d7c",
"eClass": "archimate:Folder",
"data": {
"elements": [
{
"id": "tmp:serves",
"eClass": "archimate:ServingRelationship",
"data": {
"source": "tmp:billing",
"target": "d569ff64-e964-587e-8125-82769c66c7f9"
}
}
]
}
}
]
}
}
В ответе приходят идентификаторы, присвоенные двум записям tmp:.
5. Поместить на диаграмму. Блок на представлении ArchiMate — это потомок
представления типа DiagramModelArchimateObject, указывающий на элемент,
поэтому агент патчит представление точно так же:
{
"content": [
{
"id": "4332d237-8569-5b74-99f6-c6167a4afa0f",
"eClass": "archimate:ArchimateDiagramModel",
"data": {
"children": [
{
"id": "tmp:billing-box",
"eClass": "archimate:DiagramModelArchimateObject",
"data": { "archimateElement": "<id assigned to tmp:billing>" }
}
]
}
}
]
}
6. Разместить. readDiagramLayout показывает, где что расположено:
{
"diagramId": "019b2b47-2baa-7cf6-810f-592119ba5a3b",
"modelId": "019b2b46-fc08-795b-8929-4179a5ea98b9",
"nodes": [
{
"id": "1b533efc-...",
"label": "Ordering Service",
"x": 472,
"y": 307,
"width": 137,
"height": 55
},
{
"id": "b92d6557-...",
"label": "Web Store System",
"x": 472,
"y": 420,
"width": 137,
"height": 55
}
],
"edges": [
{
"id": "9d9ada7e-...",
"sourceNodeId": "b92d6557-...",
"targetNodeId": "1b533efc-...",
"path": []
}
]
}
Затем агент вызывает updateDiagramLayout с идентификатором нового узла и
координатами свободного места рядом с Ordering Service. Блок появляется на
диаграмме у всех, у кого она открыта.