Skip to main content

MCP server for searching Canadian Building Codes (NBC, OBC, BCBC, etc.)

Project description

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)

Option 1: Smithery (Recommended)

npx -y @smithery/cli@latest install davidcho/ca-building-code-mcp --client claude

Option 2: uvx

# Install uv (one-time)
pip install uv

Add to claude_desktop_config.json:

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

Option 3: 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


Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

building_code_mcp-1.3.1.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

building_code_mcp-1.3.1-py3-none-any.whl (2.2 MB view details)

Uploaded Python 3

File details

Details for the file building_code_mcp-1.3.1.tar.gz.

File metadata

  • Download URL: building_code_mcp-1.3.1.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for building_code_mcp-1.3.1.tar.gz
Algorithm Hash digest
SHA256 b32e2c0327ffb18c2727caf03691774ae3d983a46f0ea144c81cbfee9a8727e0
MD5 36c97ae02fc8f650c8bee4f76e3a17a4
BLAKE2b-256 6009a4bbf21f7759e5e7b2c5e93c25b7e35172b024e8507b254b145ab6d67942

See more details on using hashes here.

File details

Details for the file building_code_mcp-1.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for building_code_mcp-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e1421776db42aa392a2bc13bbac09403f4133ccad6a10a3b70ff6fc52642817e
MD5 3042eacb6d7f31bbdb17d109e740832a
BLAKE2b-256 dc2bfbd7ddb26e97379b2dda4a4c2fa9a6108777a3da9db52957ea0f44f605e5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page