Skip to main content
Glama
roynertr

COBie MCP

by roynertr

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ENABLE_HEALTH_SERVERNoSet to 'true' to enable the health server.false

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_update_workflowA

Return the recommended workflow to update COBie workbooks. Call this first.

Proactive guidance to avoid validation errors. Use before capture_installation
or update_cobie so you get the schema and steps right the first time.
get_actor_contact_schemaA

Return the expected structure for actor_contact with accepted aliases.

Call this before capture_installation or update_cobie to validate your input
and avoid validation errors. Or call get_update_workflow() for the full checklist.
get_document_schemaA

Return the expected structure for COBie Document with validation rules and examples.

Call this before adding documents to understand required fields, PickList constraints, and entity references. Prevents validation errors on first attempt.

validate_document_inputA

Validate Document input before creation (proactive check).

Checks:
- Target entity (SheetName + RowName) exists
- Category exists in PickList.DocumentType
- ApprovalBy exists in PickList.ApprovalBy
- Stage exists in PickList.StageType

Returns validation result with errors or success message.
add_documentA

Add a new COBie Document row to link a file/reference to a COBie entity.

Proactive validation: calls validate_document_input internally before writing.

Args:
    excel_path: Path to COBie Excel file
    name: Unique document identifier (e.g. 'DOC-2026-001')
    sheet_name: Target sheet (Component, Type, Space, Floor, etc.)
    row_name: Target entity name (must exist in target sheet)
    category: Document type from PickList.DocumentType
    approval_by: Approver from PickList.ApprovalBy
    stage: Stage from PickList.StageType
    directory: File directory path or 'n/a'
    file: File name or 'n/a'
    description: Document description (default 'n/a')
    reference: External reference URL (default 'n/a')
    actor_contact: Contact creating the document (CreatedBy)
    as_of_date: Creation date (defaults to today)
    dry_run: Preview changes without writing

Returns:
    Result with success status, created row number, and any errors.

Example:
    add_document(
        excel_path="project.xlsx",
        name="DOC-AHU1-MANUAL",
        sheet_name="Component",
        row_name="AHU-1",
        category="Operation and Maintenance",
        approval_by="Information Only",
        stage="As Built",
        directory="/docs/equipment",
        file="AHU-1-manual.pdf",
        description="Equipment operation manual",
        actor_contact={"email": "user@company.com", "company": "ACME", "phone": "555-1234", "category": "CM"}
    )
get_cobie_headersA

Return workbook headers for each sheet (row 1 only).

list_runtime_skillsA

List available runtime skills for orchestration (agentic affordance).

Returns name, description, version_hash for each skill. Use get_runtime_skill(name)
for full body; suggest_runtime_skill(user_intent, state) to route user intent
(e.g. pending_preview_id + 'confirm' → applying-updates).
get_runtime_skillA

Get full runtime skill by name (agentic affordance).

Returns name, description, body_md, version_hash, sections. Use list_runtime_skills()
to discover names; suggest_runtime_skill(user_intent, state) to pick a skill from intent.
suggest_runtime_skillA

Suggest runtime skill from user intent and workflow state (agentic affordance).

Deterministic heuristics: pending_preview + 'confirm' → applying-updates;
'export' → exporting-cobie; 'validate' → validating-cobie; default → editing-cobie.
Returns name and rationale. Use get_runtime_skill(name) for full body.
organize_document_fileA

Copy/move a file to the standard COBie document location.

Target path: {docs_root}/{SheetName}/{RowName}/{filename}

Returns the Directory and File values to pass to add_document.
Use this to physically organize documents before adding metadata to Excel.

Args:
    source_file_path: Path to source file
    sheet_name: Target sheet (Component, Type, Space, etc.)
    row_name: Target entity name
    docs_root: Base folder for document organization
    copy: If True, copy file (default). If False, move file.
    filename_override: Optional filename to use instead of original

Returns:
    Dictionary with directory, file, target_path, and success status

Example:
    result = organize_document_file(
        source_file_path="/tmp/AHU-1-manual.pdf",
        sheet_name="Component",
        row_name="AHU-1",
        docs_root="project_docs"
    )
    # Returns: {"directory": "project_docs/Component/AHU-1", "file": "AHU-1-manual.pdf"}
    # Then use in add_document
suggest_document_pathA

Return recommended Directory and File for add_document.

Does not touch the file system. Use when organizing manually or to preview paths.

Args:
    sheet_name: Target sheet (Component, Type, Space, etc.)
    row_name: Target entity name
    filename: File name
    docs_root: Base folder for document organization (default 'docs')

Returns:
    Dictionary with recommended directory and file paths

Example:
    result = suggest_document_path(
        sheet_name="Component",
        row_name="AHU-1",
        filename="manual.pdf"
    )
    # Returns: {"directory": "docs/Component/AHU-1", "file": "manual.pdf"}
search_entitiesA

Search COBie entities (contact, space, floor, type, component, document) by type and optional query.

For filtered lists by floor/space use list_floors, list_spaces, list_components.

Args:
    entity_type: contact|space|floor|type|component|document (plural accepted).
    excel_path: Path to COBie Excel file.
    query: Optional text to match in any cell (case-insensitive substring).
    limit: Max items to return (default 50).

Returns:
    items (list of {id, label, key, sheet, rowIndex, fields}), executed_at, provenance.

Example:
    search_entities("component", "project.xlsx", query="AHU", limit=10)
    # items[].id = "component:AHU-1", items[].fields = {Name, TypeName, ...}
get_entity_detailsD
extract_from_submittalA

Extract text, structured fields, and tables from a PDF submittal.

Returns consistent structured output with confidence and provenance.
On failure returns actionable error message; on partial failure (e.g. table
extraction fails) returns best-effort text and warnings. Output is kept
minimal: text_summary is provided when text is long; use full text when needed.
extract_from_textA

Extract content from a text file (.txt).

Args:
    text_path: Path to the text file
    mode: Extraction mode (currently only 'content' supported)

Returns:
    Dictionary with content, word_count, line_count, and key_phrases
extract_from_excel_attachmentB

Extract highlights from an Excel attachment (not a COBie workbook).

Args:
    excel_path: Path to the Excel file
    limit_rows: Maximum rows to preview per sheet

Returns:
    Dictionary with sheet names, highlights, and row counts
validate_cobieA

Validate a COBie workbook and generate an HTML report.

**Read-only** (writes HTML report to disk only). Use after commit to revalidate.

**Safety:** No confirm_token on server. Client calls this to revalidate after
update_cobie/capture_installation commit.

Args:
    excel_path: Path to the COBie Excel file.

Returns:
    ValidationToolResult with summary (error/warning counts), html_path,
    status (ok|error), provenance, next_actions.

Example:
    result = validate_cobie("project.xlsx")
    # result.summary = {"total_fail": 0, "total_pass": 12, ...}
    # result.html_path = "project.validation.html"
    # result.status = "ok" | "error"
    # result.next_actions = ["Fix reported rows and re-run validate_cobie.", ...]
validate_draft_resultA

Validate the workbook state after applying a draft, without modifying the original file.

Applies the draft to a temporary copy, runs COBie validation, and returns status/summary.
Use before commit to block Apply when the result would be invalid. Read-only for the
original workbook; temp file is always deleted.

Args:
    excel_path: Path to the COBie Excel file.
    structured_update_json: Draft in UpdateRequest shape (instructions array).
    actor_contact: Optional; if omitted, a system placeholder is used for stamping.

Returns:
    ValidateDraftResult: status (ok|error), summary (total_fail, total_pass, ...),
    executed_at, next_actions, optional results.
handover_readinessA

Assess handover readiness for the workbook or a single entity (e.g. Component by Name).

Read-only. Use when the user asks "what's missing", "is this ready", or "correct this record"
and an entity (sheet + key) is in context.

Args:
    excel_path: Path to the COBie Excel file.
    sheet: Optional sheet name (e.g. "Component", "Type") to filter by entity.
    key: Optional row key (e.g. component Name) to filter by entity.

Returns:
    HandoverReadinessResult: ready, missing_required, invalid_refs, warnings,
    summary, suggested_instructions (simple deterministic fix suggestions).
update_cobieA
Update COBie workbook with structured instructions or natural language text.

**Before first update:** Call get_update_workflow() or get_actor_contact_schema() to get
the required structure and avoid validation errors. Use MCP prompt 'how_to_update_cobie' for the full guide.

**IMPORTANT - File Modification Behavior:**
- **DEFAULT (output_path=None):** Edits the original file IN-PLACE (modifies excel_path directly)
- **With output_path:** Creates a NEW file at output_path, leaves original untouched
- **With create_backup=True:** Creates "excel_path.bak" backup before editing in-place

**Use Cases:**
- Normal editing: Don't specify output_path (edits original)
- Create a modified copy: Specify output_path
- Safe editing with backup: Set create_backup=True

**Actor contact (required):** Provide updater identity to stamp CreatedBy/CreatedOn.
{
    "email": "john@example.com",
    "company": "ACME Corp",
    "phone": "555-1234",
    "category": "Installer"
}

**Input format:** Use EITHER instruction_text OR structured_update_json (not both).

**instruction_text format (natural language):**
- "Update <ComponentName> <FieldName> to <value>"
Examples:
- "Update Tap-1 InstallationDate to 2026-02-16"
- "Update Pump-3A SerialNumber to SN-12345"
- "Update DR:T1A Material to Steel"

**structured_update_json format:**
{
    "instructions": [
        {
            "component_name": "Tap-1",
            "attribute_name": "InstallationDate",
            "new_value": "2026-02-16",
            "target_sheet": "Component",
            "target_key": "Tap-1"
        }
    ]
}

**Common mistakes:**
- Field names are case-sensitive: use lowercase 'email', 'company', 'phone', 'category'
- Provide ALL required actor_contact fields at once (not gradually)
- Don't specify output_path unless you want to create a separate copy

**Safety (commit gate):** Call with dry_run=False only after user has confirmed
the preview. No confirm_token on server; client must enforce confirm_token (e.g.
CONFIRM_APPLY). After commit, call validate_cobie(excel_path) to revalidate.

Example (preview):
    update_cobie(excel_path, structured_update_json={"instructions": [...]},
                 actor_contact=actor, dry_run=True, diff=True)
    # Returns: success, updated_count, errors, diffs, summary, next_actions
Example (commit, after user confirm):
    update_cobie(excel_path, structured_update_json={"instructions": [...]},
                 actor_contact=actor, dry_run=False)
preview_updateA

Preview COBie updates (dry-run) and return diff. Explicit preview gate.

**Preview gate:** Use this before apply. To commit, call update_cobie with
dry_run=False only after user confirmation (e.g. confirm_token CONFIRM_APPLY).
No confirm_token on server; client enforces confirm_token.

Args:
    excel_path: Path to COBie Excel file.
    draft_json: Same shape as structured_update_json for update_cobie (instructions array).
    actor_contact: Updater identity (required).
    as_of_date: Optional date for CreatedOn/InstallationDate.
    key_mode: Lookup mode for keys.

Returns:
    UpdateResult with success, updated_count, diffs, summary, next_actions, dry_run=True.

Example:
    result = preview_update("project.xlsx", {"instructions": [...]}, actor_contact)
    # result.diffs = [{"sheet": "Component", "row_key": "C-1", "column": "SerialNumber", ...}]
    # result.next_actions = ["To commit: call update_cobie with dry_run=False after confirm_token"]
capture_installationA
Capture equipment installation data in the COBie workbook (construction phase).

**Before first use:** Call get_update_workflow() or get_actor_contact_schema() to get
the required actor_contact structure. Use MCP prompt 'how_to_update_cobie' for the full guide.

**IMPORTANT - File Modification Behavior:**
- **DEFAULT (output_path=None):** Edits the original file IN-PLACE (modifies excel_path directly)
- **With output_path:** Creates a NEW file at output_path, leaves original untouched
- **With create_backup=True:** Creates "excel_path.bak" backup before editing in-place

**Construction phase** (typical): Component name, type, and location are already in the
workbook from design. Only provide:
- component_identifier (required): The component name (e.g. "Tap-1", "DR:T1A")
- installation_date (optional): Use "today" or "now" when user says "just installed"
  **OR** use as_of_date parameter (if payload lacks installation_date, as_of_date is used automatically)
- serial_number, status (optional)
Do NOT ask for type, floor, or space—they are design-phase and already in the file.

**Payload fields:**
- component_identifier (required): Equipment name in the workbook
- installation_date (optional): ISO date, or "today"/"now" for current date.
  **NOTE:** If omitted and as_of_date parameter is provided, as_of_date will be used for InstallationDate.
- serial_number, status (optional): e.g. status="PLACED"|"STARTED"|"TESTED"|"COMMISSIONED"
- install_space, install_floor (optional): Only when adding NEW components; omit for
  construction phase—location comes from design.
- evidence_paths (optional): Paths to attach evidence files

**Actor contact (required):** Provide updater identity.
{
    "email": "john@example.com",
    "company": "ACME Corp",
    "phone": "555-1234",
    "category": "Installer"
}

**Minimal example (construction phase with as_of_date):**
{
    "payload": {
        "component_identifier": "Tap-1"
        # installation_date omitted - as_of_date will be used
    },
    "actor_contact": {
        "email": "installer@acme.com",
        "company": "ACME Corp",
        "phone": "555-1234",
        "category": "Installer"
    },
    "as_of_date": "2026-02-16"
}

**Alternative: explicit installation_date in payload:**
{
    "payload": {
        "component_identifier": "Tap-1",
        "installation_date": "today"
    },
    "actor_contact": {
        "email": "installer@acme.com",
        "company": "ACME Corp",
        "phone": "555-1234",
        "category": "Installer"
    }
}

**Common mistakes:**
- Use 'component_identifier', 'component_name', 'equipment_name', or 'ComponentName' (all accepted)
- Both snake_case and PascalCase (COBie standard) are accepted for payload fields
- Field names are case-sensitive: use lowercase 'email', 'company', 'phone', 'category'
- Provide ALL required actor_contact fields at once
- Don't specify output_path unless you want to create a separate copy

**Header requirements:** Workbook must have columns for any payload fields provided
(e.g. SerialNumber, InstallationDate, Status if you include them).
load_cobie_summaryD
list_sheet_rowsB

List rows from any COBie worksheet. Read-only. Returns columns, rows with rowIndex for stable identity.

list_floorsC

List all floors from the Floor sheet or project graph when canonical mode is enabled.

list_spacesC

List spaces, optionally filtered by Floor, from workbook or project graph.

list_componentsC

List components, optionally filtered by Space.

normalize_cobie_workbookC

Shadow canonical normalization for a COBie workbook without modifying the file.

lookup_component_locationC

Resolve a Component's assigned Space and Floor without LLM routing.

import_cobie_to_graphA

Import a COBie Excel workbook into the project-scoped canonical graph (idempotent upsert).

apply_update_to_graphA

Apply confirmed COBie updates to the canonical project graph (not Excel).

Requires confirm_token='CONFIRM_APPLY' unless dry_run=True.
Rejects applies when graph sync status is missing, stale, or error.
export_cobie_from_graphC

Export a derived COBie Excel snapshot from the canonical project graph.

validate_graph_exportC

Validate a graph-exported COBie workbook.

graph_list_floorsC

List floors from the canonical project graph.

graph_list_spaces_by_floorC

List spaces from the canonical project graph, optionally filtered by floor.

graph_count_spaces_by_floorA

Count spaces on a floor from the canonical project graph.

graph_list_components_by_spaceB

List components located in a space from the canonical project graph.

graph_count_components_by_spaceB

Count components located in a space from the canonical project graph.

graph_find_component_by_nameC

Find components by name in the canonical project graph.

graph_get_component_detailsC

Get component details and related type/location from the canonical project graph.

graph_get_component_locationC

Resolve component location (space/floor) from the canonical project graph.

graph_get_type_componentsC

List components of a type from the canonical project graph.

graph_get_system_componentsC

List components in a system from the canonical project graph.

get_project_graph_statsA

Return project-scoped graph load stats (node/relationship counts).

compute_workbook_source_hashA

Compute canonical source hash for a COBie workbook (for graph sync checks).

sync_project_embeddingsB

Build or refresh derived EntityEmbedding nodes for a project graph.

semantic_search_projectC

Semantic search over derived project embeddings; results are expanded from the canonical graph.

get_vector_statusC

Return vector index readiness for a project.

lookup_component_location_toolB

Deprecated alias for lookup_component_location.

graph_list_floors_toolD

Deprecated alias for graph_list_floors.

graph_list_spaces_by_floor_toolB

Deprecated alias for graph_list_spaces_by_floor.

graph_count_spaces_by_floor_toolC

Deprecated alias for graph_count_spaces_by_floor.

graph_list_components_by_space_toolC

Deprecated alias for graph_list_components_by_space.

graph_count_components_by_space_toolB

Deprecated alias for graph_count_components_by_space.

graph_find_component_by_name_toolD

Deprecated alias for graph_find_component_by_name.

graph_get_component_details_toolD

Deprecated alias for graph_get_component_details.

graph_get_component_location_toolC

Deprecated alias for graph_get_component_location.

graph_get_type_components_toolD

Deprecated alias for graph_get_type_components.

graph_get_system_components_toolC

Deprecated alias for graph_get_system_components.

sync_project_embeddings_toolB

Deprecated alias for sync_project_embeddings.

semantic_search_project_toolB

Deprecated alias for semantic_search_project.

get_vector_status_toolC

Deprecated alias for get_vector_status.

get_cobie_hierarchyC

Read-only aggregated COBie hierarchy (floors) via domain HierarchyService.

Prompts

Interactive templates invoked by user choice

NameDescription
collect_user_identityCollect the updater identity (COBie Contact) so updates can stamp CreatedBy/CreatedOn.
collect_contact_required_fieldsIf your email is not in the workbook Contact sheet, collect required fields to create the Contact row.
how_to_update_cobieRun this before your first update to get the schema and steps right. Prevents validation errors.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.4/5.0

Scored across 63 tools

Disambiguation2/5

Many tools are deprecated aliases duplicating identical functionality (e.g., graph_list_floors_tool vs graph_list_floors), and there is significant overlap between update_cobie, preview_update, capture_installation, and validate_draft_result. get_entity_details has an empty description, making its purpose ambiguous.

Naming Consistency3/5

Most tools follow a verb_noun pattern (list_floors, validate_cobie, add_document), but naming is inconsistent across families: some use graph_ prefixes, some use _tool suffixes for deprecated aliases, and verbs vary (lookup vs get vs find, load vs get). The pattern is recognizable but not consistently applied.

Tool Count2/5

63 tools is excessive for the apparent scope, largely because many are deprecated aliases and near-duplicates (e.g., 10+ graph_* aliases, multiple preview/validate/update combinations). The core functionality could be delivered with fewer, better-differentiated tools.

Completeness4/5

The tool set covers a broad COBie lifecycle: import/export, validation, updates, document attachment, graph queries, hierarchy, readiness assessment, and text/PDF extraction. However, get_entity_details and load_cobie_summary lack descriptions, and entity creation for spaces/floors/types is only indirectly supported through update_cobie.

Maintenance

ActivitySlowing
ResponsivenessNo issues