GoCodebook — California Building Codes
Server Details
Verbatim California Title 24 and local zoning code lookup by section number, with citations.
- Status
- Healthy
- Uptime
- 99.7% over 23 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 3 tools
Each tool has a clearly distinct role: listing available documents, looking up a section by number, and searching by topic. The descriptions explicitly tell the agent when to use lookup versus search (section number vs topic), eliminating overlap. No two tools could be confused for the same purpose.
All names use snake_case with a consistent verb_noun pattern (list_, lookup_, search_) and include the California code domain. Minor inconsistency in the object nouns: 'documents', 'section', and 'codes' refer to related but not identical entities, which slightly weakens predictability. Still highly readable and mostly consistent.
Three tools is well-scoped for a focused lookup service: discovery, precise retrieval, and topical search each earn their place. The set avoids redundancy and covers the main access patterns without bloat. This count is appropriate for the server's narrow purpose.
The surface covers the core workflows: discovering available codes, retrieving verbatim section text by number, and finding sections by topic. Minor gaps remain, such as browsing all sections within a document or fetching full chapters, but agents can work around these via search. The descriptions even note coverage boundaries, which helps avoid dead ends.
Available Tools
3 toolslist_california_code_documentsARead-onlyIdempotentInspect
List the California codes and local ordinances available for lookup, and what is not covered. Useful before concluding that a code is unavailable, and for finding the exact document or jurisdiction slug that a lookup takes.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | Optional. A California city or county slug — returns the documents held for that jurisdiction instead of the statewide list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so safety is covered. The description adds genuine value beyond them by disclosing that the output includes negative coverage (what is not available) and the exact slugs needed downstream, which is a behavioral trait annotations cannot express.
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?
Two tightly written sentences with no redundancy. The core enumeration purpose is front-loaded, and the second sentence carries the actionable guidance.
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 simple, zero-required-parameter listing tool with full schema coverage, complete annotations, and no output schema, the description tells the agent what is returned (codes, ordinances, gaps, slugs) and how to use it. Nothing needed for correct invocation is missing.
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 the single jurisdiction parameter is fully documented in the schema as an optional city/county slug. The description correctly signals that a slug may be needed but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
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 (List) and resource (California codes and local ordinances), plus a distinctive scope: what is and is not covered, and the slugs lookups require. This clearly separates it from lookup_california_code_section and search_california_codes, which retrieve content rather than enumerate availability.
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?
Gives concrete triggers: 'before concluding that a code is unavailable' and 'for finding the exact document or jurisdiction slug that a lookup takes.' That is clear when-to-use context tied to the sibling lookup tool, though it does not explicitly name which sibling to prefer or exclude.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_california_code_sectionARead-onlyIdempotentInspect
Look up the VERBATIM text of a California building, residential, fire, plumbing, mechanical, green (CALGreen), energy or existing-building code section, or a section of a California city or county zoning/municipal ordinance, by its section number. Use this whenever the user cites a section number ("CRC R602.10.2.3", "CBC 1004", "§ 17.60.090") or asks what a specific section says. Returns the official text with its citation, edition and a link to the full section. It returns code text only and does not determine whether a specific project complies.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes | The section number exactly as cited, without the code name. Examples: "R602.10.2.3", "1004", "507.2", "17.60.090", "11B-206". | |
| code_edition | No | Optional. Which Title 24 cycle to read. California enforces the edition in force when the permit application was submitted, so a project filed in 2024 is enforced under "2022". Defaults to "current" (the 2025 cycle, in force since 2026-01-01). | |
| jurisdiction | No | Optional. A California city or county slug to scope the lookup to its own municipal code — "los-angeles", "san-jose", "marin-county". Omit for statewide Title 24 codes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real value beyond that by stating exactly what comes back (official text with citation, edition, and a link to the full section) and by drawing a hard boundary that it returns code text only and does not judge project compliance.
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?
Three sentences, front-loaded with purpose then trigger then scope limitation. The code-family enumeration is long but functional, and every clause earns its place by defining what can be looked up.
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 no output schema, the description correctly compensates by describing the return payload (official text, citation, edition, link). It covers jurisdiction scoping, edition selection, and the compliance boundary, leaving no obvious gap for invoking the tool 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%, including the section-number format with examples, the edition enum rationale, and jurisdiction slug examples, so the baseline is 3. The description adds nothing about parameter syntax or format beyond what the schema already documents ('by its section number').
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 (look up verbatim text of a California code section) and enumerates the code families covered (building, residential, fire, plumbing, mechanical, CALGreen, energy, existing-building, plus local zoning ordinances). The 'by its section number' phrasing implicitly separates it from the sibling search/list tools, so an agent can route without opening a schema.
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?
Gives an explicit trigger with worked examples of citations ('CRC R602.10.2.3', 'CBC 1004', '§ 17.60.090') and an explicit scope exclusion: it does not determine project compliance. It stops short of naming the sibling tools (search_california_codes, list_california_code_documents) as the alternative for topic-based or browsing queries, so routing between siblings still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_california_codesAInspect
Search California building codes (Title 24), state housing law and California city and county zoning/municipal codes by TOPIC, when the user does not already have a section number — e.g. "minimum attic access opening", "ADU setbacks in San Jose". Requires the user's GoCodebook account and uses 1 credit per search (also when nothing is found). If the user already cites a section number, use lookup_california_code_section instead — it is free. Returns ranked excerpts with citations and links. It does NOT decide whether a project complies.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to find, in plain words. Up to 300 characters. | |
| sources | No | Optional. Limit to federal law, state codes, or local ordinances. | |
| code_edition | No | Optional. Which Title 24 cycle to search; a permit filed in 2024 is enforced under "2022". Defaults to "current". | |
| jurisdiction | No | Optional. A California city or county slug ("san-jose", "marin-county") to search that place's own code together with the state codes. Omit for statewide. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses cost behavior (1 credit per search, charged even when nothing is found), an auth prerequisite (GoCodebook account), the return shape (ranked excerpts with citations and links), and a negative guarantee ('does NOT decide whether a project complies'). Read-only is not claimed, consistent with the credit-consuming annotation.
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?
Four sentences, all load-bearing: purpose + trigger, auth/cost, routing to the sibling, return shape and non-goal. The most decision-relevant facts (topic search, no section number) are front-loaded.
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 no output schema and thin annotations, the description carries the burden well: it covers cost, auth, return format, and scope limits. An agent has everything needed to choose and call this tool 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%, so every parameter (query, sources, code_edition, jurisdiction) is already documented with examples and enum meanings. The description adds only the framing that queries are topical and the 300-char example style, so the baseline 3 applies.
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 (search) and resource (California building codes/Title 24, state housing law, city and county zoning) with a scoping condition (by TOPIC, when no section number is known). It explicitly distinguishes itself from the sibling lookup_california_code_section. Concrete example queries further pin down what 'topic search' means.
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?
Gives an explicit when-to-use trigger ('user does not already have a section number') and a when-not-to-use alternative with its own routing rule ('If the user already cites a section number, use lookup_california_code_section instead — it is free'). No inference is left to the agent.
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
list_california_code_documents1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "applied_question_url": { - "type": "string" - }, - "browse_url": { - "type": "string" - }, - "editions": { - "items": { - "properties": { - "id": { - "type": "string" - }, - "in_force": { - "type": "string" - }, - "label": { - "type": "string" - } - }, - "required": [ - "id", - "label", - "in_force" - ], - "type": "object" - }, - "type": "array" - }, - "groups": { - "description": "Documents grouped by collection. Statewide: Title 24 first. Jurisdiction: the place's own documents, then those of the jurisdiction that also governs it.", - "items": { - "properties": { - "documents": { - "items": { - "properties": { - "edition": { - "type": [ - "string", - "null" - ] - }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - }, - "url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "title", - "slug" - ], - "type": "object" - }, - "type": "array" - }, - "key": { - "type": "string" - }, - "label": { - "type": "string" - } - }, - "required": [ - "key", - "label", - "documents" - ], - "type": "object" - }, - "type": "array" - }, - "jurisdiction": { - "properties": { - "name": { - "type": "string" - }, - "slug": { - "type": "string" - } - }, - "required": [ - "slug", - "name" - ], - "type": [ - "object", - "null" - ] - }, - "message": { - "type": [ - "string", - "null" - ] - }, - "municipal": { - "description": "Statewide only: how many local ordinances are held.", - "properties": { - "document_count": { - "type": "integer" - }, - "jurisdiction_count": { - "type": "integer" - } - }, - "required": [ - "document_count", - "jurisdiction_count" - ], - "type": [ - "object", - "null" - ] - }, - "notes": { - "description": "Coverage caveats. Read them before telling a user a code is unavailable.", - "items": { - "type": "string" - }, - "type": "array" - }, - "scope": { - "enum": [ - "statewide", - "jurisdiction" - ], - "type": "string" - }, - "status": { - "enum": [ - "ok", - "not_found", - "empty", - "error" - ], - "type": "string" - } - }, - "required": [ - "status" - ], - "type": "object" -}New value: +null
- Changed
lookup_california_code_section1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "ambiguous": { - "description": "True when the number exists in more than one code. Pick by the code the user named and say which one you used; never merge them.", - "type": "boolean" - }, - "applied_question_url": { - "description": "Where to send a user whose real question is whether a specific project complies.", - "type": "string" - }, - "as_of": { - "description": "The date the codes were read as of (YYYY-MM-DD), or null for the current edition.", - "type": [ - "string", - "null" - ] - }, - "browse_url": { - "type": "string" - }, - "historical": { - "description": "True when this is NOT the current code. Say so to the user.", - "type": "boolean" - }, - "matches": { - "items": { - "properties": { - "citation": { - "description": "Cite exactly this string.", - "type": "string" - }, - "document_slug": { - "type": [ - "string", - "null" - ] - }, - "document_title": { - "type": "string" - }, - "edition": { - "type": [ - "string", - "null" - ] - }, - "excerpt": { - "type": "string" - }, - "excerpt_truncated": { - "description": "True when the excerpt is cut short. It is never the whole section.", - "type": "boolean" - }, - "heading": { - "type": "string" - }, - "kind": { - "description": "text: an excerpt of the section's own words. subsection_list: the section has no text of its own and `excerpt` lists its subsections. empty: no text.", - "enum": [ - "text", - "subsection_list", - "empty" - ], - "type": "string" - }, - "section_number": { - "type": "string" - }, - "source_url": { - "description": "Link to the full section. Always show it to the user.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "document_title", - "section_number", - "heading", - "citation", - "source_url", - "kind", - "excerpt", - "excerpt_truncated" - ], - "type": "object" - }, - "type": "array" - }, - "message": { - "description": "Guidance when status is not_found or error.", - "type": [ - "string", - "null" - ] - }, - "query": { - "properties": { - "code_edition": { - "enum": [ - "current", - "2022", - "2019" - ], - "type": "string" - }, - "jurisdiction": { - "type": "string" - }, - "section": { - "type": "string" - } - }, - "required": [ - "section", - "jurisdiction", - "code_edition" - ], - "type": "object" - }, - "status": { - "description": "found: at least one section matched. not_found: nothing matched — do NOT paraphrase a section that was not returned. error: the lookup could not run.", - "enum": [ - "found", - "not_found", - "error" - ], - "type": "string" - } - }, - "required": [ - "status" - ], - "type": "object" -}New value: +null
- Changed
search_california_codes1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "applied_question_url": { - "type": "string" - }, - "as_of": { - "type": [ - "string", - "null" - ] - }, - "credits_charged": { - "type": "integer" - }, - "hint": { - "description": "The search page's own notice about this query (a missing section, a zone code in the wrong city, a code the library does not hold, an address). Tell the user what it says.", - "type": [ - "object", - "null" - ] - }, - "historical": { - "type": "boolean" - }, - "message": { - "type": [ - "string", - "null" - ] - }, - "query": { - "properties": { - "code_edition": { - "enum": [ - "current", - "2022", - "2019" - ], - "type": "string" - }, - "jurisdiction": { - "type": "string" - }, - "query": { - "type": "string" - }, - "sources": { - "items": { - "enum": [ - "federal", - "state", - "local" - ], - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "query", - "jurisdiction", - "code_edition" - ], - "type": "object" - }, - "results": { - "description": "Ranked best-first. Each excerpt is a short passage, never the whole section.", - "items": { - "properties": { - "citation": { - "description": "Cite exactly this string.", - "type": "string" - }, - "document_slug": { - "type": [ - "string", - "null" - ] - }, - "document_title": { - "type": "string" - }, - "edition": { - "type": [ - "string", - "null" - ] - }, - "excerpt": { - "type": "string" - }, - "excerpt_truncated": { - "type": "boolean" - }, - "heading": { - "type": "string" - }, - "section_number": { - "type": [ - "string", - "null" - ] - }, - "source_url": { - "description": "Link to the full section. Always show it.", - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "document_title", - "heading", - "citation", - "source_url", - "excerpt", - "excerpt_truncated" - ], - "type": "object" - }, - "type": "array" - }, - "section_ref": { - "type": [ - "object", - "null" - ] - }, - "status": { - "description": "found / no_results: the search ran and 1 credit was charged (a search with no results still costs a credit). signin_required: the user must connect their GoCodebook account. credits_required: the account has no credits — send the user to upgrade_url. rate_limited / error: nothing ran and nothing was charged.", - "enum": [ - "found", - "no_results", - "signin_required", - "credits_required", - "rate_limited", - "error" - ], - "type": "string" - }, - "upgrade_url": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "status" - ], - "type": "object" -}New value: +null
3 tool updates
- Changed
list_california_code_documents1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "applied_question_url": { + "type": "string" + }, + "browse_url": { + "type": "string" + }, + "editions": { + "items": { + "properties": { + "id": { + "type": "string" + }, + "in_force": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "id", + "label", + "in_force" + ], + "type": "object" + }, + "type": "array" + }, + "groups": { + "description": "Documents grouped by collection. Statewide: Title 24 first. Jurisdiction: the place's own documents, then those of the jurisdiction that also governs it.", + "items": { + "properties": { + "documents": { + "items": { + "properties": { + "edition": { + "type": [ + "string", + "null" + ] + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "title", + "slug" + ], + "type": "object" + }, + "type": "array" + }, + "key": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "key", + "label", + "documents" + ], + "type": "object" + }, + "type": "array" + }, + "jurisdiction": { + "properties": { + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "slug", + "name" + ], + "type": [ + "object", + "null" + ] + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "municipal": { + "description": "Statewide only: how many local ordinances are held.", + "properties": { + "document_count": { + "type": "integer" + }, + "jurisdiction_count": { + "type": "integer" + } + }, + "required": [ + "document_count", + "jurisdiction_count" + ], + "type": [ + "object", + "null" + ] + }, + "notes": { + "description": "Coverage caveats. Read them before telling a user a code is unavailable.", + "items": { + "type": "string" + }, + "type": "array" + }, + "scope": { + "enum": [ + "statewide", + "jurisdiction" + ], + "type": "string" + }, + "status": { + "enum": [ + "ok", + "not_found", + "empty", + "error" + ], + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" +}
- Changed
lookup_california_code_section1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "ambiguous": { + "description": "True when the number exists in more than one code. Pick by the code the user named and say which one you used; never merge them.", + "type": "boolean" + }, + "applied_question_url": { + "description": "Where to send a user whose real question is whether a specific project complies.", + "type": "string" + }, + "as_of": { + "description": "The date the codes were read as of (YYYY-MM-DD), or null for the current edition.", + "type": [ + "string", + "null" + ] + }, + "browse_url": { + "type": "string" + }, + "historical": { + "description": "True when this is NOT the current code. Say so to the user.", + "type": "boolean" + }, + "matches": { + "items": { + "properties": { + "citation": { + "description": "Cite exactly this string.", + "type": "string" + }, + "document_slug": { + "type": [ + "string", + "null" + ] + }, + "document_title": { + "type": "string" + }, + "edition": { + "type": [ + "string", + "null" + ] + }, + "excerpt": { + "type": "string" + }, + "excerpt_truncated": { + "description": "True when the excerpt is cut short. It is never the whole section.", + "type": "boolean" + }, + "heading": { + "type": "string" + }, + "kind": { + "description": "text: an excerpt of the section's own words. subsection_list: the section has no text of its own and `excerpt` lists its subsections. empty: no text.", + "enum": [ + "text", + "subsection_list", + "empty" + ], + "type": "string" + }, + "section_number": { + "type": "string" + }, + "source_url": { + "description": "Link to the full section. Always show it to the user.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "document_title", + "section_number", + "heading", + "citation", + "source_url", + "kind", + "excerpt", + "excerpt_truncated" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "description": "Guidance when status is not_found or error.", + "type": [ + "string", + "null" + ] + }, + "query": { + "properties": { + "code_edition": { + "enum": [ + "current", + "2022", + "2019" + ], + "type": "string" + }, + "jurisdiction": { + "type": "string" + }, + "section": { + "type": "string" + } + }, + "required": [ + "section", + "jurisdiction", + "code_edition" + ], + "type": "object" + }, + "status": { + "description": "found: at least one section matched. not_found: nothing matched — do NOT paraphrase a section that was not returned. error: the lookup could not run.", + "enum": [ + "found", + "not_found", + "error" + ], + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" +}
- Added
search_california_codes
2 tool updates
- First observed
list_california_code_documents - First observed
lookup_california_code_section
Related MCP Connectors
Human-reviewed zoning answers with ordinance citations for covered US municipalities.
California HOA law: Davis-Stirling Act text and 189 court decisions. Read-only, no auth.
Zoning, ADU eligibility, flood zone, setbacks, and buildability intelligence for U.S. parcels.
California Codes — the text of California statutes, by citation.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProfessional building code compliance assistant that interfaces with municipal building codes, helping contractors and builders navigate complex regulatory requirements with precision.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides programmatic access to municipal codes, ordinances, and zoning regulations from thousands of US cities and counties through the Municode digital library, enabling search, navigation, and retrieval of local government legal documents.6MIT
- AlicenseCqualityBmaintenanceEnables Claude Code and Codex to retrieve building-code sections from your own licensed corpus via hybrid search, returning section-faithful citations with amendments and cross-references.6MIT
- AlicenseBqualityDmaintenanceEnables users to search and navigate over 22,500 indexed sections across 16 Canadian building codes and user guides. It supports keyword searches, hierarchy navigation, and optional full-text extraction from user-provided PDF documents.75MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.