Skip to main content
Glama
DavidCho1999

Canadian Building Code MCP Server

by DavidCho1999

Canadian Building Code MCP

PyPI version License: MIT Smithery

AI-powered search for 24,000+ Canadian building code sections.

Enable AI assistants to search, navigate, and cite building regulations across NBC, OBC, BCBC, and 13 other Canadian codes.

Works with Claude Desktop and any MCP-compatible client (Cursor, Windsurf, etc.)


Why This Exists

Architects and engineers waste hours searching through thousands of pages of building codes. This MCP server lets AI do the heavy lifting:

You: "What are the fire separation requirements for a 3-storey
     residential building in Saskatchewan?"

Claude: [Searches NBC 2025, finds relevant sections, extracts text]

        "According to NBC 2025 Section 3.2.2.55, Group C buildings
         up to 3 storeys with sprinklers require:
         - Maximum area: 1,800 m²
         - Floor assemblies: 45-min fire-resistance rating
         - Load-bearing walls: Same rating as supported assembly"

Features

Feature

Description

24,000+ Sections

NBC, OBC, BCBC, ABC, QCC + 11 more codes indexed

Smart Search

Fuzzy matching, synonyms, "Did you mean?" suggestions

Token Optimized

81% reduction vs naive approach (v1.2.0)

Copyright Safe

BYOD model - coordinates only, you provide the PDF

Jurisdiction Aware

Knows which code applies where (ON→OBC, BC→BCBC)


Architecture

┌─────────────────────────────────────────────────────────────┐
│            MCP Client (Claude, Cursor, etc.)                 │
└─────────────────────────┬───────────────────────────────────┘
                          │ MCP Protocol
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                   Building Code MCP Server                   │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │ search_code  │  │ get_section  │  │ get_table    │       │
│  │ (fuzzy+TF-IDF│  │ (BYOD text)  │  │ (markdown)   │       │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘       │
│         │                 │                 │               │
│         ▼                 ▼                 ▼               │
│  ┌─────────────────────────────────────────────────┐        │
│  │              maps/*.json (15.9 MB)              │        │
│  │         Section IDs, pages, keywords, bbox       │        │
│  └─────────────────────────────────────────────────┘        │
│                          │                                  │
│                          ▼ (BYOD mode only)                 │
│  ┌─────────────────────────────────────────────────┐        │
│  │              User's PDF (via PyMuPDF)            │        │
│  │           Text extraction at runtime             │        │
│  └─────────────────────────────────────────────────┘        │
└─────────────────────────────────────────────────────────────┘

Two Modes:

  • Map-Only (default): Returns page numbers & coordinates. No PDF needed.

  • BYOD: Connect your PDF via set_pdf_path for full text extraction.


Quick Start (1 minute)

# Install uv (one-time)
pip install uv

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "building-code": {
      "command": "uvx",
      "args": ["building-code-mcp"]
    }
  }
}

Option 2: pip

pip install building-code-mcp
{
  "mcpServers": {
    "building-code": {
      "command": "building-code-mcp"
    }
  }
}

Example Conversations

Finding Requirements

You: "I'm designing a 6-storey office building in Vancouver.
     What are the fire separation requirements?"

Claude: Let me search the BC Building Code...

[Uses search_code("fire separation office", code="BCBC")]
[Uses get_section("3.2.2.57", code="BCBC")]

Based on BCBC 2024 Section 3.2.2.57, a 6-storey Group D
(business) building requires:
- Sprinkler system: Required
- Floor assemblies: 1-hour fire-resistance rating
- Maximum building area: 7,200 m²

Checking Specific Sections

You: "What does OBC section 9.10.14.1 say about spatial separation?"

Claude: [Uses get_section("9.10.14.1", code="OBC_Vol1")]

OBC Section 9.10.14.1 - Spatial Separation Between Buildings:
"Buildings on the same property shall have spatial separation
between them based on the aggregate area of unprotected openings
in exposing building faces..."

Jurisdiction Lookup

You: "Which building code applies in Calgary?"

Claude: [Uses get_applicable_code("Calgary, Alberta")]

Calgary follows the Alberta Building Code (ABC) 2023.
Primary codes: ABC, AFC (Fire), APC (Plumbing)
Also check: National codes (NBC, NFC) for reference

Supported Codes

National Codes (4)

NBC 2025, NFC 2025, NPC 2025, NECB 2025

Provincial Codes (9)

  • Ontario: OBC 2024 (Vol 1 & 2), OFC

  • British Columbia: BCBC 2024

  • Alberta: ABC 2023

  • Quebec: QCC, QECB, QPC, QSC (2020)

User's Guides (3)

IUGP9 (Part 9 Housing), UGP4 (Structural), UGNECB (Energy)

Total: 24,000+ indexed sections


Token Efficiency (v1.2.0)

Built-in optimizations reduce token usage:

Optimization

Reduction

list_codes compact mode

81%

disclaimer as resource

61%

Default verbose=false

~50%

Best practice: Use limit=5-10 and only request verbose=true when needed.

See Token Efficiency Guide for details.


Tools Available

Tool

Purpose

list_codes

Show available codes and connection status

search_code

Find sections by keywords

get_section

Get section details (page, citation, text)

get_table

Get table content as markdown

get_hierarchy

Navigate parent/child sections

verify_section

Check if section ID exists

get_applicable_code

Find codes for a location

set_pdf_path

Connect PDF for text extraction


API Access

REST API: https://canada-aec-code-mcp.onrender.com

curl https://canada-aec-code-mcp.onrender.com/search/fire+separation

Note: Hosted API runs in Map-Only mode. Use local MCP for full text.


Development

git clone https://github.com/DavidCho1999/Canada_building_code_mcp.git
cd Canada_building_code_mcp
pip install -e ".[all]"
python src/mcp_server.py

License

MIT License - See LICENSE


Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

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/DavidCho1999/Canada-AEC-Code-MCP'

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