{"record":{"id":"6d2bf67fe6ddafbd","repo":"eyaltoledano/claude-task-master","slug":"mcp-provider-requires-session-object","errorCode":null,"errorMessage":"MCP provider requires session object","messagePattern":"MCP provider requires session object","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"mcp-server/src/custom-sdk/index.js","lineNumber":19,"sourceCode":"/**\n * src/ai-providers/custom-sdk/mcp/index.js\n *\n * AI SDK factory function for MCP provider.\n * Creates MCP language model instances with session-based AI operations.\n */\n\nimport { MCPLanguageModel } from './language-model.js';\n\n/**\n * Create MCP provider factory function following AI SDK patterns\n * @param {object} options - Provider options\n * @param {object} options.session - MCP session object\n * @param {object} options.defaultSettings - Default settings for the provider\n * @returns {Function} Provider factory function\n */\nexport function createMCP(options = {}) {\n\tif (!options.session) {\n\t\tthrow new Error('MCP provider requires session object');\n\t}\n\n\t// Return the provider factory function that AI SDK expects\n\tconst provider = function (modelId, settings = {}) {\n\t\tif (new.target) {\n\t\t\tthrow new Error(\n\t\t\t\t'The MCP model function cannot be called with the new keyword.'\n\t\t\t);\n\t\t}\n\n\t\treturn new MCPLanguageModel({\n\t\t\tsession: options.session,\n\t\t\tmodelId: modelId || 'claude-3-5-sonnet-20241022',\n\t\t\tsettings: {\n\t\t\t\ttemperature: settings.temperature,\n\t\t\t\tmaxTokens: settings.maxTokens,\n\t\t\t\t...options.defaultSettings,\n\t\t\t\t...settings","sourceCodeStart":1,"sourceCodeEnd":37,"githubUrl":"https://github.com/eyaltoledano/claude-task-master/blob/c0c98d367c55296bfe69e65680625b6db437af02/mcp-server/src/custom-sdk/index.js#L1-L37","documentation":"createMCP builds an AI SDK provider around an MCP session; it throws if options.session is absent because every later call (sampling via MCPLanguageModel) needs the session. It validates eagerly so misconfiguration surfaces at provider creation, not at first generation.","triggerScenarios":"Calling createMCP() with no options, with an options object that omits session, or with session explicitly set to undefined/null; e.g. getClient wiring a provider without an established MCP session.","commonSituations":"MCP client not connected before provider creation; destructuring options incorrectly; passing settings where session is expected.","solutions":["Create and connect the MCP session first, then pass it: createMCP({ session: mcpSession })","Ensure getClient obtains the session (await connection establishment) before calling createMCP","Log options at the call site to confirm the session object is actually present"],"exampleFix":"// before\nconst provider = createMCP({ defaultSettings });\n// after\nconst provider = createMCP({ session: mcpClient, defaultSettings });","handlingStrategy":"validation","validationCode":"function canCreateMCP(options) {\n  return !!options && !!options.session && typeof options.session === 'object';\n}","typeGuard":"function hasSession(options) {\n  return typeof options === 'object' && options !== null &&\n    'session' in options && options.session != null &&\n    typeof options.session === 'object';\n}","tryCatchPattern":"try { const provider = createMCP({ session }); } catch (e) {\n  if (e.message === 'MCP provider requires session object') {\n    // connect the MCP client first, then retry\n  } else throw e;\n}","preventionTips":["Await MCP client connection before building the provider","Centralize provider creation in one factory that guarantees a session","Type the options object so session is non-optional"],"tags":["mcp","ai-sdk","provider","missing-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"c0c98d367c55296bfe69e65680625b6db437af02","analyzedAt":"2026-08-29T02:56:26.071Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}