MCP Server
Connect AI assistants and agent frameworks to Crowdee via the Model Context Protocol.
The Crowdee API includes a Model Context Protocol (MCP) server. It lets AI coding assistants, agent frameworks, and any MCP-compatible client interact with your projects, pipelines, datasets, and crowdsourcing jobs without writing REST calls manually.
Endpoint
POST https://api.crowdee.ai/v2/mcpThe server uses the Streamable HTTP transport (@hono/mcp). Connect with any MCP client that supports this transport.
Authentication
Authentication is identical to the REST API. Pass your API key on every request:
X-API-Key: crw_YOUR_API_KEYTo target a specific organisation, add:
X-Organization-Id: YOUR_ORG_IDSee Authentication for instructions on generating API keys.
Connecting a client
Most MCP clients accept a server configuration block. Example for a generic HTTP MCP client:
{
"mcpServers": {
"crowdee": {
"type": "http",
"url": "https://api.crowdee.ai/v2/mcp",
"headers": {
"X-API-Key": "crw_YOUR_API_KEY"
}
}
}
}Verify the connection
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'A successful response lists all 46 available tools.
Tools
The server exposes 46 tools grouped by domain:
Identity & organisation
| Tool | Description |
|---|---|
get_current_user | Returns the authenticated user and their active organisation. |
list_organizations | Lists all organisations the current user belongs to. |
Projects
| Tool | Description |
|---|---|
list_projects | Lists projects in the active organisation. Accepts limit / offset. |
get_project | Returns a single project by projectId. |
create_project | Creates a project. Requires name; accepts description and type (standard or research). |
update_project | Updates a project's name or description. |
list_project_files | Lists files attached to a project. Accepts limit / offset. |
Datasets
| Tool | Description |
|---|---|
list_datasets | Lists datasets in the active organisation. |
get_dataset | Returns a dataset with all its versions. |
create_dataset | Creates a dataset and an initial raw version. Requires name, internalId, and modality. |
delete_dataset | Deletes a dataset by datasetId. |
Verification pipelines
| Tool | Description |
|---|---|
list_pipeline_catalog | Returns all 14 built-in verification pipeline definitions including stage breakdowns and file/context requirements. |
run_verification_pipeline | Starts a verification run on a research project. Requires projectId, pipelineSlug, and fileIds; accepts contextId or inline contextData. Deducts credits from the organisation balance. |
list_verification_runs | Lists runs for a project. Accepts status filter and limit / offset. |
get_verification_run | Returns a run with full stage-by-stage breakdown and associated files. |
run_verification_pipeline performs the same credit deduction and context resolution as the REST endpoint POST /v2/projects/:id/verification-runs. The project must be of type research.
Data Platform
| Tool | Description |
|---|---|
list_data_platform_pipeline_catalog | Returns the unified Data Platform pipeline catalog: dataset cleaning, dedup, split, crowd-labeling, and Language Technology pipelines. |
run_data_platform_pipeline | Runs a pipeline from the catalog. Supports targetType: "project_file" (Language Technology pipelines, one run per file) and targetType: "dataset_version" for pipelines with executionMode: "cleaning" (produces a new derived dataset version) or "dedup" (analyses the version in place). Pipelines with executionMode: "split" or "crowd-label" are not supported via this tool — use the web app or REST API for those. |
list_data_platform_runs | Lists Data Platform pipeline runs for the active organisation. Accepts projectId, datasetVersionId, and status filters. |
get_data_platform_run | Returns a Data Platform pipeline run with its per-file, per-stage breakdown. |
run_data_platform_pipeline deducts credits the same way as the REST endpoint POST /v2/data-platform/pipelines/:slug/run for the target/execution-mode combinations it supports.
Language Technology pipelines
These tools predate the unified Data Platform catalog above and only cover the LT subset (transcription, OCR, NER, translation, language identification). Prefer list_data_platform_pipeline_catalog / run_data_platform_pipeline for new integrations.
| Tool | Description |
|---|---|
list_lt_pipeline_catalog | Returns all 7 built-in LT pipeline definitions (transcription, OCR, NER, translation, language identification). |
run_lt_pipeline | Runs an LT pipeline on one or more project files — one run per file. Accepts optional contextData (e.g. { "target_language": "German" } for translation). |
get_lt_run | Returns an LT run record including the structured result payload (transcript, entities, translation, etc.). |
AI Platform
| Tool | Description |
|---|---|
list_ai_platform_base_models | Returns the catalog of open-source base models available for finetuning, with size, license, and credit cost. |
create_finetune_dataset | Assembles a training dataset either from a crowd-labeled Data Platform dataset version (sourceType: "dataset_version", requires a prior crowd-label-classify run) or from a Crowd Platform job's accepted answers (sourceType: "crowd_job"). |
list_finetune_datasets | Lists finetune (training) datasets in the active organisation. |
create_finetune_run | Starts a finetuning run: finetunes a base model on a training dataset. Requires finetuneDatasetId and baseModelSlug. Deducts the base model's credit cost from the organisation balance. |
list_finetune_runs | Lists finetune runs, including the resulting model artifact once completed. Accepts a status filter. |
get_finetune_run | Returns a single finetune run by runId, including the resulting model artifact once completed. |
list_models | Lists finetuned model artifacts (name, base model, Ollama tag, status) in the active organisation. |
create_finetune_run charges credits the same way as the REST endpoint POST /v2/ai-platform/finetune-runs. Unlike other run-triggering tools, the resulting job isn't dispatched through the queue — the Python finetune-worker polls finetune_jobs directly.
Crowdsourcing
| Tool | Description |
|---|---|
list_crowd_jobs | Lists jobs for a project. Accepts status filter and limit / offset. |
get_crowd_job | Returns a job with live slot statistics (assigned, submitted, timed-out, answers by status). |
create_crowd_job | Creates a crowdsourcing job. Requires projectId, name, title, description, and surveyTemplateVersionId. |
list_crowd_answers | Lists answers for a job. Accepts status filter and limit / offset. |
accept_crowd_answer | Accepts a pending answer by answerId. |
reject_crowd_answer | Rejects a pending answer by answerId with an optional reason. |
Content Gathering
| Tool | Description |
|---|---|
create_gathering_job | Creates a content-gathering crowd job: the crowd searches platforms/the web for items matching criteria (keywords, platforms, languages, content types). |
list_gathered_items | Lists items a crowd has gathered for a content-gathering job. Accepts reviewStatus filter and limit / offset. |
update_gathered_item | Accepts, rejects, or marks a gathered item as a duplicate by itemId. |
gathered_items_to_dataset | Converts a gathering job's reviewed items (with attached files) into a new dataset. |
AI Output Evaluation
| Tool | Description |
|---|---|
create_ai_output_evaluation | Requests a crowd panel to rate the transparency (clarity, evidence, actionability, bias risk) of a completed verification or Language Technology run. Auto-generates the crowd task. |
create_external_ai_output_evaluation | Requests a crowd panel to rate the transparency of an AI output from your own (non-Crowdee) AI system — pass modelName, verdict, explanation directly. Stores the submission using the input-data tables, then dispatches the same crowd evaluation as create_ai_output_evaluation. |
get_ai_output_evaluation_results | Gets individual crowd ratings and the aggregate transparency score for an evaluation batch. |
Continuous Monitoring
| Tool | Description |
|---|---|
create_monitoring_schedule | Creates a recurring schedule that periodically samples a completed run and dispatches an AI output evaluation for it, tracking drift over time. |
list_monitoring_runs | Lists the tick history for a monitoring schedule, including drift flags and aggregate scores. |
Resources
Four MCP resources expose static catalog data:
| URI | Description |
|---|---|
crowdee://pipelines/catalog | All 14 verification pipeline definitions as JSON. |
crowdee://lt-pipelines/catalog | All 7 LT pipeline definitions as JSON (deprecated alias — see crowdee://data-platform/pipelines/catalog). |
crowdee://data-platform/pipelines/catalog | The unified Data Platform pipeline catalog (cleaning, dedup, split, crowd-labeling, and LT pipelines) as JSON. |
crowdee://ai-platform/base-models/catalog | The catalog of open-source base models available for AI Platform finetuning as JSON. |
Fetch a resource with the standard resources/read call:
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"resources/read","params":{"uri":"crowdee://pipelines/catalog"},"id":2}'Example: run a verification pipeline
# 1. Find a research project
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"list_projects","arguments":{}},"id":1}'
# 2. Start a verification run
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","method":"tools/call",
"params":{
"name":"run_verification_pipeline",
"arguments":{
"projectId":"<projectId>",
"pipelineSlug":"verify-image-metadata",
"fileIds":["<fileId>"]
}
},
"id":2
}'
# 3. Poll for completion
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_verification_run","arguments":{"runId":"<runId>"}},"id":3}'Example: finetune a model on a crowd job's answers
# 1. Assemble a training dataset from a crowd job's accepted answers
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","method":"tools/call",
"params":{
"name":"create_finetune_dataset",
"arguments":{
"sourceType":"crowd_job",
"jobId":"<jobId>"
}
},
"id":1
}'
# 2. Pick a base model, then start the finetuning run
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"list_ai_platform_base_models","arguments":{}},"id":2}'
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","method":"tools/call",
"params":{
"name":"create_finetune_run",
"arguments":{
"finetuneDatasetId":"<finetuneDatasetId>",
"baseModelSlug":"<baseModelSlug>"
}
},
"id":3
}'
# 3. Poll for completion — resultModelArtifact is set once status is "completed"
curl -X POST https://api.crowdee.ai/v2/mcp \
-H "X-API-Key: crw_..." -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_finetune_run","arguments":{"runId":"<runId>"}},"id":4}'How is this guide?