Skip to main content
Glama

PermitFlow MCP Server

Autonomous Portfolio Permitting Intelligence & Pre-Construction Engine

Python 3.11+ Package Manager Protocol Architecture License: ROHIX RB Watch Demo

Target Startup: PermitFlow (Y Combinator S22, Series B $54M)
Assignment: Build an MCP Server for a Real Startup (Individual)
Demo Video: Watch Demo on Google Drive


1. Company Name and Overview

PermitFlow (YC S22, Series B $54M raised) builds software that automates construction permitting for general contractors, commercial developers, and trade subcontractors. The platform streamlines municipal permit research, submittal preparation, and status tracking across US city building departments (AHJs).


Related MCP server: GroundTruth MCP Server

2. The Problem Your Server Solves

Municipal permitting is the primary driver of construction delays in the US (4 to 12 weeks of schedule delay per project). Today:

  • High Rejection Rate: Over 40% of permit packets are rejected due to missing exhibits, expired contractor insurance, or absent structural calculations, triggering $500 to $2,000 penalties.

  • Manual Comment Resolution: Resolving city examiner objections and writing legal response letters takes days of manual expeditor work.

  • Closed SaaS Island: PermitFlow is a closed web dashboard. Estimators and engineers working in Claude Desktop or Cursor cannot interact with permitting data or municipal codes.

Solution: This MCP server acts as an open AI co-pilot alongside PermitFlow, providing pre-flight readiness audits (0-100 GO / NO-GO), building code RAG, and automated PE-sealed response transmittal generation.


3. Tools, Resources, and Prompts

Tools (7 Core Intelligence Tools)

Tool

Role

Function

Rationale

get_daily_manager_briefing

Management

Health score (0-100), overnight deltas, standup task matrix.

Instant morning visibility across all active portfolio jobs.

intake_project_scope

Intake Agent

Parses SOW text, detects trades, flags Arizona PE structural triggers.

Automates project intake without manual data entry errors.

estimate_permit_fees_and_sla

Research Agent

Calculates itemized municipal fees and turnaround SLAs.

Provides accurate upfront budgeting and scheduling.

search_permit_requirements

Knowledge Engine

BM25 RAG over local codes (Phoenix PMC 301.5, IBC 1609.1, ASHRAE 90.1).

Delivers grounded legal citations without hallucinations.

check_permit_readiness

Submission Gate

Audits checklist, outputs 0-100 score and GO / NO-GO verdict.

Prevents non-compliant filings and expensive city rejection fees.

generate_formal_ahj_response_packet

Coordination

Resolves examiner comments into official PE-sealed transmittal letter.

Eliminates 2-3 days of manual response letter drafting.

verify_contractor_registration

Compliance

Verifies Arizona ROC license standing, Class B-1/CR-11, and $1M insurance.

Prevents administrative rejection from lapsed contractor insurance.

Resources (5 Live URI Streams)

URI

Data Provided

Why Chosen

portfolio://summary

Total active permits, health score, urgent blocker count.

Passive real-time operational context.

portfolio://priorities

Filtered list of critical and high-risk blocked permits.

Focuses attention on immediate project risks.

portfolio://daily-action-plan

Role-assigned tasks for coordinators, engineers, expediters.

Enforces daily operational alignment.

portfolio://systemic-bottlenecks

Cross-project root causes (insurance lapses, missing PE stamps).

Diagnoses systemic portfolio risks.

portfolio://changes

Day-over-day status transitions and new examiner comments.

Provides instant overnight delta awareness.

Prompts (4 Standardized Workflows)

  • daily_standup_briefing: Generates full morning meeting briefing with health metrics and action items.

  • triage_permit_blockers: Parameterized deep-dive to unblock a specific stuck permit (permit_id).

  • plan_resubmission_strategy: Formulates point-by-point technical defense for city plan-check rejections (permit_id).

  • audit_contractor_compliance: Regulatory audit for contractor ROC license and insurance standing (contractor_id).

Why Prompts: Standardizes prompt engineering so any team member gets consistent, senior-grade output with one click.


4. How to Run It

Setup

git clone https://github.com/rohitbagal1819/PermitFlow-MCP.git
cd PermitFlow-MCP
uv venv
uv sync

Run Server

  • Local STDIO (Claude / Cursor): uv run permitflow-mcp

  • Networked HTTP / SSE: uv run permitflow-mcp --transport sse --port 8000

Client Config

  • Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "permitflow-mcp": {
      "command": "uv",
      "args": ["--directory", "d:\\PermitFlow-MCP", "run", "permitflow-mcp"]
    }
  }
}
  • Cursor IDE (Settings > Features > MCP): Add Command uv --directory "d:\PermitFlow-MCP" run permitflow-mcp


5. Host Comparison: What Differed Across Hosts

Dimension

Claude Desktop

Cursor IDE

Primary Strength

Executive standup reasoning, multi-tool chaining, and document drafting.

Technical engineering workflows and blueprint code integration.

Tool Invocation

Interactive UI confirmation prompts before executing tools.

Direct agent loop execution during coding/editing sessions.

Resources & Prompts

Full native UI support (portfolio:// attachments and slash prompts).

Tools supported directly; resources queried via programmatic tool calls.

Model Behavior

Claude 3.5 Sonnet handles complex nested schemas and auto-chains tools.

Requires explicit, concise tool descriptions to prevent parameter guessing.


6. Workflow: Where It Fits in the Company's Process

Pre-Construction Permitting Pipeline:

  1. Intake: Ingests subcontractor SOW, detects trades, checks PE structural stamp triggers (intake_project_scope).

  2. Budget & SLA: Projects city fees and review timelines (estimate_permit_fees_and_sla).

  3. Pre-Flight Gate: Audits package readiness (0-100 GO / NO-GO) and checks contractor $1M insurance (check_permit_readiness, verify_contractor_registration).

  4. City Submittal: Permit Coordinator files verified packet with city portal (Phoenix ProjectDox, Tempe Accela).

  5. Comment Resolution: If city examiners reject, system queries municipal RAG and auto-generates PE-sealed transmittal letter (generate_formal_ahj_response_packet).

  6. Human-in-the-Loop Sign-Off: Professional Engineer (PE) and Permit Coordinator must review and seal before final filing.

Local vs. Team: STDIO mode runs locally on workstations with zero latency. HTTP/SSE mode supports centralized team deployment across cloud workers.


7. Space: Token Counts Before vs. After

Approach

Context Load

Latency

Result

Raw Document Dumping (Full Code Corpus)

~28,450 tokens

High

Context bloat, hallucination risk

PermitFlow In-Memory BM25 RAG

~1,450 tokens

Sub-5ms

Grounded legal citations (PMC 301.5, IBC 1609)

Net Efficiency

94.9% Token Reduction

95% Faster

Zero hallucinations

Chunking Details: 500 words per chunk, 60-word overlap, 3.5x section-title weight boosting, returning top 3-5 governing sections.


8. Screenshots and Demo Video

Available Tools

7 tools
check_permit_readinessA

Pre-Submission Readiness Audit & Blocker Breakdown Gate.

Performs an exhaustive pre-filing audit of a single permit: calculates a composite 0–100 readiness score, categorizes risk (LOW, MEDIUM, HIGH, BLOCKED), identifies unverified/expired documents, open authority comments, and issues a Go/No-Go verdict.

Args: permit_id: Permit identifier (e.g., "P-1042").

Returns: Comprehensive readiness report with score, risk tier, blocker breakdown, and actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
permit_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses what gets analyzed (unverified/expired documents, open authority comments) and the risk categories, but never says whether the tool is read-only, whether it has side effects, or what happens if the permit does not exist — gaps that matter given annotations are absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded: the gate metaphor and scope appear before the Args/Returns boilerplate. The header line ('Blocker Breakdown Gate') is mildly redundant, but overall every sentence adds information about scope or output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't spell out return values, and it still summarizes them (score, risk tier, blocker breakdown, actions). For a one-parameter read/analysis tool this is close to complete; only the safety/mutation profile and error behavior are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for a single required string, so the description is the only source of meaning. It labels it a 'Permit identifier' and supplies a concrete example format ('P-1042'), which goes beyond the bare 'Permit Id' string property in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (audits readiness), a specific resource (a single permit), and enumerates the concrete outputs (0–100 score, risk tier, blockers, Go/No-Go verdict). An agent can distinguish this from search_permit_requirements or estimate_permit_fees_and_sla purely from the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'pre-filing audit' and 'Pre-Submission Readiness Audit' imply the use context (before submitting a permit) but never state exclusions, prerequisites, or which sibling to use instead. Usage is inferable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_permit_fees_and_slaB

Municipal Permit Fee & Plan Review SLA Turnaround Calculator.

Estimates municipal application fees, plan check surcharges, technology fees, and review turnaround timelines across Phoenix, Scottsdale, Tempe, and Mesa.

Args: jurisdiction: Target city jurisdiction (e.g. "City of Phoenix", "City of Tempe"). permit_type: Trade type (e.g. "mechanical", "electrical", "building"). valuation: Declared construction valuation in USD.

Returns: Itemized municipal fee breakdown and estimated review turnaround SLA.

ParametersJSON Schema
NameRequiredDescriptionDefault
valuationYes
permit_typeYes
jurisdictionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says the tool estimates and returns an itemized breakdown, but it does not state whether it is read-only, deterministic, dependent on real-time data, subject to rate limits, or requiring authentication. Accuracy disclaimers and coverage limitations are also absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with what the tool does, followed by structured Args and Returns sections. The leading phrase restates the tool name and is slightly redundant, but overall the content is tight and easy to scan. No unnecessary filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description does not need to detail return values. It covers the three required inputs with examples and scope, and it names the supported cities. It lacks caveats about calculation accuracy or permit-type coverage, but it is otherwise sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so reasonably well by explaining each parameter: jurisdiction with city examples, permit_type with trade examples, and valuation with its unit (USD). It does not enumerate all allowed values, but it provides clear semantic meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 permit fees, plan check surcharges, technology fees, and review turnaround timelines. It also names the supported jurisdictions (Phoenix, Scottsdale, Tempe, Mesa), which helps scope it. It does not explicitly differentiate from siblings, but the purpose is clear enough to distinguish it from search and readiness tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but offers no explicit guidance on when to use it versus alternatives. There is no mention of prerequisites, exclusions, or related sibling tools. Usage is only implied by the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_formal_ahj_response_packetA

Official Municipal Plan-Check Response Letter Generator (Rule 2).

Compiles a formal Comment-by-Comment Transmittal Letter resolving examiner objections with code citations, revision cloud references, and an explicit Human-in-the-Loop Professional Engineer (PE) verification gate before municipal upload.

Args: permit_id: Permit identifier (e.g. "P-1042").

Returns: Official city response transmittal letter ready for engineer stamp and filing.

ParametersJSON Schema
NameRequiredDescriptionDefault
permit_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose one genuinely valuable behavioral trait — an explicit Human-in-the-Loop PE verification gate before municipal upload — but says nothing about permissions, idempotency, whether generation is re-runnable, or side effects on the permit record.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is front-loaded and the workflow constraint follows immediately. The Args/Returns block is somewhat boilerplate and the Returns line partly restates what the output schema already declares, but it is short enough that no sentence is wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter generation tool with an output schema present, the description supplies the triggering context, the core workflow (objection resolution with citations), and the critical PE gate. The main missing element is what happens on failure or what a generated packet requires as follow-up input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single parameter, so the description must compensate. It identifies permit_id as a 'Permit identifier' and supplies a concrete example format ('P-1042'), which is meaningful guidance beyond the bare string type in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: compiling a Comment-by-Comment Transmittal Letter that resolves examiner objections with code citations and revision clouds. It is clearly distinct in kind from the sibling tools (intake, fee estimation, search, readiness checks), though it never names a sibling to differentiate against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: the tool operates on examiner objections and must run before municipal upload, with a PE verification gate. There is no explicit 'use this when / not when' or reference to alternative tools, so the agent must infer the trigger condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daily_manager_briefingA

Generate the daily executive briefing and prioritized action plan for permit managers.

Synthesizes portfolio health, overnight status transitions, expiring contractor insurance, and provides an itemized task matrix with assigned roles, deadlines, and unblocking actions.

Use this tool during morning standups or management planning sessions when asked: "Give me today's permit briefing", "What should the team work on today?", or "What are our top permitting priorities?"

Returns: A formatted executive briefing with portfolio health score, key changes, systemic bottlenecks, and an itemized action task list.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose what it aggregates (portfolio health, overnight status transitions, expiring contractor insurance) and what it emits (health score, key changes, bottlenecks, task matrix). It does not state whether the call is read-only, how expensive/latent such a synthesis is, or any caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and the example utterances earn their space by making intent matching easy. There is mild redundancy between the synthesis sentence and the Returns block, which both restate portfolio health, bottlenecks, and the task list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and zero parameters, the description need not explain return structure in detail, and it still summarizes the report contents adequately. Purpose, trigger contexts, and synthesis scope are all covered, so an agent has everything it needs to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to document and the schema cannot be the source of ambiguity. Baseline 4 applies; the description adds no parameter guidance because none is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Generate the daily executive briefing and prioritized action plan for permit managers") and then enumerates the exact inputs it synthesizes. It is clearly distinguishable from every sibling, which cover intake, fee estimation, requirement search, readiness checks, AHJ packets, and contractor verification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete trigger contexts ("during morning standups or management planning sessions") plus three example user utterances, which is strong routing guidance. It stops short of the top score because it never states when NOT to use it or names an alternative sibling to prefer in adjacent situations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

intake_project_scopeA

Autonomous Project Scope Ingestion Agent.

Parses unformatted contractor Scopes of Work (SOWs), determines municipal AHJ jurisdiction from the address, identifies required trade sub-permits, verifies commercial Arizona PE structural stamping thresholds, and scaffolds a draft permit.

Args: scope_description: Plain language contractor SOW (e.g. "Replace rooftop HVAC units and upgrade 400A panel"). address: Physical jobsite address (e.g. "4800 E Camelback Rd, Phoenix, AZ"). valuation: Estimated total construction valuation in USD. project_name: Optional development project name.

Returns: Structured intake summary with detected city, required trade permits, legal engineering stamp triggers, and mandatory submittal checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes
valuationYes
project_nameNo
scope_descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses a high-level multi-step workflow and says it returns a structured intake summary, but it does not explain side effects, whether the draft permit is persisted, permission requirements, or whether the tool is limited to Arizona projects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the tool identity and purpose, then organized into Args and Returns sections. It is somewhat long, but the length is justified by the multi-step domain and the need to compensate for missing schema descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because an output schema exists, the description does not need to fully explain return values, and it does provide the parameter details missing from the schema. However, for a complex intake tool with no annotations, it omits important context such as geographic limitations, persistence/side effects, and how it should be sequenced with sibling permit tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description's Args section compensates by documenting all four parameters with examples and meaning: a plain-language SOW, a physical jobsite address, valuation in USD, and an optional project name. It does not add validation constraints, but the parameter semantics are substantially clarified beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific multi-step verb and resource: it parses contractor SOWs, determines AHJ jurisdiction, identifies trade sub-permits, verifies Arizona PE stamping thresholds, and scaffolds a draft permit. It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools such as search_permit_requirements or check_permit_readiness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and the intake-oriented purpose, but there is no explicit when-to-use guidance and no named alternatives among the sibling tools. An agent can infer this is an initial intake/scaffolding step, but the description does not state when not to use it or how it relates to the other permit tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_permit_requirementsA

Section-Aware Municipal Building Code RAG Search (Rule 3).

Queries the local section-aware RAG engine of municipal building codes, local amendments, and technical guidelines (e.g. Phoenix Mechanical Code 301.5, ASHRAE 90.1, NEC 2023). Achieves ~82.9% context token reduction compared to raw manual dumping.

Args: query: Building code search query (e.g., "rooftop unit structural calculations Phoenix"). jurisdiction: Optional filter (e.g., "City of Phoenix"). permit_type: Optional trade filter (e.g., "mechanical", "electrical"). top_k: Number of relevant code sections to retrieve (default: 4).

Returns: Precise building code citations, section numbers, relevance scores, and excerpts.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo
permit_typeNo
jurisdictionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the engine type (local, section-aware RAG), the sources covered, and a token-reduction figure, which is genuine behavioral context. It omits safety/mutation profile (implied read-only), latency, accuracy, and freshness/update behavior, leaving meaningful gaps for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The Args/Returns structure is clean and front-loads the purpose, but there is waste: the 'Rule 3' tag is unexplained and the '82.9% context token reduction' claim is marketing rather than actionable for an agent. Reasonable size overall, but not every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is largely duplicated, but the description still adds useful framing (citations, section numbers, relevance scores, excerpts). Combined with full parameter coverage, an agent has enough to invoke the tool correctly. Only the interaction with sibling tools is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: all four parameters are annotated with purpose, examples, and the top_k default. It explains that jurisdiction and permit_type are filters and what each controls. Coverage is strong, though enum-like values are only loosely suggested rather than enumerated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: a section-aware RAG search over municipal building codes, amendments, and technical guidelines, with concrete domain examples (Phoenix Mechanical Code 301.5, ASHRAE 90.1, NEC 2023). This is unambiguous about what the tool does. It does not, however, contrast itself against any sibling tool, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the query examples show the intended context (structural calculations, jurisdiction/permit filters) but there is no explicit 'use this when / not when' statement and no alternatives named among the sibling tools. An agent can infer the use case but must decide on its own when this search is the right call versus, say, check_permit_readiness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_contractor_registrationA

Contractor ROC License & General Liability Insurance Compliance Audit.

Audits Arizona Registrar of Contractors (ROC) standing, verifies trade classifications, and audits mandatory $1,000,000 General Liability Insurance policies, expiration dates, and municipal Additional Insured endorsements.

Args: contractor_name: Name of the general or specialty contractor (e.g. "Ironclad Construction"). jurisdiction: Target city jurisdiction (e.g. "City of Phoenix", "City of Tempe"). permit_type: Permitted trade type (e.g. "mechanical", "electrical", "building").

Returns: Structured compliance verification report with license and insurance status.

ParametersJSON Schema
NameRequiredDescriptionDefault
permit_typeYes
jurisdictionYes
contractor_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose meaningful scope details — ROC standing, trade classifications, $1,000,000 GL policy expiration dates, and municipal Additional Insured endorsements — and 'Audits/verifies' implies a read-only operation. However it says nothing about data sources, latency, freshness of ROC records, or failure modes when a contractor is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-line audit summary is well front-loaded, and the Args block earns its place given 0% schema coverage. The Returns section, however, is largely redundant because an output schema already exists and the description only says 'structured compliance verification report' without adding detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it adequately conveys the audit's scope across license and insurance dimensions. The main missing piece is operational context — when in a permit workflow to run the check and what happens on non-compliance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema only supplies bare titles. The description compensates well by giving a definition and a concrete example for each of the three parameters (contractor name, city jurisdiction, trade permit type), which is essential to calling the tool correctly. Minor gap: no format constraints for jurisdiction strings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: audits Arizona ROC standing and verifies trade classifications plus $1M GL insurance and endorsements. This is clearly distinguishable from sibling tools like search_permit_requirements or estimate_permit_fees_and_sla, which deal with permit rules and costs rather than contractor compliance status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never says when to invoke this versus alternatives, nor what prerequisites exist (e.g. must a permit application already exist?). The presence of jurisdiction and permit_type hints at a pre-permit screening context, but this is left entirely to inference.

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.

  1. 7 tool updatesv0.1.0
    • First observedcheck_permit_readiness
    • First observedestimate_permit_fees_and_sla
    • First observedgenerate_formal_ahj_response_packet
    • First observedget_daily_manager_briefing
    • First observedintake_project_scope
    • First observedsearch_permit_requirements
    • First observedverify_contractor_registration

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a clearly distinct phase of the permitting workflow: briefing (portfolio planning), intake (SOW parsing), fee estimation, code RAG search, readiness audit, AHJ response generation, and contractor compliance verification. There is no meaningful overlap in the resource or action targeted by any two tools.

Naming Consistency5/5

Every tool follows a consistent verb_noun snake_case pattern (get_daily_manager_briefing, intake_project_scope, estimate_permit_fees_and_sla, check_permit_readiness, etc.). No mixing of conventions or verb styles, making the set highly predictable.

Tool Count5/5

Seven tools is well-scoped for a permit-management assistant, with each tool earning its place by covering a discrete lifecycle step. There is no redundancy or filler.

Completeness4/5

The surface comprehensively covers the pre-submission lifecycle (intake, fees, code search, readiness, response, compliance, briefing), with a sensible human-in-the-loop gate. However, there is no explicit permit-list/create/update/status tracking or submission tool, so agents cannot persist or advance permit state directly.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Instant U.S. property intelligence for AI agents. Zoning, Buildability™ Score, ADU eligibility, flood risk, and more from 20+ government sources. Pay-as-you-go: $5 per analysis (prepaid credits). Free Score available at buildability.us. Get a key at buildability.us/api.
    5
    1
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables municipal permit preflight checks for construction and renovation projects, returning evidence-linked, rule-version-aware results without using an LLM.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables construction management supervision automation by parsing submitted documents and cross-verifying numerical values against real-time Korean national laws and KCSC construction standards, then generating CM review draft reports.
    -