different-ai/openwork · error · EnterpriseMcpCatalogError
MCP_CATALOG_CURSOR_LOOP
MCP_CATALOG_CURSOR_LOOP
Error message
MCP_CATALOG_CURSOR_LOOP
What it means
Error "MCP_CATALOG_CURSOR_LOOP" thrown in different-ai/openwork.
Source
Thrown at packages/enterprise-mcp-client/src/resource-catalog.ts:66
if (items.length >= ENTERPRISE_MCP_RESOURCE_ITEM_LIMIT) {
throw new EnterpriseMcpCatalogError("MCP_CATALOG_ITEM_LIMIT")
}
const identifier = item.uri ?? item.uriTemplate ?? ""
if (identifiers.has(identifier)) throw new EnterpriseMcpCatalogError("MCP_CATALOG_DUPLICATE_RESOURCE")
const bytes = assertDescriptor(item)
if (catalogBytes + bytes > ENTERPRISE_MCP_RESOURCE_CATALOG_LIMIT_BYTES) {
throw new EnterpriseMcpCatalogError("MCP_CATALOG_BYTE_LIMIT")
}
catalogBytes += bytes
identifiers.add(identifier)
items.push(item)
}
if (!result.nextCursor) return items
if (Buffer.byteLength(result.nextCursor, "utf8") > ENTERPRISE_MCP_RESOURCE_URI_LIMIT_BYTES) {
throw new EnterpriseMcpCatalogError("MCP_CATALOG_CURSOR_SIZE_LIMIT")
}
if (cursors.has(result.nextCursor)) throw new EnterpriseMcpCatalogError("MCP_CATALOG_CURSOR_LOOP")
cursors.add(result.nextCursor)
cursor = result.nextCursor
}
throw new EnterpriseMcpCatalogError("MCP_CATALOG_PAGE_LIMIT")
}
export function collectEnterpriseMcpResources(input: {
listPage: (cursor: string | undefined, options: RequestOptions) => Promise<ResourcePage>
requestOptions: RequestOptions
}) {
return collectPages({
requestOptions: input.requestOptions,
listPage: async (cursor, options) => {
const result = await input.listPage(cursor, options)
return { items: result.resources, nextCursor: result.nextCursor }
},
})View on GitHub (pinned to 2b7df46e8a)
When it happens
Trigger: Thrown at packages/enterprise-mcp-client/src/resource-catalog.ts:66 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/b3d6b5753d49f1e8.
Report an issue: GitHub.