このMCPでできること
Analyzes race-course and runner activity data, builds personalized pacing plans, compares execution, manages course artifacts, and exports race-plan PDFs.
ツール
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'source': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'options': {'type': 'object', 'required': [], 'properties': {'algorithm': {'enum': ['GREEDY', 'SLOPE_BASED', 'PACE_BASED'], 'type': 'string', 'description': 'Omitted: PACE_BASED for timestamped input, SLOPE_BASED for untimed routes, matching browser upload defaults.'}, 'include_routes': {'type': 'boolean', 'default': True}, 'moving_threshold': {'type': 'number', 'default': 0.25, 'minimum': 0, 'description': 'Moving threshold in m/s.'}, 'auto_stop_threshold': {'type': 'number', 'default': 30, 'minimum': 0, 'description': 'Minimum detected stop seconds; zero disables detection.'}, 'auto_stop_merge_distance': {'type': 'number', 'default': 60, 'minimum': 0, 'description': 'Merge distance in metres; combined interval must remain below or at moving threshold.'}}, 'additionalProperties': False}, 'course_file': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file.'}, 'name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for GPX/XML/JSON/USRProf.'}, 'file_name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file.'}}, 'description': 'Inline GPX/FIT content or base64; use an artifact from agent-upload.html if the client cannot read bytes.', 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job', 'summary'], 'properties': {'job': {'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}, 'summary': {'anyOf': [{'type': 'object', 'required': ['point_count', 'distance_m', 'data_quality', 'warnings'], 'properties': {'stops': {'type': 'array', 'items': {'type': 'object', 'required': ['segment_index', 'name', 'elapsed_start_seconds', 'elapsed_seconds', 'moving_seconds', 'nonmoving_seconds', 'reference_start_m'], 'properties': {'name': {'type': ['string', 'null'], 'maxLength': 257}, 'segment_index': {'type': ['integer', 'null']}, 'moving_seconds': {'type': ['number', 'null']}, 'elapsed_seconds': {'type': ['number', 'null']}, 'nonmoving_seconds': {'type': ['number', 'null']}, 'reference_start_m': {'type': ['number', 'null'], 'description': 'Position on the reference axis (plan distance for comparisons).'}, 'elapsed_start_seconds': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'maxItems': 20}, 'gain_m': {'type': ['number', 'null']}, 'loss_m': {'type': ['number', 'null']}, 'cadence': {'type': 'object', 'required': ['unit', 'average', 'sample_count', 'weighted_support_seconds', 'weighting'], 'properties': {'unit': {'enum': ['spm'], 'type': 'string'}, 'average': {'type': ['number', 'null']}, 'weighting': {'enum': ['time_weighted_known_adjacent_samples', 'simple_known_samples'], 'type': 'string'}, 'sample_count': {'type': 'integer', 'minimum': 0}, 'weighted_support_seconds': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'distance_m': {'type': ['number', 'null']}, 'heart_rate': {'type': 'object', 'required': ['unit', 'average', 'sample_count', 'weighted_support_seconds', 'weighting'], 'properties': {'unit': {'enum': ['bpm'], 'type': 'string'}, 'average': {'type': ['number', 'null']}, 'weighting': {'enum': ['time_weighted_known_adjacent_samples', 'simple_known_samples'], 'type': 'string'}, 'sample_count': {'type': 'integer', 'minimum': 0}, 'weighted_support_seconds': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, 'point_count': {'type': 'integer'}, 'data_quality': {'type': 'object', 'additionalProperties': True}, 'moving_seconds': {'type': ['number', 'null']}, 'elapsed_seconds': {'type': ['number', 'null']}, 'effective_options': {'type': 'object', 'additionalProperties': True}, 'nonmoving_seconds': {'type': ['number', 'null']}, 'gap_seconds_per_km': {'type': ['number', 'null']}, 'omitted_stop_count': {'type': 'integer'}, 'detected_stop_count': {'type': 'integer'}, 'owned_elapsed_seconds': {'type': ['number', 'null']}, 'moving_pace_seconds_per_km': {'type': ['number', 'null']}, 'average_pace_seconds_per_km': {'type': ['number', 'null']}, 'detected_stop_elapsed_seconds': {'type': ['number', 'null']}, 'detected_stop_nonmoving_seconds': {'type': ['number', 'null']}}, 'additionalProperties': False}, {'type': 'null'}]}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['course_artifact_id', 'usrprof_artifact_id', 'target_elapsed_seconds'], 'properties': {'estimation_model': {'enum': ['load_response_evidence_v2', 'load_response_evidence_v3'], 'type': 'string', 'default': 'load_response_evidence_v2', 'description': 'Experimental v3 requires explicit user choice and must match the stored profile model.'}, 'course_artifact_id': {'type': 'string', 'description': 'Current v3 CRSProf or uploaded CRSProf source artifact; reference-plan geometry and saved constraints.'}, 'usrprof_artifact_id': {'type': 'string', 'description': 'Existing USRProf or uploaded USRProf source artifact; never implicitly replace or select evidence.'}, 'target_elapsed_seconds': {'type': 'number', 'description': 'Elapsed goal in seconds, including saved dwell.', 'exclusiveMinimum': 0}, 'allow_profile_preparation': {'type': 'boolean', 'default': False, 'description': 'Explicit user permission for existing in-memory profile preparation when needed. Does not authorize source replacement.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'course': {'type': 'object', 'required': [], 'properties': {'source': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'crsprof_artifact_id': {'type': 'string', 'description': 'Existing converted CRSProf artifact ID, following the same artifact convention as create_race_plan.'}}, 'additionalProperties': False}, 'filters': {'type': 'object', 'required': [], 'properties': {'after_date': {'type': 'string', 'description': 'ISO-8601 lower date/time bound; defaults to six UTC calendar months ago.'}, 'before_date': {'type': 'string', 'description': 'ISO-8601 upper date/time bound; defaults to now.'}, 'max_elapsed_s': {'type': 'number'}, 'min_elapsed_s': {'type': 'number'}, 'activity_types': {'type': 'array', 'items': {'enum': ['Run', 'TrailRun'], 'type': 'string'}}, 'max_distance_m': {'type': 'number'}, 'min_distance_m': {'type': 'number'}, 'estimation_model': {'enum': ['load_response_evidence_v2', 'load_response_evidence_v3'], 'type': 'string', 'description': 'Optional runner-profile model. Omit for recommended load_response_evidence_v2; load_response_evidence_v3 is explicit and experimental.'}, 'max_elevation_gain_m': {'type': 'number'}, 'min_elevation_gain_m': {'type': 'number'}}, 'additionalProperties': False}, 'decision': {'enum': ['build_anyway', 'broaden_filters', 'cancel'], 'type': 'string'}, 'course_file': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file.'}, 'name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for GPX/XML/JSON/USRProf.'}, 'file_name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file.'}}, 'description': 'Inline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX target course, using the same convention as create_race_plan.', 'additionalProperties': False}, 'resume_job_id': {'type': 'string', 'description': 'Existing waiting Strava profile-build job to resume.'}, 'target_distance_m': {'type': 'number', 'description': 'Target distance in metres when no course is supplied. Ask the user before choosing it.'}, 'existing_profile_strategy': {'enum': ['merge', 'replace'], 'type': 'string', 'description': 'Required whenever existing_usrprof_artifact_id is supplied; ask the user explicitly.'}, 'existing_usrprof_artifact_id': {'type': 'string', 'description': 'Existing USRProf artifact to merge with or replace.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['plan_artifact_id', 'execution_artifact_id'], 'properties': {'plan_artifact_id': {'type': 'string', 'description': 'Plan v3 CRSProf artifact ID.'}, 'execution_artifact_id': {'type': 'string', 'description': 'Analyzed execution v3 CRSProf artifact ID.'}, 'stop_association_distance_m': {'type': 'number', 'default': 60, 'minimum': 0, 'description': 'Planned-to-actual stop association only; no redetection.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job', 'summary'], 'properties': {'job': {'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}, 'summary': {'anyOf': [{'type': 'object', 'required': ['artifact_id', 'units', 'warnings', 'review', 'splits', 'stops', 'quality'], 'properties': {'stops': {'type': 'object', 'required': ['query', 'axis', 'offset', 'limit', 'total_matches', 'excluded_unknown_duration_count', 'next_offset', 'rows', 'warnings'], 'properties': {'axis': {'type': 'string', 'description': 'Source distance axis.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'maxItems': 100}, 'limit': {'type': 'integer'}, 'query': {'type': 'string', 'description': 'Requested inspection view.'}, 'offset': {'type': 'integer'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'next_offset': {'type': ['integer', 'null']}, 'total_matches': {'type': 'integer'}, 'terrain_flat_grade_threshold': {'type': 'number', 'minimum': 0}, 'terrain_classification_status': {'enum': ['complete', 'partial', 'unavailable', 'not_applicable'], 'type': 'string'}, 'excluded_unknown_duration_count': {'type': 'integer'}, 'unavailable_terrain_segment_count': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'units': {'type': 'object', 'additionalProperties': True}, 'review': {'anyOf': [{'type': 'object', 'additionalProperties': True}, {'type': 'null'}]}, 'splits': {'type': 'object', 'required': ['query', 'axis', 'offset', 'limit', 'total_matches', 'excluded_unknown_duration_count', 'next_offset', 'rows', 'warnings'], 'properties': {'axis': {'type': 'string', 'description': 'Source distance axis.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'maxItems': 100}, 'limit': {'type': 'integer'}, 'query': {'type': 'string', 'description': 'Requested inspection view.'}, 'offset': {'type': 'integer'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'next_offset': {'type': ['integer', 'null']}, 'total_matches': {'type': 'integer'}, 'terrain_flat_grade_threshold': {'type': 'number', 'minimum': 0}, 'terrain_classification_status': {'enum': ['complete', 'partial', 'unavailable', 'not_applicable'], 'type': 'string'}, 'excluded_unknown_duration_count': {'type': 'integer'}, 'unavailable_terrain_segment_count': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'quality': {'type': 'object', 'required': ['query', 'axis', 'offset', 'limit', 'total_matches', 'excluded_unknown_duration_count', 'next_offset', 'rows', 'warnings'], 'properties': {'axis': {'type': 'string', 'description': 'Source distance axis.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'maxItems': 100}, 'limit': {'type': 'integer'}, 'query': {'type': 'string', 'description': 'Requested inspection view.'}, 'offset': {'type': 'integer'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'next_offset': {'type': ['integer', 'null']}, 'total_matches': {'type': 'integer'}, 'terrain_flat_grade_threshold': {'type': 'number', 'minimum': 0}, 'terrain_classification_status': {'enum': ['complete', 'partial', 'unavailable', 'not_applicable'], 'type': 'string'}, 'excluded_unknown_duration_count': {'type': 'integer'}, 'unavailable_terrain_segment_count': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'artifact_id': {'type': 'string', 'description': 'Output artifact owning all local review row keys.'}}, 'additionalProperties': False}, {'type': 'null'}]}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['course_artifact_id', 'usrprof_artifact_id'], 'properties': {'split_percent': {'type': 'number', 'default': 5, 'maximum': 15, 'minimum': 0}, 'estimation_model': {'enum': ['load_response_evidence_v2', 'load_response_evidence_v3'], 'type': 'string', 'default': 'load_response_evidence_v2', 'description': 'Experimental v3 requires explicit user choice and must match the stored profile model.'}, 'course_artifact_id': {'type': 'string', 'description': 'Current v3 CRSProf or uploaded CRSProf source artifact; reference-plan geometry and saved constraints.'}, 'usrprof_artifact_id': {'type': 'string', 'description': 'Existing USRProf or uploaded USRProf source artifact; never implicitly replace or select evidence.'}, 'allow_profile_preparation': {'type': 'boolean', 'default': False, 'description': 'Explicit user permission for existing in-memory profile preparation when needed. Does not authorize source replacement.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'pdf': {'type': 'object', 'required': [], 'properties': {'enabled': {'type': 'boolean'}, 'options': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': False}, 'course': {'type': 'object', 'required': [], 'properties': {'source': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'segments': {'type': 'object', 'required': [], 'properties': {'mode': {'enum': ['generate', 'skip'], 'type': 'string'}, 'options': {'type': 'object', 'required': [], 'properties': {'algorithm': {'type': 'string', 'description': 'Segment partitioning algorithm, e.g. SLOPE_BASED.'}, 'flat_grade': {'type': 'number', 'description': 'Flat grade threshold percent.'}, 'instant_mode': {'type': 'boolean', 'description': 'Use instant segmentation mode.'}, 'flat_max_delta': {'type': 'number', 'description': 'Maximum elevation delta for flat segments, meters.'}, 'include_routes': {'type': 'boolean', 'description': 'Include route geometry in generated CRSProf.'}, 'minimum_distance': {'type': 'number', 'description': 'Minimum segment distance, meters.'}, 'slope_change_threshold': {'type': 'number', 'description': 'Slope-change threshold percent.'}, 'flexible_flat_max_delta': {'type': 'boolean', 'description': 'Allow flexible flat max-delta behavior.'}, 'flexible_minimum_distance': {'type': 'boolean', 'description': 'Allow flexible minimum-distance behavior.'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'import_options': {'type': 'object', 'required': [], 'properties': {'include_routes': {'type': 'boolean', 'description': 'Include routes when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning.'}, 'include_segments': {'type': 'boolean', 'description': 'Generate segments when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning.'}}, 'additionalProperties': False}, 'crsprof_artifact_id': {'type': 'string', 'description': 'Existing converted CRSProf artifact ID. For uploaded local GPX/FIT/CRSProf source_file artifacts, prefer course.source.kind=artifact so CourseProfiler can import/convert it.'}}, 'additionalProperties': False}, 'runner': {'type': 'object', 'required': [], 'properties': {'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'description': 'Runner evidence/profile sources. Use this for uploaded source_file artifact IDs returned by /api/artifact-uploads, including local .usrprof files, GPX/FIT/CRSProf evidence, or public URLs. Personalized plans require runner input; do not fabricate a runner profile.'}, 'import_options': {'type': 'object', 'additionalProperties': True}, 'usrprof_artifact_id': {'type': 'string', 'description': "Existing already-converted USRProf artifact ID. Do not use this for uploaded source_file artifacts from /api/artifact-uploads; pass those as runner.sources[{kind:'artifact', artifact_id:'art_...'}]."}}, 'additionalProperties': False}, 'estimate': {'type': 'object', 'required': [], 'properties': {'output': {'type': 'object', 'additionalProperties': True}, 'options': {'type': 'object', 'required': [], 'properties': {'strategy': {'enum': ['segment_evidence'], 'type': 'string', 'description': 'Only segment_evidence is accepted for runner-profile race plans.'}, 'flat_grade': {'type': 'number', 'description': 'Flat grade threshold percent used by GAP calculation.'}, 'gap_algorithm': {'type': 'string', 'description': 'Grade-adjusted pace algorithm name.'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'race_name': {'type': 'string', 'description': "Race/course name to resolve through the CourseProfiler catalog when no course source is provided, e.g. Val d'Aran PDA."}, 'course_file': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file.'}, 'name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for GPX/XML/JSON/USRProf.'}, 'file_name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file.'}}, 'description': 'Use this only when the MCP client provides an inline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX file object. Provide content for text GPX/XML/JSON/CRSProf, base64 for FIT/ZIP/binary, or a fetchable URL. Bare local filesystem paths and file:// URLs are rejected. Hosted clients with local files must use the REST POST /api/artifact-uploads flow outside MCP and pass the returned source_file artifact as course.source.kind=artifact.', 'additionalProperties': False}, 'runner_profile_file': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file.'}, 'name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for GPX/XML/JSON/USRProf.'}, 'file_name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file.'}}, 'description': "Use this only when the MCP client provides an inline/proxied USRProf runner profile file object. Provide content for text USRProf/JSON or base64 for binary. Personalized plans require runner input. Bare local filesystem paths and file:// URLs are rejected. Hosted clients with local .usrprof files should use POST /api/artifact-uploads and pass the returned source_file artifact via runner.sources[{kind:'artifact'}], not usrprof_artifact_id.", 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['crsprof_artifact_id', 'waypoints'], 'properties': {'waypoints': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['structured', 'table'], 'type': 'string', 'description': 'Use structured for reliable AI workflows.'}, 'text': {'type': 'string', 'description': 'Raw aid-station table text for best-effort table parsing.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'distance'], 'properties': {'kind': {'enum': ['start', 'finish', 'aid', 'checkpoint', 'water', 'crew', 'other'], 'type': 'string'}, 'name': {'type': 'string', 'description': 'Waypoint, aid station, checkpoint, start, or finish name.'}, 'cutoff': {'type': 'string', 'description': 'Elapsed cutoff time HH:MM, if known.'}, 'distance': {'type': 'number', 'description': 'Distance from start.'}, 'resources': {'type': 'array', 'items': {'enum': ['water', 'water_source', 'drinks', 'fruit', 'food', 'toilet', 'medic', 'chrono', 'crew', 'pacer', 'car', 'bus', 'ambulance', 'shuttle', 'telecabine', 'drop_bag', 'withdrawal', 'binoculars', 'hot_meal', 'tent', 'showers', 'changing_room', 'physiotherapy', 'rest_area', 'start_flag', 'finish_flag'], 'type': 'string'}, 'description': 'Canonical aid/resources available here. Unsupported/free-text strings are ignored with warnings; preserve non-canonical details in note/source text.'}, 'cutoff_kind': {'enum': ['in', 'out', 'leave'], 'type': 'string'}, 'distance_unit': {'enum': ['km', 'm', 'mi'], 'type': 'string'}}, 'additionalProperties': False}}, 'table_url': {'type': 'string', 'description': 'Public URL to an aid-station table for best-effort parsing; verify results. If official documents disagree or exact aid locations are not listed, ask the user to confirm rather than inventing missing aid stations.'}, 'source_ref': {'type': 'string', 'description': 'Optional source reference for parsed waypoint rows.'}, 'start_time': {'type': 'string', 'description': 'Optional race start time used when parsing absolute cutoffs.'}, 'distance_unit': {'enum': ['km', 'm', 'mi'], 'type': 'string'}}, 'additionalProperties': False}, 'crsprof_artifact_id': {'type': 'string', 'description': 'CRSProf artifact ID returned by import_course or get_artifact.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['crsprof_artifact_id'], 'properties': {'options': {'type': 'object', 'required': [], 'properties': {'title': {'type': 'string', 'description': 'Optional PDF title override.'}, 'format': {'enum': ['checkpoint_card'], 'type': 'string', 'description': 'Set to checkpoint_card for the standalone race-day checkpoint card; omit for the Hi-Fi course profile.'}, 'subtitle': {'type': 'string', 'description': 'Optional PDF subtitle override.'}, 'file_name': {'type': 'string', 'description': 'Optional output PDF file name.'}, 'unit_system': {'enum': ['metric', 'imperial'], 'type': 'string', 'description': 'Optional presentation unit system. Omit unless the user explicitly asks for metric or imperial.'}}, 'additionalProperties': False}, 'crsprof_artifact_id': {'type': 'string', 'description': 'Existing CRSProf artifact ID containing the course/profile/plan data to render.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['crsprof_artifact_id'], 'properties': {'options': {'type': 'object', 'required': [], 'properties': {'algorithm': {'type': 'string', 'description': 'Segment partitioning algorithm, e.g. SLOPE_BASED.'}, 'flat_grade': {'type': 'number', 'description': 'Flat grade threshold percent.'}, 'instant_mode': {'type': 'boolean', 'description': 'Use instant segmentation mode.'}, 'flat_max_delta': {'type': 'number', 'description': 'Maximum elevation delta for flat segments, meters.'}, 'include_routes': {'type': 'boolean', 'description': 'Include route geometry in generated CRSProf.'}, 'minimum_distance': {'type': 'number', 'description': 'Minimum segment distance, meters.'}, 'slope_change_threshold': {'type': 'number', 'description': 'Slope-change threshold percent.'}, 'flexible_flat_max_delta': {'type': 'boolean', 'description': 'Allow flexible flat max-delta behavior.'}, 'flexible_minimum_distance': {'type': 'boolean', 'description': 'Allow flexible minimum-distance behavior.'}}, 'additionalProperties': False}, 'crsprof_artifact_id': {'type': 'string', 'description': 'Enriched CRSProf artifact ID returned by enrich_course_waypoints.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['sources'], 'properties': {'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'description': 'Runner evidence/profile sources. Use uploaded source_file artifact IDs from POST /api/artifact-uploads with purpose runner_evidence for GPX/FIT/CRSProf activities or ZIP/TAR/TAR.GZ/TGZ/TAR.XZ/TXZ archives containing evidence files; use usrprof_source for .usrprof. Archives are expanded server-side, nested archives are skipped with warnings, exact duplicate contents are skipped, and unsupported/corrupt entries are reported per filename/path. Or use raw_file/url when the MCP client can proxy bytes. Local paths and file:// URLs are not accepted. Choose evidence according to profile_intent; do not blindly include all available files without user approval.'}, 'import_options': {'type': 'object', 'required': [], 'properties': {'model': {'enum': ['segment_evidence'], 'type': 'string', 'description': 'Only segment_evidence is supported for MCP-generated runner profiles.'}, 'file_name': {'type': 'string', 'description': 'Optional output .usrprof file name.'}}, 'additionalProperties': False}, 'profile_intent': {'type': 'object', 'required': [], 'properties': {'type': {'enum': ['target_race', 'target_distance', 'general_trail', 'insights_only'], 'type': 'string', 'description': 'Why this profile is being built. Ask the user before choosing evidence.'}, 'terrain': {'type': 'string', 'description': 'Terrain/technicality notes, e.g. technical mountain trail, runnable gravel, high altitude.'}, 'selection_notes': {'type': 'string', 'description': 'Evidence selection strategy approved by the user, e.g. recent mountain races only; exclude road 10Ks.'}, 'target_race_name': {'type': 'string', 'description': 'Target race/course name when building a race-specific profile.'}, 'target_distance_km': {'type': 'number', 'description': 'Approximate target distance in km, used by assistants to choose similar evidence.'}, 'target_elevation_gain_m': {'type': 'number', 'description': 'Approximate target elevation gain in meters, used by assistants to choose similar evidence.'}}, 'description': 'profile_intent is advisory context for the agent. The server does not filter or select evidence from it; submit only user-approved sources.', 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['artifact_id'], 'properties': {'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID, e.g. art_...'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['workflow', 'accepted_mcp_file_forms', 'local_file_guidance', 'upload_flow', 'purposes', 'usage_after_upload', 'warnings'], 'properties': {'purposes': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'workflow': {'enum': ['artifact_upload_requirements'], 'type': 'string'}, 'upload_flow': {'type': 'array', 'items': {'type': 'string'}}, 'browser_upload_url': {'type': 'string', 'description': 'Browser upload handoff for a GPX/FIT/CRSProf activity; the user copies the returned artifact ID into chat.'}, 'usage_after_upload': {'type': 'array', 'items': {'type': 'string'}}, 'local_file_guidance': {'type': 'string', 'description': 'Guidance for local file paths and hosted MCP clients.'}, 'accepted_mcp_file_forms': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'race_name': {'type': 'string', 'description': 'Optional race/course name the user wants to submit, e.g. Quebec Mega Trail 30K.'}, 'known_course_url': {'type': 'string', 'description': 'Optional candidate official direct GPX/FIT/CRSProf/ZIP URL if already found.'}, 'has_waypoint_data': {'type': 'boolean', 'description': 'Whether official waypoint/resource/cutoff data is already available.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['workflow'], 'properties': {'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'workflow': {'type': 'string', 'description': 'Always course_submission_requirements.'}, 'race_name': {'type': 'string', 'description': 'Race name supplied by the user, if any.'}, 'next_steps': {'type': 'array', 'items': {'type': 'string'}}, 'catalog_matches': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'required_inputs': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'CourseProfiler job ID, e.g. job_...'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'race_name': {'type': 'string', 'description': "Optional race name the user mentioned, e.g. Val d'Aran PDA."}, 'known_course_url': {'type': 'string', 'description': 'Optional candidate direct GPX/FIT/CRSProf URL if already found.'}, 'has_runner_profile': {'type': 'boolean', 'description': 'Whether the user already provided a USRProf runner profile or runner evidence.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['workflow'], 'properties': {'workflow': {'type': 'string', 'description': 'Always race_plan_requirements.'}, 'race_name': {'type': 'string', 'description': 'Race name supplied by the user, if any.'}, 'next_steps': {'type': 'array', 'items': {'type': 'string'}}, 'catalog_matches': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}}, 'required_inputs': {'type': 'object', 'additionalProperties': True}, 'course_acquisition_fallback': {'type': 'object', 'additionalProperties': True}}, 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['workflow', 'accepted_inputs', 'how_to_get_usrprof', 'evidence_guidance', 'upload_flow', 'warnings'], 'properties': {'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'workflow': {'enum': ['runner_profile_requirements'], 'type': 'string'}, 'recommended': {'type': 'object', 'additionalProperties': True}, 'upload_flow': {'type': 'array', 'items': {'type': 'string'}}, 'accepted_inputs': {'type': 'array', 'items': {'type': 'string'}}, 'profile_purpose': {'type': 'object', 'additionalProperties': True}, 'required_fields': {'type': 'array', 'items': {'type': 'string'}}, 'evidence_guidance': {'type': 'object', 'additionalProperties': True}, 'how_to_get_usrprof': {'type': 'array', 'items': {'type': 'string'}}, 'ask_before_generating': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'source': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'options': {'type': 'object', 'required': [], 'properties': {'include_routes': {'type': 'boolean', 'description': 'Include routes when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning.'}, 'include_segments': {'type': 'boolean', 'description': 'Generate segments when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning.'}}, 'additionalProperties': False}, 'course_file': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file.'}, 'name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for GPX/XML/JSON/USRProf.'}, 'file_name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file.'}}, 'description': 'Inline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX file object to import into CRSProf. Use content for text GPX/XML/JSON/CRSProf, base64 for FIT/ZIP/binary, or url only when the URL is fetchable by CourseProfiler. Bare local filesystem paths and file:// URLs are rejected; hosted clients that cannot proxy file bytes must use the REST POST /api/artifact-uploads flow outside MCP first, then pass the returned source_file artifact via source.kind=artifact.', 'additionalProperties': False}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['file', 'profile_type', 'upload_authorized'], 'properties': {'file': {'type': 'object', 'required': ['download_url', 'file_id'], 'properties': {'file_id': {'type': 'string', 'description': 'Host-provided file handle, not a CourseProfiler artifact ID.'}, 'file_name': {'type': 'string', 'description': 'Optional original .usrprof/.crsprof or .json file name.'}, 'mime_type': {'type': 'string', 'description': 'Optional host-provided MIME type.'}, 'download_url': {'type': 'string', 'description': 'Host-provided temporary download URL. Never invent or expose it.'}}, 'additionalProperties': False}, 'profile_type': {'enum': ['usrprof', 'crsprof'], 'type': 'string'}, 'upload_authorized': {'type': 'boolean', 'const': True, 'description': 'Set true only after explicit user authorization to upload the selected attachment to CourseProfiler.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'required': ['artifact_id', 'query'], 'properties': {'axis': {'enum': ['reference', 'execution'], 'type': 'string', 'description': 'Range only; required for comparison artifacts.'}, 'sort': {'enum': ['course_order', 'distance_desc', 'gain_desc', 'duration_desc'], 'type': 'string', 'default': 'course_order'}, 'to_m': {'type': 'number', 'minimum': 0, 'description': 'Range end, greater than from_m and within source coverage. Adjacent ranges own stationary boundary time once; final range includes terminal dwell.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1}, 'query': {'enum': ['segments', 'splits', 'climbs', 'stops', 'range', 'quality'], 'type': 'string'}, 'from_m': {'type': 'number', 'minimum': 0, 'description': 'Range start on the chosen source axis; required for range.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 2147483647, 'minimum': 0}, 'artifact_id': {'type': 'string', 'description': 'Private v3 CRSProf or uploaded CRSProf artifact ID.'}, 'duration_metric': {'enum': ['actual_elapsed', 'actual_nonmoving', 'planned_dwell'], 'type': 'string', 'default': 'actual_elapsed', 'description': 'Stops only. Unknown durations are explicitly excluded when filtering.'}, 'min_duration_seconds': {'type': 'number', 'minimum': 0, 'description': 'Stops only; inclusive duration threshold.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['query', 'axis', 'offset', 'limit', 'total_matches', 'excluded_unknown_duration_count', 'next_offset', 'rows', 'warnings'], 'properties': {'axis': {'type': 'string', 'description': 'Source distance axis.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'maxItems': 100}, 'limit': {'type': 'integer'}, 'query': {'type': 'string', 'description': 'Requested inspection view.'}, 'offset': {'type': 'integer'}, 'warnings': {'type': 'array', 'items': {'type': 'string'}}, 'next_offset': {'type': ['integer', 'null']}, 'total_matches': {'type': 'integer'}, 'terrain_flat_grade_threshold': {'type': 'number', 'minimum': 0}, 'terrain_classification_status': {'enum': ['complete', 'partial', 'unavailable', 'not_applicable'], 'type': 'string'}, 'excluded_unknown_duration_count': {'type': 'integer'}, 'unavailable_terrain_segment_count': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['usrprof_artifact_id', 'query'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Default 20 for paged queries; rejected for insights.'}, 'query': {'enum': ['summary', 'quality', 'recency', 'course_fit', 'coverage', 'insights'], 'type': 'string'}, 'offset': {'type': 'integer', 'maximum': 2147483647, 'minimum': 0, 'description': 'Default 0 for paged queries; rejected for insights.'}, 'course_artifact_id': {'type': 'string', 'description': 'Required for course_fit, optional for coverage, rejected elsewhere. Existing current v3 CRSProf reference geometry.'}, 'usrprof_artifact_id': {'type': 'string', 'description': 'Existing USRProf or uploaded USRProf source artifact; legacy .userprof needs explicit migration.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'additionalProperties': True}
入力スキーマ
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'description': 'Maximum matches to return, default 5.'}, 'query': {'type': 'string', 'description': "Race or course name to search, e.g. Val d'Aran PDA."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['query', 'matches'], 'properties': {'query': {'type': 'string', 'description': 'Search query.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'crsprof_url'], 'properties': {'id': {'type': 'string', 'description': 'Catalog race ID.'}, 'date': {'type': 'string', 'description': 'Race date, when available.'}, 'name': {'type': 'string', 'description': 'Catalog race display name.'}, 'score': {'type': 'integer', 'description': 'Catalog match score.'}, 'course': {'type': 'string', 'description': 'Course name, when available.'}, 'country': {'type': 'string', 'description': 'Race country, when available.'}, 'location': {'type': 'string', 'description': 'Race location, when available.'}, 'asset_path': {'type': 'string', 'description': 'Catalog CRSProf asset path.'}, 'confidence': {'enum': ['exact', 'strong', 'weak'], 'type': 'string', 'description': 'Catalog identity confidence. Weak matches require confirmation and must not be auto-used.'}, 'event_name': {'type': 'string', 'description': 'Event name, when available.'}, 'crsprof_url': {'type': 'string', 'description': 'Absolute CRSProf URL to use as course.source.url after event identity is confirmed.'}, 'matched_tokens': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Distinctive query tokens matched against catalog identity fields.'}, 'distance_meters': {'type': 'integer'}, 'missing_query_tokens': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Distinctive query tokens not found in catalog identity fields.'}, 'elevation_gain_meters': {'type': 'integer'}, 'requires_confirmation': {'type': 'boolean', 'description': 'True when event/course/location identity must be confirmed before using the CRSProf URL.'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': ['course'], 'properties': {'course': {'type': 'object', 'required': [], 'properties': {'source': {'type': 'object', 'required': ['kind'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles.'}, 'kind': {'enum': ['url', 'artifact', 'raw_json', 'raw_file'], 'type': 'string'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf.'}, 'payload': {'type': 'object', 'description': 'Inline raw JSON payload for CRSProf/USRProf-compatible inputs.', 'additionalProperties': True}, 'file_name': {'type': 'string', 'description': 'File name for inline raw_file content, e.g. course.gpx or runner.usrprof.'}, 'artifact_id': {'type': 'string', 'description': 'Existing CourseProfiler artifact ID, e.g. art_...'}, 'content_type': {'type': 'string', 'description': 'MIME type for inline raw_file content.'}}, 'additionalProperties': True}, 'segments': {'type': 'object', 'required': [], 'properties': {'mode': {'enum': ['generate', 'skip'], 'type': 'string'}, 'options': {'type': 'object', 'required': [], 'properties': {'algorithm': {'type': 'string', 'description': 'Segment partitioning algorithm, e.g. SLOPE_BASED.'}, 'flat_grade': {'type': 'number', 'description': 'Flat grade threshold percent.'}, 'instant_mode': {'type': 'boolean', 'description': 'Use instant segmentation mode.'}, 'flat_max_delta': {'type': 'number', 'description': 'Maximum elevation delta for flat segments, meters.'}, 'include_routes': {'type': 'boolean', 'description': 'Include route geometry in generated CRSProf.'}, 'minimum_distance': {'type': 'number', 'description': 'Minimum segment distance, meters.'}, 'slope_change_threshold': {'type': 'number', 'description': 'Slope-change threshold percent.'}, 'flexible_flat_max_delta': {'type': 'boolean', 'description': 'Allow flexible flat max-delta behavior.'}, 'flexible_minimum_distance': {'type': 'boolean', 'description': 'Allow flexible minimum-distance behavior.'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'waypoints': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['structured', 'table'], 'type': 'string', 'description': 'Use structured for reliable AI workflows.'}, 'text': {'type': 'string', 'description': 'Raw aid-station table text for best-effort table parsing.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'distance'], 'properties': {'kind': {'enum': ['start', 'finish', 'aid', 'checkpoint', 'water', 'crew', 'other'], 'type': 'string'}, 'name': {'type': 'string', 'description': 'Waypoint, aid station, checkpoint, start, or finish name.'}, 'cutoff': {'type': 'string', 'description': 'Elapsed cutoff time HH:MM, if known.'}, 'distance': {'type': 'number', 'description': 'Distance from start.'}, 'resources': {'type': 'array', 'items': {'enum': ['water', 'water_source', 'drinks', 'fruit', 'food', 'toilet', 'medic', 'chrono', 'crew', 'pacer', 'car', 'bus', 'ambulance', 'shuttle', 'telecabine', 'drop_bag', 'withdrawal', 'binoculars', 'hot_meal', 'tent', 'showers', 'changing_room', 'physiotherapy', 'rest_area', 'start_flag', 'finish_flag'], 'type': 'string'}, 'description': 'Canonical aid/resources available here. Unsupported/free-text strings are ignored with warnings; preserve non-canonical details in note/source text.'}, 'cutoff_kind': {'enum': ['in', 'out', 'leave'], 'type': 'string'}, 'distance_unit': {'enum': ['km', 'm', 'mi'], 'type': 'string'}}, 'additionalProperties': False}}, 'table_url': {'type': 'string', 'description': 'Public URL to an aid-station table for best-effort parsing; verify results. If official documents disagree or exact aid locations are not listed, ask the user to confirm rather than inventing missing aid stations.'}, 'source_ref': {'type': 'string', 'description': 'Optional source reference for parsed waypoint rows.'}, 'start_time': {'type': 'string', 'description': 'Optional race start time used when parsing absolute cutoffs.'}, 'distance_unit': {'enum': ['km', 'm', 'mi'], 'type': 'string'}}, 'additionalProperties': False}, 'import_options': {'type': 'object', 'required': [], 'properties': {'include_routes': {'type': 'boolean', 'description': 'Include routes when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning.'}, 'include_segments': {'type': 'boolean', 'description': 'Generate segments when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning.'}}, 'additionalProperties': False}, 'crsprof_artifact_id': {'type': 'string', 'description': 'Existing converted CRSProf artifact ID to submit after optional metadata/enrichment/segmentation.'}}, 'additionalProperties': False}, 'metadata': {'type': 'object', 'required': [], 'properties': {'event': {'type': 'object', 'properties': {'city': {'type': 'string', 'description': 'Event city, if listed separately.'}, 'date': {'type': 'string', 'description': 'Race date, preferably YYYY-MM-DD.'}, 'name': {'type': 'string', 'description': 'main event/race name, not the course/distance variant. Example: Speedgoat Mountain Races.'}, 'time': {'type': 'string', 'description': 'Race start time from official sources, preferably HH:MM local time. Include this when available; it is distinct from date.'}, 'year': {'type': 'integer', 'description': 'Race year.'}, 'links': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Official URL for this event link.'}, 'type': {'enum': ['info', 'registration', 'rules', 'schedule', 'course', 'start_line', 'parking', 'bib_pickup', 'wardrobe', 'cutoff', 'results', 'contact'], 'type': 'string', 'description': 'Event link kind. Use info for General Information, registration for Registration, rules for Rules/Regulations, schedule for Schedule/Program, course for route/course page, cutoff for cut-off information.'}, 'tooltip': {'type': 'string', 'description': 'Optional human-readable label, e.g. General Information, Registration, Rules, Schedule, Course, Parking.'}}, 'additionalProperties': False}, 'description': 'Structured event-level links displayed in the catalog UI. Always add official links when available instead of only listing them in source_urls. Use type values such as info, registration, rules, schedule, course, cutoff, parking, bib_pickup, wardrobe, results, contact.'}, 'notes': {'type': 'string', 'description': 'Official caveats or contextual notes retained as submission provenance, not course geometry.'}, 'types': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Catalog tags/types that apply from official context, e.g. race, trail, ultra, skyrunning. Add obvious tags where they apply; do not invent niche tags.'}, 'course': {'type': 'string', 'description': "specific course/distance/variant name only. Do not include distance/elevation stats such as 'Skyrace — 32 km, +2400 m'; put those in dedicated distance/elevation fields. Example: 50K."}, 'region': {'type': 'string', 'description': 'Event region/state/province, if listed separately.'}, 'series': {'type': 'string', 'description': 'Race series name, if applicable; prefer structured metadata.event.competitions for catalog submissions.'}, 'country': {'type': 'string', 'description': 'Event country.'}, 'website': {'type': 'string', 'description': 'Official race/course page URL.'}, 'distance': {'type': 'number', 'description': 'Official course distance.'}, 'location': {'type': 'string', 'description': 'Event location/city/region only. Do not include country here; use metadata.event.country for country.'}, 'organizer': {'type': 'object', 'description': 'Event organizer/promoter, preferably {name,url}. Do not use this for competition/series membership unless the series is also the organizer.', 'additionalProperties': True}, 'event_name': {'type': 'string', 'description': 'Alternative main event/race name field; do not include the course/distance variant unless official.'}, 'competitions': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': "Race series/circuit/championship memberships, separate from organizer. Example: [{name: 'Golden Trail World Series', url: 'https://www.goldentrailseries.com/'}] for GTWS races."}, 'distance_unit': {'enum': ['km', 'm', 'mi'], 'type': 'string'}, 'elevation_gain': {'type': 'number', 'description': 'Official elevation gain, meters unless elevation_gain_unit is provided.'}, 'elevation_gain_unit': {'enum': ['m', 'ft'], 'type': 'string'}, 'official_source_url': {'type': 'string', 'description': 'Primary official source URL used for event metadata.'}}, 'description': "Submission metadata is normalized into canonical CRSProf event fields. Supplemental fields (including year, official distance/elevation, notes, and unrecognized extensions) are retained as sourceMetadata in the submission record, not inserted into CRSProf geometry. A year alone does not invent a date; website/source URLs become event links. Important catalog metadata collected from official sources. Populate known fields such as name/event_name, course, year/date, time (race start time), location/city/region/country, distance, elevation_gain, organizer/series, website, official_source_url, types, competitions, and links. metadata.event.name is the main event name and metadata.event.course is the specific course name (for example name='Speedgoat Mountain Races', course='50K'); do not put distance/elevation stats in the course name (bad: 'Skyrace — 32 km, +2400 m'). metadata.event.location must not include country because metadata.event.country is separate. Add metadata.event.types tags when officially applicable (for example race/trail/ultra), and add metadata.event.competitions when the race belongs to a circuit/series/championship, e.g. Golden Trail World Series (GTWS). Do not invent unknown values; omit or leave null when not confirmed. For event-level links, use links with type/url/tooltip entries for General Information (info), Registration (registration), Rules/Regulations (rules), Schedule/Program (schedule), Course (course), Cut-off times (cutoff), Parking (parking), Bib pick-up (bib_pickup), Wardrobe/drop bag (wardrobe), Results (results), and Contact (contact).", 'additionalProperties': True}, 'source_urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Official URLs used for route geometry, race page, aid chart, regulations, or other metadata evidence. This is provenance only; event links shown in the catalog UI must also be added to metadata.event.links with type/url/tooltip.'}}, 'additionalProperties': False}, 'race_name': {'type': 'string', 'description': 'Race/course name to submit. Assistants should search the catalog and official web sources before calling submit_course, then populate metadata.event from official sources, including metadata.event.time and metadata.event.links when available.'}, 'submitter': {'type': 'object', 'required': [], 'properties': {'name': {'type': 'string', 'description': 'Optional submitter name.'}, 'email': {'type': 'string', 'description': 'Optional submitter email.'}}, 'additionalProperties': False}, 'course_file': {'type': 'object', 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file.'}, 'name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'base64': {'type': 'string', 'description': 'Base64-encoded file bytes for FIT or other binary files.'}, 'content': {'type': 'string', 'description': 'Inline text file content for GPX/XML/JSON/USRProf.'}, 'file_name': {'type': 'string', 'description': 'Original file name, e.g. course.gpx or runner.usrprof.'}, 'content_type': {'type': 'string', 'description': 'MIME type for the file.'}}, 'description': 'Inline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX file object to import. Use content for text GPX/XML/JSON/CRSProf or base64 for FIT/ZIP/binary. Bare local filesystem paths and file:// URLs are rejected.', 'additionalProperties': False}, 'original_file_name': {'type': 'string', 'description': 'Optional original route/profile file name for review metadata.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['job_id', 'status'], 'properties': {'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'job_id': {'type': 'string', 'description': 'CourseProfiler job ID to poll with get_job.'}, 'status': {'type': 'string', 'description': 'Job status, e.g. queued, running, succeeded, or failed.'}, 'progress': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 expiration timestamp.'}, 'started_at': {'type': 'string', 'description': 'ISO-8601 start timestamp, when available.'}, 'status_url': {'type': 'string', 'description': 'Relative API URL for polling this job.'}, 'completed_at': {'type': 'string', 'description': 'ISO-8601 completion timestamp, when available.'}, 'result_artifacts': {'type': 'array', 'items': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'description': 'Artifacts produced by the job, including role metadata.'}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'crsprof': {'type': 'object', 'additionalProperties': True}, 'crsprof_artifact_id': {'type': 'string', 'description': 'Existing CRSProf artifact ID to validate.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['valid'], 'properties': {'valid': {'type': 'boolean', 'description': 'True when the supplied profile validates.'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'artifact': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
入力スキーマ
{'type': 'object', 'required': [], 'properties': {'usrprof': {'type': 'object', 'additionalProperties': True}, 'usrprof_artifact_id': {'type': 'string', 'description': 'Existing USRProf artifact ID to validate.'}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'required': ['valid'], 'properties': {'valid': {'type': 'boolean', 'description': 'True when the supplied profile validates.'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'artifact': {'type': 'object', 'required': ['artifact_id', 'type'], 'properties': {'type': {'type': 'string', 'description': 'Artifact type, e.g. crsprof, usrprof, pdf, json, or source_file.'}, 'metadata': {'type': 'object', 'additionalProperties': True}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}, 'file_name': {'type': 'string', 'description': 'Suggested file name.'}, 'created_at': {'type': 'string', 'description': 'ISO-8601 creation timestamp.'}, 'expires_at': {'type': 'string', 'description': 'ISO-8601 artifact expiration timestamp.'}, 'size_bytes': {'type': 'integer', 'description': 'Artifact size in bytes.'}, 'artifact_id': {'type': 'string', 'description': 'CourseProfiler artifact ID.'}, 'content_type': {'type': 'string', 'description': 'MIME content type.'}, 'download_url': {'type': 'string', 'description': 'Artifact download URLs are private and short-lived; share them only with the user, verbatim in a code block, not a clickable link. Ask the user to copy the entire URL into their browser address bar. Do not rewrite the URL or add tracking parameters such as utm_source: changes invalidate the signature. If expired, call get_artifact for a fresh URL. This applies only to artifact download_url values, not authorization or upload links.'}, 'download_url_expires_at': {'type': 'string', 'description': 'ISO-8601 download URL expiration timestamp.'}}, 'additionalProperties': False}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'string', 'description': 'Machine-readable warning/error code.'}, 'message': {'type': 'string', 'description': 'Human-readable warning/error message.'}, 'severity': {'type': 'string', 'description': 'Problem severity, usually warning or error.'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
最近のツール変更
類似のMCPサーバー
Asterwise
Provides Vedic and Western astrology, numerology, tarot, dream-symbol, crystal, compatibility, and related esoteric calculations …
Vedic Astrology and Kundli MCP Server by RoxyAPI
Calculates and explains Vedic astrology charts, planetary positions, dashas, nakshatras, yogas, doshas, aspects, compatibility, a…
Sahadeva
Calculates and analyzes Vedic astrology charts, compatibility, dashas, transits, yogas, remedies, and evidence or readiness check…
tollbooth-sample
Provides current, forecast, and historical weather data alongside Lightning-based usage credits, pricing, coupons, balances, and …
Thesportsdb
Provides sports catalog and match data, including teams, players, leagues, schedules, standings, lineups, timelines, scores, and …
Rescuegroups
Searches adoptable animals, breeds, rescues, shelters, and organization details from RescueGroups.org.
Recipes
Provides meal and recipe discovery by ingredient, random selection, and detailed cooking instructions.
F1
Provides Formula 1 schedules, race results, driver profiles, and current championship standings.