Skip to main content
Glama

IDS MCP Server

Создание файлов buildingSMART IDS с помощью ИИ и 100% соответствием стандарту

Сервер MCP (Model Context Protocol), который позволяет AI-агентам детерминированно создавать, проверять и управлять файлами спецификаций доставки информации (IDS), полностью соответствующими стандарту buildingSMART IDS 1.0.

ifc-ids-mcp MCP server

License: MIT Python 3.8+ Code style: black

Возможности

  • 100% соответствие IDS 1.0 — все экспортируемые файлы проходят проверку по официальной схеме XSD

  • Интеграция с IfcTester — используется официальная библиотека IfcOpenShell

  • Сессии на основе FastMCP — автоматическое управление сессиями

  • Test-Driven Development (TDD) — покрытие кода тестами более 95%

  • Детерминированный вывод — одинаковые входные данные всегда дают идентичный результат

  • Типобезопасность — полная поддержка подсказок типов с проверкой Pydantic

Быстрый старт

Установка

# Clone repository
git clone https://github.com/Quasar-Consulting-Group/ifc-ids-mcp.git
cd ifc-ids-mcp

# Install dependencies
pip install -r requirements.txt

# Install in development mode
pip install -e .

Использование с Claude Desktop

Добавьте в конфигурацию Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "ids-mcp": {
      "command": "python",
      "args": ["-m", "ids_mcp_server"],
      "env": {
        "IDS_LOG_LEVEL": "INFO"
      }
    }
  }
}

Программное использование

from ifctester import ids

# The MCP server handles this automatically via tools
# But you can also use IfcTester directly:

# Create new IDS
my_ids = ids.Ids(title="Project Requirements")

# Add specification
spec = ids.Specification(name="Wall Requirements", ifcVersion=["IFC4"])
spec.applicability.append(ids.Entity(name="IFCWALL"))

requirement = ids.Property(
    baseName="FireRating",
    propertySet="Pset_WallCommon",
    cardinality="required"
)
spec.requirements.append(requirement)

my_ids.specifications.append(spec)

# Export to XML
my_ids.to_xml("requirements.ids")

Доступные инструменты MCP

Управление документами

  • create_ids — создание нового документа IDS

  • load_ids — загрузка существующего IDS из файла или XML-строки

  • export_ids — экспорт IDS в XML с проверкой

  • get_ids_info — получение структуры документа и метаданных

Управление спецификациями

  • add_specification — добавление спецификации с версией IFC и кардинальностью

Управление фасетами

Базовые фасеты

  • add_entity_facet — добавление фильтра типа сущности IFC (например, IFCWALL)

  • add_property_facet — добавление требований к свойствам

  • add_attribute_facet — добавление требований к атрибутам IFC

Расширенные фасеты

  • add_classification_facet — добавление требований к классификации

  • add_material_facet — добавление требований к материалам

  • add_partof_facet — добавление требований к пространственным отношениям

Управление ограничениями

  • add_enumeration_restriction — ограничение списком допустимых значений

  • add_pattern_restriction — ограничение регулярным выражением

  • add_bounds_restriction — ограничение числовых диапазонов

  • add_length_restriction — ограничение длины строки

Проверка

  • validate_ids — проверка документа IDS по схеме XSD

  • validate_ifc_model — проверка модели IFC на соответствие IDS (дополнительная функция)

Предварительная проверка и контроль ограничений

Сервер MCP включает предварительную проверку для немедленного обнаружения нарушений схемы IDS 1.0 при вызове инструментов, а не во время экспорта. Это предоставляет AI-агентам четкие и понятные сообщения об ошибках.

Ограничения схемы IDS 1.0

1. Один фасет сущности на область применения

Ограничение: IDS 1.0 допускает только ОДИН фасет сущности в разделе применимости спецификации.

Предварительная проверка: Инструмент add_entity_facet проверяет это ограничение перед добавлением фасета:

# ✅ CORRECT: First entity facet
add_entity_facet(spec_id="S1", location="applicability", entity_name="IFCWALL")

# ❌ INCORRECT: Second entity facet raises ToolError immediately
add_entity_facet(spec_id="S1", location="applicability", entity_name="IFCDOOR")
# Error: "IDS 1.0 XSD constraint violation: Only ONE entity facet is allowed..."

Решение: Создавайте отдельные спецификации для каждого типа сущности:

# Specification 1: Walls
add_specification(name="Wall Requirements", ifc_versions=["IFC4"], identifier="S1")
add_entity_facet(spec_id="S1", location="applicability", entity_name="IFCWALL")

# Specification 2: Doors
add_specification(name="Door Requirements", ifc_versions=["IFC4"], identifier="S2")
add_entity_facet(spec_id="S2", location="applicability", entity_name="IFCDOOR")

2. Набор свойств (Property Set) обязателен для фасетов свойств

Ограничение: IfcTester требует параметр property_set для корректного экспорта IDS.

Предварительная проверка: Инструмент add_property_facet проверяет это требование перед добавлением фасета:

# ❌ INCORRECT: Missing property_set raises ToolError immediately
add_property_facet(
    spec_id="S1",
    location="requirements",
    property_name="FireRating"
)
# Error: "Property facet validation error: 'property_set' parameter is required..."

# ✅ CORRECT: Include property_set parameter
add_property_facet(
    spec_id="S1",
    location="requirements",
    property_name="FireRating",
    property_set="Pset_WallCommon"
)

Общие наборы свойств:

  • Pset_WallCommon — свойства стен

  • Pset_DoorCommon — свойства дверей

  • Pset_WindowCommon — свойства окон

  • Pset_SpaceCommon — свойства пространств

  • Pset_Common — пользовательские/общие свойства

Преимущества предварительной проверки

  1. Мгновенная обратная связь — ошибки обнаруживаются при вызове инструмента, а не при экспорте

  2. Понятные сообщения об ошибках — включают решения и примеры

  3. Предотвращение невалидных состояний — документы IDS остаются корректными в процессе создания

  4. Улучшенный опыт работы для AI-агентов — агенты получают практические рекомендации

Подробную документацию по ограничениям IDS 1.0 см. в CLAUDE.md.

Архитектура

┌─────────────────────────────────────────────┐
│           AI Agent (Claude, GPT)             │
└────────────────────┬────────────────────────┘
                     │ MCP Protocol
┌────────────────────▼────────────────────────┐
│            FastMCP Server                    │
│  ┌──────────────────────────────────────┐   │
│  │     MCP Tools (15+ tools)            │   │
│  └───────────────┬──────────────────────┘   │
│  ┌───────────────▼──────────────────────┐   │
│  │     Session Manager (Context)        │   │
│  └───────────────┬──────────────────────┘   │
│  ┌───────────────▼──────────────────────┐   │
│  │  IfcTester Integration (IDS Engine)  │   │
│  └──────────────────────────────────────┘   │
└─────────────────────────────────────────────┘
                     │
                     ▼
        IDS XML File (100% XSD compliant)

Разработка

Test-Driven Development (TDD)

Этот проект строго следует методологии TDD:

# Run all tests
pytest tests/ -v

# Run with coverage
pytest tests/ --cov=src/ids_mcp_server --cov-report=html

# Run specific test category
pytest tests/unit/ -v        # Unit tests
pytest tests/integration/ -v  # Integration tests
pytest tests/validation/ -v   # XSD validation tests

# Must maintain 95%+ coverage
pytest tests/ --cov-fail-under=95

Рабочий процесс TDD (Red-Green-Refactor)

  1. RED — напишите падающий тест

  2. GREEN — реализуйте минимальный код для прохождения теста

  3. REFACTOR — улучшите качество кода

Пример:

# RED: Write failing test
def test_create_specification():
    result = add_specification(name="Test", ifc_versions=["IFC4"])
    assert result["status"] == "success"

# GREEN: Implement
def add_specification(name, ifc_versions):
    return {"status": "success"}

# REFACTOR: Improve (keep tests passing)

Качество кода

# Format code
black src/ tests/

# Lint code
ruff check src/ tests/

# Type checking (optional)
mypy src/

Структура проекта

ifc-ids-mcp/
├── src/
│   └── ids_mcp_server/
│       ├── __init__.py
│       ├── __main__.py
│       ├── server.py          # FastMCP server
│       ├── config.py          # Configuration
│       ├── version.py         # Version management
│       ├── session/           # Session management
│       │   ├── manager.py
│       │   ├── storage.py
│       │   ├── cleanup.py
│       │   └── models.py      # Session data models
│       └── tools/             # MCP tools (17 total)
│           ├── document.py
│           ├── specification.py
│           ├── facets.py
│           ├── restrictions.py    # Phase 007
│           ├── validation.py      # Phase 008
│           └── validators.py      # Early validation helpers
├── tests/                     # 168 tests, 94% coverage
│   ├── unit/                  # Unit tests
│   ├── component/             # Component tests
│   ├── integration/           # Integration tests
│   └── validation/            # XSD compliance tests
│       └── fixtures/          # Test fixtures
├── samples/                   # Sample IDS/IFC files
│   ├── wall_fire_rating.ids
│   └── walls-fire-rating.ifc
├── specs/                     # Implementation plans (PRDs)
├── .mcp.json                  # MCP server configuration
├── .coveragerc                # Coverage configuration
├── constitution.md            # Project principles
├── DESIGN_SPECIFICATION.md    # Technical specification
├── CLAUDE.md                  # AI agent guide
├── pyproject.toml
├── pytest.ini
└── README.md

Конституционные принципы

Этот проект следует 6 незыблемым принципам:

  1. 100% соответствие схеме IDS — все экспортируемые файлы проходят проверку по XSD

  2. Test-Driven Development — покрытие тестами 95%+, тесты пишутся до кода

  3. Приоритет интеграции с IfcTester — никакой генерации XML вручную

  4. Детерминированная генерация — идентичный ввод = идентичный вывод

  5. Сессии на основе FastMCP — автоматическое управление сессиями

  6. Лучшие практики Python — подсказки типов, PEP 8, современный Python

Полную информацию см. в constitution.md.

Документация

Зависимости

Основные

  • fastmcp — фреймворк сервера MCP

  • ifctester — создание и проверка IDS (от IfcOpenShell)

  • pydantic — проверка данных

Разработка

  • pytest — фреймворк для тестирования

  • pytest-asyncio — поддержка асинхронного тестирования

  • pytest-cov — отчеты о покрытии кода

  • black — форматирование кода

  • ruff — линтинг

Ссылки

Лицензия

Лицензия MIT — подробности см. в файле LICENSE

Участие в разработке

  1. Прочитайте constitution.md для ознакомления с принципами проекта

  2. Следуйте методологии TDD (Red-Green-Refactor)

  3. Обеспечьте покрытие тестами 95%+

  4. Все экспортируемые файлы должны проходить проверку по IDS 1.0 XSD

  5. Используйте IfcTester для всех операций с IDS

Поддержка


Статус: ✅ Реализация завершена | 94% покрытие тестами | 17 инструментов MCP | 168 тестов | Предварительная проверка

Создано с ❤️ с использованием IfcOpenShell и FastMCP

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/vinnividivicci/ifc-ids-mcp'

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