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.
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.
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.yamlmcpServers: - 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"
}
}
}
}
Authentication
The MCP server authenticates as a TendedLoop user using email and password. It handles the full JWT lifecycle automatically:
- On first API call, the server logs in with your credentials
- Access tokens (15-minute expiry) and refresh tokens (30-day expiry) are stored in memory
- When a token expires, the server automatically refreshes it
- 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. |
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.