MCP Server

MCP Server Documentation

Connect AI assistants to TendedLoop using the Model Context Protocol. Ask questions like "What are the top complaints this week?" or "Show me open critical tasks" in natural language.

8 AI Tools JWT Authentication Auto Token Refresh

Overview

The TendedLoop MCP server implements the Model Context Protocol — an open standard that lets AI assistants interact with external data sources. Once configured, you can query your facility data using natural language directly from your AI tool.

The server exposes 8 tools (7 read, 1 write) covering dashboard KPIs, buildings, feedback, tasks, amenity performance, status reports, and task management. It authenticates as a TendedLoop user and returns human-readable text summaries optimized for AI consumption.

Quick start: Install the MCP server, add the configuration to your AI tool, and start asking questions about your facility data. No API keys or webhook setup required — just your TendedLoop email and password.

Compatible Tools

The MCP server works with any AI tool that supports the Model Context Protocol. TendedLoop uses stdio transport (local execution), which is supported by most MCP clients. Here are the compatible tools:

AI Code Editors

Cursor

AI-first code editor

Windsurf

AI-powered IDE by Codeium

Zed

High-performance editor

VS Code

Via Copilot agent mode

Desktop & CLI

Claude Desktop

Anthropic's desktop app

Claude Code

Anthropic's CLI agent

Gemini CLI

Google's CLI for Gemini

Community

Cline

VS Code AI extension

Continue

Open-source AI assistant

Web-based requires MCP proxy

ChatGPT

Developer mode connectors

v0 by Vercel

AI-powered web builder

Azure AI Foundry

Microsoft's AI platform

Available Tools

The MCP server provides 8 tools. You don't call these directly — your AI assistant uses them automatically based on your natural language questions.

Tool Type Description
get_overview Read Dashboard KPIs: feedback count, avg rating, open tasks, trends
list_buildings Read All buildings with location and amenity counts
get_building Read Single building detail with locations
list_feedback Read Filtered feedback by building, date range, issues
list_tasks Read Filtered tasks by status, priority, source type
get_amenity_performance Read Per-amenity ratings and issue counts (heatmap data)
list_status_reports Read Status change reports filtered by building, category, direction
update_task_status Write Change task status (NEW → IN_PROGRESS → COMPLETED)

Setup

The MCP server is distributed as an npm package. Install it, then add the configuration to your AI tool.

1. Install

npm install -g @tendedloop/mcp

2. Configure your AI tool

Add the following configuration to your AI tool's MCP settings. Replace the email and password with your TendedLoop credentials.

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

Cursor

.cursor/mcp.json or ~/.cursor/mcp.json
{
  "mcpServers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

Claude Code

.claude/settings.json
{
  "mcpServers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

Zed

~/.config/zed/settings.json
{
  "context_servers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

VS Code (Copilot)

.vscode/mcp.json
{
  "servers": {
    "tendedloop": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

Cline

MCP Servers → Configure → Advanced MCP Settings
{
  "mcpServers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}

Continue

~/.continue/config.yaml
mcpServers:
  - name: tendedloop
    command: npx
    args:
      - -y
      - @tendedloop/mcp
    env:
      TENDEDLOOP_API_URL: https://api.tendedloop.com
      TENDEDLOOP_EMAIL: your-email@company.com
      TENDEDLOOP_PASSWORD: your-password

Gemini CLI

~/.gemini/settings.json
{
  "mcpServers": {
    "tendedloop": {
      "command": "npx",
      "args": ["-y", "@tendedloop/mcp"],
      "env": {
        "TENDEDLOOP_API_URL": "https://api.tendedloop.com",
        "TENDEDLOOP_EMAIL": "your-email@company.com",
        "TENDEDLOOP_PASSWORD": "your-password"
      }
    }
  }
}
Tip: After saving the configuration, restart your AI tool. The TendedLoop tools will appear automatically.
Web-based tools: ChatGPT (developer mode), v0 by Vercel, and Azure AI Foundry use remote MCP transport (SSE/HTTP) rather than stdio. These require an MCP proxy to bridge between the remote protocol and the TendedLoop stdio server. See modelcontextprotocol.io for proxy options.

Authentication

The MCP server authenticates as a TendedLoop user using email and password. It handles the full JWT lifecycle automatically:

  1. On first API call, the server logs in with your credentials
  2. Access tokens (15-minute expiry) and refresh tokens (30-day expiry) are stored in memory
  3. When a token expires, the server automatically refreshes it
  4. If the refresh token has expired, the server re-authenticates with your credentials

Role-based access

The data visible through the MCP server depends on the authenticated user's roles:

Role MCP Access Platform Permissions
Admin All 8 tools — dashboards, feedback, tasks, buildings, analytics Full read + write access. Can create, edit, and delete buildings, users, routing rules, QR codes, webhooks, and all tenant configuration.
Manager All 8 tools — same MCP access as Admin Read-only. Can view dashboards, analytics, feedback, and export data — but cannot create or modify buildings, users, routing rules, or other configuration.
Technician Tasks only — limited to assigned tasks Can view and update status on tasks assigned to them. No access to dashboards, analytics, or admin configuration.
Security note: Your credentials are passed as environment variables and stored only in memory. They are never logged, cached to disk, or sent to the AI tool. For maximum security, use a dedicated service account with the Manager role — it has full read access for all MCP tools without the ability to modify tenant configuration.

Tool Reference

Detailed parameter documentation for each tool. Your AI assistant handles these automatically — this reference is for understanding what's available.

get_overview

Read

Returns today's dashboard KPIs, 7-day feedback trends, tasks by status, top issues, and recent feedback. No parameters required.

Example: "What's the overview for today?" or "How many open tasks do we have?"

list_buildings

Read

Returns all buildings with location and amenity counts. No parameters required.

Example: "List all my buildings" or "How many amenities does each building have?"

get_building

Read

Returns detailed information for a single building, including all locations.

Parameter Type Required Description
buildingId string Yes The building ID

list_feedback

Read

Returns paginated feedback entries with optional filters.

Parameter Type Required Description
buildingId string No Filter by building
dateFrom string No Start date (ISO 8601, e.g. 2026-02-01)
dateTo string No End date (ISO 8601)
hasIssues boolean No Only return feedback with reported issues
page number No Page number (default 1)
pageSize number No Items per page (default 20, max 100)

Example: "Show me feedback with issues from last week"

list_tasks

Read

Returns paginated tasks with optional filters.

Parameter Type Required Description
status string No NEW, IN_PROGRESS, or COMPLETED
priority number No 0 = Critical, 1 = Standard
source string No feedback, statusReport, or all
page number No Page number (default 1)
pageSize number No Items per page (default 20)

Example: "Show me all critical open tasks"

get_amenity_performance

Read

Returns per-amenity ratings and issue counts, useful for identifying problem areas.

Parameter Type Required Description
buildingId string No Filter by building
dateFrom string No Start date (ISO 8601)
dateTo string No End date (ISO 8601)

Example: "Which amenities have the worst ratings?"

list_status_reports

Read

Returns paginated status change reports with filters.

Parameter Type Required Description
buildingId string No Filter by building
category string No CONSUMABLE, EQUIPMENT, CLEANLINESS, or COMFORT
changeType string No good_to_bad, bad_to_good, or all
search string No Search amenity name
dateFrom string No Start date (ISO 8601)
dateTo string No End date (ISO 8601)
page number No Page number (default 1)
pageSize number No Items per page (default 20, max 100)

Example: "Show me consumable status changes today"

update_task_status

Write

Change a task's status. Valid transitions: NEW → IN_PROGRESS → COMPLETED. Only the assigned technician or a manager/admin can update a task.

Parameter Type Required Description
taskId string Yes The task ID to update
status string Yes IN_PROGRESS or COMPLETED
note string No Optional note to add with the status change

Example: "Mark task abc123 as completed with note 'Soap dispenser refilled'"

Example Queries

Once configured, just ask your AI assistant in natural language. Here are some examples:

"What are the top complaints this week?"

Uses get_overview and list_feedback

"Show me open critical tasks"

Uses list_tasks with status and priority filters

"Which amenities have the lowest ratings?"

Uses get_amenity_performance

"What consumables have run out today?"

Uses list_status_reports with category filter

"Give me a weekly summary for headquarters"

Uses get_overview, list_feedback, and list_tasks

"Complete task abc123 with note 'Fixed the leak'"

Uses update_task_status

Ready to connect your AI assistant?

Install the MCP server and start querying your facility data in natural language.