# Fenceline MCP tool reference

16 tools are advertised to authenticated clients.
Call them through `tools/call` on any transport; `tools/list` returns the subset
your API key's scopes allow.

Machine-readable form of this catalog, with full JSON Schemas:
<https://mcp.fenceline.ai/mcp/tools.json>

## Tools

### `context.clear`

Clear current session context

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - _no arguments_

### `context.get`

Get current session context

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - _no arguments_

### `context.set`

Set session context such as contractorId and userId

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `contractorId` (string, optional)
  - `userId` (string, optional)
  - `flags` (object, optional)

### `materials.getDetails`

Get detailed information about a specific material by ID or name

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `materialId` (string, optional)
  - `materialName` (string, optional)
  - `contractorId` (string, optional)

### `materials.listAll`

List all materials for a contractor with optional grouping

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `materialType` (string, optional)
  - `productType` (string, optional)
  - `includeArchived` (boolean, optional)
  - `groupBy` (string, optional)
  - `contractorId` (string, optional)

### `materials.search`

Search materials by natural language with optional filters

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `query` (string, required)
  - `filters` (object, optional)
  - `contractorId` (string, optional)

### `permits.analyze_requirements`

Analyze permit requirements from stored jurisdiction coverage. Requires a jurisdictionId — resolving a jurisdiction from a raw address is not supported

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `address` (string, required)
  - `fenceType` (string, required)
  - `height` (number, required)
  - `jurisdictionId` (string, required) — Id of a jurisdiction stored in the `jurisdictions` collection
  - `contractorId` (string, optional)

### `permits.check_status`

Check current status of permit application

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `applicationId` (string, required)
  - `sessionId` (string, optional)

### `rag.answerQuery`

Answer a question using comprehensive search and return sources

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `query` (string, required)
  - `context` (array, optional)
  - `contractorId` (string, optional)

### `rag.getStats`

Get vector counts by entity type for a contractor namespace

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `contractorId` (string, optional)

### `rag.search`

Vector search across contractor data for the given types

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `query` (string, required)
  - `types` (array, optional)
  - `topK` (number, optional)
  - `contractorId` (string, optional)
  - `filters` (object, optional)

### `rag.searchComprehensive`

Comprehensive multi-entity search across a contractor namespace

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `query` (string, required)
  - `topK` (number, optional)
  - `contractorId` (string, optional)
  - `filters` (object, optional)

### `vendors.calculate_bom`

Calculate complete bill of materials including ancillary items

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `products` (array, required)
  - `projectSpecs` (object, optional)

### `vendors.get_pricing`

Get current pricing for specific materials with contractor discounts

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `materials` (array, required)
  - `vendorId` (string, optional)
  - `contractorId` (string, optional)
  - `deliveryZip` (string, optional)

### `vendors.resolve_estimate_pricing`

Convert estimate with generic products to real supplier quotes with tiered contractor pricing

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `estimateId` (string, optional)
  - `estimateItems` (array, required)
  - `preferences` (object, required)

### `vendors.search_inventory`

Search vendor inventory for materials and pricing

- Required scope: `mcp:read`
- Exposure: contractor
- Risk class: read_only
- Confirmation: none
- Arguments:
  - `query` (string, required)
  - `category` (string, optional)
  - `location` (string, optional)
  - `vendorIds` (array, optional)
  - `contractorId` (string, optional)
