Skip to main content
Glama

add_pattern_restriction

Apply regex pattern restrictions to IDS specifications to enforce data format requirements for building information modeling compliance.

Instructions

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
spec_idYes
facet_indexYes
parameter_nameYes
base_typeYes
patternYes
locationNorequirements

Implementation Reference

  • The main asynchronous handler function that implements the 'add_pattern_restriction' tool. It adds a pattern (regex) restriction to a specified facet parameter in an IDS specification using IfcTester's Restriction API. Includes input validation via docstring, session management, facet retrieval, restriction creation and application, logging, and error handling.
    async def add_pattern_restriction( spec_id: str, facet_index: int, parameter_name: str, base_type: str, pattern: str, ctx: Context, location: str = "requirements" ) -> Dict[str, Any]: """ 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}" """ try: ids_obj = await get_or_create_session(ctx) spec = _find_specification(ids_obj, spec_id) await ctx.info(f"Adding pattern restriction to {spec_id}, facet {facet_index}") # Get the facet facet = _get_facet_from_spec(spec, location, facet_index) # Create pattern restriction using IfcTester # Normalize base type (remove 'xs:' prefix if present) normalized_base = _normalize_base_type(base_type) restriction = ids.Restriction( base=normalized_base, options={"pattern": pattern} ) # Apply restriction to the parameter _apply_restriction_to_facet(facet, parameter_name, restriction) await ctx.info(f"Pattern restriction added: {pattern}") return { "status": "added", "restriction_type": "pattern", "spec_id": spec_id, "facet_index": facet_index, "parameter": parameter_name, "pattern": pattern } except ToolError: raise except Exception as e: await ctx.error(f"Failed to add pattern restriction: {str(e)}") raise ToolError(f"Failed to add pattern restriction: {str(e)}")
  • Registration of the 'add_pattern_restriction' tool (and related restriction tools) using FastMCP's tool decorator in the server creation function.
    # Register restriction management tools mcp_server.tool(restrictions.add_enumeration_restriction) mcp_server.tool(restrictions.add_pattern_restriction) mcp_server.tool(restrictions.add_bounds_restriction) mcp_server.tool(restrictions.add_length_restriction)
  • Helper function to apply a Restriction object to a specific parameter on a facet object, used by add_pattern_restriction and other restriction tools.
    def _apply_restriction_to_facet( facet: Any, parameter_name: str, restriction: ids.Restriction ) -> None: """ Apply restriction to a facet parameter. Args: facet: Facet object (Entity, Property, Attribute, etc.) parameter_name: Parameter to restrict (e.g., "value", "propertySet", "baseName") restriction: Restriction object to apply Raises: ToolError: If parameter doesn't exist on facet """ # Check if parameter exists if not hasattr(facet, parameter_name): raise ToolError( f"Parameter '{parameter_name}' not found on facet type {type(facet).__name__}" ) # Set the restriction on the parameter setattr(facet, parameter_name, restriction)
  • Helper function to retrieve a specific facet from a specification by location ('applicability' or 'requirements') and index, with validation.
    def _get_facet_from_spec( spec: ids.Specification, location: str, facet_index: int ) -> Any: """ Get facet from specification by location and index. Args: spec: Specification object location: "applicability" or "requirements" facet_index: Index of facet in location (0-based) Returns: Facet object Raises: ToolError: If location invalid or index out of range """ if location == "applicability": facets = spec.applicability elif location == "requirements": facets = spec.requirements else: raise ToolError(f"Invalid location: {location}. Must be 'applicability' or 'requirements'") if facet_index < 0 or facet_index >= len(facets): raise ToolError( f"Facet index {facet_index} out of range. " f"Location '{location}' has {len(facets)} facet(s)" ) return facets[facet_index]
  • Helper function to normalize XSD base types by removing 'xs:' prefix if present, used when creating Restriction objects.
    def _normalize_base_type(base_type: str) -> str: """ Normalize XML Schema base type for IfcTester. IfcTester adds 'xs:' prefix automatically, so we need to remove it if present. Args: base_type: Base type (e.g., "xs:string" or "string") Returns: Normalized base type without 'xs:' prefix (e.g., "string") """ if base_type.startswith("xs:"): return base_type[3:] # Remove 'xs:' prefix return base_type

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