{
  "name": "Orbyt Job Search CRM",
  "description": "Access your job search pipeline, contacts, calendar, and AI suggestions from any AI assistant. Orbyt helps you track applications, manage networking contacts, prepare for interviews, and stay on top of follow ups. Supports outbound webhooks for Zapier, Make.com, n8n, and Apple Shortcuts automations. This file is a static REST tool manifest (29 tools: 22 job-search pipeline tools plus 7 salary intelligence lookups), not a live JSON-RPC MCP server. The 22 pipeline tools require an Orbyt Jobs Ultra or Unlimited plan; the 7 salary tools require a separate Orbyt Intelligence API key. The live MCP server for salary intelligence is documented under mcp_server.",
  "url": "https://www.orbytjobs.ai",
  "auth": {
    "type": "bearer",
    "instructions": "Two token types, by tool family. Pipeline tools (endpoints under /api/mcp/): generate an API token in Orbyt Settings > Account > Extension Tokens. The token starts with 'ext_' and can be used with any MCP-compatible client, and these tools require the Orbyt Jobs Ultra or Unlimited plan (other plans receive 403 FORBIDDEN). Salary intelligence tools (endpoints under /api/v1/intelligence/): use an Orbyt Intelligence API key starting with 'intelligence_', generated at the Orbyt Intelligence dashboard (Dashboard > API Keys); ext_ tokens are not accepted on those endpoints."
  },
  "mcp_server": {
    "description": "Live MCP (JSON-RPC 2.0) server for Orbyt Intelligence salary data. Negotiates official MCP protocol versions (2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05), so official-SDK clients like Claude Desktop and Claude Code connect via mcp-remote. Requires an Intelligence API key on the Pro plan or higher. There is no trial; the free tier covers the REST API without a card but does not include MCP.",
    "url": "https://www.orbytjobs.ai/api/v1/intelligence/mcp",
    "config_download": "https://www.orbytjobs.ai/downloads/orbyt-claude-desktop.json",
    "docs": "https://www.orbytjobs.ai/orbyt-intelligence/mcp"
  },
  "tools": [
    {
      "name": "list_jobs",
      "description": "List all jobs in the user's pipeline with status, company, role, priority, and next action. Supports filtering by status and limiting results.",
      "endpoint": "/api/mcp/jobs",
      "method": "GET",
      "parameters": {
        "status": {
          "type": "string",
          "description": "Filter by job status (saved, applied, screening, interviewing, offer, rejected, withdrawn)",
          "required": false
        },
        "limit": {
          "type": "integer",
          "description": "Maximum number of jobs to return (default 100, max 500)",
          "required": false
        }
      }
    },
    {
      "name": "get_job",
      "description": "Get full details for a single job including description, notes, tags, and linked contacts.",
      "endpoint": "/api/mcp/jobs/{id}",
      "method": "GET",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The job ID",
          "required": true
        }
      }
    },
    {
      "name": "add_job",
      "description": "Add a new job to the pipeline. Requires at least a company or role name.",
      "endpoint": "/api/mcp/jobs",
      "method": "POST",
      "parameters": {
        "company": {
          "type": "string",
          "description": "Company name",
          "required": false
        },
        "role": {
          "type": "string",
          "description": "Job title or role name",
          "required": false
        },
        "url": {
          "type": "string",
          "description": "Job posting URL",
          "required": false
        },
        "status": {
          "type": "string",
          "description": "Initial status (saved, applied, screening, interviewing). Defaults to saved.",
          "required": false
        },
        "location": {
          "type": "string",
          "description": "Job location",
          "required": false
        },
        "salary": {
          "type": "string",
          "description": "Salary range or amount",
          "required": false
        },
        "priority": {
          "type": "string",
          "description": "Priority level (high, medium, low). Defaults to medium.",
          "required": false
        },
        "notes": {
          "type": "string",
          "description": "Additional notes about the job",
          "required": false
        },
        "tags": {
          "type": "array",
          "description": "Tags for categorization (e.g., remote, startup, enterprise)",
          "required": false
        }
      }
    },
    {
      "name": "update_job",
      "description": "Partially update a job's details. Only provided fields are modified. Use this to edit company, role, location, salary, notes, tags, priority, URL, favorite status, or next action.",
      "endpoint": "/api/mcp/jobs/{id}",
      "method": "PATCH",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The job ID",
          "required": true
        },
        "company": {
          "type": "string",
          "description": "Company name",
          "required": false
        },
        "role": {
          "type": "string",
          "description": "Job title or role name",
          "required": false
        },
        "location": {
          "type": "string",
          "description": "Job location",
          "required": false
        },
        "salary": {
          "type": "string",
          "description": "Salary range or amount",
          "required": false
        },
        "notes": {
          "type": "string",
          "description": "Additional notes about the job",
          "required": false
        },
        "tags": {
          "type": "array",
          "description": "Tags for categorization",
          "required": false
        },
        "priority": {
          "type": "string",
          "description": "Priority level (high, medium, low)",
          "required": false
        },
        "url": {
          "type": "string",
          "description": "Job posting URL",
          "required": false
        },
        "favorite": {
          "type": "boolean",
          "description": "Whether the job is favorited",
          "required": false
        },
        "nextAction": {
          "type": "string",
          "description": "Next action to take (e.g., 'Follow up in 1 week')",
          "required": false
        },
        "nextActionDate": {
          "type": "string",
          "description": "Due date for the next action (YYYY-MM-DD format)",
          "required": false
        }
      }
    },
    {
      "name": "update_job_status",
      "description": "Update a job's status (e.g., from saved to applied, or from interviewing to offer).",
      "endpoint": "/api/mcp/jobs/{id}/status",
      "method": "POST",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The job ID",
          "required": true
        },
        "status": {
          "type": "string",
          "description": "New status (saved, applied, screening, interviewing, offer, rejected, withdrawn)",
          "required": true
        },
        "nextAction": {
          "type": "string",
          "description": "Optional next action to set (e.g., 'Follow up in 1 week')",
          "required": false
        },
        "nextActionDate": {
          "type": "string",
          "description": "Optional due date for the next action (YYYY-MM-DD format)",
          "required": false
        }
      }
    },
    {
      "name": "delete_job",
      "description": "Delete a job from the pipeline. Also removes related activities.",
      "endpoint": "/api/mcp/jobs/{id}",
      "method": "DELETE",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The job ID to delete",
          "required": true
        }
      }
    },
    {
      "name": "list_contacts",
      "description": "List networking contacts with their company, role, relationship type, and linked job count.",
      "endpoint": "/api/mcp/contacts",
      "method": "GET",
      "parameters": {
        "company": {
          "type": "string",
          "description": "Filter contacts by company name (partial match)",
          "required": false
        },
        "limit": {
          "type": "integer",
          "description": "Maximum number of contacts to return (default 100, max 500)",
          "required": false
        }
      }
    },
    {
      "name": "get_contact",
      "description": "Get full details for a single contact including email, phone, notes, and linked jobs.",
      "endpoint": "/api/mcp/contacts/{id}",
      "method": "GET",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The contact ID",
          "required": true
        }
      }
    },
    {
      "name": "add_contact",
      "description": "Add a new networking contact. Supports linking to existing jobs for bidirectional tracking.",
      "endpoint": "/api/mcp/contacts",
      "method": "POST",
      "parameters": {
        "name": {
          "type": "string",
          "description": "Contact's full name",
          "required": true
        },
        "title": {
          "type": "string",
          "description": "Contact's job title",
          "required": false
        },
        "company": {
          "type": "string",
          "description": "Contact's company",
          "required": false
        },
        "email": {
          "type": "string",
          "description": "Contact's email address",
          "required": false
        },
        "phone": {
          "type": "string",
          "description": "Contact's phone number",
          "required": false
        },
        "type": {
          "type": "string",
          "description": "Relationship type (recruiter, hiring-manager, referral, colleague, connection, other). Defaults to connection.",
          "required": false
        },
        "notes": {
          "type": "string",
          "description": "Notes about the contact",
          "required": false
        },
        "jobIds": {
          "type": "array",
          "description": "Array of job IDs to link this contact to",
          "required": false
        }
      }
    },
    {
      "name": "update_contact",
      "description": "Partially update a contact's details. Only provided fields are modified.",
      "endpoint": "/api/mcp/contacts/{id}",
      "method": "PATCH",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The contact ID",
          "required": true
        },
        "name": {
          "type": "string",
          "description": "Contact's full name",
          "required": false
        },
        "title": {
          "type": "string",
          "description": "Contact's job title",
          "required": false
        },
        "company": {
          "type": "string",
          "description": "Contact's company",
          "required": false
        },
        "email": {
          "type": "string",
          "description": "Contact's email address",
          "required": false
        },
        "phone": {
          "type": "string",
          "description": "Contact's phone number",
          "required": false
        },
        "type": {
          "type": "string",
          "description": "Relationship type (recruiter, hiring-manager, referral, colleague, connection, other)",
          "required": false
        },
        "notes": {
          "type": "string",
          "description": "Notes about the contact",
          "required": false
        },
        "jobIds": {
          "type": "array",
          "description": "Array of job IDs to link this contact to",
          "required": false
        }
      }
    },
    {
      "name": "delete_contact",
      "description": "Delete a contact. Automatically removes the contact from any linked jobs.",
      "endpoint": "/api/mcp/contacts/{id}",
      "method": "DELETE",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The contact ID to delete",
          "required": true
        }
      }
    },
    {
      "name": "list_activities",
      "description": "List job search activities with optional filters. Supports filtering by job, contact, activity type, and date range. Sorted newest first.",
      "endpoint": "/api/mcp/activities",
      "method": "GET",
      "parameters": {
        "jobId": {
          "type": "string",
          "description": "Filter activities by job ID",
          "required": false
        },
        "contactId": {
          "type": "string",
          "description": "Filter activities by contact ID",
          "required": false
        },
        "type": {
          "type": "string",
          "description": "Filter by activity type (applied, email-sent, interview-scheduled, offer-received, status-change, note-added, contact-added, job-added)",
          "required": false
        },
        "since": {
          "type": "string",
          "description": "Only return activities after this ISO date (e.g., 2024-01-15T00:00:00Z)",
          "required": false
        },
        "limit": {
          "type": "integer",
          "description": "Maximum number of activities to return (default 50, max 200)",
          "required": false
        }
      }
    },
    {
      "name": "get_calendar",
      "description": "Get upcoming interviews and calendar events. Shows jobs in screening/interviewing stages and scheduled interview activities.",
      "endpoint": "/api/mcp/calendar",
      "method": "GET"
    },
    {
      "name": "create_calendar_event",
      "description": "Create a calendar event such as an interview, phone screen, networking meeting, or follow up. The event appears in the Orbyt calendar view.",
      "endpoint": "/api/mcp/calendar",
      "method": "POST",
      "parameters": {
        "title": {
          "type": "string",
          "description": "Event title (e.g., 'Interview with Google', 'Coffee with recruiter')",
          "required": true
        },
        "date": {
          "type": "string",
          "description": "Event date in YYYY-MM-DD format",
          "required": true
        },
        "time": {
          "type": "string",
          "description": "Start time in HH:MM format (24h). Omit for all-day events.",
          "required": false
        },
        "endTime": {
          "type": "string",
          "description": "End time in HH:MM format (24h). Defaults to 1 hour after start.",
          "required": false
        },
        "location": {
          "type": "string",
          "description": "Event location or meeting link",
          "required": false
        },
        "url": {
          "type": "string",
          "description": "Related URL (meeting link, calendar invite)",
          "required": false
        },
        "notes": {
          "type": "string",
          "description": "Additional notes for the event",
          "required": false
        },
        "jobId": {
          "type": "string",
          "description": "ID of the related job",
          "required": false
        },
        "type": {
          "type": "string",
          "description": "Event type (interview, phone-screen, follow-up, networking, event, other). Defaults to event.",
          "required": false
        }
      }
    },
    {
      "name": "get_pipeline_summary",
      "description": "Get a summary of the job search pipeline including counts by status, response rate, stale applications, jobs needing follow up, and actionable insights.",
      "endpoint": "/api/mcp/pipeline",
      "method": "GET"
    },
    {
      "name": "get_suggestions",
      "description": "Get AI agent suggestions and actionable recommendations for what to do next in the job search. Includes overdue actions, stale applications, and saved jobs to review.",
      "endpoint": "/api/mcp/suggestions",
      "method": "GET"
    },
    {
      "name": "log_activity",
      "description": "Log a job search activity such as sending an email, scheduling an interview, or adding a note.",
      "endpoint": "/api/mcp/activities",
      "method": "POST",
      "parameters": {
        "type": {
          "type": "string",
          "description": "Activity type (applied, email-sent, interview-scheduled, offer-received, status-change, note-added, contact-added, job-added)",
          "required": true
        },
        "title": {
          "type": "string",
          "description": "Short description of the activity",
          "required": true
        },
        "jobId": {
          "type": "string",
          "description": "ID of the related job",
          "required": false
        },
        "contactId": {
          "type": "string",
          "description": "ID of the related contact",
          "required": false
        },
        "description": {
          "type": "string",
          "description": "Detailed description of the activity",
          "required": false
        }
      }
    },
    {
      "name": "list_webhooks",
      "description": "List all registered outbound webhooks. Webhooks receive HTTP POST notifications when events occur in your pipeline (e.g., job created, status changed, offer received).",
      "endpoint": "/api/mcp/webhooks",
      "method": "GET"
    },
    {
      "name": "register_webhook",
      "description": "Register a new outbound webhook URL to receive event notifications. Supports Zapier, Make.com, n8n, Apple Shortcuts, and any HTTP endpoint. Events: job.created, job.updated, job.status_changed, job.deleted, contact.created, contact.updated, contact.deleted, activity.created, interview.scheduled, offer.received. Use * to subscribe to all events.",
      "endpoint": "/api/mcp/webhooks",
      "method": "POST",
      "parameters": {
        "url": {
          "type": "string",
          "description": "The webhook endpoint URL (must be https for production use)",
          "required": true
        },
        "events": {
          "type": "array",
          "description": "Event types to subscribe to. Options: job.created, job.updated, job.status_changed, job.deleted, contact.created, contact.updated, contact.deleted, activity.created, interview.scheduled, offer.received, or * for all",
          "required": true
        },
        "secret": {
          "type": "string",
          "description": "Optional HMAC secret for payload signing. When set, each webhook includes an X-Orbyt-Signature header (sha256=hex)",
          "required": false
        }
      }
    },
    {
      "name": "delete_webhook",
      "description": "Remove a registered webhook by ID. The webhook will stop receiving event notifications immediately.",
      "endpoint": "/api/mcp/webhooks",
      "method": "DELETE",
      "parameters": {
        "id": {
          "type": "string",
          "description": "The webhook ID to delete",
          "required": true
        }
      }
    },
    {
      "name": "get_me",
      "description": "Get user profile, Activity Rings progress, financial runway, wellness status, pipeline summary, and rate limits. One call for all dashboard data.",
      "endpoint": "/api/mcp/me",
      "method": "GET",
      "parameters": {}
    },
    {
      "name": "test_webhook",
      "description": "Send a test payload to a registered webhook to verify it is receiving events correctly.",
      "endpoint": "/api/mcp/webhooks/test",
      "method": "POST",
      "parameters": {
        "webhook_id": {
          "type": "string",
          "description": "The webhook ID to test",
          "required": true
        }
      }
    },
    {
      "name": "get_salary",
      "description": "Look up an estimated salary range and experience bands, a structured total compensation breakdown (base, equity/year, bonus %, signing bonus), company size salary bands (startup/growth/scaleup/public), remote salary adjustment, and employer-specific premiums for any of 3,445 tech roles across 81 U.S. cities, plus the wage the US Bureau of Labor Statistics published for the occupation each role maps to, carrying its occupation code, metro area and employed-worker count. The Orbyt figures are COMPUTED ESTIMATES and must not be cited as BLS figures; the BLS block is the citable one. Powered by Orbyt Intelligence. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries",
      "method": "GET",
      "auth_required": true,
      "parameters": {
        "role": {
          "type": "string",
          "description": "Role slug (e.g., 'ai-engineer', 'ml-engineer', 'staff-software-engineer'). See /api/v1/intelligence/salaries/roles for the full list.",
          "required": true
        },
        "city": {
          "type": "string",
          "description": "City slug (e.g., 'san-francisco', 'austin', 'new-york'). Omit to get national data only. See /api/v1/intelligence/salaries/cities for the full list.",
          "required": false
        }
      }
    },
    {
      "name": "calculate_salary",
      "description": "Get a personalized salary estimate adjusted for role, city cost of living, and experience level. Returns estimate with base/total comp breakdown, national comparison, citation text ready to quote, and methodology assumptions. Powered by Orbyt Intelligence. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries/calculate",
      "method": "GET",
      "auth_required": true,
      "parameters": {
        "role": {
          "type": "string",
          "description": "Role slug (e.g., 'ai-engineer')",
          "required": true
        },
        "city": {
          "type": "string",
          "description": "City slug (e.g., 'san-francisco')",
          "required": true
        },
        "exp": {
          "type": "string",
          "description": "Experience level: entry (0-2 years), mid (3-5 years), senior (6-9 years), staff (10+ years). Defaults to mid.",
          "required": false
        }
      }
    },
    {
      "name": "get_salary_projections",
      "description": "Get year-by-year salary projections through 2030 for a role based on historical growth trends. Returns annual projections, compound growth rate, and methodology assumptions. Useful for career planning and answering 'where will AI Engineer salaries be in 2030?' questions. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries/projections",
      "method": "GET",
      "auth_required": true,
      "parameters": {
        "role": {
          "type": "string",
          "description": "Role slug (e.g., 'ai-engineer')",
          "required": true
        },
        "city": {
          "type": "string",
          "description": "City slug for cost-of-living adjusted projections (optional)",
          "required": false
        }
      }
    },
    {
      "name": "get_salary_history",
      "description": "Get quarterly salary snapshots since Q3 2025 for a role, optionally adjusted for a city. The free tier returns a 4-quarter preview window; Pro and Ultra return the full series with extended lookback. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries/history",
      "method": "GET",
      "auth_required": true,
      "parameters": {
        "role": {
          "type": "string",
          "description": "Role slug (e.g., 'ai-engineer')",
          "required": true
        },
        "city": {
          "type": "string",
          "description": "City slug for COL-adjusted history (optional)",
          "required": false
        }
      }
    },
    {
      "name": "list_salary_roles",
      "description": "List all 3,445 AI and tech roles available in Orbyt Intelligence with slugs, titles, and national medians. Useful for discovering available data before making specific queries. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries/roles",
      "method": "GET",
      "auth_required": true,
      "parameters": {}
    },
    {
      "name": "list_salary_cities",
      "description": "List all 81 U.S. cities available in Orbyt Intelligence with cost-of-living multipliers. Useful for discovering available cities before making specific queries. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries/cities",
      "method": "GET",
      "auth_required": true,
      "parameters": {}
    },
    {
      "name": "search_salary_roles",
      "description": "Search Orbyt Intelligence by keyword to find matching roles and cities. Use this to resolve a user's natural-language role reference ('machine learning engineer') into a valid slug for other salary tools. Requires an Orbyt Intelligence API key (Bearer intelligence_...); Jobs extension tokens (ext_) are not accepted. A free key requires no card. Pricing at orbytjobs.ai/orbyt-intelligence/pricing.",
      "endpoint": "/api/v1/intelligence/salaries/search",
      "method": "GET",
      "auth_required": true,
      "parameters": {
        "q": {
          "type": "string",
          "description": "Search keyword (e.g., 'machine learning', 'austin', 'cybersecurity')",
          "required": true
        }
      }
    }
  ],
  "examples": {
    "apple_shortcuts": [
      {
        "name": "Get my interviews today",
        "description": "Fetch upcoming interviews and calendar events from your Orbyt pipeline.",
        "method": "GET",
        "endpoint": "/api/mcp/calendar",
        "headers": {
          "Authorization": "Bearer ext_YOUR_TOKEN"
        }
      },
      {
        "name": "Add a job",
        "description": "Save a new job opportunity to your pipeline from anywhere on your device.",
        "method": "POST",
        "endpoint": "/api/mcp/jobs",
        "headers": {
          "Authorization": "Bearer ext_YOUR_TOKEN",
          "Content-Type": "application/json"
        },
        "body": {
          "company": "Acme Corp",
          "role": "Senior Engineer",
          "url": "https://example.com/job/123",
          "status": "saved"
        }
      },
      {
        "name": "Schedule an interview",
        "description": "Create a calendar event for an upcoming interview.",
        "method": "POST",
        "endpoint": "/api/mcp/calendar",
        "headers": {
          "Authorization": "Bearer ext_YOUR_TOKEN",
          "Content-Type": "application/json"
        },
        "body": {
          "title": "Interview with Acme Corp",
          "date": "2024-02-15",
          "time": "14:00",
          "endTime": "15:00",
          "type": "interview",
          "location": "https://zoom.us/j/123456"
        }
      },
      {
        "name": "What should I do next?",
        "description": "Get AI-powered suggestions for your next best action in the job search.",
        "method": "GET",
        "endpoint": "/api/mcp/suggestions",
        "headers": {
          "Authorization": "Bearer ext_YOUR_TOKEN"
        }
      },
      {
        "name": "Pipeline overview",
        "description": "Get a quick summary of your job search pipeline with counts by status and response rate.",
        "method": "GET",
        "endpoint": "/api/mcp/pipeline",
        "headers": {
          "Authorization": "Bearer ext_YOUR_TOKEN"
        }
      },
      {
        "name": "Recent activity",
        "description": "List the last 10 activities across all jobs.",
        "method": "GET",
        "endpoint": "/api/mcp/activities?limit=10",
        "headers": {
          "Authorization": "Bearer ext_YOUR_TOKEN"
        }
      }
    ],
    "zapier_webhook": {
      "description": "Register a Zapier webhook to trigger automations when events occur in Orbyt.",
      "method": "POST",
      "endpoint": "/api/mcp/webhooks",
      "headers": {
        "Authorization": "Bearer ext_YOUR_TOKEN",
        "Content-Type": "application/json"
      },
      "body": {
        "url": "https://hooks.zapier.com/hooks/catch/YOUR_ZAP_ID",
        "events": [
          "job.created",
          "offer.received",
          "interview.scheduled"
        ]
      }
    },
    "make_webhook": {
      "description": "Register a Make.com (Integromat) webhook to automate workflows based on Orbyt events.",
      "method": "POST",
      "endpoint": "/api/mcp/webhooks",
      "headers": {
        "Authorization": "Bearer ext_YOUR_TOKEN",
        "Content-Type": "application/json"
      },
      "body": {
        "url": "https://hook.us1.make.com/YOUR_SCENARIO_ID",
        "events": [
          "*"
        ],
        "secret": "your-signing-secret"
      }
    }
  }
}
