Skip to main content
Glama

Servidor MCP IDS

Creación de archivos IDS de buildingSMART impulsada por IA con un 100% de cumplimiento

Un servidor MCP (Model Context Protocol) que permite a los agentes de IA crear, validar y gestionar de forma determinista archivos de Especificación de Entrega de Información (IDS) que cumplen totalmente con el estándar IDS 1.0 de buildingSMART.

ifc-ids-mcp MCP server

License: MIT Python 3.8+ Code style: black

Características

  • 100% compatible con IDS 1.0 - Todas las exportaciones se validan contra el esquema XSD oficial

  • Integración con IfcTester - Utiliza la biblioteca oficial de IfcOpenShell

  • Sesiones basadas en contexto FastMCP - Gestión automática de sesiones

  • Desarrollo guiado por pruebas (TDD) - Más del 95% de cobertura de código con pruebas exhaustivas

  • Salida determinista - La misma entrada siempre produce una salida idéntica

  • Seguridad de tipos - Sugerencias de tipo completas con validación Pydantic

Inicio rápido

Instalación

# 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 .

Uso con Claude Desktop

Añadir a la configuración de Claude Desktop (claude_desktop_config.json):

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

Uso programático

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")

Herramientas MCP disponibles

Gestión de documentos

  • create_ids - Crear nuevo documento IDS

  • load_ids - Cargar IDS existente desde un archivo o cadena XML

  • export_ids - Exportar IDS a XML con validación

  • get_ids_info - Obtener la estructura y metadatos del documento

Gestión de especificaciones

  • add_specification - Añadir especificación con versión IFC y cardinalidad

Gestión de facetas

Facetas básicas

  • add_entity_facet - Añadir filtro de tipo de entidad IFC (p. ej., IFCWALL)

  • add_property_facet - Añadir requisitos de propiedad

  • add_attribute_facet - Añadir requisitos de atributo IFC

Facetas avanzadas

  • add_classification_facet - Añadir requisitos de clasificación

  • add_material_facet - Añadir requisitos de material

  • add_partof_facet - Añadir requisitos de relación espacial

Gestión de restricciones

  • add_enumeration_restriction - Restringir a una lista de valores válidos

  • add_pattern_restriction - Restringir con patrón regex

  • add_bounds_restriction - Restringir rangos numéricos

  • add_length_restriction - Restringir la longitud de la cadena

Validación

  • validate_ids - Validar documento IDS contra el esquema XSD

  • validate_ifc_model - Validar modelo IFC contra IDS (función adicional)

Validación temprana y comprobación de restricciones

El servidor MCP incluye validación temprana para detectar violaciones del esquema IDS 1.0 inmediatamente cuando se llaman a las herramientas, en lugar de esperar hasta el momento de la exportación. Esto proporciona a los agentes de IA mensajes de error claros y procesables.

Restricciones del esquema IDS 1.0

1. Una sola faceta de entidad por aplicabilidad

Restricción: IDS 1.0 permite solo UNA faceta de entidad por sección de aplicabilidad de la especificación.

Validación temprana: La herramienta add_entity_facet valida esta restricción antes de añadir la faceta:

# ✅ 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..."

Solución alternativa: Crear especificaciones separadas para cada tipo de entidad:

# 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. Conjunto de propiedades requerido para facetas de propiedad

Restricción: IfcTester requiere el parámetro property_set para una exportación IDS válida.

Validación temprana: La herramienta add_property_facet valida este requisito antes de añadir la faceta:

# ❌ 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"
)

Conjuntos de propiedades comunes:

  • Pset_WallCommon - Propiedades de muro

  • Pset_DoorCommon - Propiedades de puerta

  • Pset_WindowCommon - Propiedades de ventana

  • Pset_SpaceCommon - Propiedades de espacio

  • Pset_Common - Propiedades personalizadas/genéricas

Beneficios de la validación temprana

  1. Retroalimentación inmediata - Los errores se detectan al invocar la herramienta, no al exportar

  2. Mensajes de error claros - Incluye soluciones alternativas y ejemplos

  3. Previene estados inválidos - Los documentos IDS permanecen válidos durante toda la creación

  4. Mejor experiencia para el agente de IA - Los agentes reciben orientación procesable

Consulte CLAUDE.md para obtener documentación detallada sobre las restricciones de IDS 1.0.

Arquitectura

┌─────────────────────────────────────────────┐
│           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)

Desarrollo

Desarrollo guiado por pruebas (TDD)

Este proyecto sigue estrictamente la metodología 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

Flujo de trabajo TDD (Red-Green-Refactor)

  1. RED - Escribir una prueba que falle

  2. GREEN - Implementar el código mínimo para pasarla

  3. REFACTOR - Mejorar la calidad del código

Ejemplo:

# 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)

Calidad del código

# Format code
black src/ tests/

# Lint code
ruff check src/ tests/

# Type checking (optional)
mypy src/

Estructura del proyecto

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

Principios de la constitución

Este proyecto sigue 6 principios innegociables:

  1. 100% cumplimiento del esquema IDS - Todas las exportaciones se validan contra XSD

  2. Desarrollo guiado por pruebas - Más del 95% de cobertura, pruebas antes que código

  3. Integración prioritaria con IfcTester - Sin generación de XML personalizada

  4. Generación determinista - Entrada idéntica = salida idéntica

  5. Sesiones basadas en contexto FastMCP - Gestión automática de sesiones

  6. Buenas prácticas de Python - Sugerencias de tipo, PEP 8, Python moderno

Consulte constitution.md para obtener todos los detalles.

Documentación

Dependencias

Núcleo

  • fastmcp - Marco de trabajo del servidor MCP

  • ifctester - Creación y validación de IDS (de IfcOpenShell)

  • pydantic - Validación de datos

Desarrollo

  • pytest - Marco de trabajo de pruebas

  • pytest-asyncio - Soporte para pruebas asíncronas

  • pytest-cov - Informes de cobertura

  • black - Formato de código

  • ruff - Linting

Referencias

Licencia

Licencia MIT - consulte el archivo LICENSE para obtener más detalles

Contribución

  1. Lea constitution.md para conocer los principios del proyecto

  2. Siga la metodología TDD (Red-Green-Refactor)

  3. Asegure una cobertura de pruebas superior al 95%

  4. Todas las exportaciones deben validarse contra el XSD de IDS 1.0

  5. Utilice IfcTester para todas las operaciones IDS

Soporte


Estado: ✅ Implementación completa | 94% de cobertura de pruebas | 17 herramientas MCP | 168 pruebas | Validación temprana

Creado con ❤️ usando IfcOpenShell y 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