Use Tektolo from your AI assistant
Every tool is also an MCP tool and a REST endpoint, run by the same engine as the web pages. No account or API key; 20 calls a day free.
The connector URL
https://tektolo.com/mcp
Streamable HTTP, no authentication, no headers.
Your own connector URL
Claude and ChatGPT call tools from their own servers, so everyone using the shared URL through them shares one allowance of 20 calls a day. Your own URL keeps 20 free calls a day for you alone. No account, and nothing about you is stored.
Pricing
- Web tools: free to try.
- AI assistants and API: 20 calls a day free per client, counted together, then $0.02 a call (the paid lane is in testing; the free tier applies meanwhile).
- Volume and integrations: contact us.
Claude
- Open Settings, then Connectors.
- Choose Add custom connector.
- Name it Tektolo and paste your own connector URL (get one) or the shared URL above.
- Start a chat and describe a turnover. Claude will call the tools and show you the totals, refer-outs and assumptions.
Menu names change; on Team and Enterprise plans an owner may need to add the connector first.
ChatGPT
- Turn on developer mode in Settings, under Connectors (Advanced).
- Create a connector, choose a remote MCP server, and paste your own connector URL (get one) or the shared URL above. Authentication: none.
- Enable the connector in a chat from the tools menu.
Developer mode availability depends on your plan and OpenAI changes the menus often; see OpenAI's connector documentation.
Claude Code
claude mcp add --transport http tektolo https://tektolo.com/mcp
Then run /mcp to confirm it is connected.
Other MCP clients
Point any client that supports remote servers at the URL above with the streamable HTTP transport. Connection metadata is published as an MCP server card, and the tool list comes from tools/list.
Terms and privacy
Using the API or the MCP server (yourself or through an AI assistant) is covered by the Terms of Use and the Privacy Policy. Results are estimate ranges, not quotes; see the disclaimer.
REST and curl
The same operations are plain JSON over HTTPS. Schemas are in OpenAPI and catalog.json.
Look up an issue code
curl -sS 'https://tektolo.com/v1/property-turnover/issue_codes' \
-H 'content-type: application/json' \
-d '{
"query": "pet stain carpet",
"limit": 5
}'Scope a turnover
Request body from the bundled example one_bed_charlotte_light_turn. The response carries the totals, lines, refer-outs, assumptions and unknowns.
curl -sS 'https://tektolo.com/v1/property-turnover/scope' \
-H 'content-type: application/json' \
-d '{
"property": {
"zip": "28202",
"unit_type": "apartment",
"bedrooms": 1,
"bathrooms": "1",
"sq_ft": 700,
"year_built": 2008
},
"standards": {
"profile": "standard"
},
"findings": [
{
"id": "f1",
"location": {
"area": "bedroom",
"label": "Bedroom"
},
"code": "walls.nail_holes",
"extent": "partial"
},
{
"id": "f2",
"location": {
"area": "living_room",
"label": "Living room"
},
"code": "walls.scuffs",
"extent": "spot"
},
{
"id": "f3",
"location": {
"area": "living_room",
"label": "Living room"
},
"code": "carpet.soiled",
"extent": "partial",
"quantity": {
"value": 220,
"uom": "sq_ft"
}
},
{
"id": "f4",
"location": {
"area": "bedroom",
"label": "Bedroom"
},
"code": "carpet.soiled",
"extent": "partial",
"quantity": {
"value": 140,
"uom": "sq_ft"
}
},
{
"id": "f5",
"location": {
"area": "kitchen",
"label": "Kitchen"
},
"code": "range.dirty"
},
{
"id": "f6",
"location": {
"area": "kitchen",
"label": "Kitchen"
},
"code": "refrigerator.dirty"
},
{
"id": "f7",
"location": {
"area": "living_room",
"label": "Living room"
},
"code": "blinds.bent_missing",
"quantity": {
"value": 1,
"uom": "each"
}
}
],
"client_refs": {
"unit_id": "example-1bed-charlotte"
}
}'Download the Excel workbook
Same body, rendered on request. Other formats: html, csv, vendor_csv.
curl -sS 'https://tektolo.com/v1/property-turnover/scope/render/xlsx' \
-H 'content-type: application/json' \
-o turnover.xlsx \
-d '{
"property": {
"zip": "28202",
"unit_type": "apartment",
"bedrooms": 1,
"bathrooms": "1",
"sq_ft": 700,
"year_built": 2008
},
"standards": {
"profile": "standard"
},
"findings": [
{
"id": "f1",
"location": {
"area": "bedroom",
"label": "Bedroom"
},
"code": "walls.nail_holes",
"extent": "partial"
},
{
"id": "f2",
"location": {
"area": "living_room",
"label": "Living room"
},
"code": "walls.scuffs",
"extent": "spot"
},
{
"id": "f3",
"location": {
"area": "living_room",
"label": "Living room"
},
"code": "carpet.soiled",
"extent": "partial",
"quantity": {
"value": 220,
"uom": "sq_ft"
}
},
{
"id": "f4",
"location": {
"area": "bedroom",
"label": "Bedroom"
},
"code": "carpet.soiled",
"extent": "partial",
"quantity": {
"value": 140,
"uom": "sq_ft"
}
},
{
"id": "f5",
"location": {
"area": "kitchen",
"label": "Kitchen"
},
"code": "range.dirty"
},
{
"id": "f6",
"location": {
"area": "kitchen",
"label": "Kitchen"
},
"code": "refrigerator.dirty"
},
{
"id": "f7",
"location": {
"area": "living_room",
"label": "Living room"
},
"code": "blinds.bent_missing",
"quantity": {
"value": 1,
"uom": "each"
}
}
],
"client_refs": {
"unit_id": "example-1bed-charlotte"
}
}'Pay per call (x402) (testnet)
For agents that need more than the daily free tier (20 calls a day per client), each operation also has a paid route with the same body and result, plus a payment block (network, transaction, payer). x402 is not offered over MCP.
Testnet: payments use test USDC on Base Sepolia, which has no value. Nothing real is charged while this note is here.
POST /v1/x402/deposit-settlement/settle: $0.02 per callPOST /v1/x402/property-turnover/quick_estimate: $0.02 per callPOST /v1/x402/property-turnover/scope: $0.02 per callPOST /v1/x402/property-turnover/scope/render/xlsx: $0.05 per callPOST /v1/x402/property-turnover/scope/render/html: $0.05 per callPOST /v1/x402/property-turnover/scope/render/csv: $0.05 per callPOST /v1/x402/property-turnover/scope/render/vendor_csv: $0.05 per call
An unpaid call gets HTTP 402 with a PAYMENT-REQUIRED header (x402 v2, exact scheme, USDC on Base Sepolia testnet). An x402 client signs the payment and retries with PAYMENT-SIGNATURE. Input is checked before payment, and only a successful result is charged; our own errors are never charged. Paid calls are covered by the Terms of Use (Paid calls).
Aggregate demand: /v1/x402/metrics.
The skill
If your assistant supports skills (Claude Code, Claude apps), the skill tells it when to use the property turnover estimate, how to build a good request from an inspection report, and what to relay back to you.
/skills/property-turnover/SKILL.md
mkdir -p ~/.claude/skills/property-turnover && \ curl -sS https://tektolo.com/skills/property-turnover/SKILL.md \ -o ~/.claude/skills/property-turnover/SKILL.md