{"schema":"agentwares.mcpcheck/v1","server":{"owner":"demo","slug":"linear","name":"Linear (remote, OAuth)","spec":{"kind":"remote","url":"https://mcp.linear.app/mcp"},"tier":"preview","schedule":"manual","description":"Linear's official remote server behind OAuth 2.1 with dynamic client registration."},"run":{"id":"fixture_linear","runKey":"linear:2026-09-02","kind":"manual","scheduledAt":"2026-09-02T18:05:54.250Z","finishedAt":"2026-09-02T18:05:54.250Z","costUsd":0,"cellCount":9,"expectedCount":9},"overall":"pass","status":"passing","install":{"status":"skip","cells":[{"id":"install:local-darwin","kind":"install","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T11:25:03.163Z","summary":"needs credentials (401)","durationMs":1500,"detail":{"spec":"https://mcp.linear.app/mcp","node":"v22.23.2","arch":"arm64","server":null,"toolCount":0,"stderrTail":""},"error":{"code":"AUTH_REQUIRED","cause":"Streamable HTTP error: Error POSTing to endpoint: {\"error\":\"invalid_token\",\"error_description\":\"Missing or invalid access token\"}","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}}],"hosts":["local-darwin"],"divergentHosts":[]},"compat":{"status":"skip","cells":[{"id":"compat:claude-cli@cli:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T18:05:54.250Z","summary":"needs credentials (401): Claude Code cannot complete a browser OAuth flow unattended","detail":{"client":"claude-cli","slot":"cli","version":"2.1.196"},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add a bearer token or OAuth refresh credentials to the enrollment; the runner then passes the access token as a header.","retryable":false}},{"id":"compat:py-sdk@N-1:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T17:57:13.608Z","summary":"needs credentials (401)","detail":{"client":"py-sdk","slot":"N-1","version":"unknown"},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}},{"id":"compat:py-sdk@N:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T17:57:12.218Z","summary":"needs credentials (401)","detail":{"client":"py-sdk","slot":"N","version":"unknown"},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}},{"id":"compat:ts-sdk@N-1:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T11:25:07.236Z","summary":"needs credentials (401)","durationMs":1250,"detail":{"client":"ts-sdk","slot":"N-1","version":"unknown","stderrTail":""},"error":{"code":"AUTH_REQUIRED","cause":"Streamable HTTP error: Error POSTing to endpoint: {\"error\":\"invalid_token\",\"error_description\":\"Missing or invalid access token\"}","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}},{"id":"compat:ts-sdk@N:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T11:25:05.947Z","summary":"needs credentials (401)","durationMs":1264,"detail":{"client":"ts-sdk","slot":"N","version":"unknown","stderrTail":""},"error":{"code":"AUTH_REQUIRED","cause":"Streamable HTTP error: Error POSTing to endpoint: {\"error\":\"invalid_token\",\"error_description\":\"Missing or invalid access token\"}","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}}],"worksWith":{"claude":{"status":"skip","inferred":false,"from":["compat:claude-cli@cli:local-darwin"]},"cursor":{"status":"skip","inferred":true,"from":["compat:ts-sdk@N-1:local-darwin","compat:ts-sdk@N:local-darwin"]},"vscode":{"status":"skip","inferred":true,"from":["compat:ts-sdk@N-1:local-darwin","compat:ts-sdk@N:local-darwin"]},"python":{"status":"skip","inferred":false,"from":["compat:py-sdk@N-1:local-darwin","compat:py-sdk@N:local-darwin"]}},"matrix":{"hosts":["local-darwin"],"rows":[{"row":{"client":"ts-sdk","slot":"N","label":"TypeScript SDK client (current)","embeddedBy":["Cursor","VS Code","Claude Desktop","Windsurf"]},"version":"unknown","byHost":{"local-darwin":{"id":"compat:ts-sdk@N:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T11:25:05.947Z","summary":"needs credentials (401)","durationMs":1264,"detail":{"client":"ts-sdk","slot":"N","version":"unknown","stderrTail":""},"error":{"code":"AUTH_REQUIRED","cause":"Streamable HTTP error: Error POSTing to endpoint: {\"error\":\"invalid_token\",\"error_description\":\"Missing or invalid access token\"}","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}}}},{"row":{"client":"ts-sdk","slot":"N-1","label":"TypeScript SDK client (previous minor)","embeddedBy":["Cursor","VS Code"]},"version":"unknown","byHost":{"local-darwin":{"id":"compat:ts-sdk@N-1:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T11:25:07.236Z","summary":"needs credentials (401)","durationMs":1250,"detail":{"client":"ts-sdk","slot":"N-1","version":"unknown","stderrTail":""},"error":{"code":"AUTH_REQUIRED","cause":"Streamable HTTP error: Error POSTing to endpoint: {\"error\":\"invalid_token\",\"error_description\":\"Missing or invalid access token\"}","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}}}},{"row":{"client":"py-sdk","slot":"N","label":"Python SDK client (current)","embeddedBy":[]},"version":"unknown","byHost":{"local-darwin":{"id":"compat:py-sdk@N:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T17:57:12.218Z","summary":"needs credentials (401)","detail":{"client":"py-sdk","slot":"N","version":"unknown"},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}}}},{"row":{"client":"py-sdk","slot":"N-1","label":"Python SDK client (previous minor)","embeddedBy":[]},"version":"unknown","byHost":{"local-darwin":{"id":"compat:py-sdk@N-1:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T17:57:13.608Z","summary":"needs credentials (401)","detail":{"client":"py-sdk","slot":"N-1","version":"unknown"},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add an Authorization header or OAuth refresh credentials to the enrollment.","retryable":false}}}},{"row":{"client":"claude-cli","slot":"cli","label":"Claude Code (`claude mcp list`)","embeddedBy":["Claude Code"]},"version":"2.1.196","byHost":{"local-darwin":{"id":"compat:claude-cli@cli:local-darwin","kind":"compat","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T18:05:54.250Z","summary":"needs credentials (401): Claude Code cannot complete a browser OAuth flow unattended","detail":{"client":"claude-cli","slot":"cli","version":"2.1.196"},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add a bearer token or OAuth refresh credentials to the enrollment; the runner then passes the access token as a header.","retryable":false}}}}]}},"oauth":{"status":"pass","applicable":true,"report":{"url":"https://mcp.linear.app/mcp","authRequired":true,"status":"pass","checks":[{"id":"unauthenticated","title":"Unauthenticated initialize returns 401","status":"pass","detail":"HTTP 401"},{"id":"www-authenticate","title":"WWW-Authenticate points at the resource metadata","status":"pass","detail":"resource_metadata=https://mcp.linear.app/.well-known/oauth-protected-resource/mcp"},{"id":"prm-well-known","title":"Well-known PRM paths","status":"pass","detail":"/.well-known/oauth-protected-resource/mcp, /.well-known/oauth-protected-resource"},{"id":"prm-resource","title":"PRM `resource` is this server's canonical URI","status":"pass","detail":"resource=https://mcp.linear.app/mcp"},{"id":"prm-as","title":"PRM lists an authorization server","status":"pass","detail":"https://mcp.linear.app"},{"id":"scopes","title":"Scopes advertised","status":"info","detail":"read write"},{"id":"as-metadata","title":"Authorization server metadata is discoverable","status":"pass","detail":"issuer=https://mcp.linear.app; token_endpoint=https://mcp.linear.app/token"},{"id":"pkce","title":"PKCE S256 advertised","status":"pass","detail":"S256"},{"id":"dcr","title":"Dynamic client registration","status":"pass","detail":"registration_endpoint=https://mcp.linear.app/register"},{"id":"refresh-grant","title":"Refresh tokens supported","status":"pass","detail":"authorization_code, refresh_token, urn:ietf:params:oauth:grant-type:jwt-bearer"},{"id":"token-auth","title":"Public clients can use the token endpoint","status":"pass","detail":"client_secret_basic, client_secret_post, none"}],"live":{},"checkedAt":"2026-09-02T17:43:19.318Z","authorizationServer":"https://mcp.linear.app","resource":"https://mcp.linear.app/mcp","scopes":["read","write"]}},"catalog":{"status":"pending","snapshot":null,"source":null,"baselineHash":null,"lastDiff":null,"changedAt":null,"drifted":false},"errors":{"status":"skip","score":null,"graded":null,"toolCount":0,"sampleCount":0,"errorCount":0,"worst":[],"costUsd":0},"conformance":{"status":"skip","cell":{"id":"conformance:local-darwin","kind":"conformance","status":"skip","host":"local-darwin","source":"local","ranAt":"2026-09-02T11:25:11.314Z","summary":"needs credentials (401): the conformance client cannot complete OAuth","detail":{"version":"0.1.16","scenarios":[]},"error":{"code":"AUTH_REQUIRED","cause":"unauthenticated initialize answered 401","fix":"Add a bearer token to the enrollment to run protocol scenarios against an OAuth-protected server.","retryable":false}}},"pending":[],"urls":{"report":"https://agentwares-agentcheck.vercel.app/mcpcheck/demo/linear","json":"https://agentwares-agentcheck.vercel.app/mcpcheck/demo/linear/report.json","trust":"https://agentwares-agentcheck.vercel.app/mcpcheck/demo/linear/trust.json","badge":"https://agentwares-agentcheck.vercel.app/mcpcheck/demo/badge/linear.svg"},"badge":{"label":"mcpcheck","message":"tested","status":"passing","url":"https://agentwares-agentcheck.vercel.app/mcpcheck/demo/badge/linear.svg","markdown":"[![mcpcheck](https://agentwares-agentcheck.vercel.app/mcpcheck/demo/badge/linear.svg)](https://agentwares-agentcheck.vercel.app/mcpcheck/demo/linear)"},"history":[],"brand":{"productName":"mcpcheck","homeUrl":"https://agentwares-agentcheck.vercel.app/mcpcheck"},"generatedAt":"2026-09-08T05:10:30.679Z"}