eyaltoledano/claude-task-master · error

The MCP model function cannot be called with the new keyword

Error message

The MCP model function cannot be called with the new keyword.

What it means

The object returned by createMCP is a plain provider function implementing the AI SDK provider-callable convention; calling it with `new` is unsupported. The library explicitly rejects new.target so users get a clear message instead of subtle failures from skipping MCPLanguageModel construction. Call the provider as a normal function: provider('model-id', settings).

Source

Thrown at mcp-server/src/custom-sdk/index.js:25

import { MCPLanguageModel } from './language-model.js';

/**
 * Create MCP provider factory function following AI SDK patterns
 * @param {object} options - Provider options
 * @param {object} options.session - MCP session object
 * @param {object} options.defaultSettings - Default settings for the provider
 * @returns {Function} Provider factory function
 */
export function createMCP(options = {}) {
	if (!options.session) {
		throw new Error('MCP provider requires session object');
	}

	// Return the provider factory function that AI SDK expects
	const provider = function (modelId, settings = {}) {
		if (new.target) {
			throw new Error(
				'The MCP model function cannot be called with the new keyword.'
			);
		}

		return new MCPLanguageModel({
			session: options.session,
			modelId: modelId || 'claude-3-5-sonnet-20241022',
			settings: {
				temperature: settings.temperature,
				maxTokens: settings.maxTokens,
				...options.defaultSettings,
				...settings
			}
		});
	};

	// Add required methods for AI SDK compatibility
	provider.languageModel = (modelId, settings) => provider(modelId, settings);

View on GitHub (pinned to c0c98d367c)

Solutions

  1. Remove the `new` keyword and call the provider directly: ai.generateText({ model: provider('model-id') })
  2. Use the languageModel property or template literal form (e.g. mcp('model-id')) per AI SDK v1 provider convention

Example fix

// before
const model = new mcpProvider('my-model', {});
// after
const model = mcpProvider('my-model');
Defensive patterns

Strategy: validation

Prevention

When it happens

Trigger: Writing `new provider(modelId)` or `new createMCP({session})(modelId)` — treating the provider factory as a class constructor.

Common situations: Refactoring from class-based providers to AI SDK function-style providers; copy-pasting old instantiation code.

Related errors


AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/b1100997e0badb0e. Report an issue: GitHub.