Parallel Task MCP
An MCP server for deep research or task groups
Block For Production
trustsnap_9e8293dba0e3c05d.- Utility Coverage
- Transport Compliance
- Tool Surface Design
- Make tools/list succeed unauthenticated when possible, or document the auth flow in the server card.
- Allow initialize to succeed consistently, or return a deterministic auth-required response with clear metadata.
- Compare initialize responses between the latest two runs and restore the previous stable behavior.
- Search crawler activity
- profile / compare API / ledger / trust summary inspection
Dispute this assessment
If any published claim about this server -- its score, a risk flag, a capability classification, or its taxonomy -- is factually wrong, tell us what evidence shows and we will review it. This does not require claiming or verifying ownership of the server first.
Verify responds to disputes within 5 business days and resolves them within 15.
Dispute history
No disputes filed for this server.
Risk
Security posture
Tool capability & risk inventory
No tool inventory available from the latest validation run.
Write-action governance
Status detail: No write-action governance evidence is available yet.
| Tool | Risk | Flags | Safeguards |
|---|---|---|---|
| No high-risk tools were detected on the latest run. | |||
Action-controls diff
Need at least two validation runs before diffing action controls.
Critical alerts
Compatibility
Client compatibility verdicts
Client compatibility only means the server shape can work with a client. Production trust decision and write-action publishing are evaluated separately so a client-compatible server can still be blocked for production.
Evidence provenance
initialize• Auth Requiredtools_list• Errortransport_compliance_probe• Errorstep_up_auth_probe• OKconnector_replay_probe• Missing — Frozen tool snapshots must survive refresh.request_association_probe• Missing — Roots, sampling, and elicitation should stay request-scoped.
Evidence provenance
initialize• Auth Requiredtools_list• Errortransport_compliance_probe• Error
Evidence provenance
action_safety_probe• Not_Assessed
Evidence provenance
tool_snapshot_probe• Missingconnector_replay_probe• Missing
Client compatibility gate details
Remediation checklist
tools/list must succeed.Transport compliance should be in good shape.The tool surface is not limited to search/fetch-style read tools.Not yet safe for company-knowledge use: requires a search/fetch-only surface with no write actions present.Not yet safe for the Messages API remote MCP path: requires OAuth, a compatible connector profile, and no pending connector-refresh risk.Transport compliance issues should be resolved before wider client rollout.
Remediation checklist
tools/list must succeed.Transport behavior should match Claude-compatible HTTP expectations.A useful Claude integration needs at least one exposed tool.The tool surface is not limited to search/fetch-style read tools.Not yet safe for company-knowledge use: requires a search/fetch-only surface with no write actions present.Not yet safe for the Messages API remote MCP path: requires OAuth, a compatible connector profile, and no pending connector-refresh risk.
Remediation checklist
Add confirmation or dry-run semantics for risky actions.Production readiness is blocked by an active alert: Latest validation is failing.Production readiness is blocked by an active alert: Initialize flow regressed.Production readiness is blocked by an active alert: tools/list regressed.
Verdict traces
server_failing• critical • Latest validation is failinginitialize_regressed• critical • Initialize flow regressedtools_list_regressed• critical • tools/list regressedauth_mode_changed• high • Auth mode changed
Client verdict trace table
| Verdict | Status | Checks | Winning source | Conflicts |
|---|---|---|---|---|
openai_connectors |
Partially client-compatible | initialize, tools_list, transport_compliance_probe, step_up_auth_probe, connector_replay_probe, request_association_probe | live_validation | none |
claude_desktop |
Not client-compatible | initialize, tools_list, transport_compliance_probe | live_validation | none |
unsafe_for_write_actions |
Publishing blocked | action_safety_probe | live_validation | none |
snapshot_churn_risk |
Low | tool_snapshot_probe, connector_replay_probe | history | none |
Publishability policy profiles
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: Yes
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
- Search Fetch Only: No
- Write Actions Present: No
- Oauth Configured: Yes
- Admin Refresh Required: No
- Safe For Company Knowledge: No
- Safe For Messages Api Remote Mcp: No
Compatibility fixtures
- remote_http_endpoint: Passes
- oauth_discovery: Passes
- frozen_tool_snapshot_refresh: Passes
- request_association: Passes
- remote_transport: Passes
- tool_discovery: Likely to fail
- auth_connect: Passes
- safe_write_review: Degraded
Recommended for
No recommendation profile is available yet.
Evidence
Current trust snapshot
trustsnap_9e8293dba0e3c05dCanonical machine links
Evidence confidence
Latest validation evidence
Failures
initializeClient error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401openid_configurationClient error '404 Not Found' for url 'https://platform.parallel.ai/.well-known/openid-configuration' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404server_cardClient error '404 Not Found' for url 'https://task-mcp.parallel.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404tools_listClient error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401transport_compliance_probeIssues: missing protocol header, bad protocol not rejected (bad protocol=401).
Checks
| Check | Status | Latency | Evidence |
|---|---|---|---|
action_safety_probe |
Not_Assessed | n/a | No write-action risk evidence recorded. |
advanced_capabilities_probe |
Warning | n/a | Only 3 capability signal(s): prompts, resource links, resources. |
connector_publishability_probe |
Error | n/a | Publishability blockers: tools list, protocol version, transport compliance, action safety, +2 more. |
connector_replay_probe |
Missing | n/a | No connector replay evidence recorded. |
determinism_probe |
Missing | n/a | tools list unavailable |
initialize |
Auth Required | 27.3 ms | Client error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401 |
interactive_flow_probe |
OK | n/a | Check completed |
oauth_authorization_server |
OK | 71.5 ms | authorization_endpoint, code_challenge_methods_supported, device_authorization_endpoint, grant_types_supported |
oauth_protected_resource |
OK | 78.7 ms | 1 authorization server(s) |
official_registry_probe |
OK | n/a | Check completed |
openid_configuration |
Error | 67.8 ms | Client error '404 Not Found' for url 'https://platform.parallel.ai/.well-known/openid-configuration' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
probe_noise_resilience |
OK | 29.0 ms | Fetched https://task-mcp.parallel.ai/robots.txt |
prompt_get |
Missing | n/a | not advertised |
prompts_list |
OK | 84.8 ms | 0 prompt(s) exposed |
protocol_version_probe |
Missing | n/a | No protocol version was advertised. |
provenance_divergence_probe |
Not_Assessed | n/a | Check completed |
request_association_probe |
Missing | n/a | No request-association capabilities were advertised. |
resource_read |
OK | 29.4 ms | 1 resource content item(s) returned |
resources_list |
OK | 28.0 ms | 2 resource item(s) exposed |
schema_divergence_probe |
Missing | n/a | no server card tools |
server_card |
Error | 102.9 ms | Client error '404 Not Found' for url 'https://task-mcp.parallel.ai/.well-known/mcp/server-card.json' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404 |
session_resume_probe |
Missing | n/a | no session id |
step_up_auth_probe |
OK | n/a | Scopes=key:read; step-up challenge hints present. |
tool_snapshot_probe |
Missing | n/a | no tools |
tools_list |
Error | 76.3 ms | Client error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp' For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401 |
transport_compliance_probe |
Error | 28.4 ms | Issues: missing protocol header, bad protocol not rejected (bad protocol=401). |
utility_coverage_probe |
Missing | 28.2 ms | No completions evidence; no pagination evidence; tasks missing. |
Raw evidence view
Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": true,
"confirmation_signals": [],
"reason": "empty_observation_set",
"safeguard_count": 0,
"summary": {
"annotation_conflict_tools": 0,
"bulk_access_tools": 0,
"capability_distribution": {},
"declared_non_read_only_tools": 0,
"destructive_tools": 0,
"egress_tools": 0,
"exec_tools": 0,
"high_risk_tools": 0,
"risk_distribution": {
"critical": 0,
"high": 0,
"low": 0,
"medium": 0
},
"secret_tools": 0,
"tool_count": 0
}
},
"latency_ms": null,
"status": "not_assessed"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": true,
"resource_links": true,
"resources": true,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [
"prompts",
"resource_links",
"resources"
],
"enabled_count": 3,
"initialize_capability_keys": []
},
"latency_ms": null,
"status": "warning"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"tools_list",
"protocol_version",
"transport_compliance",
"action_safety",
"server_card",
"tool_surface"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": false,
"remote_transport": true,
"request_association": true,
"server_card": false,
"session_resume": true,
"step_up_auth": true,
"tool_surface": false,
"tools_list": false,
"transport_compliance": false
},
"high_risk_tools": 0,
"tool_count": 0,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "error"
},
"connector_replay_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"determinism_probe": {
"details": {
"reason": "tools_list_unavailable"
},
"latency_ms": null,
"status": "missing"
},
"initialize": {
"details": {
"error": "Client error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"headers": {
"content-type": "application/json",
"www-authenticate": "Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
},
"http_status": 401,
"payload": {},
"url": "https://task-mcp.parallel.ai/mcp"
},
"latency_ms": 27.33,
"status": "auth_required"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": true,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "ok"
},
"oauth_authorization_server": {
"details": {
"headers": {
"content-type": "application/json",
"strict-transport-security": "max-age=63072000"
},
"http_status": 200,
"payload": {
"authorization_endpoint": "https://platform.parallel.ai/getKeys/authorize",
"code_challenge_methods_supported": [
"S256"
],
"device_authorization_endpoint": "https://platform.parallel.ai/getKeys/device/code",
"grant_types_supported": [
"authorization_code",
"urn:ietf:params:oauth:grant-type:device_code"
],
"issuer": "https://platform.parallel.ai",
"registration_endpoint": "https://platform.parallel.ai/getKeys/register",
"response_types_supported": [
"code"
],
"scopes_supported": [
"key:read"
],
"token_endpoint": "https://platform.parallel.ai/getKeys/token",
"token_endpoint_auth_methods_supported": [
"none"
]
},
"url": "https://platform.parallel.ai/.well-known/oauth-authorization-server"
},
"latency_ms": 71.49,
"status": "ok"
},
"oauth_protected_resource": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"authorization_servers": [
"https://platform.parallel.ai"
],
"bearer_methods_supported": [
"header",
"body"
],
"resource": "https://task-mcp.parallel.ai",
"resource_documentation": "https://task-mcp.parallel.ai",
"scopes_supported": [
"key:read"
]
},
"url": "https://task-mcp.parallel.ai/.well-known/oauth-protected-resource"
},
"latency_ms": 78.69,
"status": "ok"
},
"official_registry_probe": {
"details": {
"direct_match": true,
"official_peer_count": 1,
"registry_identifier": "ai.parallel/task-mcp",
"registry_source": "official_registry"
},
"latency_ms": null,
"status": "ok"
},
"openid_configuration": {
"details": {
"error": "Client error '404 Not Found' for url 'https://platform.parallel.ai/.well-known/openid-configuration'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://platform.parallel.ai/.well-known/openid-configuration"
},
"latency_ms": 67.78,
"status": "error"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain;charset=UTF-8"
},
"http_status": 404,
"url": "https://task-mcp.parallel.ai/robots.txt",
"validation_disallowed": false
},
"latency_ms": 28.98,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "not_advertised"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"id": 3,
"jsonrpc": "2.0",
"result": {
"prompts": []
}
},
"url": "https://task-mcp.parallel.ai/mcp"
},
"latency_ms": 84.85,
"status": "ok"
},
"protocol_version_probe": {
"details": {
"latest_known_version": "2025-11-25",
"reason": "no_protocol_version",
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "missing"
},
"provenance_divergence_probe": {
"details": {
"comparable_field_count": 0,
"compared_fields": [
"title",
"version",
"homepage",
"repository"
],
"direct_official_match": true,
"drift_fields": [],
"metadata_document_count": 2,
"readable_sources": [
"registry"
],
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": null,
"server_card_version": null
},
"latency_ms": null,
"status": "not_assessed"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"id": 6,
"jsonrpc": "2.0",
"result": {
"contents": [
{
"_meta": {
"openai/widgetCSP": {
"connect_domains": [
"https://task-mcp.parallel.ai",
"https://task-mcp-staging.parallel.ai",
"https://platform.parallel.ai",
"https://web-sandbox.oaiusercontent.com"
],
"resource_domains": [
"https://web-sandbox.oaiusercontent.com"
]
},
"openai/widgetDescription": "Real-time batch processing results with live progress updates",
"openai/widgetDomain": "https://chatgpt.com",
"openai/widgetPrefersBorder": true
},
"mimeType": "text/html+skybridge",
"text": "<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>Task Group Results</title>\n <style>\n * {\n box-sizing: border-box;\n }\n\n :root {\n /* Light theme colors (default) */\n --bg-primary: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f9fafb;\n --border-primary: #e2e8f0;\n --border-secondary: #e5e7eb;\n --text-primary: #111827;\n --text-secondary: #374151;\n --text-muted: #6b7280;\n --accent-primary: #2563eb;\n --accent-secondary: #0284c7;\n --success: #10b981;\n --warning: #d97706;\n --error: #dc2626;\n --skeleton-from: #f0f0f0;\n --skeleton-to: #e0e0e0;\n }\n\n [data-theme=\"dark\"] {\n /* Dark theme colors */\n --bg-primary: #111827;\n --bg-secondary: #1f2937;\n --bg-tertiary: #374151;\n --border-primary: #374151;\n --border-secondary: #4b5563;\n --text-primary: #f9fafb;\n --text-secondary: #e5e7eb;\n --text-muted: #9ca3af;\n --accent-primary: #3b82f6;\n --accent-secondary: #0ea5e9;\n --success: #10b981;\n --warning: #f59e0b;\n --error: #ef4444;\n --skeleton-from: #374151;\n --skeleton-to: #4b5563;\n }\n\n #app {\n padding: 32px;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, system-ui, sans-serif;\n margin: 0;\n padding: 0;\n background: var(--bg-primary);\n color: var(--text-primary);\n line-height: 1.5;\n font-size: 14px;\n min-height: 500px;\n overflow: hidden;\n transition: background-color 0.2s, color 0.2s;\n }\n\n .header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n min-height: 60px;\n }\n\n .title {\n font-size: 18px;\n font-weight: 600;\n margin: 0;\n color: var(--text-primary);\n }\n\n .subtitle {\n font-size: 13px;\n color: var(--text-muted);\n margin-top: 4px;\n }\n\n .actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n }\n\n .btn {\n background: var(--text-primary);\n color: var(--bg-primary);\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 0.2s;\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n white-space: nowrap;\n }\n\n .btn:hover {\n opacity: 0.8;\n }\n\n .btn:disabled {\n background: var(--border-secondary);\n color: var(--text-muted);\n cursor: not-allowed;\n opacity: 1;\n }\n\n .btn-secondary {\n background: var(--bg-tertiary);\n color: var(--text-secondary);\n border: 1px solid var(--border-primary);\n }\n\n .btn-secondary:hover {\n background: var(--border-secondary);\n }\n\n .btn-analyze {\n background: var(--accent-primary);\n color: white;\n }\n\n .btn-analyze:hover {\n background: var(--accent-secondary);\n }\n\n .btn-analyze:disabled {\n background: var(--border-secondary);\n color: var(--text-muted);\n }\n\n .status-section {\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 8px;\n padding: 16px;\n height: 350px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n margin-bottom: 32px;\n }\n\n .progress-bar {\n width: 100%;\n height: 4px;\n background: var(--border-secondary);\n border-radius: 2px;\n overflow: hidden;\n margin-bottom: 12px;\n }\n\n .progress-fill {\n height: 100%;\n background: linear-gradient(90deg, var(--success), var(--accent-primary));\n border-radius: 2px;\n transition: width 0.6s ease;\n width: 0%;\n }\n\n .progress-text {\n font-size: 13px;\n color: var(--text-muted);\n display: flex;\n justify-content: space-between;\n margin-bottom: 12px;\n }\n\n .status-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 8px;\n margin-bottom: 12px;\n }\n\n .status-item {\n text-align: center;\n background: var(--bg-tertiary);\n padding: 8px;\n border-radius: 6px;\n }\n\n .status-number {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n display: block;\n }\n\n .status-label {\n font-size: 11px;\n color: var(--text-muted);\n margin-top: 2px;\n }\n\n .latest-result {\n background: var(--bg-tertiary);\n border: 1px solid var(--border-secondary);\n border-radius: 6px;\n padding: 12px;\n margin-top: auto;\n font-size: 13px;\n overflow: hidden;\n }\n\n .latest-result h4 {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--text-secondary);\n }\n\n .latest-result-content {\n color: var(--text-muted);\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .error,\n .warning {\n padding: 12px;\n border-radius: 6px;\n margin: 12px 0;\n font-size: 13px;\n }\n\n .error {\n background: color-mix(in srgb, var(--error) 10%, var(--bg-primary));\n border: 1px solid color-mix(in srgb, var(--error) 30%, var(--bg-primary));\n color: var(--error);\n }\n\n .warning {\n background: color-mix(in srgb, var(--warning) 10%, var(--bg-primary));\n border: 1px solid color-mix(in srgb, var(--warning) 30%, var(--bg-primary));\n color: var(--warning);\n }\n\n .skeleton {\n background: linear-gradient(90deg, var(--skeleton-from) 25%, var(--skeleton-to) 50%, var(--skeleton-from) 75%);\n background-size: 200% 100%;\n animation: loading 1.5s infinite;\n }\n\n @keyframes loading {\n 0% {\n background-position: 200% 0;\n }\n\n 100% {\n background-position: -200% 0;\n }\n }\n\n .skeleton-text {\n height: 14px;\n border-radius: 4px;\n margin-bottom: 8px;\n }\n\n .skeleton-number {\n height: 18px;\n width: 30px;\n border-radius: 4px;\n margin: 0 auto 4px auto;\n }\n\n .connection-status {\n font-size: 12px;\n color: var(--text-muted);\n text-align: center;\n margin-top: auto;\n padding-top: 8px;\n }\n\n .connected {\n color: var(--success);\n }\n\n .connecting {\n color: var(--warning);\n }\n\n .disconnected {\n color: var(--error);\n }\n\n .btn-refresh {\n background: var(--bg-tertiary);\n color: var(--text-secondary);\n border: 1px solid var(--border-primary);\n }\n\n .btn-refresh:hover {\n background: var(--border-secondary);\n }\n\n .btn-refresh:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n\n .btn-refresh .refresh-icon {\n display: inline-block;\n transition: transform 0.3s ease;\n }\n\n .btn-refresh.refreshing .refresh-icon {\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n @media (max-width: 640px) {\n .header {\n flex-direction: column;\n gap: 12px;\n min-height: 80px;\n margin-bottom: 12px;\n }\n\n .actions {\n width: 100%;\n }\n\n .btn {\n flex: 1;\n justify-content: center;\n }\n\n .status-section {\n height: 320px;\n }\n\n .status-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n </style>\n</head>\n\n<body>\n <div id=\"app\">\n <!-- Initial loading skeleton -->\n <div class=\"header\">\n <div>\n <h2 class=\"title\">Task Group Progress</h2>\n <div class=\"subtitle skeleton skeleton-text\" style=\"width: 200px;\"></div>\n </div>\n <div class=\"actions\">\n <button class=\"btn-analyze btn\" disabled>Analyze Results</button>\n </div>\n </div>\n\n <div class=\"status-section\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" style=\"width: 0%;\"></div>\n </div>\n <div class=\"progress-text\">\n <span class=\"skeleton skeleton-text\" style=\"width: 100px;\"></span>\n <span class=\"skeleton skeleton-text\" style=\"width: 60px;\"></span>\n </div>\n <div class=\"status-grid\">\n <div class=\"status-item\">\n <div class=\"status-number skeleton skeleton-number\"></div>\n <div class=\"status-label\">Completed</div>\n </div>\n <div class=\"status-item\">\n <div class=\"status-number skeleton skeleton-number\"></div>\n <div class=\"status-label\">Running</div>\n </div>\n <div class=\"status-item\">\n <div class=\"status-number skeleton skeleton-number\"></div>\n <div class=\"status-label\">Failed</div>\n </div>\n <div class=\"status-item\">\n <div class=\"status-number skeleton skeleton-number\"></div>\n <div class=\"status-label\">Total</div>\n </div>\n </div>\n\n <div class=\"latest-result\">\n <h4>Latest Results</h4>\n <div class=\"latest-result-content\">\n <span class=\"skeleton skeleton-text\" style=\"width: 100%;\"></span>\n <span class=\"skeleton skeleton-text\" style=\"width: 80%;\"></span>\n </div>\n </div>\n\n <div class=\"connection-status connecting\">Initializing...</div>\n </div>\n </div>\n\n <script>\n /** @type {any} Current task group data from tool output */\n let taskGroupData = null;\n\n /** @type {boolean} Whether all tasks are completed */\n let isCompleted = false;\n\n /** @type {boolean} Whether a refresh is in progress */\n let isRefreshing = false;\n\n /**\n * Apply theme changes to the document\n * @param {\"light\"|\"dark\"} theme - The theme to apply\n */\n function applyTheme(theme) {\n document.documentElement.setAttribute('data-theme', theme);\n }\n\n /**\n * Handle manual refresh button click\n */\n async function handleRefresh() {\n if (isRefreshing || isCompleted) return;\n\n isRefreshing = true;\n const refreshBtn = document.getElementById('refresh-btn');\n if (refreshBtn) {\n refreshBtn.classList.add('refreshing');\n refreshBtn.disabled = true;\n }\n\n try {\n await refreshData();\n } finally {\n isRefreshing = false;\n if (refreshBtn) {\n refreshBtn.classList.remove('refreshing');\n refreshBtn.disabled = isCompleted;\n }\n }\n }\n\n /**\n * Initialize the widget with OpenAI context data\n */\n async function initWidget() {\n if (!window.openai) {\n document.getElementById('app').innerHTML = `\n <div class=\"error\">\n Component bridge not available. This widget requires the OpenAI runtime environment.\n </div>\n `;\n return;\n }\n\n try {\n // Apply initial theme\n if (window.openai.theme) {\n applyTheme(window.openai.theme);\n }\n\n taskGroupData = window.openai.toolOutput || window.openai.widgetState?.taskGroupData;\n console.log({ taskGroupData });\n\n if (taskGroupData) {\n renderTaskGroup(taskGroupData);\n } else {\n updateConnectionStatus('connecting', 'Waiting for task group data...');\n }\n\n // Listen for theme and data changes\n window.addEventListener('openai:set_globals', handleGlobalsChange);\n\n } catch (error) {\n console.error('Failed to initialize widget:', error);\n document.getElementById('app').innerHTML = `\n <div class=\"error\">\n Failed to initialize: ${error.message}\n </div>\n `;\n }\n }\n\n /**\n * Render the task group UI based on current data\n * @param {Object} data - Task group data object\n */\n function renderTaskGroup(data) {\n const completed = data.status?.task_run_status_counts?.completed || 0;\n const failed = data.status?.task_run_status_counts?.failed || 0;\n const running = data.status?.task_run_status_counts?.running || 0;\n const total = data.status?.num_task_runs || data.total_inputs || 0;\n const progressPercent = total > 0 ? Math.round(((completed + failed) / total) * 100) : 0;\n\n isCompleted = !data.status?.is_active;\n\n document.getElementById('app').innerHTML = `\n <div class=\"header\">\n <div>\n <h2 class=\"title\">Task Group Progress</h2>\n <div class=\"subtitle\">\n ${total} tasks \u2022 Processor: ${data.processor_used || 'auto'} \u2022 ${progressPercent}% complete\n </div>\n </div>\n <div class=\"actions\">\n ${!isCompleted ? `\n <button id=\"refresh-btn\" class=\"btn btn-refresh\" onclick=\"handleRefresh()\">\n <span class=\"refresh-icon\">\u21bb</span> Refresh\n </button>\n ` : ''}\n <button class=\"btn btn-analyze\" onclick=\"analyzeResults()\">\n Analyze Results\n </button>\n ${data.task_group_url ? `<a href=\"${data.task_group_url}\" target=\"_blank\" class=\"btn btn-secondary\">Platform</a>` : ''}\n </div>\n </div>\n \n <div class=\"status-section\">\n <div class=\"progress-bar\">\n <div class=\"progress-fill\" style=\"width: ${progressPercent}%\"></div>\n </div>\n <div class=\"progress-text\">\n <span>${completed + failed} of ${total} tasks processed</span>\n <span>${progressPercent}%</span>\n </div>\n <div class=\"status-grid\">\n <div class=\"status-item\">\n <span class=\"status-number\">${completed}</span>\n <div class=\"status-label\">Completed</div>\n </div>\n <div class=\"status-item\">\n <span class=\"status-number\">${running}</span>\n <div class=\"status-label\">Running</div>\n </div>\n <div class=\"status-item\">\n <span class=\"status-number\">${failed}</span>\n <div class=\"status-label\">Failed</div>\n </div>\n <div class=\"status-item\">\n <span class=\"status-number\">${total}</span>\n <div class=\"status-label\">Total</div>\n </div>\n </div>\n \n ${renderLatestResults(data)}\n \n <div class=\"connection-status\" id=\"connection-status\">\n ${isCompleted ? 'All tasks completed!' : 'Click Refresh to update'}\n </div>\n </div>\n \n ${data.warnings && data.warnings.length > 0 ? `\n <div class=\"warning\" style=\"position: absolute; bottom: 8px; left: 16px; right: 16px; margin: 0;\">\n ${data.warnings.length} warning(s): ${data.warnings.slice(0, 2).join(', ')}${data.warnings.length > 2 ? '...' : ''}\n </div>\n ` : ''}\n `;\n }\n\n /**\n * Render the latest results section\n * @param {Object} data - Task group data\n * @returns {string} HTML string for latest results\n */\n function renderLatestResults(data) {\n if (!data.results || data.results.length === 0) {\n return `\n <div class=\"latest-result\">\n <h4>Latest Results</h4>\n <div class=\"latest-result-content\">Processing tasks...</div>\n </div>\n `;\n }\n\n const completed = data.results.filter(r => r.status === 'completed');\n if (completed.length === 0) {\n return `\n <div class=\"latest-result\">\n <h4>Latest Results</h4>\n <div class=\"latest-result-content\">No completed results yet</div>\n </div>\n `;\n }\n\n const latest = completed[completed.length - 1];\n const preview = getResultPreview(latest);\n\n return `\n <div class=\"latest-result\">\n <h4>Latest Result (Task ${latest.$index || 'N/A'})</h4>\n <div class=\"latest-result-content\" title=\"${escapeHtml(preview)}\">${preview}</div>\n </div>\n `;\n }\n\n /**\n * Get preview text for a result object\n * @param {Object} result - Result object\n * @returns {string} Preview text\n */\n function getResultPreview(result) {\n const keys = Object.keys(result).filter(k => !k.startsWith('$') && k !== 'status');\n if (keys.length === 0) return 'No data';\n\n const firstKey = keys[0];\n let value = result[firstKey];\n\n if (typeof value === 'string' && value.length > 100) {\n value = value.substring(0, 100) + '...';\n } else if (typeof value === 'object') {\n value = JSON.stringify(value).substring(0, 100) + '...';\n }\n\n return `${firstKey}: ${value}`;\n }\n\n /**\n * Refresh data by calling the getResultMarkdown tool\n */\n async function refreshData() {\n if (!taskGroupData?.task_group_id) return;\n\n try {\n const result = await window.openai.callTool('getResultMarkdown', {\n taskRunOrGroupId: taskGroupData.task_group_id\n });\n console.log({ result })\n\n // Extract updated data from the tool result\n if (result?.meta?.data) {\n const updatedData = result.meta.data;\n\n // Update task group data\n taskGroupData.status = updatedData.status;\n taskGroupData.results = updatedData.results || [];\n taskGroupData.runs = updatedData.runs || [];\n\n // Check if completed\n isCompleted = !taskGroupData.status?.is_active;\n }\n\n } catch (error) {\n console.error('Failed to refresh data:', error);\n updateConnectionStatus('disconnected', 'Refresh failed');\n } finally {\n renderTaskGroup(taskGroupData);\n }\n }\n\n /**\n * Escape HTML special characters\n * @param {string} text - Text to escape\n * @returns {string} Escaped text\n */\n function escapeHtml(text) {\n if (!text) return '';\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n\n /**\n * Update connection status display\n * @param {string} type - Status type (connected, connecting, disconnected)\n * @param {string} message - Status message\n */\n function updateConnectionStatus(type, message) {\n const statusEl = document.getElementById('connection-status');\n if (statusEl) {\n statusEl.className = `connection-status ${type}`;\n statusEl.textContent = message;\n }\n }\n\n /**\n * Send follow-up message to analyze results\n */\n async function analyzeResults() {\n try {\n await window.openai.sendFollowUpMessage({\n prompt: \"analyze the results using the 'getResultMarkdown' tool\"\n });\n } catch (error) {\n console.error('Failed to send follow-up turn:', error);\n }\n }\n\n /**\n * Handle global state changes from OpenAI host\n * @param {CustomEvent} event - Global change event\n */\n function handleGlobalsChange(event) {\n const { globals } = event.detail || {};\n console.log('Globals changed:', Object.keys(globals || {}));\n\n // Handle theme changes\n if (globals?.theme && globals.theme !== window.openai.theme) {\n applyTheme(globals.theme);\n }\n\n // Update tool response metadata\n if (globals?.toolResponseMetadata) {\n window.openai.toolResponseMetadata = globals.toolResponseMetadata;\n }\n\n // Handle new tool output data\n if (globals?.toolOutput) {\n taskGroupData = globals.toolOutput;\n console.log('Updated task group data:', taskGroupData);\n renderTaskGroup(taskGroupData);\n }\n }\n\n // Initialize when DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initWidget);\n } else {\n initWidget();\n }\n </script>\n</body>\n\n</html>",
"uri": "ui://widget/task-group-results-v31.html"
}
]
}
},
"resource_uri": "ui://widget/task-group-results-v31.html",
"url": "https://task-mcp.parallel.ai/mcp"
},
"latency_ms": 29.44,
"status": "ok"
},
"resources_list": {
"details": {
"headers": {
"content-type": "application/json"
},
"http_status": 200,
"payload": {
"id": 5,
"jsonrpc": "2.0",
"result": {
"resources": [
{
"description": "Real-time batch processing results with progress tracking and analysis",
"mimeType": "text/html+skybridge",
"name": "Task Group Results Widget",
"uri": "ui://widget/task-group-results-v31.html"
},
{
"description": "Live progress tracking for deep research tasks with source analysis",
"mimeType": "text/html+skybridge",
"name": "Deep Research Progress Widget",
"uri": "ui://widget/deep-research-v31.html"
}
]
}
},
"url": "https://task-mcp.parallel.ai/mcp"
},
"latency_ms": 28.02,
"status": "ok"
},
"schema_divergence_probe": {
"details": {
"card_server_name": null,
"compared_dimensions": [
"server_name",
"server_version",
"declared_vs_observed_auth",
"tool_membership",
"parameter_names",
"required_parameters",
"parameter_types",
"output_schema_presence"
],
"compared_tool_count": 0,
"live_server_name": null,
"reason": "no_server_card_tools",
"server_name_mismatch": false
},
"latency_ms": null,
"status": "missing"
},
"server_card": {
"details": {
"error": "Client error '404 Not Found' for url 'https://task-mcp.parallel.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://task-mcp.parallel.ai/.well-known/mcp/server-card.json"
},
"latency_ms": 102.94,
"status": "error"
},
"session_resume_probe": {
"details": {
"protocol_version": null,
"reason": "no_session_id",
"resume_expected": false,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "missing"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [
"initialize"
],
"broad_scopes": [],
"challenge_headers": [
"Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
],
"minimal_scope_documented": true,
"oauth_present": true,
"scope_specificity_ratio": 1.0,
"step_up_signals": [
"Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
],
"supported_scopes": [
"key:read"
]
},
"latency_ms": null,
"status": "ok"
},
"tool_snapshot_probe": {
"details": {
"reason": "no_tools"
},
"latency_ms": null,
"status": "missing"
},
"tools_list": {
"details": {
"error": "Client error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"headers": {
"content-type": "application/json",
"www-authenticate": "Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
},
"http_status": 401,
"payload": {},
"url": "https://task-mcp.parallel.ai/mcp"
},
"latency_ms": 76.28,
"status": "error"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"www-authenticate": "Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
},
"bad_protocol_payload": {
"detail": "Missing x-api-key or Authorization header. Please provide a valid API key.",
"error": "Authentication required"
},
"bad_protocol_status_code": 401,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 28.4,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": {
"type": "resource",
"uri": "ui://widget/task-group-results-v31.html"
}
},
"initialize_capability_keys": [],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 200,
"probe_status": "missing"
}
},
"latency_ms": 28.24,
"status": "missing"
}
},
"failures": {
"initialize": {
"error": "Client error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"headers": {
"content-type": "application/json",
"www-authenticate": "Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
},
"http_status": 401,
"payload": {},
"url": "https://task-mcp.parallel.ai/mcp"
},
"openid_configuration": {
"error": "Client error '404 Not Found' for url 'https://platform.parallel.ai/.well-known/openid-configuration'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://platform.parallel.ai/.well-known/openid-configuration"
},
"server_card": {
"error": "Client error '404 Not Found' for url 'https://task-mcp.parallel.ai/.well-known/mcp/server-card.json'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://task-mcp.parallel.ai/.well-known/mcp/server-card.json"
},
"tools_list": {
"error": "Client error '401 Unauthorized' for url 'https://task-mcp.parallel.ai/mcp'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/401",
"headers": {
"content-type": "application/json",
"www-authenticate": "Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
},
"http_status": 401,
"payload": {},
"url": "https://task-mcp.parallel.ai/mcp"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"www-authenticate": "Bearer realm=\"main\", resource_metadata=\"https://task-mcp.parallel.ai/.well-known/oauth-protected-resource/mcp\""
},
"bad_protocol_payload": {
"detail": "Missing x-api-key or Authorization header. Please provide a valid API key.",
"error": "Authentication required"
},
"bad_protocol_status_code": 401,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2025-03-26",
"session_id_present": false,
"transport": "streamable-http"
}
},
"remote_url": "https://task-mcp.parallel.ai/mcp",
"server_card_payload": null,
"server_identifier": "ai.parallel/task-mcp"
}
Known versions
1.0.0
Validation history
| Timestamp | Status | Score | Latency | Tools |
|---|---|---|---|---|
| Aug 07, 2026 07:32:13 AM UTC | Failing | 6.8 | 668.2 ms | 0 |
| Aug 06, 2026 07:31:57 PM UTC | Failing | 6.5 | 620.5 ms | 0 |
| Aug 06, 2026 07:31:57 PM UTC | Failing | 6.5 | 531.5 ms | 0 |
| Aug 06, 2026 07:30:56 AM UTC | Failing | 6.2 | 492.4 ms | 0 |
| Aug 06, 2026 07:30:56 AM UTC | Failing | 6.2 | 555.0 ms | 0 |
| Aug 05, 2026 11:29:35 PM UTC | Failing | 7.1 | 525.8 ms | 0 |
| Aug 05, 2026 11:29:34 PM UTC | Failing | 7.1 | 447.9 ms | 0 |
| Aug 05, 2026 07:28:23 PM UTC | Failing | 15.4 | 647.9 ms | 0 |
Validation timeline
| Validated | Summary | Score | Protocol | Auth mode | Tools | High-risk tools | Changes |
|---|---|---|---|---|---|---|---|
| Aug 07, 2026 07:32:13 AM UTC | Failing | 6.8 | unknown | oauth_required | 0 | 0 | auth_mode_changed |
| Aug 06, 2026 07:31:57 PM UTC | Failing | 6.5 | unknown | unknown | 0 | 0 | none |
| Aug 06, 2026 07:31:57 PM UTC | Failing | 6.5 | unknown | unknown | 0 | 0 | none |
| Aug 06, 2026 07:30:56 AM UTC | Failing | 6.2 | unknown | unknown | 0 | 0 | none |
| Aug 06, 2026 07:30:56 AM UTC | Failing | 6.2 | unknown | unknown | 0 | 0 | none |
| Aug 05, 2026 11:29:35 PM UTC | Failing | 7.1 | unknown | unknown | 0 | 0 | none |
| Aug 05, 2026 11:29:34 PM UTC | Failing | 7.1 | unknown | unknown | 0 | 0 | none |
| Aug 05, 2026 07:28:23 PM UTC | Failing | 15.4 | unknown | unknown | 0 | 0 | none |
| Aug 03, 2026 11:53:43 PM UTC | Failing | 23.3 | unknown | unknown | 0 | 0 | none |
| Aug 02, 2026 06:43:14 PM UTC | Failing | 23.2 | unknown | unknown | 0 | 0 | none |
Recent validation runs
| Started | Status | Summary | Latency | Checks |
|---|---|---|---|---|
| Aug 07, 2026 07:32:12 AM UTC | Completed | Failing | 668.2 ms | action_safety_probe, advanced_capabilities_probe, connector_publishability_probe, connector_replay_probe, determinism_probe, initialize, interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, openid_configuration, probe_noise_resilience, prompt_get, prompts_list, protocol_version_probe, provenance_divergence_probe, request_association_probe, resource_read, resources_list, schema_divergence_probe, server_card, session_resume_probe, step_up_auth_probe, tool_snapshot_probe, tools_list, transport_compliance_probe, utility_coverage_probe |
| Aug 06, 2026 07:31:57 PM UTC | Completed | Failing | 620.5 ms | |
| Aug 06, 2026 07:31:56 PM UTC | Completed | Failing | 531.5 ms | |
| Aug 06, 2026 07:30:55 AM UTC | Completed | Failing | 492.4 ms | |
| Aug 06, 2026 07:30:55 AM UTC | Completed | Failing | 555.0 ms | |
| Aug 05, 2026 11:29:34 PM UTC | Completed | Failing | 525.8 ms | |
| Aug 05, 2026 11:29:34 PM UTC | Completed | Failing | 447.9 ms | |
| Aug 05, 2026 07:28:22 PM UTC | Completed | Failing | 647.9 ms | |
| Aug 03, 2026 11:53:42 PM UTC | Completed | Failing | 511.2 ms | |
| Aug 02, 2026 06:43:13 PM UTC | Completed | Failing | 826.9 ms | |
Public server reputation
Incident & change feed
| Timestamp | Event | Details |
|---|---|---|
| Aug 07, 2026 07:32:13 AM UTC | Latest validation: failing | Score 11.4 with status failing. |
| Aug 07, 2026 07:32:13 AM UTC | Score changed | Score delta +0.3 versus the previous run. |
| Aug 07, 2026 07:32:13 AM UTC | Auth mode changed | Auth mode moved from unknown to oauth_required. |
| Aug 06, 2026 07:31:57 PM UTC | Score changed | Score delta +0.3 versus the previous run. |
| Aug 05, 2026 11:00:28 AM UTC | Score corrected (post-1.0.503 remediation, R1 zero-anchoring) | Prior: 23.26. Corrected: 14.23. |
Capabilities
- OAuth:
- DCR/CIMD:
- Prompts:
- Homepage: https://parallel.ai
- Docs: none
- Support: none
- Icon: none
- Remote endpoint: https://task-mcp.parallel.ai/mcp
- Server card: none
Benchmark tasks
| Benchmark task | Status | Evidence |
|---|---|---|
| Discover tools | Likely to fail |
|
| Read-only fetch flow | Passes |
|
| OAuth-required connect | Passes |
|
| Safe write flow with confirmation | Likely to fail |
|
Utility coverage
Transport compliance drilldown
Issues: missing_protocol_header, bad_protocol_not_rejected
Request association
Connector replay
Required-argument replay breaks
| Tool | Added required args | Removed required args |
|---|---|---|
| No required-argument replay breaks detected. | ||
Output-schema replay breaks
| Tool | Removed properties | Added properties |
|---|---|---|
| No output-schema replay breaks detected. | ||
Tool snapshot diff & changelog
Need at least two validation runs before building a tool changelog.
Validation diff
Regressed checks: action_safety_probe, connector_publishability_probe, initialize, openid_configuration, provenance_divergence_probe, server_card, tools_list, transport_compliance_probe
Improved checks: interactive_flow_probe, oauth_authorization_server, oauth_protected_resource, official_registry_probe, probe_noise_resilience, prompts_list, resource_read, resources_list, step_up_auth_probe
Newly assessed dimensions: none
No longer assessed dimensions: none
| Component | Previous | Latest | Delta |
|---|---|---|---|
maintenance_signal_score | 2.0 | 3.0 | 1.0 |
Registry & provenance divergence
| Field | Registry | Live server card |
|---|---|---|
| Title | n/a | n/a |
| Version | n/a | n/a |
| Homepage | n/a | n/a |
Active alerts
- Latest validation is failing (critical)
Core MCP flows did not validate successfully on the latest run. - Initialize flow regressed (critical)
A client-visible initialize behavior changed for the worse. - tools/list regressed (critical)
Tool discovery became less reliable on the latest run. - Auth mode changed (high)
Auth mode changed from unknown to oauth_required.
Aliases & registry graph
| Identifier | Source | Canonical | Score |
|---|---|---|---|
ai.parallel/task-mcp |
official_registry | yes | n/a |
ai.parallel/search-mcp |
official_registry | no | n/a |
Alias consolidation
Source disagreements
| Field | What differs | Observed values |
|---|---|---|
| Remote URL | Aliases currently point at different MCP endpoints, which can indicate mirrors, stale registry data, or a real endpoint split. | https://search-mcp.parallel.ai/mcp https://task-mcp.parallel.ai/mcp |
| Registry identifier | Different registry-specific identifiers resolve to the same canonical server record here. | ai.parallel/search-mcp ai.parallel/task-mcp |
Fix it
Why this score?
Algorithmic score breakdown
Actionable remediation
| Severity | Remediation | Why it matters | Recommended action |
|---|---|---|---|
| Critical | Ensure tools/list succeeds consistently | Tools discovery is the minimum viable contract for most MCP clients and directories. | Make tools/list succeed unauthenticated when possible, or document the auth flow in the server card.Playbook
|
| Critical | Make initialize deterministic and client-friendly | If initialize fails or requires undocumented auth, many MCP clients cannot connect. | Allow initialize to succeed consistently, or return a deterministic auth-required response with clear metadata.Playbook
|
| Critical | Respond to initialize flow regressed | A client-visible initialize behavior changed for the worse. | Compare initialize responses between the latest two runs and restore the previous stable behavior. |
| Critical | Respond to latest validation is failing | Core MCP flows did not validate successfully on the latest run. | Fix the failing checks first, then revalidate to confirm the recovery path.Playbook
|
| Critical | Respond to tools/list regressed | Tool discovery became less reliable on the latest run. | Compare tool enumeration outputs between runs and remove non-deterministic behavior. |
| High | Align session and protocol behavior with Streamable HTTP expectations | Clients increasingly rely on MCP-Protocol-Version, session teardown, and expired-session semantics. | Align MCP-Protocol-Version, MCP-Session-Id, DELETE teardown, and expired-session handling with the transport spec.Playbook
|
| High | Publish a complete server card | Missing or incomplete server-card metadata weakens discovery, documentation, and trust signals. | Serve /.well-known/mcp/server-card.json and include tools, prompts/resources, homepage, and support links.Playbook
|
| High | Resolve conflicting endpoints across registry aliases | Registry aliases for this canonical server currently resolve to different live MCP endpoints (https://search-mcp.parallel.ai/mcp, https://task-mcp.parallel.ai/mcp). An agent following one registry entry reaches a different server than one following another. | Confirm which endpoint is canonical, correct or retire the stale registry entry, and re-sync so every alias agrees on one remote_url.Playbook
|
| High | Respond to auth mode changed | Auth mode changed from unknown to oauth_required. | Document the new auth posture and confirm protected-resource and challenge metadata still match reality. |
| Medium | Adopt a current MCP protocol revision | Older protocol revisions reduce compatibility with newer clients and registry programs. | Advertise a current MCP protocol revision (2025-06-18 or later) in both the initialize response and the MCP-Protocol-Version header.Playbook
|
| Medium | Close connector-publishing gaps | Connector catalogs care about protocol recency, session behavior, auth clarity, and tool-surface stability. | |
| Medium | Publish OpenID configuration | OIDC metadata improves token validation and client compatibility. | Expose /.well-known/openid-configuration with issuer, jwks_uri, and supported grants.Playbook
|
| Medium | Raise Adoption & Market score | Adoption clues and public evidence that the server is intended for external use. | Increase external documentation and directory coverage so users can discover and evaluate the server. |
| Medium | Raise Interface Quality score | How well the tool/resource interface communicates and behaves under automation. | Improve schemas, error contracts, and recovery messages so agents can reason about the surface automatically. |
| Medium | Raise Reliability & Trust score | Operational stability, consistency, and trustworthiness over time. | Stabilize behavior over time and reduce failure drift between validation runs. |
| Medium | Raise Security Posture score | How safely the exposed tool surface handles destructive actions, egress, execution, secrets, and risky inputs. | Reduce destructive, egress, exec, secret, and freeform-input risk across the exposed tool surface.Playbook
|
| Low | Expose modern utility surfaces like completions, pagination, or tasks | Utility coverage improves interoperability with larger clients and long-lived agent workflows. | Expose completions, pagination, and task metadata where supported so larger clients can plan and resume work safely.Playbook
|
| Low | Publish newer MCP capability signals | Roots, sampling, elicitation, structured outputs, and related metadata improve client understanding and ranking. | Advertise only the advanced capabilities (roots, sampling, elicitation) you have actually implemented end to end in the initialize capabilities object.Playbook
|
Point loss breakdown
| Component | Current | Points missing |
|---|---|---|
| Utility Coverage | 0/4 | -4.0 |
| Transport Compliance | 0/4 | -4.0 |
| Tool Surface Design | 0/4 | -4.0 |
| Tool Snapshot Churn | 0/4 | -4.0 |
| Tool Namespace Clarity | 0/4 | -4.0 |
| Tool Capability Clarity | 0/4 | -4.0 |
| Task Success | 0/4 | -4.0 |
| Spec Recency | 0/4 | -4.0 |
| SLO Health | 0/4 | -4.0 |
| Session Resume | 0/4 | -4.0 |
| Schema Completeness | 0/4 | -4.0 |
| Result Shape Stability | 0/4 | -4.0 |
Compatibility profiles
Connector URL: https://task-mcp.parallel.ai/mcp # Complete OAuth in the client when prompted. # Server: ai.parallel/task-mcp
{
"mcpServers": {
"task-mcp": {
"command": "npx",
"args": ["mcp-remote", "https://task-mcp.parallel.ai/mcp"]
}
}
}
smithery mcp add "https://task-mcp.parallel.ai/mcp"
curl -sS https://task-mcp.parallel.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Governance
MCP TrustOps
TrustOps turns this report into operational controls: freshness SLAs, authenticated validation, semantic benchmarks, policy exports, alert subscriptions, badges, cost/compliance metadata, and runtime routing. Fresh trusted index decisions stay separate from long-tail inventory so stale scores do not masquerade as current evidence.
/v1/decideAlert subscription types
MCP Runtime hosting
Verify Hosted MCP turns a trusted server report into a managed remote MCP endpoint with GitHub deployment provenance, sandbox policy, encrypted secrets, release history, rollback, and audit/usage events.
/hosted/{namespace}/{name}/mcp| Deployment | Status | Endpoint | Release |
|---|---|---|---|
| No hosted runtime deployments yet. | |||
Authenticated validation sessions
Public validation is free. Authenticated validation is paid and proves scoped behavior, write-action safeguards, and authenticated tool execution.
/v1/verify/v1/ci/previewInstall snippets
Connector URL: https://task-mcp.parallel.ai/mcp # Complete OAuth in the client when prompted. # Server: ai.parallel/task-mcp
{
"mcpServers": {
"task-mcp": {
"command": "npx",
"args": ["mcp-remote", "https://task-mcp.parallel.ai/mcp"]
}
}
}
smithery mcp add "https://task-mcp.parallel.ai/mcp"
curl -sS https://task-mcp.parallel.ai/mcp -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"mcp-verify","version":"0.1.0"}}}'
Agent access & tool surface
tools/list, prompts/list, and resources/list checks.ai.parallel/task-mcp.