{
  "name": "Moxlade — Upwork buyer intelligence",
  "description": "Upwork buyer intelligence for your own agent, over MCP. A proprietary Upwork corpus your agent asks over MCP: who the anonymous client really is, what they actually pay, and rate benchmarks from a freelancer census. You bring the agent and the subscription; the corpus answers, it is never downloaded. Not affiliated with, endorsed by, or sponsored by Upwork Inc. Upwork is a trademark of Upwork Inc. Data is compiled from public postings and public profiles and is provided as-is.",
  "url": "https://buyer.moxlade.com",
  "provider": {
    "organization": "Moxlade",
    "url": "https://moxlade.com"
  },
  "version": "0.1.0",
  "documentationUrl": "https://buyer.moxlade.com/llms.txt",
  "additionalInterfaces": [
    {
      "url": "https://buyer.moxlade.com/mcp/",
      "transport": "JSONRPC",
      "protocol": "MCP",
      "protocolVersion": "2026-07-28"
    }
  ],
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "securitySchemes": {
    "bearer": {
      "type": "http",
      "scheme": "bearer"
    },
    "oauth2": {
      "type": "oauth2",
      "description": "OAuth 2.1 with dynamic client registration and PKCE; tokens are audience-bound to the MCP endpoint (RFC 8707).",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://clerk.buyer.moxlade.com/oauth/authorize",
          "tokenUrl": "https://clerk.buyer.moxlade.com/oauth/token",
          "scopes": {
            "mcp:tools": "Call the corpus tools",
            "profile": "Your name",
            "email": "Your email address",
            "offline_access": "Refresh without signing in again"
          }
        }
      }
    }
  },
  "security": [
    {
      "bearer": []
    },
    {
      "oauth2": [
        "mcp:tools"
      ]
    }
  ],
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "find-work",
      "name": "Find work",
      "description": "search_jobs: Search Upwork postings by words, an exact phrase, and structured filters. get_prefilter_catalog: The fields search_jobs and save_search can filter on, with their types and the values each accepts. check_prefilter: Validate a filter without running it, and see how much it would catch.",
      "tags": [
        "search_jobs",
        "get_prefilter_catalog",
        "check_prefilter"
      ],
      "examples": [
        "search_jobs",
        "get_prefilter_catalog"
      ]
    },
    {
      "id": "judge-a-posting",
      "name": "Judge a posting",
      "description": "get_job: One posting in full, as the corpus holds it. get_job_score: How good a posting is on its own terms, 0-100, and WHY.",
      "tags": [
        "get_job",
        "get_job_score"
      ],
      "examples": [
        "get_job",
        "get_job_score"
      ]
    },
    {
      "id": "judge-the-client",
      "name": "Judge the client",
      "description": "get_buyer: Who is actually behind an anonymous posting. get_buyer_quality: Whether the client behind a posting actually pays, and how much of that we can honestly claim to know.",
      "tags": [
        "get_buyer",
        "get_buyer_quality"
      ],
      "examples": [
        "get_buyer",
        "get_buyer_quality"
      ]
    },
    {
      "id": "the-market",
      "name": "The market",
      "description": "rate_benchmark: What freelancers with a given skill LIST as their hourly rate, as a distribution rather than an average. skill_demand: How many jobs mentioning a skill were posted recently, and whether that is rising or falling week by week.",
      "tags": [
        "rate_benchmark",
        "skill_demand"
      ],
      "examples": [
        "rate_benchmark",
        "skill_demand"
      ]
    },
    {
      "id": "be-told-instead-of-asking",
      "name": "Be told, instead of asking",
      "description": "save_search: Save a search so new matching postings are pushed to you as they appear, instead of you polling for them. list_saved_searches: Every search saved against this token, with whether it is currently matching. delete_saved_search: Delete a saved search and its delivery, permanently.",
      "tags": [
        "save_search",
        "list_saved_searches",
        "delete_saved_search"
      ],
      "examples": [
        "save_search",
        "list_saved_searches"
      ]
    },
    {
      "id": "your-plan",
      "name": "Your plan",
      "description": "get_plan: What this token is allowed to do right now, and what it costs. get_activity: What this token has called, newest first — the log of your own use.",
      "tags": [
        "get_plan",
        "get_activity"
      ],
      "examples": [
        "get_plan",
        "get_activity"
      ]
    }
  ],
  "disclaimer": "Not affiliated with, endorsed by, or sponsored by Upwork Inc. Upwork is a trademark of Upwork Inc. Data is compiled from public postings and public profiles and is provided as-is."
}
