Skill: blueprintstudioco/fieldfix (version 1.0.0)

--- name: fieldfix description: Query and manage your heavy equipment fleet through FieldFix's API. Track machines, log maintenance, monitor expenses, and get AI diagnostics. version: 1.0.0 author: FieldFix <[REDACTED_SECRET]> homepage: https://www.fieldfix.ai/api --- # FieldFix Skill Query and manage your heavy equipment fleet through FieldFix's Agent API. ## Setup 1. **Get your API key** from [FieldFix Settings](https://app.fieldfix.ai/settings/api) 2. **Set environment variable:** ```bash export FIELDFIX_API_KEY=ff_sk_live_your_key_here ``` ## Pricing API access is included with all paid plans: - **$10/machine/month** (1-25 machines) - **$7/machine/month** (26-100 machines) - **$5/machine/month** (100+ machines) - **2 months free trial** — no credit card required ## Capabilities ### Read Operations **List all machines:** ```bash node scripts/fieldfix.js machines ``` **Get machine details:** ```bash node scripts/fieldfix.js machine <id> ``` **Get machine expenses:** ```bash node scripts/fieldfix.js expenses <id> ``` **Get service history:** ```bash node scripts/fieldfix.js service <id> ``` **Get fleet alerts:** ```bash node scripts/fieldfix.js alerts ``` ### Write Operations **Log a service entry:** ```bash node scripts/fieldfix.js log-service <id> "Oil Change" 120 "Changed oil and filter" ``` **Log an expense:** ```bash node scripts/fieldfix.js log-expense <id> fuel 250 "Filled tank" ``` **Update hour meter:** ```bash node scripts/fieldfix.js update-hours <id> 1250 ``` ## Example Prompts Once configured, try asking your agent: - "What machines do I have in FieldFix?" - "When is my CAT 299 due for service?" - "How much have I spent on fuel this month?" - "Log an oil change on the excavator for $120" - "What's the total cost per hour for my skid steer?" ## API Endpoints | Endpoint | Method | Description | |----------|--------|-------------| | `/machines` | GET | List all machines | | `/machines/{id}` | GET | Get machine details | | `/machines/{id}/expenses` | GET | Get expense history | | `/machines/{id}/service` | GET | Get service history | | `/alerts` | GET | Get fleet alerts | | `/machines/{id}/service` | POST | Log service entry | | `/machines/{id}/expenses` | POST | Log expense | | `/machines/{id}/hours` | POST | Update hours | ## Links - [FieldFix App](https://app.fieldfix.ai) - [API Documentation](https://www.fieldfix.ai/api) - [MCP Server (Claude Desktop)](https://www.npmjs.com/package/fieldfix-mcp-server)

path: config.example.json
content: {
  "fieldfix": {
    "apiKey": "ff_sk_live_your_key_here"
  }
}


path: package.json
content: {
  "name": "@fieldfix/openclaw-skill",
  "version": "1.0.0",
  "description": "FieldFix skill for Openclaw - Query and manage your heavy equipment fleet",
  "main": "scripts/fieldfix.js",
  "bin": {
    "fieldfix": "scripts/fieldfix.js"
  },
  "keywords": [
    "fieldfix",
    "openclaw",
    "heavy-equipment",
    "fleet-management",
    "ai-agent",
    "mcp"
  ],
  "author": "FieldFix",
  "license": "MIT",
  "homepage": "https://fieldfix.ai/api",
  "repository": {
    "type": "git",
    "url": "https://github.com/blueprintstudioco/fieldfix"
  },
  "engines": {
    "node": ">=18"
  }
}


path: scripts/fieldfix.js
content: #!/usr/bin/env node
/**
 * FieldFix CLI - Query your equipment fleet from the command line
 * 
 * Usage:
 *   fieldfix machines              List all machines
 *   fieldfix machine <id>          Get machine details
 *   fieldfix expenses <id>         Get machine expenses
 *   fieldfix service <id>          Get service history
 *   fieldfix alerts                Get fleet alerts
 *   fieldfix log-service <id>      Log a service entry (Industry)
 *   fieldfix log-expense <id>      Log an expense (Industry)
 *   fieldfix update-hours <id>     Update hour meter (Industry)
 * 
 * Environment:
 *   FIELDFIX_API_KEY - Your FieldFix API key (required)
 */

const BASE_URL = 'https://app.fieldfix.ai/api/v1';

async function request(path, options = {}) {
  const [REDACTED_SECRET];
  if (!apiKey) {
    console.error('Error: FIELDFIX_API_KEY environment variable not set');
    console.error('Get your API key at https://app.fieldfix.ai/settings/api');
    process.exit(1);
  }

  const url = `${BASE_URL}${path}`;
  const response = await fetch(url, {
    ...options,
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json',
      ...options.headers,
    },
  });

  const data = await response.json();
  
  if (!response.ok) {
    console.error(`Error: ${data.error?.message || response.statusText}`);
    process.exit(1);
  }

  return data;
}

async function main() {
  const [,, command, ...args] = process.argv;

  if (!command) {
    console.log(`
FieldFix CLI - Query your equipment fleet

Commands:
  machines              List all machines
  machine <id>          Get machine details  
  expenses <id>         Get machine expenses
  service <id>          Get service history
  alerts                Get fleet alerts

Write commands (Industry plan):
  log-service <id> <type> <cost> [notes]
  log-expense <id> <category> <amount> [description]
  update-hours <id> <hours>

Environment:
  FIELDFIX_API_KEY      Your API key (required)
`);
    process.exit(0);
  }

  let result;

  switch (command) {
    case 'machines':
      result = await request('/machines');
      break;

    case 'machine':
      if (!args[0]) {
        console.error('Usage: fieldfix machine <id>');
        process.exit(1);
      }
      result = await request(`/machines/${args[0]}`);
      break;

    case 'expenses':
      if (!args[0]) {
        console.error('Usage: fieldfix expenses <machine-id>');
        process.exit(1);
      }
      result = await request(`/machines/${args[0]}/expenses`);
      break;

    case 'service':
      if (!args[0]) {
        console.error('Usage: fieldfix service <machine-id>');
        process.exit(1);
      }
      result = await request(`/machines/${args[0]}/service`);
      break;

    case 'alerts':
      result = await request('/alerts');
      break;

    case 'log-service':
      if (args.length < 3) {
        console.error('Usage: fieldfix log-service <machine-id> <type> <cost> [notes]');
        process.exit(1);
      }
      result = await request(`/machines/${args[0]}/service`, {
        method: 'POST',
        body: JSON.stringify({
          type: args[1],
          cost: parseFloat(args[2]),
          notes: args.slice(3).join(' ') || undefined,
        }),
      });
      break;

    case 'log-expense':
      if (args.length < 3) {
        console.error('Usage: fieldfix log-expense <machine-id> <category> <amount> [description]');
        process.exit(1);
      }
      result = await request(`/machines/${args[0]}/expenses`, {
        method: 'POST',
        body: JSON.stringify({
          category: args[1],
          amount: parseFloat(args[2]),
          description: args.slice(3).join(' ') || undefined,
        }),
      });
      break;

    case 'update-hours':
      if (args.length < 2) {
        console.error('Usage: fieldfix update-hours <machine-id> <hours>');
        process.exit(1);
      }
      result = await request(`/machines/${args[0]}/hours`, {
        method: 'POST',
        body: JSON.stringify({
          hours: parseFloat(args[1]),
        }),
      });
      break;

    default:
      console.error(`Unknown command: ${command}`);
      console.error('Run "fieldfix" for usage');
      process.exit(1);
  }

  console.log(JSON.stringify(result, null, 2));
}

main().catch(err => {
  console.error('Error:', err.message);
  process.exit(1);
});


Security scan verdicts — ClawScan: clean | static analysis: suspicious | VirusTotal: clean | SkillSpector: suspicious (MEDIUM)