{
  "name": "rolesapi",
  "title": "RolesAPI",
  "version": "1.0.0",
  "description": "Search live Indeed job postings and fetch normalized role details, salaries, and descriptions.",
  "url": "https://api.rolesapi.com/mcp",
  "transport": ["streamable-http"],
  "publisher": {
    "name": "RolesAPI",
    "email": "nikhil@landkit.pro",
    "url": "https://rolesapi.com"
  },
  "authentication": {
    "methods": [
      {
        "type": "oauth2.1",
        "authorization_server": "https://api.rolesapi.com/.well-known/oauth-authorization-server",
        "pkce": true,
        "scopes": ["mcp:access"]
      },
      {
        "type": "bearer",
        "format": "rk_ API key",
        "docs": "https://rolesapi.com/authentication/"
      }
    ]
  },
  "tools": [
    {
      "name": "search_roles",
      "description": "Search live Indeed job postings by keyword and location. Supports 60+ countries, sorting by date or relevance, and up to 3 result pages per call. Returns job title, company, location, posting date, summary, and the job_key for detail lookups.",
      "inputSchema": {
        "type": "object",
        "required": ["keyword", "location"],
        "properties": {
          "keyword": {
            "type": "string",
            "description": "Job title, skill, or search phrase, e.g. 'staff data engineer'."
          },
          "location": {
            "type": "string",
            "description": "City, state/region, zip, or 'Remote'."
          },
          "country": {
            "type": "string",
            "description": "Optional 2-letter ISO country code (us, gb, in, de, au, ...). Defaults to the US site."
          },
          "sort": {
            "type": "string",
            "enum": ["date", "relevance"],
            "description": "Sort order; 'date' surfaces the newest postings first (default)."
          },
          "max_pages": {
            "type": "integer",
            "minimum": 1,
            "maximum": 3,
            "description": "Result pages to fetch (about 15 postings each). Default 1."
          }
        }
      }
    },
    {
      "name": "get_role_by_key",
      "description": "Fetch the full detail of one Indeed job posting by its job_key: complete description, salary data, job type, benefits, and company information.",
      "inputSchema": {
        "type": "object",
        "required": ["job_key"],
        "properties": {
          "job_key": {
            "type": "string",
            "description": "The Indeed job key — the alphanumeric 'jk' value from a job-posting URL."
          },
          "country": {
            "type": "string",
            "description": "Optional 2-letter ISO country code (us, gb, in, de, au, ...). Defaults to the US site."
          }
        }
      }
    },
    {
      "name": "get_role_by_url",
      "description": "Fetch the full detail of an Indeed job posting from its URL (https://www.indeed.com/viewjob?jk=... on any country domain). Use when you have a posting link rather than a job_key.",
      "inputSchema": {
        "type": "object",
        "required": ["url"],
        "properties": {
          "url": {
            "type": "string",
            "description": "Full Indeed viewjob URL."
          }
        }
      }
    },
    {
      "name": "get_salary_info",
      "description": "Get just the salary and compensation fields for an Indeed job posting by job_key. Cheaper to reason over than the full posting when you only need pay data.",
      "inputSchema": {
        "type": "object",
        "required": ["job_key"],
        "properties": {
          "job_key": {
            "type": "string",
            "description": "The Indeed job key — the alphanumeric 'jk' value from a job-posting URL."
          },
          "country": {
            "type": "string",
            "description": "Optional 2-letter ISO country code (us, gb, in, de, au, ...). Defaults to the US site."
          }
        }
      }
    },
    {
      "name": "get_role_description",
      "description": "Get the clean full-text job description for an Indeed job posting by job_key, without the rest of the detail payload.",
      "inputSchema": {
        "type": "object",
        "required": ["job_key"],
        "properties": {
          "job_key": {
            "type": "string",
            "description": "The Indeed job key — the alphanumeric 'jk' value from a job-posting URL."
          },
          "country": {
            "type": "string",
            "description": "Optional 2-letter ISO country code (us, gb, in, de, au, ...). Defaults to the US site."
          }
        }
      }
    }
  ],
  "docs": "https://rolesapi.com/ai-agents/"
}
