paperclipai/paperclip · error

Teams catalog manifest not found. Checked: ${catalogPackageR

Error message

Teams catalog manifest not found. Checked: ${catalogPackageRootCandidates.map((root) => path.join(root, "generated/catalog.json")).join(", ")}. Run pnpm --filter @paperclipai/teams-catalog build:manifest.

What it means

Error "Teams catalog manifest not found. Checked: ${catalogPackageRootCandidates.map((root) => path.join(root, "generated/catalog.json")).join(", ")}. Run pnpm --filter @paperclipai/teams-catalog build:manifest." thrown in paperclipai/paperclip.

Source

Thrown at server/src/services/teams-catalog.ts:166

    path.resolve(process.cwd(), "packages/teams-catalog"),
    path.resolve(serviceDir, "../../..", "packages/teams-catalog"),
  ];
  return Array.from(new Set(candidates));
}

async function statCatalogManifest() {
  for (const candidateRoot of catalogPackageRootCandidates) {
    const candidateManifestPath = path.join(candidateRoot, "generated/catalog.json");
    try {
      const stats = await fs.stat(candidateManifestPath);
      catalogPackageRoot = candidateRoot;
      catalogManifestPath = candidateManifestPath;
      return { stats, manifestPath: candidateManifestPath };
    } catch {
      // Try the next known runtime layout before reporting all checked paths.
    }
  }
  throw new Error(
    `Teams catalog manifest not found. Checked: ${catalogPackageRootCandidates.map((root) => path.join(root, "generated/catalog.json")).join(", ")}. Run pnpm --filter @paperclipai/teams-catalog build:manifest.`,
  );
}

async function getCatalogManifest() {
  const { stats, manifestPath } = await statCatalogManifest();
  if (
    cachedCatalogManifest
    && cachedCatalogManifest.manifestPath === manifestPath
    && cachedCatalogManifest.mtimeMs === stats.mtimeMs
    && cachedCatalogManifest.size === stats.size
  ) {
    return cachedCatalogManifest.manifest;
  }

  const manifest = JSON.parse(await fs.readFile(manifestPath, "utf8")) as CatalogManifestFile;
  cachedCatalogManifest = {
    manifest,

View on GitHub (pinned to 120ae5428f)

Solutions

  1. Run 'pnpm --filter @paperclipai/teams-catalog build:manifest' from the repo root to generate catalog.json at one of the checked locations, then restart.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/src/services/teams-catalog.ts:166 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18). Data as JSON: /api/errors/86d28b0f08e30d4d. Report an issue: GitHub.