turfpal-mcp
v1.0.7
Published
Turfpal MCP server for Claude Desktop, Cursor, and other MCP clients
Maintainers
Readme
turfpal-mcp
Connect Turfpal to Claude Desktop, Cursor, and other MCP-compatible AI tools.
Turfpal is a turf management platform for greenkeepers, groundskeepers, and sports turf professionals. This MCP server gives AI assistants full access to your Turfpal organization data.
Quick Start
1. Create an API key
Go to Turfpal Settings > API Keys and create a key with mcp:access scope (plus any read/write scopes you need).
2. Add to Claude Desktop
Add this to your claude_desktop_config.json:
Windows: %APPDATA%\Claude\claude_desktop_config.json
Mac: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"turfpal": {
"command": "npx",
"args": ["-y", "turfpal-mcp"],
"env": {
"TURFPAL_API_KEY": "tp_live_your_key_here"
}
}
}
}3. Restart Claude Desktop
Quit completely (system tray) and reopen. Turfpal will appear as a connected MCP server.
What you can do
Ask Claude things like:
- "List my tasks for today"
- "Create a mowing task for Steffen at all greens, 2pm-3pm"
- "What equipment do we have?"
- "Show me low stock items"
- "Create an observation for disease on fairway 7"
- "Who's on the team?"
Tools (42)
Discovery
| Tool | Description |
|------|-------------|
| list_activity_templates | List org-specific + system activity templates. Call this before create_task so the new task inherits icon, color, category, duration, priority, checklists, custom-field defaults, and PPE/cert requirements from the template. |
| list_zone_types | List the distinct zone types in the org (e.g. green, fairway, tee, rough) with a count for each. Use the returned zoneType value with create_task for "all greens" / "all fairways" style targeting. |
Query & Search
| Tool | Description |
|------|-------------|
| list_tasks | List tasks with date, status, priority, category, member, and site filters |
| get_task | Full task details by ID |
| search_tasks | Search tasks by title |
| list_equipment | List equipment with type, category, and status filters |
| get_equipment | Equipment details with recent fuel, maintenance, and usage logs |
| search_equipment | Search equipment by make, model, tag, or serial number |
| list_members | List members with role and status filters |
| search_members | Search members by name or email |
| list_products | List inventory products with type and search filters |
| get_product | Product details with stock levels across all warehouses |
| search_products | Search products by name, SKU, or barcode |
| list_stock | Stock levels with low-stock alerts |
| list_observations | List observations with status, severity, and date filters |
| get_observation | Full observation details by ID |
| list_sites | Sites with nested areas and zones |
| search_sites | Search locations, areas, and zones by name. Returns _type: 'location' for top-level matches — pass the id as locationId (not siteId) on create_task. |
Create & Manage
| Tool | Description |
|------|-------------|
| create_task | Create a task. Pre-flight: list_activity_templates → pick an activityTemplateId → search_sites for locationId → list_zone_types if the user references "all greens" → set zoneType (mutually exclusive with zoneId). Times are interpreted in the org timezone unless an explicit Z or +HH:MM offset is provided. When the linked template has weatherDependent=true, the response includes a weatherWarnings field with the forecast check result. |
| update_task | Update task status, priority, assignments, schedule, location, or weather targeting. Same timezone + zoneType rules as create_task. |
| assign_task | Assign members to a task |
| delete_task | Delete a task |
| create_equipment | Add new equipment |
| update_equipment | Update equipment details |
| delete_equipment | Remove equipment |
| create_site | Add a new site/location |
| update_site | Update site details |
| delete_site | Remove a site |
| create_product | Add an inventory product |
| update_product | Update product details |
| delete_product | Remove a product |
| create_observation | Log a field observation |
| delete_observation | Remove an observation |
| invite_member | Add a team member |
| update_member | Update member role/status |
| delete_member | Remove a member |
| log_fuel | Log equipment fuel usage |
| log_maintenance | Log equipment maintenance |
| trigger_workflow | Start a workflow instance |
| generate_report | Generate a report |
| create_emission_record | Log CO2 emissions |
| semantic_search | AI-powered search across all organization data |
Resources (29)
Read-only data accessible by AI assistants:
- Organization info, stats, children, teams
- Tasks (list + detail)
- Equipment (list + detail + fuel/maintenance/usage logs)
- Members, Sites, Observations
- Inventory (warehouses, products, stock)
- Workflows (templates + instances)
- Reports (templates + instances)
- Emissions (records, factors, targets, summary)
- Playbook sections
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
| TURFPAL_API_KEY | Yes | - | Your Turfpal API key (tp_live_ or tp_test_ prefix) |
| TURFPAL_API_URL | No | https://turfpal-app-production.up.railway.app | Custom server URL |
How it works
This package is a lightweight stdio-to-HTTP bridge. Claude Desktop communicates via stdin/stdout, and this bridge forwards JSON-RPC messages to Turfpal's MCP endpoint. No dependencies required beyond Node.js 18+.
License
Proprietary. Copyright (c) Turfpal. All rights reserved.
This package is available exclusively to paying Turfpal subscribers. Redistribution and modification are not permitted.
