Quickstart
Use the hosted Streamable HTTP endpoint with a personal CheckMotion API key. The server validates your identity and exposes the complete tool set automatically.
1. Create a key
2. Add the server
https://api-v2.checkmotion.app/mcp in an MCP client that supports authenticated Streamable HTTP.3. Start a chat
MCP URL
https://api-v2.checkmotion.app/mcp
Authorization
Bearer cm_live_YOUR_API_KEYYour key is shown once
cm_live_… value when it is created. Store it in the client's secret or bearer-token field—not in the server URL, prompts, screenshots, or source control.Connect ChatGPT
ChatGPT connects to the hosted HTTPS endpoint. Availability and labels for custom MCP connections can depend on the account, workspace, and current ChatGPT interface.
- 01
Open the app or connector setup
Enable developer mode if your account or workspace requires it, then open the area for creating a custom app or MCP connection. - 02
Enter the hosted server URL
Usehttps://api-v2.checkmotion.app/mcp. - 03
Configure one authentication method
If the UI provides a bearer-token field, enter onlycm_live_…. If it provides request headers, setAuthorizationtoBearer cm_live_…. Do not configure both. - 04
Scan and test the tools
Confirm all 15 tools, enable the connection in a new chat, and begin with a focused prompt such as “Detect the sport and movement in this video.”
ChatGPT interfaces evolve
Connect Codex
Codex can connect to the hosted CheckMotion service while keeping the API key out of its configuration file.
export CHECKMOTION_API_KEY='cm_live_YOUR_API_KEY'[mcp_servers.checkmotion]
url = "https://api-v2.checkmotion.app/mcp"
bearer_token_env_var = "CHECKMOTION_API_KEY"On macOS, apps opened from Finder may not inherit your shell environment. Set the variable with launchctl setenv CHECKMOTION_API_KEY 'cm_live_…', then fully quit and reopen Codex.
Tool catalog
Every authenticated API key sees the same 15 focused tools. The assistant composes them based on the requested analysis.
checkmotion_healthServiceCheck MCP and upstream API healthNonecheckmotion_prepare_video_uploadVideoReserve a signed local-video uploadFile name, type, size, optional SHA-256checkmotion_create_keypoint_jobPoseCreate frame-level pose extractionVideo sourcecheckmotion_get_keypoint_jobPoseRead pose-job status and resultKeypoint job ID, result modecheckmotion_get_job_videoVideoCreate owned video-access metadataKeypoint job IDcheckmotion_delete_keypoint_jobPoseDelete pose job and assetsJob ID, delete confirmationcheckmotion_create_sport_detection_jobAnalysisDetect sport and movementVideo source, languagecheckmotion_create_detailed_metrics_jobAnalysisGenerate movement-specific metricsKeypoint job, activitycheckmotion_create_performance_rating_jobAnalysisRate the recorded performanceKeypoint job, activity, optional metricscheckmotion_create_report_jobAnalysisCreate a coaching reportOne or more component job IDscheckmotion_get_analysis_jobAnalysisRead primitive-analysis status and resultAnalysis job ID, result modecheckmotion_delete_analysis_jobAnalysisDelete a primitive-analysis jobJob ID, delete confirmationcheckmotion_create_full_analysis_jobPipelineStart the complete analysis workflowUploaded video, languagecheckmotion_get_full_analysis_jobPipelineRead full-analysis status and resultFull-analysis job ID, result modecheckmotion_analysis_chatCoachingAsk a bounded, report-grounded questionAnalysis context, message
Deletion is explicit
delete.{
"jobId": "11111111-1111-4111-8111-111111111111",
"confirmation": "delete"
}Video inputs
Remote HTTPS videos can be passed directly to keypoint and sport-detection tools. Local files use a short-lived upload slot because MCP JSON is not designed for large binary bodies.
Remote HTTPS video
{
"source": {
"videoUrl": "https://example.com/recording.mp4"
},
"language": "en"
}Local file: reserve, upload, consume
- 1
Reserve an upload
Callcheckmotion_prepare_video_uploadwith the file metadata. - 2
Upload the exact bytes
PUT the file to the returneduploadUrlusing every returned required header. - 3
Use the upload ID
Pass the returneduploadIdto the video-accepting tool. A successful analysis consumes it once.
{
"fileName": "rep.mp4",
"contentType": "video/mp4",
"contentLength": 12345678
}curl --request PUT "$UPLOAD_URL" \
--header 'Content-Type: video/mp4' \
--header "Content-Length: $(wc -c < rep.mp4 | tr -d ' ')" \
--data-binary @rep.mp4{
"source": {
"uploadId": "up_0123456789abcdef0123456789abcdef"
},
"language": "en"
}Upload guarantees
Analysis workflows
Choose a single primitive when you need one artifact, compose the stages for more control, or run the full pipeline for a complete coaching result.
Keypoints only
Composed analysis
Full pipeline
- 1
Capture evidence
Complete keypoints and, when needed, sport detection from the same video. - 2
Generate metrics
Pass the owned keypoint job and resolved activity into detailed metrics. - 3
Rate performance
Use the keypoints, activity, and optional metrics job to calculate the performance rating. - 4
Create the report
Provide any valid non-empty combination of owned component jobs, then use analysis chat for bounded follow-up questions.
Safe retries with your own job ID
JOB_ID_CONFLICT.Results & resources
Large pose and analysis payloads can stay outside the conversation context while remaining available through protected MCP resources.
summary · default
inline
resource
Job lifecycle
PENDING
PROCESSING
COMPLETED
FAILED
checkmotion://keypoint-jobs/{jobId}/resultComplete keypoint resultcheckmotion://keypoint-jobs/{jobId}/frames/{cursor}/{limit}Keypoint frames, paged up to 250 at a timecheckmotion://keypoint-jobs/{jobId}/videoShort-lived owned video-access metadatacheckmotion://analysis-jobs/{jobId}/resultPrimitive analysis resultcheckmotion://full-analyses/{jobId}/resultComplete full-analysis result
Authentication & security
The MCP service is an authenticated adapter and ownership boundary. It does not operate a shared credential pool or duplicate the analysis engine.
Per-user authentication
Tenant isolation
No plaintext key storage
Short-lived access
Key validation does not consume analysis quota. Normal API operations retain their usual accounting. Deleted, invalid, and exhausted keys are rejected; revoking a key also stops its signed video-access links from reaching the API.
Errors & recovery
Connection failures use HTTP status codes before MCP dispatch. Tool failures return a stable machine-readable category and retry guidance.
401 Unauthorized
403 Forbidden
429 Too Many Requests
503 Unavailable
{
"error": "Human-readable message",
"error_type": "STABLE_ERROR_CODE",
"error_details": null,
"retryable": false
}JOB_NOT_FOUND- Missing, unowned, or wrong-type job
JOB_ID_CONFLICT- Job ID reused for a different request
INVALID_JOB_ID- ID is not a canonical lowercase UUID
UPLOAD_NOT_FOUND- Upload is missing, consumed, or belongs to another key
UPLOAD_EXPIRED- The signed upload slot has expired
UPLOAD_LIMIT_EXCEEDED- Per-key staging limits were reached
UPLOAD_DIGEST_MISMATCH- Uploaded bytes do not match the reserved digest
UPSTREAM_TIMEOUT- The CheckMotion API exceeded its timeout
UPSTREAM_UNAVAILABLE- The CheckMotion API could not be reached
Troubleshooting
Most connection problems come from authentication configuration, expired uploads, upstream availability, or stale client tool discovery.
Authentication failed
cm_live_. Use either the bearer-token field or the Authorization header—not both—and confirm the key is active with remaining calls.Client cannot reach the server
https://api-v2.checkmotion.app/mcp, then refresh or rescan the connection.