PropertyLabs
Public building permits, property assessments, parcels and development intelligence.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"propertylabs": {
"url": "https://propertylabs.org/mcp"
}
}
}Remote endpoints
https://propertylabs.org/mcpstreamable-httpWhat it can do
Tool inventory
Tools (3)
🟢search_address_permits(address, city)
Look up the public PropertyLabs permit history for a specific civic address in a specific city. Use this for address-level construction history and activity. This follows the same public field boundary as PropertyLabs address pages and does not return applicant names, contractor names or permit numbers.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 4,
"maxLength": 180,
"description": "Specific civic address, for example 8882 170 Street NW."
},
"city": {
"type": "string",
"description": "Required PropertyLabs city slug, for example 'calgary', 'edmonton', 'toronto' or 'vancouver'."
}
},
"required": [
"address",
"city"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"oneOf": [
{
"type": "object",
"properties": {
"address": {
"type": "string"
},
"city": {
"type": "string"
},
"found": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"summary": {
"type": [
"object",
"null"
],
"additionalProperties": true
},
"permits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"string",
"null"
]
},
"city": {
"type": [
"string",
"null"
]
},
"community": {
"type": [
"string",
"null"
]
},
"permit_type": {
"type": [
"string",
"null"
]
},
"work_class": {
"type": [
"string",
"null"
]
},
"declared_value": {
"type": [
"number",
"null"
]
},
"issued_date": {
"type": [
"string",
"null"
]
},
"applied_date": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
}
},
"required": [
"id",
"address",
"city",
"community",
"permit_type",
"work_class",
"declared_value",
"issued_date",
"applied_date",
"status",
"description",
"latitude",
"longitude"
],
"additionalProperties": false
}
},
"partial": {
"type": "boolean"
},
"propertylabs_url": {
"type": "string",
"format": "uri"
},
"attribution": {
"type": "string"
},
"data_note": {
"type": "string"
}
},
"required": [
"address",
"city",
"found",
"summary",
"permits",
"propertylabs_url",
"attribution",
"data_note"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"detail": {
"type": "object"
}
},
"required": [
"error"
],
"additionalProperties": true
}
]
}🟢get_public_permit(canonical_id, city)
Retrieve a permit using the numeric PropertyLabs canonical permit ID and city slug. Use this for a permit already referenced by a public PropertyLabs /permit/{city}/{id} URL. Returns only fields allowed on the public permit page; applicant and contractor identities remain gated.
Input Schema
{
"type": "object",
"properties": {
"canonical_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Numeric PropertyLabs canonical permit ID from a public PropertyLabs permit URL."
},
"city": {
"type": "string",
"description": "Required PropertyLabs city slug from the public permit URL."
}
},
"required": [
"canonical_id",
"city"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"oneOf": [
{
"type": "object",
"properties": {
"canonical_id": {
"type": "string"
},
"city": {
"type": "string"
},
"found": {
"type": "boolean"
},
"permit": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"city": {
"type": "string"
},
"address": {
"type": [
"string",
"null"
]
},
"permit_type": {
"type": [
"string",
"null"
]
},
"work_class": {
"type": [
"string",
"null"
]
},
"activity_date": {
"type": [
"string",
"null"
]
},
"issued_date": {
"type": [
"string",
"null"
]
},
"applied_date": {
"type": [
"string",
"null"
]
},
"status": {
"type": [
"string",
"null"
]
},
"declared_value": {
"type": [
"number",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"community": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": [
"number",
"null"
]
},
"longitude": {
"type": [
"number",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
},
"has_applicant": {
"type": "boolean"
},
"has_contractor": {
"type": "boolean"
}
},
"required": [
"id",
"city",
"address",
"permit_type",
"work_class",
"activity_date",
"issued_date",
"applied_date",
"status",
"declared_value",
"description",
"community",
"latitude",
"longitude",
"source",
"has_applicant",
"has_contractor"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"propertylabs_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"attribution": {
"type": "string"
},
"data_note": {
"type": "string"
}
},
"required": [
"canonical_id",
"city",
"found",
"permit",
"propertylabs_url",
"attribution",
"data_note"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"detail": {
"type": "object"
}
},
"required": [
"error"
],
"additionalProperties": true
}
]
}🟢search_company_activity(company, city)
Get an aggregate, city-scoped sample of permit activity matching a developer, applicant, builder or contractor name. Only applicant/developer/contractor party-field matches are counted. Anonymous results are aggregate only and never return company-matched project addresses, permit numbers, coordinates or raw records.
Input Schema
{
"type": "object",
"properties": {
"company": {
"type": "string",
"minLength": 2,
"maxLength": 160,
"description": "Developer, applicant, builder or contractor name."
},
"city": {
"type": "string",
"description": "Required PropertyLabs city slug. Company activity is never queried across the full archive anonymously."
}
},
"required": [
"company",
"city"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"oneOf": [
{
"type": "object",
"properties": {
"company": {
"type": "string"
},
"city": {
"type": "string"
},
"sample_size": {
"type": "integer",
"minimum": 0
},
"sample_limit": {
"type": "integer",
"minimum": 1
},
"disclosed_value_in_sample": {
"type": "number",
"minimum": 0
},
"disclosed_value_sample_size": {
"type": "integer",
"minimum": 0
},
"latest_activity_date_in_sample": {
"type": [
"string",
"null"
]
},
"matched_role_counts_in_sample": {
"type": "object",
"properties": {
"developer": {
"type": "integer",
"minimum": 0
},
"applicant": {
"type": "integer",
"minimum": 0
},
"contractor": {
"type": "integer",
"minimum": 0
}
},
"required": [
"developer",
"applicant",
"contractor"
],
"additionalProperties": false
},
"permit_types_in_sample": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
}
},
"required": [
"name",
"count"
],
"additionalProperties": false
}
},
"statuses_in_sample": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
}
},
"required": [
"name",
"count"
],
"additionalProperties": false
}
},
"domains_in_sample": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"count": {
"type": "integer",
"minimum": 0
}
},
"required": [
"name",
"count"
],
"additionalProperties": false
}
},
"sample_note": {
"type": "string"
},
"attribution": {
"type": "string"
},
"source_url": {
"type": "string",
"format": "uri"
},
"data_note": {
"type": "string"
}
},
"required": [
"company",
"city",
"sample_size",
"sample_limit",
"disclosed_value_in_sample",
"disclosed_value_sample_size",
"latest_activity_date_in_sample",
"matched_role_counts_in_sample",
"permit_types_in_sample",
"statuses_in_sample",
"domains_in_sample",
"sample_note",
"attribution",
"source_url",
"data_note"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
},
"retryable": {
"type": "boolean"
},
"detail": {
"type": "object"
}
},
"required": [
"error"
],
"additionalProperties": true
}
]
}Community
Evidence