Building Compliance Agency — Municipal Plan & Occupancy
Server Details
Building plan approvals, occupancy certificates, and municipal compliance readiness tools.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-03-26
- URL
TDQS
Scored across 3 tools
Each tool targets a distinct operation: a read-only zoning lookup, a read-only fee estimate, and a write-side inquiry submission. The descriptions explicitly cross-reference each other with 'do NOT use when another tool fits better', making misselection unlikely.
All three names follow a verb_noun snake_case pattern (check_zoning_requirements, estimate_scrutiny_fee, submit_compliance_inquiry) with consistent domain-noun suffixes. No mixed conventions or casing.
Three tools is on the thin side but each maps to a genuinely different job (lookup, calculate, submit), so none feels redundant. A slightly richer surface (e.g. status check or classification lookup) would justify a larger set.
The surface covers information lookup plus lead submission, but there is no way to check inquiry status, retrieve a submitted record, or look up SANS 10400 occupancy classifications independently. Agents can work around this only by routing everything through the inquiry form, which is a notable gap for a compliance workflow.
Available Tools
3 toolscheck_zoning_requirementsCheck Zoning RequirementsARead-onlyIdempotentInspect
Retrieves typical municipal coverage, Floor Area Ratio (FAR), height, and parking requirements for a given Gauteng municipality and zoning category. When to use: Call this tool when you specifically need to execute 'check_zoning_requirements' on Building Compliance Agency (buildingcompliance.co.za). Do NOT use this tool when another specialized tool fits better (use 'estimate_scrutiny_fee' or 'submit_compliance_inquiry' for their respective operations). Parameters: municipality (required), zoning_category (required). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| municipality | Yes | Target metropolitan municipality [Required: non-empty valid value must be supplied]. | |
| zoning_category | Yes | Town planning zoning category [Required: non-empty valid value must be supplied]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive, but the description adds facts annotations cannot express: public unauthenticated access, a 60 requests/min per-IP rate limit, and zero state mutation. Nothing here contradicts the declared hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the substantive purpose first, but the 'when to use' sentence is a tautological restatement of the tool name and 'Parameters: municipality (required), zoning_category (required)' duplicates the schema verbatim. Roughly a third of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two enumerated parameters, full schema coverage, and rich annotations, the description fills the remaining gaps: access model, rate limit, and a description of the returned structured JSON. An agent has everything needed to call it correctly without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are enums fully documented in the schema, so the baseline is 3. The description only restates the two names and their required status, adding no meaning about how municipality and zoning_category interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Retrieves') and a concrete resource set (coverage, FAR, height, parking requirements) scoped to a Gauteng municipality plus zoning category. That is materially more specific than the tool name alone and lets an agent distinguish it from fee estimation or inquiry submission.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the two siblings and says to prefer them for their respective operations, which is real routing guidance. However the positive 'when to use' clause is circular ('call this tool when you need to execute check_zoning_requirements') and gives no actual triggering condition, so the guidance is one-sided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_scrutiny_feeEstimate Scrutiny FeeARead-onlyIdempotentInspect
Estimates municipal building plan scrutiny fees (ZAR) in Gauteng based on total floor area (sqm), municipality, and SANS 10400 occupancy classification. When to use: Call this tool when you specifically need to execute 'estimate_scrutiny_fee' on Building Compliance Agency (buildingcompliance.co.za). Do NOT use this tool when another specialized tool fits better (use 'check_zoning_requirements' or 'submit_compliance_inquiry' for their respective operations). Parameters: floor_area_sqm (required), municipality (required), building_classification (required). Behavior & Side Effects: Strictly read-only, idempotent query with zero state mutation; public unauthenticated access allowed; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| municipality | Yes | Gauteng metropolitan municipality [Required: non-empty valid value must be supplied]. | |
| floor_area_sqm | Yes | Total floor area in square meters (sqm) [Required: non-empty valid value must be supplied]. | |
| building_classification | Yes | SANS 10400 occupancy classification (e.g., H4 for dwelling house, G1 for offices) [Required: non-empty valid value must be supplied]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds genuinely new context beyond the annotations: public unauthenticated access and a 60 requests/min per IP rate limit, plus explicit zero state mutation. Annotations already cover readOnly/idempotent/destructive, and the description does not add further detail such as error behavior or numeric precision, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and easy to scan, but the 'When to use' sentence is boilerplate that repeats the tool name, and the Returns section is generic filler rather than specifics for this fee calculator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description accounts for the return shape (status, matched records or computed metrics, action URLs), plus safety, auth, and rate-limit context. For a read-only 3-parameter lookup, that covers what an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both enums are documented in the schema with examples (H4 dwelling house, G1 offices), so the baseline applies. The description only restates the three required parameter names without adding format, unit, or constraint meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('estimates municipal building plan scrutiny fees in ZAR') plus concrete inputs (floor area, municipality, SANS 10400 classification) and geography. It is clearly distinguishable from check_zoning_requirements and submit_compliance_inquiry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names both siblings and says not to use this tool when another fits better, which is useful routing. But the positive condition is circular ('call this tool when you specifically need to execute estimate_scrutiny_fee'), giving no real scenario-level criterion for choosing it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_compliance_inquirySubmit Compliance InquiryAInspect
Submits a compliance consultation or quote request for council building plan approval, archive plan retrieval, occupancy certificates, fire clearance, SDP, or rezoning. When to use: Call this tool when you specifically need to execute 'submit_compliance_inquiry' on Building Compliance Agency (buildingcompliance.co.za). Do NOT use this tool when another specialized tool fits better (use 'estimate_scrutiny_fee' or 'check_zoning_requirements' for their respective operations). Parameters: client_name (required), email (required), phone (required), service_required (required), property_details (optional). Behavior & Side Effects: Creates a live record/session in the backend database; no authentication required for public initiation; rate-limited to 60 requests/min per IP. Returns: Structured JSON object containing status, matched records or computed metrics, and canonical action URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Contact email address [Required: non-empty valid value must be supplied]. | ||
| phone | Yes | Contact phone number (South African format) | |
| client_name | Yes | Full name of the property owner, architect, or developer [Required: non-empty valid value must be supplied]. | |
| property_details | No | Erf number, suburb, municipality (Johannesburg, Tshwane, Ekurhuleni), and project summary [Optional: omit to use server default filter]. | |
| service_required | Yes | Primary compliance or town planning service requested [Required: non-empty valid value must be supplied]. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by disclosing that a live backend record is created, that no authentication is required for public initiation, and that the endpoint is rate-limited to 60 req/min per IP — all material for a mutating, non-idempotent call. The return-value sentence is partly boilerplate ('matched records or computed metrics') and doesn't quite fit a submission endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose well, but the body includes filler: the self-referential 'when you specifically need to execute submit_compliance_inquiry' clause and a generic return sentence that reads like a shared template rather than this tool's actual response shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a public, unauthenticated submit tool with full schema coverage and no output schema, the description supplies the needed side effects, auth posture, and rate limit. Only the response description is under-specified, which is a minor gap given no output schema is declared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including the service_required enum and the SA phone format. The description only repeats the parameter names with required/optional markers, adding no syntax, format, or example detail beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submits a compliance consultation or quote request') and enumerates the concrete service domains (building plan approval, archive plans, occupancy certificates, fire clearance, SDP, rezoning). It does not differentiate itself from siblings within the purpose statement itself — that routing lives in the usage section — so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the exclusion condition and the alternatives: 'Do NOT use this tool when another specialized tool fits better (use estimate_scrutiny_fee or check_zoning_requirements)'. The positive trigger is weaker, though — 'Call this tool when you specifically need to execute submit_compliance_inquiry' restates the name rather than describing the qualifying scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
check_zoning_requirements2 fields changed- changed
Input schema / properties / municipality / descriptionPrevious value: -"Target metropolitan municipality"New value: +"Target metropolitan municipality [Required: non-empty valid value must be supplied]." - changed
Input schema / properties / zoning_category / descriptionPrevious value: -"Town planning zoning category"New value: +"Town planning zoning category [Required: non-empty valid value must be supplied]."
- Changed
estimate_scrutiny_fee3 fields changed- changed
Input schema / properties / building_classification / descriptionPrevious value: -"SANS 10400 occupancy classification (e.g., H4 for dwelling house, G1 for offices)"New value: +"SANS 10400 occupancy classification (e.g., H4 for dwelling house, G1 for offices) [Required: non-empty valid value must be supplied]." - changed
Input schema / properties / floor_area_sqm / descriptionPrevious value: -"Total floor area in square meters (sqm)"New value: +"Total floor area in square meters (sqm) [Required: non-empty valid value must be supplied]." - changed
Input schema / properties / municipality / descriptionPrevious value: -"Gauteng metropolitan municipality"New value: +"Gauteng metropolitan municipality [Required: non-empty valid value must be supplied]."
- Changed
submit_compliance_inquiry4 fields changed- changed
Input schema / properties / client_name / descriptionPrevious value: -"Full name of the property owner, architect, or developer"New value: +"Full name of the property owner, architect, or developer [Required: non-empty valid value must be supplied]." - changed
Input schema / properties / email / descriptionPrevious value: -"Contact email address"New value: +"Contact email address [Required: non-empty valid value must be supplied]." - changed
Input schema / properties / property_details / descriptionPrevious value: -"Erf number, suburb, municipality (Johannesburg, Tshwane, Ekurhuleni), and project summary"New value: +"Erf number, suburb, municipality (Johannesburg, Tshwane, Ekurhuleni), and project summary [Optional: omit to use server default filter]." - changed
Input schema / properties / service_required / descriptionPrevious value: -"Primary compliance or town planning service requested"New value: +"Primary compliance or town planning service requested [Required: non-empty valid value must be supplied]."
3 tool updates
- First observed
check_zoning_requirements - First observed
estimate_scrutiny_fee - First observed
submit_compliance_inquiry
Related MCP Connectors
SANS 10400 architectural building plan compliance checks, municipal checklists, and SLA lookups.
Built-environment forecasts, public benchmarks, and permit or zoning readiness through remote MCP.
Public building permits, property assessments, parcels and development intelligence.
Every official Swiss building application on the day it is published, for professionals.
Related MCP Servers
- FlicenseAqualityBmaintenanceEnables construction permitting teams to analyze portfolios of active permits by ranking risk, detecting day-over-day changes, identifying systemic bottlenecks, and generating daily executive action plans. Also supports single-permit readiness audits, missing-document reports, blocker explanations, resubmission checklists, and semantic search over municipal requirements.71-
- FlicenseNot gradedqualityDmaintenanceExposes Pre-DCR and Auto-DCR building scrutiny workflows as AI-consumable tools, enabling AI assistants to open DXF drawings, validate layers, compute areas, run regulatory checks, and generate compliance reports via natural language.-
- AlicenseNot gradedqualityDmaintenanceProfessional building code compliance assistant that interfaces with municipal building codes, helping contractors and builders navigate complex regulatory requirements with precision.1MIT
- FlicenseNot gradedqualityFmaintenanceEnables municipal permit preflight checks for construction and renovation projects, returning evidence-linked, rule-version-aware results without using an LLM.-
Glama MCP Gateway
Add one secure layer between your agents and this server.