ComposioHQ/composio · error · Error

Local tool is not supported on . Supported platforms: .

Error message

Local tool ${resolution.finalSlug} is not supported on ${resolution.currentPlatform}. Supported platforms: ${formatSupportedPlatforms(resolution.tool.platforms)}.

What it means

Thrown by executeLocalToolBySlug when the resolved local tool is declared as platform-restricted and the current OS/platform is not in its supported list. Resolution is done with includeUnsupported: true so the tool can be found, then explicitly rejected before execution. The message lists the tool's supported platforms.

Solutions

  1. Check the tool's platforms list in the error message and run on a supported OS
  2. Guard with isLocalToolSupported(slug) (or check tool.platforms) before invoking
  3. Use a remote/cloud equivalent tool instead of the local one
  4. Skip the tool conditionally based on process.platform

Example fix

// before
await executeLocalToolBySlug('imessage__send', args);
// after
const resolution = resolveLocalTool('imessage__send');
if (resolution?.supported) {
  await executeLocalToolBySlug('imessage__send', args);
} else {
  console.log(`unsupported on ${process.platform}`);
}
Defensive patterns

Strategy: type-guard

Validate before calling

import { resolveLocalTool } from '@composio/cli-local-tools';
const ok = resolveLocalTool(slug)?.supported === true;

Type guard

const isSupportedHere = (slug: string) =>
  resolveLocalTool(slug, { includeUnsupported: true })?.supported === true;

Try / catch

try { await executeLocalToolBySlug(slug, args); } catch (e) { if (e instanceof Error && e.message.includes('is not supported on')) { /* skip or fallback */ } }

Prevention

When it happens

Trigger: Calling a Composio CLI local tool (e.g. an iMessage/Beeper tool that only supports darwin) on an unsupported OS such as Linux or Windows; calling executeLocalToolBySlug('beeper-imessage__send_message', ...) from a non-macOS environment.

Common situations: Developing on Linux/Windows but running a macOS-only toolkit; CI pipelines running CLI local tools; Docker containers without platform-matching binaries.

Related errors


AI-assisted analysis of ComposioHQ/composio@64b1b85502 (2026-08-28). Data as JSON: /api/errors/337fe43e70dea813. Report an issue: GitHub.

Appendix: source

Thrown at ts/packages/cli-local-tools/src/registry.ts:233

  });
  if (!resolution) return null;
  return {
    finalSlug: resolution.finalSlug,
    toolkit: resolution.toolkit.slug,
    schema: toCustomTool(resolution.toolkit, resolution.tool, resolution.currentPlatform)
      .inputSchema,
    version: 'local',
  };
};

export const executeLocalToolBySlug = async (
  slug: string,
  args: Record<string, unknown>
): Promise<Record<string, unknown> | null> => {
  const resolution = resolveLocalTool(slug, { includeUnsupported: true });
  if (!resolution) return null;
  if (!resolution.supported) {
    throw new Error(
      `Local tool ${resolution.finalSlug} is not supported on ${resolution.currentPlatform}. Supported platforms: ${formatSupportedPlatforms(resolution.tool.platforms)}.`
    );
  }

  const parsed = resolution.tool.inputParams.safeParse(args);
  if (!parsed.success) {
    throw new Error(
      `Invalid arguments for local tool ${resolution.finalSlug}: ${parsed.error.issues
        .map(issue => `${issue.path.join('.') || '<root>'}: ${issue.message}`)
        .join('; ')}`
    );
  }

  return executeLocalTool(resolution.tool.execution, parsed.data as Record<string, unknown>, {
    toolkit: resolution.toolkit,
    tool: resolution.tool,
    finalSlug: resolution.finalSlug,
    platform: resolution.currentPlatform,

View on GitHub (pinned to 64b1b85502)