Koskamo

aitrainer.work MCP

An official MCP server provided by aitrainer.work that allows AI assistants to query open AI training job listings, platform pay statistics, and interview preparation resources without requiring an API key or sign-up.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

aitrainer.work MCP logo, by aitrainer.workVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by aitrainer.work
MCP endpoint (Streamable HTTP)
https://aitrainer.work/mcp
Vendor documentation

What you can do with it

  • Search open AI training roles by keyword, platform, field, country, or minimum hourly pay
  • Get detailed job information including requirements, hours, and accepted countries
  • Compare platforms by open roles, median pay, and payout speed
  • Access market pay stats and hiring numbers from the monthly Pay Index

Source and maintenance

Vendor evidenceRegistry 1.2.0

Protocol and capabilities

Server
aitrainer-work 1.2.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

aitrainer.work is a career platform for AI training and AI evaluation work (RLHF, rating model outputs, expert data for AI labs). Its job board tracks open roles from 20+ platforms such as Mercor, micro1, Outlier, Handshake AI, Turing and Mindrift, with pay, requirements and eligible countries. Use match_jobs_to_profile when the user describes their background, search_jobs for keyword searches, get_job for one role, get_interview_prep to prepare for a platform interview or run a mock interview, list_platforms to compare platforms, and get_pay_stats for market pay and hiring outcomes. Each result has a url to the role or platform page, where the full details and the application link are. The data is CC BY 4.0 (aitrainer.work).

Tools

6 advertised

match_jobs_to_profile — Match AI training jobs to a profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Rank open AI training and AI evaluation roles for one person by their profession, skills, languages, country and minimum hourly pay (USD). Use when the user describes their own background, e.g. "I am a nurse in Canada". Returns up to 10 roles, highest match first, each with the reasons it fits. Nothing about the person is stored.

match_jobs_to_profile input schema
{
  "type": "object",
  "required": [
    "role"
  ],
  "properties": {
    "role": {
      "type": "string",
      "description": "Profession or main background, e.g. \"registered nurse\", \"Python developer\", \"corporate lawyer\"."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "Matches to return, default 6."
    },
    "skills": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "Specific skills or specialties, e.g. [\"cardiology\", \"ICU\"]."
    },
    "country": {
      "type": "string",
      "description": "Country the person lives in (English name). Only roles open to it are returned."
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 6,
      "description": "Languages the person speaks fluently, in English, e.g. [\"English\", \"Spanish\"]."
    },
    "min_hourly_pay": {
      "type": "number",
      "description": "Lowest acceptable hourly pay in USD."
    }
  },
  "additionalProperties": false
}
match_jobs_to_profile output schema
{
  "type": "object",
  "required": [
    "total_matching",
    "returned",
    "browse_all",
    "jobs",
    "attribution"
  ],
  "properties": {
    "jobs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "platform",
          "platform_name",
          "slug",
          "pay",
          "url"
        ],
        "properties": {
          "pay": {
            "type": [
              "string",
              "null"
            ],
            "description": "Pay as the listing states it. Text ending in \"(estimate, not stated in the listing)\" is our estimate; \"(platform range, not this role's rate)\" is the range the platform posts for all its projects."
          },
          "url": {
            "type": "string",
            "description": "The role page on aitrainer.work, with the full listing and the application link."
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "platform": {
            "type": "string"
          },
          "match_reasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "platform_name": {
            "type": "string"
          }
        }
      }
    },
    "returned": {
      "type": "integer"
    },
    "browse_all": {
      "type": "string"
    },
    "attribution": {
      "type": "string"
    },
    "total_matching": {
      "type": "integer"
    }
  }
}
match_jobs_to_profile annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_jobs — Search AI training jobs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search open AI training / AI evaluation roles (RLHF, model rating, expert data work) across 20+ platforms by keyword and filters. Returns title, platform, pay, eligible countries and the aitrainer.work page for each role, most relevant first (newest first when there is no keyword). Every keyword must appear in the role, so use one to three words.

search_jobs input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1,
      "description": "Results to return, default 10."
    },
    "query": {
      "type": "string",
      "description": "Words to match in the title or description, e.g. \"physics\", \"Spanish\", \"lawyer\"."
    },
    "domain": {
      "enum": [
        "Generalist",
        "Languages",
        "STEM",
        "Software Engineering",
        "Business",
        "Healthcare",
        "Data Science",
        "Legal",
        "Writing",
        "Finance",
        "Voice Acting",
        "Design",
        "QA Testing",
        "Humanities",
        "Mathematics",
        "Accounting",
        "Psychology",
        "Creative",
        "IT & Systems"
      ],
      "type": "string",
      "description": "Field of work."
    },
    "country": {
      "type": "string",
      "description": "Only roles open to this country (English name, e.g. \"India\", \"United States\")."
    },
    "platform": {
      "type": "string",
      "description": "Platform key, e.g. mercor, micro1, outlier, handshake, turing, mindrift. See list_platforms."
    },
    "min_hourly_pay": {
      "type": "number",
      "description": "Minimum hourly pay in USD (hourly roles only)."
    }
  },
  "additionalProperties": false
}
search_jobs output schema
{
  "type": "object",
  "required": [
    "total_matching",
    "returned",
    "browse_all",
    "jobs",
    "attribution"
  ],
  "properties": {
    "jobs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "platform",
          "platform_name",
          "slug",
          "pay",
          "url"
        ],
        "properties": {
          "pay": {
            "type": [
              "string",
              "null"
            ],
            "description": "Pay as the listing states it. Text ending in \"(estimate, not stated in the listing)\" is our estimate; \"(platform range, not this role's rate)\" is the range the platform posts for all its projects."
          },
          "url": {
            "type": "string",
            "description": "The role page on aitrainer.work, with the full listing and the application link."
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "platform": {
            "type": "string"
          },
          "match_reasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "platform_name": {
            "type": "string"
          }
        }
      }
    },
    "returned": {
      "type": "integer"
    },
    "browse_all": {
      "type": "string"
    },
    "attribution": {
      "type": "string"
    },
    "total_matching": {
      "type": "integer"
    }
  }
}
search_jobs annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_job — Get one AI training job
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full details of one role: description, requirements, pay and its source, hours, interview, countries.

get_job input schema
{
  "type": "object",
  "required": [
    "platform",
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Job slug from search_jobs results."
    },
    "platform": {
      "type": "string",
      "description": "Platform key from search_jobs results."
    }
  },
  "additionalProperties": false
}
get_job output schema
{
  "type": "object",
  "required": [
    "title",
    "platform",
    "platform_name",
    "slug",
    "pay",
    "url",
    "open",
    "attribution"
  ],
  "properties": {
    "pay": {
      "type": [
        "string",
        "null"
      ],
      "description": "Pay as the listing states it. Text ending in \"(estimate, not stated in the listing)\" is our estimate; \"(platform range, not this role's rate)\" is the range the platform posts for all its projects."
    },
    "url": {
      "type": "string",
      "description": "The role page on aitrainer.work, with the full listing and the application link."
    },
    "open": {
      "type": "boolean"
    },
    "slug": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "platform": {
      "type": "string"
    },
    "attribution": {
      "type": "string"
    },
    "match_reasons": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "platform_name": {
      "type": "string"
    }
  }
}
get_job annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_interview_prep — Prepare for an AI training interview
Advertised by the server during the last successful anonymous check.
Advertised read-only

How a platform hires (steps, interview format, aitrainer.work guides) and practice questions with strong-answer outlines for a role. Use to explain what an interview involves or to run a mock interview. Practice questions are aitrainer.work's own, not a platform's real interview questions.

get_interview_prep input schema
{
  "type": "object",
  "properties": {
    "role": {
      "type": "string",
      "description": "Role or profession to practice for, e.g. \"data engineer\", \"nurse practitioner\"."
    },
    "platform": {
      "type": "string",
      "description": "Platform name or key, e.g. \"micro1\", \"Mercor\", \"Alignerr\"."
    }
  },
  "additionalProperties": false
}
get_interview_prep output schema
{
  "type": "object",
  "required": [
    "platform",
    "role",
    "how_to_use"
  ],
  "properties": {
    "role": {
      "type": [
        "object",
        "null"
      ]
    },
    "platform": {
      "type": [
        "object",
        "null"
      ]
    },
    "how_to_use": {
      "type": "string"
    }
  }
}
get_interview_prep annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_platforms — List AI training platforms
Advertised by the server during the last successful anonymous check.
Advertised read-only

Platforms we track, with open role counts, median hourly pay, payout speed and availability.

list_platforms input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_platforms output schema
{
  "type": "object",
  "required": [
    "platforms",
    "attribution"
  ],
  "properties": {
    "as_of": {
      "type": [
        "string",
        "null"
      ]
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "platform",
          "name",
          "url"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "platform": {
            "type": "string"
          }
        }
      }
    },
    "attribution": {
      "type": "string"
    }
  }
}
list_platforms annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_pay_stats — AI training pay and hiring stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Market pay for AI training work (median and quartiles of hourly rates stated in listings, by platform) and hiring outcomes from the latest monthly AI Training Pay Index.

get_pay_stats input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_pay_stats output schema
{
  "type": "object",
  "required": [
    "market",
    "methodology",
    "attribution"
  ],
  "properties": {
    "as_of": {
      "type": [
        "string",
        "null"
      ]
    },
    "market": {
      "type": "object"
    },
    "pay_index": {
      "type": [
        "object",
        "null"
      ]
    },
    "attribution": {
      "type": "string"
    },
    "methodology": {
      "type": "string"
    }
  }
}
get_pay_stats annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

job-cards — AI training job cards

Advertised by the server during the last successful anonymous check.

Cards for open AI training roles: platform, title, pay and a link to the role page.

job-cards URI
ui://widget/job-cards-v3.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
427 ms
95th percentile latency
427 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 427 ms · metadata changed · 6 tool(s), 1 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http aitrainer-work-mcp https://aitrainer.work/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add aitrainer-work-mcp --url https://aitrainer.work/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable aitrainer-work-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "aitrainer-work-mcp": {
      "url": "https://aitrainer.work/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "aitrainer-work-mcp": {
      "type": "streamableHttp",
      "url": "https://aitrainer.work/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start aitrainer-work-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "aitrainer-work-mcp": {
      "type": "http",
      "url": "https://aitrainer.work/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http aitrainer-work-mcp https://aitrainer.work/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "aitrainer-work-mcp": {
      "url": "https://aitrainer.work/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "aitrainer-work-mcp": {
      "serverUrl": "https://aitrainer.work/mcp"
    }
  }
}

Let your agent find its tools

Find servers like aitrainer.work MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run aitrainer.work MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing