Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OpenTrain

NPM · @OPENTRAIN-AI/MCP · SCANNED SEP 25

Hire human data labelers, RLHF annotators, and evaluators from your coding agent.

Available components

−1 this week 75 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 96 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
  • Repository check failed: the declared repository URL returned HTTP 404. See how to fix → View diagnostics → Fail
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 1 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability79
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4610 tokens (~112/item across 41 items; 41 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
  • Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 93% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "opentrain_claim_account" implies "send" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the OpenTrain MCP server?

OpenTrain runs locally as an npm package, launched with npx -y @opentrain-ai/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @opentrain-ai/mcp

# add to Claude Code
claude mcp add opentrain-ai-opentrain -- npx -y @opentrain-ai/mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "opentrain-ai-opentrain": {
      "command": "npx",
      "args": [
        "-y",
        "@opentrain-ai/mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "opentrain-ai-opentrain": {
      "command": "npx",
      "args": [
        "-y",
        "@opentrain-ai/mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add opentrain-ai-opentrain -- npx -y @opentrain-ai/mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "opentrain-ai-opentrain": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@opentrain-ai/mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add opentrain-ai-opentrain --command npx --arg -y --arg @opentrain-ai/mcp
# ~/.hermes/config.yaml
mcp_servers:
  opentrain-ai-opentrain:
    command: "npx"
    args: ["-y", "@opentrain-ai/mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "opentrain-ai-opentrain": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@opentrain-ai/mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add opentrain-ai-opentrain -t stdio -c npx -a -y @opentrain-ai/mcp
// mcp.json
{
  "mcpServers": {
    "opentrain-ai-opentrain": {
      "command": "npx",
      "args": [
        "-y",
        "@opentrain-ai/mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 23 Sept 26 −3
    • Stability: pass → 0.77 functional
  • 22 Sept 26 +1
    • Stability: 0.97 → pass security
  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −3
    • Stability: pass → 0.83 functional
  • 16 Sept 26 +1
    • Stability: 0.97 → pass security
  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 25 Sept 2026 · Analysed npm/@opentrain-ai/mcp@0.2.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 96 packages
Packages resolved 96
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 41 exposed · ~4,610 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
opentrain_auth_status ~29

Confirm that the configured OpenTrain personal API token can authenticate to the OpenTrain public API.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
authenticatedbooleanyes–
ownerOrganizationIdstring|nullyes–
scopesarrayyes–
tokenIdstringyes–
tokenLabelstring|nullyes–
userIdstringyes–

No examples provided.

opentrain_capabilities ~64

Discover which OpenTrain public API features are enabled for this token (job drafting, publishing, hiring, messaging writes, team) plus accepted job-draft fields and enums. Call this when a write tool returns a feature-disabled error or before planning a multi-step flow.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_claim_account ~131

Send the human owner a claim invite for the agent-registered OpenTrain account. Ask the human for their email first. OpenTrain emails them a verification link and code; once they accept, they own the account and can add billing. Follow up with opentrain_claim_status to check whether the claim completed.

NameTypeReqDescription
claimTokenstring–Claim token from opentrain_register_agent. Defaults to the token saved in the shared OpenTrain config.
emailstringyesThe human owner's email address. OpenTrain emails them a claim invite so they can take over the account and add billing.
NameTypeReqDescription
apiBaseUrlstringyes–
emailSentbooleanyes–
expiresInnumberyes–
intervalnumberyes–
userCodestringyes–
verificationUristringyes–

No examples provided.

opentrain_claim_status ~94

Check whether the human has completed the OpenTrain account claim started by opentrain_claim_account. When the claim is complete, the stored API token is upgraded to the claimed account automatically. Respect the poll interval from opentrain_claim_account; a slow_down status means you are polling too fast.

NameTypeReqDescription
claimTokenstring–Claim token to check. Defaults to the token saved in the shared OpenTrain config.
NameTypeReqDescription
apiBaseUrlstringyes–
scopesarray––
statusstringyes–

No examples provided.

opentrain_close_job ~82

Close (archive) a published OpenTrain job so it stops accepting proposals and leaves public listings. Existing contracts on the job are unaffected. Idempotent — closing an already-archived job reports alreadyClosed. Requires jobs:write scope and the job-publishing feature.

NameTypeReqDescription
jobIdstringyesPublished OpenTrain job id to close (archive).
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_create_credit_top_up ~132

Start a credit top-up on the OpenTrain account. No money moves from this call: it returns a Stripe Checkout checkoutUrl that a signed-in human must open and pay (the link expires in ~24h). Once paid, the balance updates automatically — confirm with opentrain_get_credit_top_up or opentrain_get_credits. Amount must be between $10 and $10,000. Requires payments:write scope, a claimed account, and the credits feature.

NameTypeReqDescription
amountUsdnumberyesTop-up amount in US dollars (min $10, max $10,000).
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_create_job_draft ~257

Create an unpublished OpenTrain job draft from a full job description/project brief or supported import payload. This is the primary MCP job-drafting workflow: OpenTrain parses the description into its structured job fields server-side. The response includes validation state; each missing field carries an "ask:" question to relay to the human, its type, allowed enum values, and the field name(s) to set via opentrain_update_job_draft_fields. Publish with opentrain_publish_job when the draft is publish ready.

NameTypeReqDescription
canonicalJobobject–Optional simple OpenTrain canonical job object. Uses format=opentrain_canonical.
externalIdstring–Optional source-system id for audit/idempotency.
idempotencyKeystring–Optional idempotency key. Reuse this key to avoid duplicate drafts on retry.
importPayloadobject–Optional supported import payload to send directly to the import-first API, such as schema.org JSON-LD or feed-derived JSON.
jobDescriptionstring–Full plain-text job description or project brief. This is the primary V1 workflow.
titlestring–Optional title to prepend to the job description for plain-text imports.
NameTypeReqDescription
actionstringyes–
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_create_milestone ~161

Create a new unfunded milestone on an existing OpenTrain contract. No money moves at creation — use opentrain_request_milestone_funding afterwards to start the human-confirmed funding step. Requires payments:write scope and a claimed account.

NameTypeReqDescription
amountUsdnumber–Optional milestone amount in USD. No money moves at creation.
contractIdstringyesContract id to add the milestone to.
descriptionstringyesDescription of the work to be delivered in this milestone.
dueDatestring–Optional due date (ISO 8601).
namestring–Optional short milestone name.
volumenumber–Optional unit volume (e.g. label count) for per-unit milestones.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_create_webhook ~157

Subscribe a URL to OpenTrain platform events (push instead of polling opentrain_poll_updates). Deliveries are signed with HMAC-SHA256 via the X-OpenTrain-Signature header. IMPORTANT: the signing secret is returned ONCE in this response — store it immediately; it cannot be retrieved later. Requires webhooks:manage scope, the webhooks feature, and the read scope for each subscribed event type. The subscription only receives events created after it.

NameTypeReqDescription
eventTypesarrayyesEvent types to subscribe to (e.g. ["proposal.received","message.received"]). Each requires the matching read scope on the token.
urlstringyesHTTPS endpoint URL that will receive signed event deliveries.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_delete_webhook ~73

Delete a webhook subscription and stop its deliveries. This is also how a DISABLED subscription is resumed: delete it and create a new one (which mints a new secret). Requires webhooks:manage scope and the webhooks feature.

NameTypeReqDescription
webhookIdstringyesWebhook subscription id to delete.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_end_contract ~112

End an OpenTrain contract. If the contract has no funded milestones it ends immediately. If funded escrow is at stake, the call instead returns a pending approval with an approvalUrl a signed-in human must confirm (no funds move until then) — watch opentrain_poll_updates for approval.confirmed or re-check with opentrain_get_approval. Requires payments:write scope, a claimed account, and the payments-write feature flag.

NameTypeReqDescription
contractIdstringyesOpenTrain contract id to end.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_approval ~75

Check the status of a pending human co-sign approval (milestone funding, milestone release, or contract end): pending, confirmed, declined, or expired, plus the execution result once confirmed. Requires payments:read scope.

NameTypeReqDescription
approvalIdstringyesApproval id returned by a fund/approve/end-contract request.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_contract ~63

Read one OpenTrain contract in detail: status, milestones with funding/approval state, freelancer identity, and the post-hire job DM conversationId for messaging. Requires payments:read scope.

NameTypeReqDescription
contractIdstringyesOpenTrain contract id to read.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_credit_top_up ~69

Check the status of a credit top-up: pending (awaiting human payment), completed (credits added), canceled, or expired. Requires payments:read scope and the credits feature.

NameTypeReqDescription
topUpIdstringyesCredit top-up id returned when the top-up was created.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_credits ~85

Read the OpenTrain credit balance for the account: available cents, reserved (escrow-held) cents, currency, and the 10 most recent ledger entries. Credits fund hires and milestone escrow without a card-present step; when the balance covers a money move, the existing human co-sign approval flow executes against credits. Requires payments:read scope and the credits feature.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_freelancer_profile ~109

Read a masked OpenTrain freelancer profile by user id or public profile slug for candidate evaluation: title, bio, skills, stats (earned, billed hours, job success), work/label experience, education, reviews, and languages. Requires proposals:read scope. Names are masked to first name + last initial and personal contact details (including personal email) are never returned.

NameTypeReqDescription
idOrSlugstringyesOpenTrain freelancer user id or public profile slug to read.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_proposal ~126

Read a full OpenTrain proposal/candidate evaluation by proposal id: status, bid, masked candidate, AI-interview score + summary, location/identity verification, Open Label assessment, and contract state. Pass includeInterview: true to also fetch the sanitized AI-interview transcript. Requires proposals:read scope and preserves OpenTrain proposal privacy restrictions.

NameTypeReqDescription
includeInterviewboolean–Set true to also fetch the sanitized AI-interview transcript (interviewer/candidate messages) for deeper candidate evaluation.
proposalIdstringyesOpenTrain proposal/job offer id to read.
NameTypeReqDescription
apiBaseUrlstringyes–
interview–––
resultobjectyes–

No examples provided.

opentrain_get_team ~49

Read the token owner's OpenTrain employer team: organization, members, and pending invites. Team members share jobs and the team inbox. Requires team:read scope and the public_api_team feature.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_get_webhook ~76

Read one webhook subscription: URL, event types, status (ACTIVE or DISABLED), and failure/disable details. The signing secret is never returned — if lost, delete and re-create the subscription. Requires webhooks:manage scope and the webhooks feature.

NameTypeReqDescription
webhookIdstringyesWebhook subscription id.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_hire_proposal ~269

Request hiring a freelancer from an OpenTrain proposal. This does NOT hire or move money: it records a pending approval and returns an approvalUrl a signed-in human must open and confirm in the OpenTrain app (expires in ~72h). The human confirms in the normal hiring interface and may adjust the milestone terms there. Watch opentrain_poll_updates for approval.confirmed or re-check with opentrain_get_approval — the confirmed result includes the new contractId. Requires proposals:write scope and the public_api_hiring feature. Agent accounts must be claimed by a human (403 with claimUrl), and the account needs a payment method or covering credit balance (409 with reason payment_method_required and a billingUrl a human must visit). A 409 with reason not_fit_confirmation_required means retry with confirmNotFitOverride=true if intentional. Re-requesting with identical terms returns the existing pending approval; changed terms supersede it.

NameTypeReqDescription
confirmNotFitOverrideboolean–Set true to confirm hiring a proposal previously marked "Not a fit" after a 409 not_fit_confirmation_required response.
milestoneobjectyesFirst escrow milestone for the new contract. Provide name and/or description.
proposalIdstringyesOpenTrain proposal/job offer id to hire from.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_invite_freelancer ~117

Invite a freelancer to a published OpenTrain job, creating a proposal they can respond to. Requires proposals:write scope and the public_api_hiring feature. Agent accounts must be claimed by a human first (403 with a claimUrl otherwise). Idempotent: re-inviting the same freelancer returns the existing proposal with alreadyInvited=true.

NameTypeReqDescription
freelancerIdstringyesOpenTrain freelancer user id to invite.
jobIdstringyesPublished OpenTrain job id to invite the freelancer to.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_invite_team_member ~121

Invite a human to the OpenTrain employer team by email, giving them shared access to jobs and the team inbox once they accept. Sends the same invitation email as the in-app flow. Requires team:write scope and the public_api_team feature. Agent accounts must be claimed by a human first (403 with a claimUrl otherwise). Idempotent-ish: inviting an existing member returns already_member; users with existing accounts are added directly (member_added).

NameTypeReqDescription
emailstringyesEmail address of the human to invite to the employer team.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_contracts ~107

List contracts (hired freelancers) on the OpenTrain account, optionally filtered by jobId and/or status (active|ended). Each contract includes milestones, the post-hire job DM conversationId, and the freelancer identity (unmasked post-hire). Requires payments:read scope.

NameTypeReqDescription
jobIdstring–Optional OpenTrain job id to list contracts for.
statusstring–Optional contract status filter: active or ended. Omit to list both.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_credit_ledger ~110

Page through the OpenTrain credit ledger: top-ups, escrow holds, hold releases, captures, refunds, and adjustments, newest first. Each entry links the related top-up, proposal, contract, or milestone ids. Pass the returned nextCursor to fetch older entries. Requires payments:read scope and the credits feature.

NameTypeReqDescription
cursorstring–Opaque pagination cursor from a previous nextCursor value.
limitinteger–Page size 1-100 (default 50).
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_jobs ~125

List the token owner's OpenTrain jobs with status, publish state, proposal counts, and live URLs. Requires jobs:read scope. Use this to find job ids for opentrain_list_proposals or opentrain_publish_job.

NameTypeReqDescription
cursorstring–Optional pagination cursor.
limitinteger–Maximum jobs to return. Defaults to 25.
statusstring–Optional job status filter: DRAFT, OPEN, ONGOING, COMPLETED, ARCHIVED, or PENDING_APPROVAL. Omit to list all non-deleted jobs.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_pending_payments ~48

Read pending OpenTrain payment and milestone state visible to the token owner. Requires payments:read scope and never releases funds, refunds charges, creates payouts, or changes payment settings.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_proposals ~147

List proposals/candidates for an OpenTrain job with statuses, bids, AI interview scores, and resume match scores — the primary tool for reviewing and ranking who to hire. Requires proposals:read scope. Use opentrain_get_proposal for one candidate in depth, then opentrain_hire_proposal to hire.

NameTypeReqDescription
cursorstring–Optional pagination cursor.
jobIdstringyesOpenTrain job id to list proposals for.
limitinteger–Maximum proposals to return. Defaults to 25.
statusstring–Optional proposal status filter such as UNREVIEWED, SHORTLISTED, HIRED, or DECLINED.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_tokens ~47

List the API tokens on the OpenTrain account (labels, scopes, expiry — never secrets). Requires tokens:read scope. Use opentrain_revoke_token to revoke one.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_list_webhooks ~55

List webhook subscriptions on the OpenTrain account, including status (ACTIVE or DISABLED after sustained delivery failure) and subscribed event types. Secrets are never included. Requires webhooks:manage scope and the webhooks feature.

Input schema present but exposes no named parameters.

NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_poll_updates ~139

Poll the OpenTrain delta feed of account events (new proposals, proposal status changes, new messages, contracts, milestone changes, pending payments) in one cheap call instead of re-reading every resource. Pass the nextCursor from the previous poll to receive only newer events; payloads carry IDs only — fetch details with the matching read tool. Event visibility follows the token scopes (proposals:read, messages:read, payments:read).

NameTypeReqDescription
cursorstring–Last event id already processed (nextCursor from the previous poll). Omit on the first poll.
limitinteger–Max events to return (default 50).
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_publish_job ~96

Publish an OpenTrain draft job live on the marketplace. Runs the same validation + moderation pipeline as the in-app publish flow and is subject to per-account daily publish limits. Requires jobs:write scope and the public_api_job_publishing feature (check the job-drafts capabilities endpoint or a 403 response). Returns the live job URL.

NameTypeReqDescription
jobIdstringyesExisting unpublished OpenTrain draft job id to publish live.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_read_messages ~149

Read authorized OpenTrain conversation summaries or messages. Omit conversationId to list summaries; provide conversationId to read messages. Requires messages:read scope and never creates conversations or sends messages.

NameTypeReqDescription
conversationIdstring–Optional conversation id. Omit it to list authorized conversation summaries instead of messages.
cursorstring–Optional pagination cursor.
directionstring–Message pagination direction when conversationId is provided.
filterstring–Conversation summary filter when conversationId is omitted.
limitinteger–Maximum records to return. Defaults to the OpenTrain API route default.
unreadOnlyboolean–When listing conversations, return only conversations with unread messages.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_register_agent ~149

Register a brand-new anonymous OpenTrain agent account. No prior credentials are needed. The new API token is stored in the shared OpenTrain config file (also used by the OpenTrain CLI), so every other opentrain tool works immediately afterwards. Next step: ask the human for their email and call opentrain_claim_account so they can claim the account and add billing.

NameTypeReqDescription
agentNamestring–Optional display name for the agent identity (e.g. "Claude Code").
forceboolean–Set true to overwrite existing saved OpenTrain credentials with a brand-new agent account.
organizationNamestring–Optional name for the employer organization created with the agent account.
NameTypeReqDescription
apiBaseUrlstringyes–
claimTokenExpiresAtstringyes–
credentialsPathstringyes–
nextStepsarrayyes–
registrationIdstringyes–
scopesarrayyes–

No examples provided.

opentrain_request_milestone_approval ~115

Request approval (payment release) of a funded milestone. This does NOT release money: it returns a pending approval with an approvalUrl that a signed-in human must open and confirm in the OpenTrain app (expires in ~72h). Watch opentrain_poll_updates for an approval.confirmed event, or re-check with opentrain_get_approval. Requires payments:write scope, a claimed account, and the payments-write feature flag.

NameTypeReqDescription
milestoneIdstringyesOpenTrain milestone id.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_request_milestone_funding ~111

Request escrow funding for a milestone. This does NOT move money: it returns a pending approval with an approvalUrl that a signed-in human must open and confirm in the OpenTrain app (expires in ~72h). Watch opentrain_poll_updates for an approval.confirmed event, or re-check with opentrain_get_approval. Requires payments:write scope, a claimed account, and the payments-write feature flag.

NameTypeReqDescription
milestoneIdstringyesOpenTrain milestone id.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_revoke_token ~65

Revoke an OpenTrain API token by id (irreversible — the token stops working immediately). Requires tokens:write scope. Revoking the token this server is using will break subsequent calls.

NameTypeReqDescription
tokenIdstringyesId of the API token to revoke.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_search_jobs ~115

Search the public OpenTrain job marketplace (all live jobs, not just the token owner's). Filter by free text, category, language, country, or pay type. Use opentrain_list_jobs for the token owner's own jobs instead.

NameTypeReqDescription
categorystring––
countrystring–ISO country code.
cursorstring––
languagestring––
limitinteger––
payTypestring––
qstring–Free-text search query.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_send_message ~126

Send a plain-text message into an existing OpenTrain conversation the token owner participates in. Runs the same membership, rate-limit, and content-policy checks as the in-app messaging flow. Requires messages:write scope and the public_api_messaging_writes feature. Agent accounts must be claimed by a human first (403 with a claimUrl otherwise). This tool never creates conversations; conversations come from proposals, invites, and hires.

NameTypeReqDescription
contentstringyesPlain-text message content to send.
conversationIdstringyesExisting OpenTrain conversation id the token owner participates in.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_start_proposal_conversation ~106

Start (or fetch) the pre-hire direct-message thread for a proposal so you can message the candidate before hiring. Idempotent get-or-create — safe to call repeatedly; returns the conversationId to use with opentrain_send_message. Employer side only. Requires messages:write scope, the public_api_messaging_writes feature, and a claimed account.

NameTypeReqDescription
proposalIdstringyesProposal id to open the pre-hire conversation thread for.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_update_job_draft_fields ~194

Fill in or correct fields on an existing unpublished OpenTrain draft. Use this after opentrain_create_job_draft when the draft is not publish ready: ask the human each missing field's "ask:" question, then patch the answers using the "set:" field names (do not ask the human to author raw JSON). Always start from opentrain_create_job_draft with a description; this tool never publishes directly — use opentrain_publish_job for that.

NameTypeReqDescription
jobIdstringyesExisting unpublished draft job id.
patchobjectyesDraft field patch keyed by OpenTrain field names. Use the "set:" field names from the missing-field details returned by opentrain_create_job_draft (e.g. {"experienceLevel":"INTERMEDIATE","paymentType…
NameTypeReqDescription
actionstringyes–
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

opentrain_update_published_job ~155

Update fields on a live published (OPEN) OpenTrain job. The revised listing is re-checked by moderation inline; if it is blocked, the job is automatically unpublished back to draft and the response explains what to fix. For unpublished drafts use opentrain_update_job_draft_fields instead. Requires jobs:write scope and the job-publishing feature.

NameTypeReqDescription
jobIdstringyesPublished (OPEN) OpenTrain job id to update.
patchobjectyesJob field patch keyed by OpenTrain field names, same shape as opentrain_update_job_draft_fields (e.g. {"jobTitle":"...","pricePerHour":14}). The revised listing is re-checked by moderation.
NameTypeReqDescription
apiBaseUrlstringyes–
resultobjectyes–

No examples provided.

Common questions

What is the OpenTrain MCP server?

OpenTrain is an MCP server listed in the public MCP registry as io.github.OpenTrain-AI/opentrain. Hire human data labelers, RLHF annotators, and evaluators from your coding agent. This page covers its npm package (@opentrain-ai/mcp).

Is the OpenTrain MCP server safe to use?

OpenTrain scores 75 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the OpenTrain MCP server expose?

OpenTrain exposes 41 tools: opentrain_register_agent, opentrain_claim_account, opentrain_claim_status, opentrain_auth_status, opentrain_create_job_draft, and 36 more. Their descriptions and schemas cost roughly 4,610 tokens of context every time the server is loaded.

Is the OpenTrain MCP server still maintained?

OpenTrain is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the OpenTrain MCP server under?

OpenTrain declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.