Skip to main content
Glama

IDS MCP 서버

IDS 1.0 표준을 100% 준수하는 buildingSMART IDS 파일의 AI 기반 생성

buildingSMART IDS 1.0 표준을 완벽하게 준수하는 정보 전달 사양(IDS) 파일을 결정론적으로 생성, 검증 및 관리할 수 있도록 AI 에이전트를 지원하는 MCP(Model Context Protocol) 서버입니다.

ifc-ids-mcp MCP server

License: MIT Python 3.8+ Code style: black

주요 기능

  • 100% IDS 1.0 준수 - 모든 내보내기는 공식 XSD 스키마에 따라 검증됨

  • IfcTester 통합 - 공식 IfcOpenShell 라이브러리 사용

  • FastMCP 컨텍스트 기반 세션 - 자동 세션 관리

  • 테스트 주도 개발(TDD) - 포괄적인 테스트를 통한 95% 이상의 코드 커버리지

  • 결정론적 출력 - 동일한 입력은 항상 동일한 출력을 생성

  • 타입 안전성 - Pydantic 검증을 통한 완전한 타입 힌트 제공

Related MCP server: ifc-mcp

빠른 시작

설치

# 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 - 파일 또는 XML 문자열에서 기존 IDS 로드

  • export_ids - 검증과 함께 IDS를 XML로 내보내기

  • get_ids_info - 문서 구조 및 메타데이터 가져오기

사양 관리

  • add_specification - IFC 버전 및 카디널리티를 포함한 사양 추가

패싯(Facet) 관리

기본 패싯

  • add_entity_facet - IFC 엔티티 유형 필터 추가 (예: IFCWALL)

  • add_property_facet - 속성 요구 사항 추가

  • add_attribute_facet - IFC 속성(Attribute) 요구 사항 추가

고급 패싯

  • add_classification_facet - 분류 요구 사항 추가

  • add_material_facet - 재료 요구 사항 추가

  • add_partof_facet - 공간 관계 요구 사항 추가

제한 관리

  • add_enumeration_restriction - 유효한 값 목록으로 제한

  • add_pattern_restriction - 정규식 패턴으로 제한

  • add_bounds_restriction - 숫자 범위 제한

  • add_length_restriction - 문자열 길이 제한

검증

  • validate_ids - XSD 스키마에 대해 IDS 문서 검증

  • validate_ifc_model - IDS에 대해 IFC 모델 검증 (보너스 기능)

사전 검증 및 제약 조건 확인

이 MCP 서버에는 도구가 호출될 때 내보내기 시점까지 기다리지 않고 즉시 IDS 1.0 스키마 위반을 포착하는 사전 검증(early validation) 기능이 포함되어 있습니다. 이를 통해 AI 에이전트에게 명확하고 실행 가능한 오류 메시지를 제공합니다.

IDS 1.0 스키마 제약 조건

1. 적용 가능성(Applicability)당 단일 엔티티 패싯

제약 조건: 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는 유효한 IDS 내보내기를 위해 property_set 매개변수를 요구합니다.

사전 검증: 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)

개발

테스트 주도 개발(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. 테스트 주도 개발 - 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. 모든 IDS 작업에 IfcTester를 사용하세요.

지원


상태: ✅ 구현 완료 | 94% 테스트 커버리지 | 17개 MCP 도구 | 168개 테스트 | 사전 검증 완료

IfcOpenShellFastMCP를 사용하여 ❤️로 제작됨

Available Tools

17 tools
add_attribute_facetC

Add an attribute facet to a specification.

Args: spec_id: Specification identifier location: "applicability" or "requirements" attribute_name: Attribute name (e.g., "Name", "Description") ctx: FastMCP Context (auto-injected) value: Required value or pattern cardinality: "required", "optional", or "prohibited"

Returns: {"status": "added", "facet_type": "attribute", "spec_id": "S1"}

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
locationYes
attribute_nameYes
valueNo
cardinalityNorequired

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. While it states this is an 'add' operation (implying mutation), it doesn't disclose important behavioral traits: whether this requires specific permissions, whether it's idempotent, what happens if the facet already exists, or any rate limits. The description mentions the return format but doesn't explain potential error conditions or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns) and uses bullet-like formatting. It's appropriately sized at 8 lines total. Every sentence serves a purpose: the opening statement defines the tool's purpose, the Args section documents parameters, and the Returns section shows output format. There's minimal wasted space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters, mutation operation, many siblings) and complete lack of annotations, the description provides basic but incomplete coverage. The presence of an output schema (shown in Returns) helps by documenting the response format, but the description doesn't address key contextual gaps: how this tool relates to siblings, what an 'attribute facet' conceptually is, or behavioral constraints. For a mutation tool with 0% schema documentation, this is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description provides some parameter context but doesn't fully compensate. It lists all 5 parameters with brief explanations, giving meaning to spec_id, location, attribute_name, value, and cardinality. However, it doesn't explain the significance of 'applicability' vs 'requirements' locations, what constitutes a valid attribute_name, or the implications of different cardinality values. The ctx parameter is noted as auto-injected but not explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add an attribute facet') and the target ('to a specification'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate this tool from its many siblings (like add_classification_facet, add_property_facet, etc.), which would require explaining what makes an 'attribute facet' distinct from other facet types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With 16 sibling tools including various 'add_*_facet' and 'add_*_restriction' tools, there's no indication of when an attribute facet is appropriate versus a classification facet, property facet, or any restriction type. The description also doesn't mention prerequisites or dependencies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_bounds_restrictionB

Add numeric bounds restriction.

Args: spec_id: Specification identifier or name facet_index: Index of facet in location (0-based) parameter_name: Which parameter to restrict (e.g., "value") base_type: XSD base type (e.g., "xs:double", "xs:integer") ctx: FastMCP Context (auto-injected) location: "applicability" or "requirements" (default: "requirements") min_inclusive: Minimum value (inclusive) max_inclusive: Maximum value (inclusive) min_exclusive: Minimum value (exclusive) max_exclusive: Maximum value (exclusive)

Returns: {"status": "added", "restriction_type": "bounds", "spec_id": "S1"}

Example: Add bounds to property value: Height must be between 2.4 and 3.0 meters

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
facet_indexYes
parameter_nameYes
base_typeYes
locationNorequirements
min_inclusiveNo
max_inclusiveNo
min_exclusiveNo
max_exclusiveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does and shows a return format, but doesn't explain important behavioral aspects: whether this is a mutation operation, what permissions are needed, whether the restriction replaces existing ones, error handling, or side effects. The example helps but doesn't cover behavioral traits comprehensively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably structured with sections for Args, Returns, and Example. However, it includes redundant information (ctx parameter is auto-injected but listed) and could be more front-loaded. The example is helpful but the overall text could be more efficiently organized, with some sentences not earning their place in terms of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, no annotations, schema coverage 0%), the description provides basic functionality explanation and parameter listing. The output schema exists (Returns section), so return values are documented. However, for a mutation tool with many parameters, it lacks crucial context about behavior, constraints, and integration with the broader system of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by listing all 9 parameters with brief explanations. It clarifies parameter meanings like 'facet_index: Index of facet in location (0-based)' and 'location: "applicability" or "requirements" (default: "requirements")'. The description adds significant value beyond the bare schema, though some parameter details remain unclear (e.g., how min_inclusive and min_exclusive interact).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Add numeric bounds restriction' with an example showing it restricts values to a range. It distinguishes from siblings like 'add_enumeration_restriction' and 'add_pattern_restriction' by focusing on numeric bounds. However, it doesn't explicitly contrast with all sibling tools in the description text itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal usage guidance. The example mentions 'Add bounds to property value' which gives some context, but there's no explicit guidance on when to use this tool versus alternatives like 'add_enumeration_restriction' or 'add_length_restriction'. No prerequisites, error conditions, or when-not-to-use information is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_classification_facetA

Add a classification facet to a specification.

Args: spec_id: Specification identifier location: "applicability" or "requirements" classification_value: Classification code or pattern ctx: FastMCP Context (auto-injected) classification_system: Classification system name or URI cardinality: "required", "optional", or "prohibited"

Returns: {"status": "added", "facet_type": "classification", "spec_id": "S1"}

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
locationYes
classification_valueYes
classification_systemNo
cardinalityNorequired

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the action is 'Add' (implying mutation) and shows a return format, but doesn't disclose permissions needed, whether changes are reversible, error conditions, or side effects. For a mutation tool with zero annotation coverage, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with a purpose statement followed by Args and Returns sections. Every sentence earns its place, though the 'ctx: FastMCP Context (auto-injected)' note could be omitted as it's implementation detail not needed for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the mutation nature (no annotations), 5 parameters with 0% schema coverage, and presence of an output schema, the description does well by explaining all parameters and showing a return example. However, it lacks context about when this operation is valid or what happens on failure, leaving some gaps for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates well by explaining all 5 parameters in the Args section with clear meanings (e.g., 'location: "applicability" or "requirements"', 'cardinality: "required", "optional", or "prohibited"'). It adds significant value beyond the bare schema, though it doesn't explain format details like what a 'specification identifier' entails.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Add a classification facet') and target resource ('to a specification'), distinguishing it from sibling tools like add_attribute_facet or add_material_facet by specifying the facet type. The verb+resource combination is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like add_entity_facet or add_property_facet. The description mentions the tool's function but doesn't indicate appropriate contexts, prerequisites, or exclusions relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_entity_facetA

Add an entity facet to a specification.

IMPORTANT: IDS 1.0 allows only ONE entity facet per applicability section. If you need multiple entity types, create separate specifications.

Args: spec_id: Specification identifier location: "applicability" or "requirements" entity_name: IFC entity name (e.g., "IFCWALL") ctx: FastMCP Context (auto-injected) predefined_type: Optional predefined type cardinality: "required", "optional", or "prohibited" (requirements only)

Returns: {"status": "added", "facet_type": "entity", "spec_id": "S1"}

Raises: ToolError: If trying to add second entity to applicability section

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
locationYes
entity_nameYes
predefined_typeNo
cardinalityNorequired

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It successfully describes important constraints (the 'only ONE entity facet' rule), error conditions (raises ToolError for second entity in applicability), and the return format. However, it doesn't mention authentication needs, rate limits, or whether this is a read-only vs. write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, important constraint, args, returns, raises) and front-loads the most critical information. Every sentence earns its place, though the formatting could be slightly more compact. The information density is high with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (mutation tool with constraints), 0% schema coverage, and the presence of an output schema, the description provides excellent completeness. It explains the tool's purpose, usage constraints, all parameters, return values, and error conditions. The output schema handles return format details, so the description appropriately focuses on operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining all 5 parameters in detail: spec_id, location (with allowed values), entity_name (with example), predefined_type (optional), and cardinality (with allowed values and context restriction). It adds crucial meaning beyond the bare schema, including constraints like 'requirements only' for cardinality.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Add an entity facet') and the target resource ('to a specification'), distinguishing it from sibling tools like add_attribute_facet or add_material_facet. It provides concrete details about what an entity facet is (IFC entity name) and its purpose within IDS specifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs alternatives: it states 'If you need multiple entity types, create separate specifications' and warns about the 'only ONE entity facet per applicability section' constraint. It also clarifies that cardinality is 'requirements only', helping the agent understand context-specific usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_enumeration_restrictionA

Add enumeration restriction (list of allowed values).

Args: spec_id: Specification identifier or name facet_index: Index of facet in location (0-based) parameter_name: Which parameter to restrict (e.g., "value", "propertySet") base_type: XSD base type (e.g., "xs:string", "xs:integer") values: List of allowed values ctx: FastMCP Context (auto-injected) location: "applicability" or "requirements" (default: "requirements")

Returns: {"status": "added", "restriction_type": "enumeration", "spec_id": "S1"}

Example: Add enumeration to property value: FireRating must be "REI30", "REI60", or "REI90"

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
facet_indexYes
parameter_nameYes
base_typeYes
valuesYes
locationNorequirements

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that this is a write operation ('Add'), implies it modifies specifications, and shows the return format. However, it doesn't mention permissions needed, whether changes are reversible, error conditions, or rate limits. The example helps but doesn't fully cover behavioral traits for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It starts with a clear purpose statement, lists args with brief explanations, shows returns, and provides a concrete example. Every sentence earns its place, with no redundant information. The formatting (bullet-like args list) enhances readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters with 0% schema coverage and no annotations, the description does a good job explaining most parameters and the tool's purpose. The output schema is provided via the Returns section, so return values are documented. However, for a mutation tool with complex parameters, it could benefit from more behavioral context (e.g., error handling, idempotency).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides meaningful explanations for all parameters: 'spec_id' as 'Specification identifier or name', 'facet_index' as 'Index of facet in location (0-based)', etc. The example illustrates how 'parameter_name' and 'values' work. However, it doesn't explain 'ctx' (auto-injected) or provide format details for 'base_type' beyond examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Add enumeration restriction (list of allowed values)' with a specific verb ('Add'), resource ('enumeration restriction'), and scope. It distinguishes from siblings like 'add_bounds_restriction' or 'add_pattern_restriction' by specifying the restriction type. The example further clarifies by showing it restricts property values to specific enumerated options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to add enumeration restrictions to parameters in specifications. It mentions the 'location' parameter defaulting to 'requirements', implying usage in that context. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings (e.g., when to choose 'add_bounds_restriction' instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_length_restrictionB

Add string length restriction.

Args: spec_id: Specification identifier or name facet_index: Index of facet in location (0-based) parameter_name: Which parameter to restrict (e.g., "value") base_type: XSD base type (e.g., "xs:string") ctx: FastMCP Context (auto-injected) location: "applicability" or "requirements" (default: "requirements") length: Exact length min_length: Minimum length max_length: Maximum length

Returns: {"status": "added", "restriction_type": "length", "spec_id": "S1"}

Example: Add length restriction to attribute value: Tag must be between 5 and 50 characters

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
facet_indexYes
parameter_nameYes
base_typeYes
locationNorequirements
lengthNo
min_lengthNo
max_lengthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While it shows the return format and mentions the tool adds restrictions, it doesn't clarify whether this is a mutation operation, what permissions are needed, whether changes are reversible, or any rate limits. The example helps but doesn't cover behavioral traits adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately structured with clear sections (Args, Returns, Example) but contains some redundancy. The first sentence 'Add string length restriction.' is concise, but the example essentially restates the purpose. The parameter explanations are necessary given the poor schema coverage, making the overall length reasonable but not optimally efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, 4 required), 0% schema coverage, and presence of an output schema, the description provides substantial parameter semantics and shows the return format. It covers what the tool does and how to use it, though behavioral aspects like mutation effects and prerequisites are missing. The output schema reduces the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining all 8 parameters in the Args section with clear meanings (e.g., 'spec_id: Specification identifier or name', 'location: "applicability" or "requirements"'). It provides examples for parameter_name and base_type, and clarifies the relationship between length/min_length/max_length parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'Add string length restriction' and provides a concrete example about restricting tag length between 5 and 50 characters. However, it doesn't explicitly differentiate this from sibling tools like 'add_bounds_restriction' or 'add_pattern_restriction', which likely handle different types of restrictions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'add_bounds_restriction' or 'add_pattern_restriction'. It mentions an example about restricting attribute values, but offers no explicit when/when-not instructions or prerequisites for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_material_facetB

Add a material facet to a specification.

Args: spec_id: Specification identifier location: "applicability" or "requirements" material_value: Material name, category, or URI ctx: FastMCP Context (auto-injected) cardinality: "required", "optional", or "prohibited"

Returns: {"status": "added", "facet_type": "material", "spec_id": "S1"}

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
locationYes
material_valueYes
cardinalityNorequired

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While it states this is an 'add' operation and shows a return format, it doesn't mention whether this operation is idempotent, what happens if the facet already exists, what permissions are required, or any side effects. For a mutation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, Args, Returns) and uses minimal sentences. The Args section efficiently documents all parameters without redundancy. The only minor improvement would be integrating the purpose statement more seamlessly rather than having it as a separate fragment.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters, no annotations, and an output schema (implied by Returns section), the description covers the basic operation and parameters adequately. However, for a mutation tool that modifies specifications, it should ideally mention prerequisites, side effects, or error conditions. The presence of an output schema reduces the need to explain return values, but behavioral context remains light.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate, and it does so effectively by explaining all 4 parameters in the Args section. It clarifies that 'location' can be 'applicability' or 'requirements', 'material_value' accepts various formats, and 'cardinality' has three specific values. The only missing parameter is 'ctx' which is noted as auto-injected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Add a material facet') and target resource ('to a specification'), distinguishing it from sibling tools like add_attribute_facet or add_property_facet. It precisely identifies what type of facet is being added, making the purpose unambiguous and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like add_attribute_facet or add_classification_facet. It mentions the 'location' parameter values but doesn't explain the conceptual difference between 'applicability' and 'requirements' contexts or when to choose this tool over other facet-adding siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_partof_facetC

Add a partOf facet to a specification.

Args: spec_id: Specification identifier location: "applicability" or "requirements" relation: Relationship type (e.g., "IFCRELCONTAINEDINSPATIALSTRUCTURE") parent_entity: Parent entity name (e.g., "IFCSPACE") ctx: FastMCP Context (auto-injected) parent_predefined_type: Optional predefined type for parent cardinality: "required", "optional", or "prohibited"

Returns: {"status": "added", "facet_type": "partof", "spec_id": "S1"}

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
locationYes
relationYes
parent_entityYes
parent_predefined_typeNo
cardinalityNorequired

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action is 'Add' (implying mutation) and shows a return format, but doesn't cover permissions, side effects, error conditions, or system constraints. The description adds minimal behavioral context beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with a clear purpose statement followed by parameter documentation and return example. Every sentence serves a purpose, though the parameter documentation could be more integrated with the main description rather than in a separate 'Args:' section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters with 0% schema coverage and no annotations, the description provides basic parameter examples and a return example (output schema exists). However, for a mutation tool with multiple parameters, it lacks sufficient context about the domain, error handling, and integration with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides examples for 'location', 'relation', 'parent_entity', and 'cardinality', which adds meaning beyond the bare schema. However, it doesn't explain 'spec_id' or 'parent_predefined_type', leaving 2 of 6 parameters without semantic clarification.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a partOf facet') and target resource ('to a specification'), which is specific and unambiguous. It distinguishes from siblings like 'add_attribute_facet' or 'add_entity_facet' by specifying the facet type. However, it doesn't explicitly contrast with all sibling tools in the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like other 'add_*_facet' tools or 'add_specification'. It lacks context about prerequisites, typical workflows, or scenarios where this specific facet type is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_pattern_restrictionA

Add pattern restriction (regex matching).

Args: spec_id: Specification identifier or name facet_index: Index of facet in location (0-based) parameter_name: Which parameter to restrict (e.g., "value") base_type: XSD base type (e.g., "xs:string") pattern: Regular expression pattern ctx: FastMCP Context (auto-injected) location: "applicability" or "requirements" (default: "requirements")

Returns: {"status": "added", "restriction_type": "pattern", "spec_id": "S1"}

Example: Add pattern to attribute value: Name must match "EW-[0-9]{3}"

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
facet_indexYes
parameter_nameYes
base_typeYes
patternYes
locationNorequirements

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the tool adds restrictions (implying mutation) and shows the return format, but lacks details about permissions needed, whether changes are reversible, error conditions, or rate limits. The behavioral disclosure is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Perfectly structured and appropriately sized: purpose statement first, then organized Args section, Returns, and Example. Every sentence earns its place with zero waste, and information is front-loaded effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, mutation operation) and no annotations, the description does well with parameter explanations and includes output schema info. However, it could better explain the relationship between parameters (e.g., how facet_index relates to spec_id) and provide more behavioral context for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well by explaining all 6 parameters in the Args section with clear examples (e.g., 'parameter_name: Which parameter to restrict (e.g., "value")', 'location: "applicability" or "requirements"'). It adds substantial meaning beyond the bare schema, though some parameter relationships could be more explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Add pattern restriction') and resource ('regex matching'), distinguishing it from siblings like add_bounds_restriction or add_enumeration_restriction. The example further clarifies it's for restricting attribute values with regex patterns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about when to use this tool (adding regex pattern restrictions to specifications), and the example shows a specific use case. However, it doesn't explicitly state when NOT to use it or name alternatives among siblings like add_enumeration_restriction for non-regex constraints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_property_facetA

Add a property facet to a specification.

IMPORTANT: The property_set parameter is REQUIRED for valid IDS export.

Args: spec_id: Specification identifier location: "applicability" or "requirements" property_name: Property name (e.g., "FireRating") ctx: FastMCP Context (auto-injected) property_set: Property set name (e.g., "Pset_WallCommon") - REQUIRED data_type: IFC data type (e.g., "IFCLABEL") value: Required value or pattern cardinality: "required", "optional", or "prohibited"

Returns: {"status": "added", "facet_type": "property", "spec_id": "S1"}

Raises: ToolError: If property_set is None or empty

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
locationYes
property_nameYes
property_setNo
data_typeNo
valueNo
cardinalityNorequired

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it's a mutation tool (implied by 'Add'), specifies that 'property_set' is required for valid export, documents the return format, and mentions error conditions ('Raises: ToolError'). It doesn't cover all potential behaviors like rate limits or auth needs, but provides substantial context beyond basic parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, important note, args, returns, raises) and front-loaded key information. Every sentence earns its place by providing essential details. It could be slightly more concise by integrating the 'IMPORTANT' note into the main description, but overall it's efficiently organized without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (7 parameters, mutation operation, no annotations) and the presence of an output schema (implied by the 'Returns' section), the description is complete enough. It covers purpose, critical requirements, all parameter meanings, return values, and error conditions. The output schema existence means the description doesn't need to explain return values in detail, and it provides all necessary context for effective tool use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It does so excellently by explaining all 7 parameters with clear semantics: 'spec_id' as specification identifier, 'location' with allowed values, 'property_name' with examples, 'property_set' as required for export with examples, 'data_type' as IFC type, 'value' as required value/pattern, and 'cardinality' with allowed values. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Add') and resource ('property facet to a specification'). It distinguishes itself from siblings like 'add_attribute_facet' or 'add_material_facet' by specifying it's for property facets, not other types. The description explicitly mentions what it does rather than just restating the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some implied usage guidance by noting that 'property_set parameter is REQUIRED for valid IDS export,' which suggests when this tool is necessary for compliance. However, it doesn't explicitly state when to use this tool versus alternatives like 'add_attribute_facet' or other sibling tools, nor does it provide exclusions or prerequisites beyond the required parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_specificationB

Add a specification to the current session's IDS document.

Args: name: Specification name ifc_versions: List of IFC versions (e.g., ["IFC4", "IFC4X3"]) ctx: FastMCP Context (auto-injected) identifier: Optional unique identifier description: Why this information is required instructions: How to fulfill requirements min_occurs: Minimum occurrences (0 = optional) max_occurs: Maximum occurrences (int or "unbounded")

Returns: { "status": "added", "spec_id": "S1", "ifc_versions": ["IFC4"] }

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
ifc_versionsYes
identifierNo
descriptionNo
instructionsNo
min_occursNo
max_occursNounbounded

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an 'Add' operation (implying mutation) and shows a return format, but doesn't address important behavioral aspects like: what happens if a specification with the same name already exists, whether this requires specific permissions, if changes are reversible, or any rate limits/constraints. The return example helps but doesn't constitute comprehensive behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, args, returns) and front-loads the core functionality. Every sentence adds value, though the parameter documentation is quite detailed (which is necessary given the 0% schema coverage). The structure helps the agent quickly parse the information, though it could be slightly more concise in the parameter explanations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, mutation operation, no annotations) and the existence of an output schema (implied by the return example), the description does a good job of providing necessary context. The parameter documentation is comprehensive, the return format is shown, and the purpose is clear. The main gap is lack of behavioral context and sibling differentiation, but overall it provides substantial guidance for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description provides excellent parameter semantics compensation. It clearly documents all 7 parameters with meaningful explanations beyond just names: clarifying 'ifc_versions' format with examples, explaining optional vs required parameters, defining special values like 'unbounded' for max_occurs, and providing context for what each parameter represents in the domain (e.g., 'Why this information is required' for description).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a specification') and target resource ('to the current session's IDS document'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from its many siblings (like add_attribute_facet, add_bounds_restriction, etc.) which all seem to add different components to IDS documents, leaving the specific role of 'specification' versus other facet/restriction types unclear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus the 15 other sibling tools listed, nor does it mention prerequisites, dependencies, or alternative approaches. While it mentions the tool operates on 'the current session's IDS document,' this is more context than usage guidance, leaving the agent with no help in tool selection decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_idsA

Create a new IDS document for this session.

Session is automatically tracked by FastMCP - no session_id parameter needed!

Args: title: Document title (required) ctx: FastMCP Context (auto-injected) author: Author email or name version: Version string date: Date in YYYY-MM-DD format description: Document description copyright: Copyright notice milestone: Project milestone purpose: Purpose of this IDS

Returns: { "status": "created", "session_id": "auto-generated-by-fastmcp", "title": "..." }

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
authorNo
versionNo
dateNo
descriptionNo
copyrightNo
milestoneNo
purposeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it creates a new document (implying a write/mutation operation), automatically tracks sessions (no session_id needed), and returns a specific JSON structure. It could improve by mentioning permissions, error cases, or rate limits, but covers essential operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a purpose statement, behavioral note, parameter details, and return format. It's appropriately sized but could be slightly more concise by integrating the 'Args' and 'Returns' labels into the flow. Every sentence adds value, with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, 1 required), no annotations, and an output schema provided, the description is complete. It explains the tool's purpose, usage context, parameters, and return values, covering all necessary aspects for an AI agent to invoke it correctly without relying on structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description compensates fully by listing all 8 parameters in the 'Args' section with clear explanations (e.g., 'title: Document title (required)', 'date: Date in YYYY-MM-DD format'). It also notes that 'ctx' is auto-injected and 'title' is required, adding crucial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'creates a new IDS document for this session' with a specific verb ('create') and resource ('IDS document'), and mentions session tracking. However, it doesn't differentiate from sibling tools like 'add_specification' or 'load_ids', which might also involve IDS document operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating 'for this session' and that 'Session is automatically tracked by FastMCP', suggesting it's for creating new documents within a tracked context. However, it doesn't explicitly state when to use this versus alternatives like 'load_ids' (for existing documents) or 'add_specification' (for modifying documents), leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_idsA

Export IDS document to XML file using IfcTester.

Uses current session automatically - no session_id parameter needed!

Args: ctx: FastMCP Context (auto-injected) output_path: File path (optional, returns XML string if not provided) validate: Whether to validate against XSD (default: True)

Returns: { "status": "exported", "xml": "...", # If no output_path "file_path": "...", # If output_path provided "validation": {"valid": true, "errors": []} }

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathNo
validateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool automatically uses the current session (no session_id needed), can output to a file or return XML string, and includes validation capabilities. It also clearly explains the conditional return structure based on whether output_path is provided. The only minor gap is lack of information about error handling or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. It begins with the core purpose, then provides important usage note, followed by clear parameter documentation, and finally the return structure. Every sentence earns its place with no wasted words, and information is front-loaded appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, validation functionality), no annotations, and the presence of an output schema, the description is complete. It explains the tool's purpose, usage context, parameter behaviors, and the output schema handles return values. The description provides everything needed beyond the structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must fully compensate. It provides excellent parameter semantics: explains that 'ctx' is auto-injected (not a user parameter), describes 'output_path' as optional with clear behavior when omitted (returns XML string), and explains 'validate' with its default and purpose (validate against XSD). This adds substantial value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Export IDS document to XML file using IfcTester.' It specifies the verb (export), resource (IDS document), format (XML file), and technology (IfcTester). This distinguishes it from sibling tools like 'validate_ids' or 'create_ids' which have different functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for usage: 'Uses current session automatically - no session_id parameter needed!' This indicates when to use this tool (with an active session) versus alternatives that might require session management. However, it doesn't explicitly state when NOT to use it or name specific alternative tools for different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ids_infoA

Get current session's IDS document structure.

Uses current session automatically - no session_id parameter needed!

Args: ctx: FastMCP Context (auto-injected)

Returns: { "title": "...", "author": "...", "specification_count": 3, "specifications": [...] }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about automatic session usage and the return structure, but doesn't cover aspects like whether this is a read-only operation, potential errors, or performance considerations. The description doesn't contradict annotations (since none exist), but it provides only moderate behavioral insight beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a key behavioral note, and then structured details on args and returns. Every sentence earns its place without redundancy, making it highly concise and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, 100% schema coverage, and an output schema (implied by the Returns section), the description is reasonably complete. It explains the purpose, session usage, and return format, which covers the essentials. However, it could be more complete by addressing how it relates to sibling tools or potential error cases, but the output schema reduces the need for detailed return value explanations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so the schema fully documents the lack of parameters. The description adds value by explicitly stating 'no session_id parameter needed!' and noting that 'ctx' is auto-injected, which clarifies parameter semantics beyond the empty schema. This compensates well for the simple parameter case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get current session's IDS document structure.' It specifies the verb ('Get') and resource ('IDS document structure'), and clarifies it uses the current session automatically. However, it doesn't explicitly differentiate from sibling tools like 'load_ids' or 'create_ids', which might also involve IDS document operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context by noting 'Uses current session automatically - no session_id parameter needed!', which implies when to use this tool (for current session) versus alternatives that might require session parameters. However, it doesn't explicitly state when to use this tool over siblings like 'load_ids' or 'export_ids', leaving usage somewhat implied rather than fully guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_idsA

Load an existing IDS file into the current session.

Replaces any existing IDS in this session.

Args: source: File path or XML string ctx: FastMCP Context (auto-injected) source_type: "file" or "string"

Returns: { "status": "loaded", "title": "...", "specification_count": 3, "specifications": [...] }

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
source_typeNofile

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it 'Replaces any existing IDS in this session' (destructive effect), specifies the return structure, and mentions auto-injection of 'ctx'. It does not cover rate limits or auth needs, but provides sufficient operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by behavioral note, parameter details, and return values in a structured format. Every sentence adds value with no redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (loading files with session state impact), no annotations, and an output schema that documents return values, the description is complete. It covers purpose, behavior, parameters, and output, leaving no gaps for the agent to operate correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It effectively explains both parameters: 'source' as 'File path or XML string' and 'source_type' as '"file" or "string"', adding crucial meaning beyond the bare schema. This covers all parameters comprehensively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Load' and resource 'IDS file' into 'current session', distinguishing it from sibling tools like 'create_ids', 'export_ids', or 'get_ids_info'. It specifies the action is about loading existing files rather than creating new ones or exporting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to load an IDS file into a session. It implicitly distinguishes from alternatives like 'create_ids' for new files or 'validate_ids' for checking, but does not explicitly state when not to use it or name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_idsA

Validate current session's IDS document.

Validates:

  1. Required fields present (title, specifications, etc.)

  2. Each specification has applicability

  3. IFC versions are valid

  4. XSD schema compliance (via IfcTester)

Args: ctx: FastMCP Context (auto-injected)

Returns: { "valid": true, "errors": [], "warnings": [], "specifications_count": 3, "details": { "has_title": true, "has_specifications": true, "xsd_valid": true } }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by detailing what gets validated (four specific checks) and the return structure. It doesn't mention performance characteristics, error handling, or prerequisites like needing a loaded IDS document first, but covers core behavior adequately for a validation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with a clear purpose statement, bulleted validation criteria, and explicit return format. Every sentence adds value: the first states what's validated, the bullets detail criteria, and the return section explains output. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 0 parameters, no annotations, but a detailed output schema in the description, the description is complete. It explains what validation entails, documents the return structure thoroughly, and provides enough context for an agent to understand when and how to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so the baseline is 4. The description appropriately notes that 'ctx: FastMCP Context' is auto-injected, adding useful context about parameter handling without needing to document non-existent user parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('validate') and target resource ('current session's IDS document'), distinguishing it from sibling tools like 'validate_ifc_model' which validates a different resource. It provides concrete validation criteria (required fields, applicability, IFC versions, XSD compliance) that make the purpose unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying it validates 'current session's IDS document', suggesting it should be used when an IDS document is loaded in the session. However, it doesn't explicitly state when not to use it or name alternatives like 'validate_ifc_model' for different validation scenarios, leaving some guidance gaps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_ifc_modelA

Validate an IFC model against the current session's IDS specifications.

This bonus feature leverages IfcTester's IFC validation capabilities.

Args: ifc_file_path: Path to IFC file ctx: FastMCP Context (auto-injected) report_format: "console", "json", or "html"

Returns (json format): { "status": "validation_complete", "total_specifications": 3, "passed_specifications": 2, "failed_specifications": 1, "report": { "specifications": [ { "name": "Wall Fire Rating", "status": "passed", "applicable_entities": 25, "passed_entities": 25, "failed_entities": 0 }, ... ] } }

ParametersJSON Schema
NameRequiredDescriptionDefault
ifc_file_pathYes
report_formatNojson

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that this is a validation tool (implying read-only behavior) and mentions it's a 'bonus feature,' which adds some context. However, it lacks details on permissions, rate limits, error handling, or whether it modifies the IFC file, leaving behavioral traits partially covered but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose in the first sentence. The additional details on args and returns are structured but slightly verbose; however, every sentence adds value (e.g., explaining IfcTester and return format), with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of validation with 2 parameters and no annotations, the description is complete enough. It includes purpose, parameter semantics, and a detailed return format in the output schema, which eliminates the need to explain return values. This covers essential context for the agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining 'ifc_file_path' as the path to the IFC file and 'report_format' with specific enum values ('console', 'json', 'html'), including a default of 'json' in the schema. This provides clear semantics beyond the bare schema, though it could elaborate on path format or context usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('validate') and resource ('IFC model'), and distinguishes it from siblings by specifying it validates against IDS specifications. It explicitly mentions leveraging IfcTester's capabilities, which further clarifies its unique function compared to other tools like 'validate_ids' or 'create_ids'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by stating it validates 'against the current session's IDS specifications,' suggesting it should be used after IDS specifications are loaded or created. However, it does not explicitly state when to use this tool versus alternatives like 'validate_ids' or provide any exclusions or prerequisites, leaving some ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap. The 'add_' tools create specific facet or restriction types (e.g., attribute, bounds, classification), while the management tools (create_ids, export_ids, etc.) handle document lifecycle operations. The descriptions clearly differentiate what each tool does, preventing agent confusion.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case throughout. The 'add_' prefix is used uniformly for facet/restriction creation tools, while management tools use clear verbs like create, export, get, load, and validate. This predictable naming makes the tool set easy to navigate and understand.

Tool Count5/5

With 17 tools, this server provides comprehensive coverage for IDS document creation and validation. The count is well-scoped for the domain, including core operations (create, export, validate), facet types (entity, property, material, etc.), and restriction types (bounds, enumeration, pattern). Each tool earns its place without redundancy.

Completeness5/5

The tool set provides complete coverage for IDS document lifecycle management. It includes document creation (create_ids), loading (load_ids), editing (add_* facets/restrictions), inspection (get_ids_info), validation (validate_ids), export (export_ids), and even model validation (validate_ifc_model). All essential CRUD operations are present with no apparent gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables AI assistants to create, edit, and export IFC5/IFCX building information models through natural language, handling spatial structure, elements, geometry, metadata, validation, and export.
    73
    14
    25
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to load, query, and analyze IFC building model files, including spatial structures, elements, properties, materials, and geometry.
    20
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to perform validated 3D CAD modeling using CAiD and OpenCASCADE, with tools for creating, modifying, querying, and exporting 3D shapes.
    3
    MIT

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