Documents
README
README
Type
External
Status
Published
Created
Jun 21, 2026
Updated
Jun 21, 2026
Source
View

SafetyCulture MCP Server#

A FastMCP 3.4.2 server exposing SafetyCulture inspections, actions, templates, and users as MCP tools.

Setup#

# Activate venv
.venv\Scripts\Activate.ps1

# Install deps
pip install -r requirements.txt
pip install -e .

# Configure
cp .env.example .env
# Edit .env: set SAFETYCULTURE_API_TOKEN=your_token_here

Verify auth#

python -c "
import asyncio, httpx
async def check():
    async with httpx.AsyncClient() as c:
        r = await c.get(
            'https://api.safetyculture.io/accounts/user/v1/user:WhoAmI',
            headers={'Authorization': 'Bearer YOUR_TOKEN'}
        )
        print(r.status_code, r.json())
asyncio.run(check())
"

Run tests#

pip install -r requirements-dev.txt
pytest tests/ -v

Inspect tools locally#

fastmcp inspect src/safetyculture_mcp/server.py:mcp

Available Tools#

ToolDescription
list_inspectionsList inspections (limit, archived, completed)
get_inspectionGet inspection detail by ID
list_templatesList templates (limit, archived)
list_actionsList actions (page_size)
get_actionGet action detail by ID
create_actionCreate a new action (title, description, due_at)
list_all_actionsAuto-paginate all actions (up to max_pages × 100, server cap 100 pages)
update_actionUpdate fields on an existing action (title, description, status, due_at, assignees)
list_usersList all users in the organisation
search_users_by_emailSearch users by email addresses
get_userGet user details by ID
whoamiReturn the authenticated user's profile

Action configuration#

ToolDescription
list_action_statusesList standard action status IDs and keys
list_action_prioritiesList standard action priority IDs
list_action_labelsList org action labels
delete_actionBulk-delete actions by ID
add_action_commentAdd a timeline comment to an action

Sites & groups#

ToolDescription
list_sitesList location-level sites (paginated)
search_sitesSearch sites by name
get_siteGet site details with ancestors
list_groupsList all groups
list_users_in_groupList users in a group

Inspections (extended)#

ToolDescription
create_inspectionCreate inspection from template
get_inspection_answersGet all Q&A responses
update_inspectionUpdate inspection item values
complete_inspectionMark inspection complete
archive_inspectionArchive an inspection
restore_inspectionRestore archived inspection
export_inspection_pdfExport inspection to PDF/Word

Templates (extended)#

ToolDescription
get_templateGet single template metadata
get_template_definitionGet template structure for prefilling

Composite queries#

ToolDescription
list_users_with_actionsUsers with actions in a given status
search_actions_by_assignee_emailActions for a user by email

MCP resources#

URIDescription
safetyculture://org/statusesAction status reference
safetyculture://org/prioritiesAction priority reference
safetyculture://org/sitesOrg sites (first page)

Claude Desktop config#

Add to %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "safetyculture": {
      "command": "fastmcp",
      "args": ["run", "C:/path/to/safetyculture-mcp/src/safetyculture_mcp/server.py:mcp"],
      "env": {
        "SAFETYCULTURE_API_TOKEN": "your_token_here"
      }
    }
  }
}

Deploy to Prefect Horizon#

  1. Push repo to GitHub
  2. Go to horizon.prefect.io → authenticate with GitHub
  3. Select your repo, set entrypoint: src/safetyculture_mcp/server.py:mcp
  4. Click Deploy — live at https://<name>.fastmcp.app/mcp in ~60s

Auto-redeploys on every push to main.

README | Dosu