Tools reference

Every tool in the Huff connector, with what it does, its inputs, and an example.

The connector has 17 tools: 8 that read and 9 that write. Read tools are marked readOnlyHint: true, so Claude can run them freely and ask before a write. You do not call these yourself. Claude picks them based on what you ask.

Every tool acts as the person who signed in. See Data and permissions for how that limits results.

Read tools

search_signals

Searches recent project signals in your organization's markets, plus 2 miles past their edges, newest first. It has no keyword or date input. To answer "this week", Claude reads the newest results and checks their dates.

InputTypeRequiredDescription
jurisdictionstringNoA 5-digit locality FIPS code, such as 51810 for Virginia Beach.
typeenumNoA signal type. market_overview returns the values in use under byType.
siteStagesenum[]NoUp to 10 of proposed, new_ground, permitted, out_to_bid. This is how far along the site is, not a Pipeline stage. Leave it out for every stage.
limitnumberNo1 to 100. Defaults to 25.

Returns: a list with id, siteId, type, jurisdiction, title, address, acres, occurredAt, and sourceUrl.

Example: "Show me new ground sites in Virginia Beach."

{ "jurisdiction": "51810", "siteStages": ["new_ground"], "limit": 25 }

market_overview

Counts project signals by locality and by type, to show where activity is. These counts cover everything Huff tracks, not only your markets. They are totals and include no site details.

No inputs.

Returns: totalSignals, byJurisdiction, and byType.

Example: "Where is the most activity right now?"

get_site

Opens one site: its project signals with source links, the companies and people tied to it with any contact details on record, and whether your team is pursuing it.

InputTypeRequiredDescription
siteIdstringYesThe site's id, from search_signals or list_routable_sites.

Returns: id, name, jurisdiction, address, acres, stage, lastActivityAt, signals, parties, and pursuit. Each entry in parties has an entityId that adopt_operator accepts. For a site outside your markets, it returns only outside: true and the jurisdiction.

Example: "Who is working on that site?"

{ "siteId": "<siteId from search_signals>" }

list_routable_sites

Lists the sites on open Pipeline leads across your organization that have a map point, newest lead first. Use it to find the ids for create_route.

No inputs.

Returns: a list with id, name, jurisdiction, address, lat, and lng.

Example: "Which of the sites we're pursuing can I drive to?"

get_account

Opens one company in your organization, with its contacts and most recent interactions.

InputTypeRequiredDescription
accountIdstringYesThe company's id, from list_accounts.

Returns: account, contacts, and interactions.

Example: "When did we last talk to that contractor?"

{ "accountId": "<accountId from list_accounts>" }

list_accounts

Lists the companies in your organization, in name order, a page at a time.

InputTypeRequiredDescription
limitnumberNo1 to 100.
offsetnumberNo0 or more.

Returns: items, total, limit, and offset.

Example: "List the first 50 companies in my book."

{ "limit": 50, "offset": 0 }

list_pipeline

Lists leads, newest first, with the place, its stage, its owner, and a source link. You see the teams you sit on. Owners and admins see the whole organization. Someone on no team sees leads that have no team.

InputTypeRequiredDescription
kindenumNoopen, won, or lost. Leave it out for all leads.

Returns: a list of leads.

Example: "What are we still working on?"

{ "kind": "open" }

list_stages

Lists the stages on a team's board, in order, with the ids set_lead_stage needs. Your organization names its stages. Each stage's kind is the fixed meaning behind it: open, won, or lost.

InputTypeRequiredDescription
teamIdstringNoThe team. Leave it out for your organization's default board.

Returns: the board and its stages.

Example: "What stages can a lead be in?"

Write tools

start_pursuing

Puts a site on a team's Pipeline at that team's first open stage. Leads belong to the team, so everyone on it sees the same board. A site outside your markets is refused as if it did not exist.

InputTypeRequiredDescription
siteIdstringYesThe site's id.
teamIdstringNoNeeded if you sit on more than one team.
notesstringNoNotes on the lead.

Returns: the new lead.

Example: "Start pursuing that site."

{ "siteId": "<siteId from search_signals>", "notes": "Asked about rental for the clearing work." }

set_lead_stage

Moves a lead to another stage on its team's board. You can move your own team's leads. Owners and admins can move any lead in the organization.

InputTypeRequiredDescription
leadIdstringYesThe lead's id, from list_pipeline.
stageIdstringYesThe stage's id, from list_stages.

Returns: the updated lead.

Example: "Move that lead to Quoted."

{ "leadId": "<leadId from list_pipeline>", "stageId": "<stageId from list_stages>" }

drop_lead

Removes a lead from its team's Pipeline. You can drop your own team's leads. Owners and admins can drop any lead in the organization. The site can be pursued again later as a new lead.

InputTypeRequiredDescription
leadIdstringYesThe lead's id, from list_pipeline.

Returns: removed, with the lead's id.

Example: "Drop the Oak Street lead. We lost interest."

{ "leadId": "<leadId from list_pipeline>" }

create_account

Adds a company to your organization's Companies.

InputTypeRequiredDescription
namestringYesThe company's name.
segmentenumYesWhat the company does on a job: developer_owner, general_contracting, site_contractor, subcontractor, engineer_architect, public_agency, supplier, or other.
websitestringNoWebsite.
notesstringNoNotes.
phonestringNoPhone number.
addressstringNoStreet address.
citystringNoCity.
statestringNoState.
zipstringNoZIP code.

Returns: the new company.

Example: "Add Tidewater Site Partners as a site contractor."

{ "name": "Tidewater Site Partners", "segment": "site_contractor" }

add_contact

Adds a person to a company in your organization.

InputTypeRequiredDescription
accountIdstringYesThe company's id.
namestringYesThe person's name.
titlestringNoJob title.
emailstringNoEmail address.
phonestringNoPhone number.
notesstringNoNotes.

Returns: the new contact.

Example: "Add Dana Reyes as their project manager."

{ "accountId": "<accountId from list_accounts>", "name": "Dana Reyes", "title": "Project manager" }

log_interaction

Records a touch on a company. Interactions logged this way are marked as made through AI, and Claude cannot change that mark.

InputTypeRequiredDescription
accountIdstringYesThe company's id.
kindenumYescall, email, meeting, site_visit, or note.
summarystringYesWhat happened.
occurredAtstringNoWhen it happened. Defaults to now and cannot be in the future.
contactIdstringNoThe contact involved.

Returns: the new interaction.

Example: "Log a call with Dana. They want a quote by Friday."

{
  "accountId": "<accountId from list_accounts>",
  "kind": "call",
  "summary": "Dana wants a quote by Friday."
}

create_route

Creates a driving route from site stops, in the order given. The route belongs to you. Every site needs a map point and has to be inside your markets, or the route is refused.

InputTypeRequiredDescription
namestringYes1 to 140 characters.
siteIdsstring[]Yes1 to 25 site ids, in visit order. Use list_routable_sites to find them.

Returns: the new route.

Example: "Make a route called Tuesday north with those three sites."

{ "name": "Tuesday north", "siteIds": ["<siteId>", "<siteId>", "<siteId>"] }

optimize_route

Reorders the stops on one of your routes for the shortest drive. With a starting point, Huff solves the day from there and no stop is pinned. Send both coordinates or neither.

InputTypeRequiredDescription
routeIdstringYesThe route's id, from create_route.
originLatnumberNoStarting latitude, -90 to 90.
originLngnumberNoStarting longitude, -180 to 180.

Returns: routeId and outcome, which is one of:

  • reordered: the stops have a new order.
  • already-optimal: the order was already the shortest.
  • too-small: there are too few stops to reorder.
  • unmappable: a stop has no map point.
  • no-trip: no drive could be worked out.

Example: "Put that route in the shortest order, starting from here."

{ "routeId": "<routeId from create_route>", "originLat": 36.85, "originLng": -75.98 }

adopt_operator

Adds a company named on a site to your Companies and links it, so its company page shows its other projects. Running it twice returns the existing company instead of a duplicate.

InputTypeRequiredDescription
entityIdstringYesThe company's entityId, from parties in get_site.
segmentenumYesWhat the company does on a job: developer_owner, general_contracting, site_contractor, subcontractor, engineer_architect, public_agency, supplier, or other. A site's operator is usually developer_owner.

Returns: the company, new or existing.

Example: "Add that site's developer to my Companies."

{ "entityId": "<entityId from get_site>", "segment": "developer_owner" }

On this page