@burdenoff/mcp-libs 2026.825.2 → 2026.828.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-YOSQUY3M.js → chunk-BSNL65PZ.js} +2 -2
- package/dist/{chunk-YOSQUY3M.js.map → chunk-BSNL65PZ.js.map} +1 -1
- package/dist/{chunk-RHWHUY5Y.js → chunk-QQYJVKJE.js} +3 -3
- package/dist/{chunk-RHWHUY5Y.js.map → chunk-QQYJVKJE.js.map} +1 -1
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/modules/adaptercloud/index.cjs.map +1 -1
- package/dist/modules/adaptercloud/index.js +1 -1
- package/dist/modules/artistrybase/index.cjs +8 -8
- package/dist/modules/artistrybase/index.cjs.map +1 -1
- package/dist/modules/artistrybase/index.js +9 -9
- package/dist/modules/artistrybase/index.js.map +1 -1
- package/dist/modules/assethandler/index.cjs.map +1 -1
- package/dist/modules/assethandler/index.js +1 -1
- package/dist/modules/atheletebridge/index.cjs.map +1 -1
- package/dist/modules/atheletebridge/index.js +1 -1
- package/dist/modules/auth/index.cjs.map +1 -1
- package/dist/modules/auth/index.js +3 -3
- package/dist/modules/billing/index.cjs.map +1 -1
- package/dist/modules/billing/index.js +1 -1
- package/dist/modules/brainyrich/index.cjs +13 -3
- package/dist/modules/brainyrich/index.cjs.map +1 -1
- package/dist/modules/brainyrich/index.js +14 -4
- package/dist/modules/brainyrich/index.js.map +1 -1
- package/dist/modules/buildmyiq/index.cjs.map +1 -1
- package/dist/modules/buildmyiq/index.js +1 -1
- package/dist/modules/channels/index.cjs.map +1 -1
- package/dist/modules/channels/index.js +1 -1
- package/dist/modules/collabkin/index.cjs.map +1 -1
- package/dist/modules/collabkin/index.js +1 -1
- package/dist/modules/comradecircle/index.cjs.map +1 -1
- package/dist/modules/comradecircle/index.js +1 -1
- package/dist/modules/conversations/index.cjs.map +1 -1
- package/dist/modules/conversations/index.js +1 -1
- package/dist/modules/coolandlovely/index.cjs.map +1 -1
- package/dist/modules/coolandlovely/index.js +1 -1
- package/dist/modules/cosmicintersection/index.cjs.map +1 -1
- package/dist/modules/cosmicintersection/index.js +1 -1
- package/dist/modules/crewfoundry/index.cjs.map +1 -1
- package/dist/modules/crewfoundry/index.js +1 -1
- package/dist/modules/devportal/index.cjs.map +1 -1
- package/dist/modules/devportal/index.js +1 -1
- package/dist/modules/ecoimpacthub/index.cjs +12 -6
- package/dist/modules/ecoimpacthub/index.cjs.map +1 -1
- package/dist/modules/ecoimpacthub/index.js +13 -7
- package/dist/modules/ecoimpacthub/index.js.map +1 -1
- package/dist/modules/eventfullymanaged/index.cjs.map +1 -1
- package/dist/modules/eventfullymanaged/index.js +1 -1
- package/dist/modules/export/index.cjs.map +1 -1
- package/dist/modules/export/index.js +1 -1
- package/dist/modules/files/index.cjs.map +1 -1
- package/dist/modules/files/index.js +1 -1
- package/dist/modules/ggnomad/index.cjs.map +1 -1
- package/dist/modules/ggnomad/index.js +1 -1
- package/dist/modules/govcitizenhub/index.cjs.map +1 -1
- package/dist/modules/govcitizenhub/index.js +1 -1
- package/dist/modules/groups/index.cjs.map +1 -1
- package/dist/modules/groups/index.js +1 -1
- package/dist/modules/headshotmarketing/index.cjs.map +1 -1
- package/dist/modules/headshotmarketing/index.js +1 -1
- package/dist/modules/health/index.cjs.map +1 -1
- package/dist/modules/health/index.js +1 -1
- package/dist/modules/hookmovies/index.cjs.map +1 -1
- package/dist/modules/hookmovies/index.js +1 -1
- package/dist/modules/housingvista/index.cjs.map +1 -1
- package/dist/modules/housingvista/index.js +1 -1
- package/dist/modules/integrations/index.cjs.map +1 -1
- package/dist/modules/integrations/index.js +1 -1
- package/dist/modules/intelwatchtower/index.cjs.map +1 -1
- package/dist/modules/intelwatchtower/index.js +1 -1
- package/dist/modules/kadaikodi/index.cjs.map +1 -1
- package/dist/modules/kadaikodi/index.js +1 -1
- package/dist/modules/labsofscience/index.cjs.map +1 -1
- package/dist/modules/labsofscience/index.js +1 -1
- package/dist/modules/manufacturedops/index.cjs.map +1 -1
- package/dist/modules/manufacturedops/index.js +1 -1
- package/dist/modules/movethewheels/index.cjs.map +1 -1
- package/dist/modules/movethewheels/index.js +1 -1
- package/dist/modules/mybodyshield/index.cjs.map +1 -1
- package/dist/modules/mybodyshield/index.js +1 -1
- package/dist/modules/notifications/index.cjs.map +1 -1
- package/dist/modules/notifications/index.js +1 -1
- package/dist/modules/organizations/index.cjs.map +1 -1
- package/dist/modules/organizations/index.js +1 -1
- package/dist/modules/planmagnet/index.cjs.map +1 -1
- package/dist/modules/planmagnet/index.js +1 -1
- package/dist/modules/products/index.cjs.map +1 -1
- package/dist/modules/products/index.js +1 -1
- package/dist/modules/proserviceworld/index.cjs.map +1 -1
- package/dist/modules/proserviceworld/index.js +1 -1
- package/dist/modules/rbac/index.cjs.map +1 -1
- package/dist/modules/rbac/index.js +1 -1
- package/dist/modules/sandbox/index.cjs.map +1 -1
- package/dist/modules/sandbox/index.js +1 -1
- package/dist/modules/scheduler/index.cjs.map +1 -1
- package/dist/modules/scheduler/index.js +1 -1
- package/dist/modules/security/index.cjs.map +1 -1
- package/dist/modules/security/index.js +1 -1
- package/dist/modules/semanticfed/index.cjs.map +1 -1
- package/dist/modules/semanticfed/index.js +1 -1
- package/dist/modules/store/index.cjs.map +1 -1
- package/dist/modules/store/index.js +1 -1
- package/dist/modules/subscriberbot/index.cjs.map +1 -1
- package/dist/modules/subscriberbot/index.js +1 -1
- package/dist/modules/support/index.cjs.map +1 -1
- package/dist/modules/support/index.js +1 -1
- package/dist/modules/tags/index.cjs.map +1 -1
- package/dist/modules/tags/index.js +1 -1
- package/dist/modules/technospam/index.cjs.map +1 -1
- package/dist/modules/technospam/index.js +1 -1
- package/dist/modules/theculturepost/index.cjs +16 -4
- package/dist/modules/theculturepost/index.cjs.map +1 -1
- package/dist/modules/theculturepost/index.js +17 -5
- package/dist/modules/theculturepost/index.js.map +1 -1
- package/dist/modules/theglobalfuel/index.cjs.map +1 -1
- package/dist/modules/theglobalfuel/index.js +1 -1
- package/dist/modules/timecampus/index.cjs +18 -9
- package/dist/modules/timecampus/index.cjs.map +1 -1
- package/dist/modules/timecampus/index.js +19 -10
- package/dist/modules/timecampus/index.js.map +1 -1
- package/dist/modules/tours/index.cjs.map +1 -1
- package/dist/modules/tours/index.js +1 -1
- package/dist/modules/vibecontrols/index.cjs.map +1 -1
- package/dist/modules/vibecontrols/index.js +2 -2
- package/dist/modules/workspaces/index.cjs.map +1 -1
- package/dist/modules/workspaces/index.js +1 -1
- package/dist/{tool-name-Bvb36qmq.d.cts → tool-name-DYWaobFF.d.cts} +1 -1
- package/dist/{tool-name-BaPNMZdj.d.ts → tool-name-nso0HFYX.d.ts} +1 -1
- package/package.json +30 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/comradecircle/operations.ts","../../../src/modules/comradecircle/tools/shared.ts","../../../src/modules/comradecircle/tools/circles.ts","../../../src/modules/comradecircle/tools/channels.ts","../../../src/modules/comradecircle/tools/memberships.ts","../../../src/modules/comradecircle/tools/profiles.ts","../../../src/modules/comradecircle/tools/posts.ts","../../../src/modules/comradecircle/tools/comments.ts","../../../src/modules/comradecircle/tools/feed.ts","../../../src/modules/comradecircle/tools/events.ts","../../../src/modules/comradecircle/tools/polls.ts","../../../src/modules/comradecircle/tools/health.ts","../../../src/modules/comradecircle/resources.ts","../../../src/modules/comradecircle/prompts.ts","../../../src/modules/comradecircle/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n | { _meta?: { progressToken?: string | number } }\n | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the Comradecircle MCP module.\n *\n * Comradecircle is the unified social, communication & engagement platform\n * (workspace-layer greenfield product). Backend subgraph:\n * ~/products/comradecircle/wspace-comradecircle-svc/ (Hive service name `comradecircle`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — Comradecircle inputs do NOT carry a workspaceId.\n *\n * Every product-owned root field is prefixed `com` and every type/enum/input is\n * prefixed `Com` (the subgraph's collision-avoidance contract); operations call\n * fields by their EXACT real names. Uses template-string interpolation (not gql\n * tagged fragments) to match the canonical kadaikodi/vibecontrols modules.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PAGE_INFO_FIELDS = `cursor hasMore`;\n\nexport const CIRCLE_FIELDS = `\n id name slug description topic tags status visibility memberCount\n workspaceId createdAt updatedAt\n avatar { id }\n`;\n\nexport const CHANNEL_FIELDS = `\n id circleId name slug description type visibility position isArchived\n workspaceId createdAt updatedAt\n`;\n\nexport const MEMBERSHIP_FIELDS = `\n id circleId memberId role status joinedAt workspaceId createdAt updatedAt\n member { id }\n`;\n\nexport const PROFILE_FIELDS = `\n id memberId displayName headline bio interests skills presence discoverable\n workspaceId createdAt updatedAt\n avatar { id }\n member { id }\n`;\n\nexport const COMMENT_FIELDS = `\n id postId parentId authorId body isHidden workspaceId createdAt updatedAt\n author { id }\n`;\n\nexport const REACTION_FIELDS = `\n id postId memberId type createdAt workspaceId\n member { id }\n`;\n\nexport const POST_FIELDS = `\n id channelId authorId body status tags attachmentFileIds isPinned\n commentCount reactionCount workspaceId createdAt updatedAt\n author { id }\n`;\n\nexport const RSVP_FIELDS = `\n id eventId memberId status note workspaceId createdAt updatedAt\n member { id }\n`;\n\nexport const EVENT_FIELDS = `\n id circleId hostId title description mode status location joinUrl capacity\n rsvpCount startsAt endsAt tags workspaceId createdAt updatedAt\n host { id }\n`;\n\nexport const POLL_OPTION_FIELDS = `\n id pollId label position voteCount workspaceId createdAt\n`;\n\nexport const POLL_FIELDS = `\n id circleId question status isAnonymous allowMultiple closesAt\n workspaceId createdAt updatedAt\n options { ${POLL_OPTION_FIELDS} }\n`;\n\nexport const FEED_FOLLOW_FIELDS = `\n id followerId targetId targetType muted workspaceId createdAt updatedAt\n`;\n\n// ---------------------------------------------------------------------------\n// Circles\n// ---------------------------------------------------------------------------\n\nexport const GET_CIRCLE = `\n query ComradecircleGetCircle($id: ID!) {\n comCircle(id: $id) {\n ${CIRCLE_FIELDS}\n channels { ${CHANNEL_FIELDS} }\n memberships { ${MEMBERSHIP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_CIRCLES = `\n query ComradecircleListCircles(\n $pagination: PaginationInput\n $status: ComCircleStatus\n $visibility: ComCircleVisibility\n ) {\n comListCircles(pagination: $pagination, status: $status, visibility: $visibility) {\n items { ${CIRCLE_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const CREATE_CIRCLE = `\n mutation ComradecircleCreateCircle($input: ComCreateCircleInput!) {\n comCreateCircle(input: $input) {\n ${CIRCLE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CIRCLE = `\n mutation ComradecircleUpdateCircle($id: ID!, $input: ComUpdateCircleInput!) {\n comUpdateCircle(id: $id, input: $input) {\n ${CIRCLE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_CIRCLE = `\n mutation ComradecircleArchiveCircle($id: ID!) {\n comArchiveCircle(id: $id)\n }\n`;\n\nexport const JOIN_CIRCLE = `\n mutation ComradecircleJoinCircle($circleId: ID!) {\n comJoinCircle(circleId: $circleId) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const LEAVE_CIRCLE = `\n mutation ComradecircleLeaveCircle($circleId: ID!) {\n comLeaveCircle(circleId: $circleId)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Channels\n// ---------------------------------------------------------------------------\n\nexport const LIST_CHANNELS = `\n query ComradecircleListChannels($circleId: ID!) {\n comListChannels(circleId: $circleId) {\n ${CHANNEL_FIELDS}\n }\n }\n`;\n\nexport const CREATE_CHANNEL = `\n mutation ComradecircleCreateChannel($input: ComCreateChannelInput!) {\n comCreateChannel(input: $input) {\n ${CHANNEL_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CHANNEL = `\n mutation ComradecircleUpdateChannel($id: ID!, $input: ComUpdateChannelInput!) {\n comUpdateChannel(id: $id, input: $input) {\n ${CHANNEL_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Memberships\n// ---------------------------------------------------------------------------\n\nexport const LIST_MEMBERSHIPS = `\n query ComradecircleListMemberships(\n $circleId: ID\n $pagination: PaginationInput\n $status: ComMembershipStatus\n ) {\n comListMemberships(circleId: $circleId, pagination: $pagination, status: $status) {\n items { ${MEMBERSHIP_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const SET_MEMBER_ROLE = `\n mutation ComradecircleSetMemberRole($membershipId: ID!, $role: ComMemberRole!) {\n comSetMemberRole(membershipId: $membershipId, role: $role) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Profiles\n// ---------------------------------------------------------------------------\n\nexport const GET_PROFILE = `\n query ComradecircleGetProfile($memberId: ID!) {\n comProfile(memberId: $memberId) {\n ${PROFILE_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROFILES = `\n query ComradecircleListProfiles($discoverable: Boolean, $pagination: PaginationInput) {\n comListProfiles(discoverable: $discoverable, pagination: $pagination) {\n items { ${PROFILE_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const UPSERT_PROFILE = `\n mutation ComradecircleUpsertProfile($input: ComUpsertProfileInput!) {\n comUpsertProfile(input: $input) {\n ${PROFILE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Posts\n// ---------------------------------------------------------------------------\n\nexport const GET_POST = `\n query ComradecircleGetPost($id: ID!) {\n comPost(id: $id) {\n ${POST_FIELDS}\n comments { ${COMMENT_FIELDS} }\n reactions { ${REACTION_FIELDS} }\n }\n }\n`;\n\nexport const LIST_POSTS = `\n query ComradecircleListPosts(\n $channelId: ID\n $pagination: PaginationInput\n $status: ComPostStatus\n ) {\n comListPosts(channelId: $channelId, pagination: $pagination, status: $status) {\n items { ${POST_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const CREATE_POST = `\n mutation ComradecircleCreatePost($input: ComCreatePostInput!) {\n comCreatePost(input: $input) {\n ${POST_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_POST = `\n mutation ComradecircleUpdatePost($id: ID!, $input: ComUpdatePostInput!) {\n comUpdatePost(id: $id, input: $input) {\n ${POST_FIELDS}\n }\n }\n`;\n\nexport const REMOVE_POST = `\n mutation ComradecircleRemovePost($id: ID!) {\n comRemovePost(id: $id)\n }\n`;\n\nexport const REACT_TO_POST = `\n mutation ComradecircleReactToPost($postId: ID!, $type: ComReactionType!) {\n comReactToPost(postId: $postId, type: $type) {\n ${POST_FIELDS}\n reactions { ${REACTION_FIELDS} }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Comments\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMMENTS = `\n query ComradecircleListComments($postId: ID!) {\n comListComments(postId: $postId) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\nexport const ADD_COMMENT = `\n mutation ComradecircleAddComment($input: ComCreateCommentInput!) {\n comAddComment(input: $input) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Feed + follows\n// ---------------------------------------------------------------------------\n\nexport const MY_FEED = `\n query ComradecircleMyFeed($pagination: PaginationInput) {\n comMyFeed(pagination: $pagination) {\n items { ${POST_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const MY_FOLLOWS = `\n query ComradecircleMyFollows($targetType: ComFollowTargetType) {\n comMyFollows(targetType: $targetType) {\n ${FEED_FOLLOW_FIELDS}\n }\n }\n`;\n\nexport const FOLLOW = `\n mutation ComradecircleFollow($input: ComFollowInput!) {\n comFollow(input: $input) {\n ${FEED_FOLLOW_FIELDS}\n }\n }\n`;\n\nexport const UNFOLLOW = `\n mutation ComradecircleUnfollow($input: ComFollowInput!) {\n comUnfollow(input: $input)\n }\n`;\n\nexport const MUTE_FOLLOW = `\n mutation ComradecircleMuteFollow($id: ID!, $muted: Boolean!) {\n comMuteFollow(id: $id, muted: $muted) {\n ${FEED_FOLLOW_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Events\n// ---------------------------------------------------------------------------\n\nexport const GET_EVENT = `\n query ComradecircleGetEvent($id: ID!) {\n comEvent(id: $id) {\n ${EVENT_FIELDS}\n rsvps { ${RSVP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_EVENTS = `\n query ComradecircleListEvents(\n $circleId: ID\n $pagination: PaginationInput\n $status: ComEventStatus\n ) {\n comListEvents(circleId: $circleId, pagination: $pagination, status: $status) {\n items { ${EVENT_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const CREATE_EVENT = `\n mutation ComradecircleCreateEvent($input: ComCreateEventInput!) {\n comCreateEvent(input: $input) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_EVENT = `\n mutation ComradecircleUpdateEvent($id: ID!, $input: ComUpdateEventInput!) {\n comUpdateEvent(id: $id, input: $input) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_EVENT = `\n mutation ComradecircleTransitionEvent($id: ID!, $status: ComEventStatus!) {\n comTransitionEvent(id: $id, status: $status) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const RSVP_EVENT = `\n mutation ComradecircleRsvpEvent($eventId: ID!, $status: ComRsvpStatus!, $note: String) {\n comRsvpEvent(eventId: $eventId, status: $status, note: $note) {\n ${RSVP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Polls\n// ---------------------------------------------------------------------------\n\nexport const GET_POLL = `\n query ComradecircleGetPoll($id: ID!) {\n comPoll(id: $id) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const LIST_POLLS = `\n query ComradecircleListPolls($circleId: ID!, $status: ComPollStatus) {\n comListPolls(circleId: $circleId, status: $status) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const CREATE_POLL = `\n mutation ComradecircleCreatePoll($input: ComCreatePollInput!) {\n comCreatePoll(input: $input) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const CLOSE_POLL = `\n mutation ComradecircleClosePoll($id: ID!) {\n comClosePoll(id: $id) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const VOTE_POLL = `\n mutation ComradecircleVotePoll($pollId: ID!, $optionId: ID!) {\n comVotePoll(pollId: $pollId, optionId: $optionId) {\n ${POLL_OPTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query ComradecircleHealth {\n comHealth\n }\n`;\n","/**\n * Shared zod schemas for the Comradecircle tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values. Pagination is exposed as flat\n * limit/offset/cursor args and re-assembled into the subgraph's\n * `PaginationInput` shape by each list tool.\n */\n\nimport { z } from 'zod';\n\nexport const ChannelTypeEnum = z\n .enum(['ANNOUNCEMENT', 'FORUM', 'TEXT', 'VOICE'])\n .describe('Kind of channel within a circle');\n\nexport const ChannelVisibilityEnum = z\n .enum(['CIRCLE', 'PRIVATE'])\n .describe('Who can see a channel: CIRCLE-wide or PRIVATE');\n\nexport const CircleStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'SUSPENDED'])\n .describe('Lifecycle/moderation status of a circle');\n\nexport const CircleVisibilityEnum = z\n .enum(['PUBLIC', 'PRIVATE', 'SECRET'])\n .describe('Discoverability of a circle: PUBLIC, PRIVATE (join-by-request), or SECRET');\n\nexport const EventModeEnum = z\n .enum(['ONLINE', 'IN_PERSON', 'HYBRID'])\n .describe('Delivery mode of an event');\n\nexport const EventStatusEnum = z\n .enum(['SCHEDULED', 'LIVE', 'COMPLETED', 'CANCELLED'])\n .describe('Lifecycle status of an event');\n\nexport const FollowTargetTypeEnum = z\n .enum(['CIRCLE', 'CHANNEL', 'MEMBER'])\n .describe('What a feed-follow targets');\n\nexport const MemberRoleEnum = z\n .enum(['OWNER', 'ADMIN', 'MODERATOR', 'MEMBER'])\n .describe('Role of a member within a circle');\n\nexport const MembershipStatusEnum = z\n .enum(['ACTIVE', 'PENDING', 'LEFT', 'BANNED'])\n .describe('Status of a circle membership');\n\nexport const PollStatusEnum = z.enum(['OPEN', 'CLOSED']).describe('Lifecycle status of a poll');\n\nexport const PostStatusEnum = z\n .enum(['DRAFT', 'PUBLISHED', 'HIDDEN', 'REMOVED'])\n .describe('Publication status of a post');\n\nexport const PresenceEnum = z\n .enum(['ONLINE', 'AWAY', 'BUSY', 'OFFLINE'])\n .describe('Presence indicator of a member profile');\n\nexport const ReactionTypeEnum = z\n .enum(['LIKE', 'LOVE', 'CELEBRATE', 'INSIGHTFUL', 'SUPPORT', 'LAUGH'])\n .describe('Typed reaction on a post');\n\nexport const RsvpStatusEnum = z\n .enum(['GOING', 'INTERESTED', 'NOT_GOING', 'WAITLISTED'])\n .describe('RSVP response to an event');\n\n/**\n * Assemble the subgraph's `PaginationInput` from flat tool args. Returns\n * `undefined` when no pagination args were supplied so the backend applies its\n * own defaults (limit 50, offset 0).\n */\nexport function buildPagination(\n limit?: number,\n offset?: number,\n cursor?: string,\n): Record<string, unknown> | undefined {\n if (limit === undefined && offset === undefined && cursor === undefined) return undefined;\n const pagination: Record<string, unknown> = {};\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n if (cursor !== undefined) pagination.cursor = cursor;\n return pagination;\n}\n","/**\n * Comradecircle circle tools — community CRUD.\n *\n * Surface (5): circles_{get,list,create,update,archive}. The membership\n * lifecycle (join/leave) lives under the memberships sub-API.\n * Backend root fields carry the `com` product prefix\n * (comCircle / comListCircles / comCreateCircle / …) and are called by their\n * REAL names in operations.ts.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { CircleStatusEnum, CircleVisibilityEnum, buildPagination } from './shared.js';\n\nexport function registerCircleTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_get')),\n {\n title: 'Get Circle',\n description:\n 'Fetch a single Comradecircle circle (community) by ID, including its channels and memberships.',\n inputSchema: { id: z.string().describe('Circle ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comCircle: Record<string, unknown> | null;\n }>(ops.GET_CIRCLE, { id });\n if (!data.comCircle) return errorResult(`Circle ${id} not found`);\n return jsonResult(data.comCircle);\n } catch (error) {\n ctx.logger.error('comradecircle circles_get failed', { error: String(error) });\n return errorResult(\n `Failed to get circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_list')),\n {\n title: 'List Circles',\n description:\n 'List circles in the bound workspace with optional status/visibility filters and pagination.',\n inputSchema: {\n status: CircleStatusEnum.optional().describe('Filter by lifecycle status'),\n visibility: CircleVisibilityEnum.optional().describe('Filter by visibility'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, visibility, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListCircles: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_CIRCLES, {\n status,\n visibility,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListCircles);\n } catch (error) {\n ctx.logger.error('comradecircle circles_list failed', { error: String(error) });\n return errorResult(\n `Failed to list circles: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_create')),\n {\n title: 'Create Circle',\n description:\n 'Create a new circle (community). `slug` must be unique within the workspace. The caller is enrolled as the OWNER.',\n inputSchema: {\n name: z.string().min(1).describe('Circle display name'),\n slug: z.string().min(1).describe('URL slug, unique within the workspace'),\n description: z.string().optional().describe('Circle description'),\n topic: z.string().optional().describe('Short topic/tagline'),\n tags: z.array(z.string()).optional().describe('Free-form topical tags'),\n visibility: CircleVisibilityEnum.optional().describe('Visibility (default PUBLIC)'),\n avatarFileId: z.string().optional().describe('wspace-files-svc File ID for the avatar'),\n },\n },\n async ({ name, slug, description, topic, tags, visibility, avatarFileId }) => {\n try {\n const input: Record<string, unknown> = { name, slug };\n if (description !== undefined) input.description = description;\n if (topic !== undefined) input.topic = topic;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n if (avatarFileId !== undefined) input.avatarFileId = avatarFileId;\n\n const data = await ctx.gql.workspace.request<{\n comCreateCircle: Record<string, unknown>;\n }>(ops.CREATE_CIRCLE, { input });\n return jsonResult(data.comCreateCircle);\n } catch (error) {\n ctx.logger.error('comradecircle circles_create failed', { error: String(error) });\n return errorResult(\n `Failed to create circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_update')),\n {\n title: 'Update Circle',\n description:\n 'Update a circle. At least one mutable field must be provided. Use the archive tool to soft-delete.',\n inputSchema: {\n id: z.string().describe('Circle ID'),\n name: z.string().optional().describe('Updated display name'),\n description: z.string().optional().describe('Updated description'),\n topic: z.string().optional().describe('Updated topic/tagline'),\n tags: z.array(z.string()).optional().describe('Updated topical tags'),\n visibility: CircleVisibilityEnum.optional().describe('Updated visibility'),\n avatarFileId: z.string().optional().describe('Updated avatar File ID'),\n },\n },\n async ({ id, name, description, topic, tags, visibility, avatarFileId }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (topic !== undefined) input.topic = topic;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n if (avatarFileId !== undefined) input.avatarFileId = avatarFileId;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/topic/tags/visibility/avatarFileId',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdateCircle: Record<string, unknown>;\n }>(ops.UPDATE_CIRCLE, { id, input });\n return jsonResult(data.comUpdateCircle);\n } catch (error) {\n ctx.logger.error('comradecircle circles_update failed', { error: String(error) });\n return errorResult(\n `Failed to update circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_archive')),\n {\n title: 'Archive Circle',\n description: 'Archive (soft-delete) a circle. Returns true on success.',\n inputSchema: { id: z.string().describe('Circle ID') },\n // BOFF-5868/BOFF-3907: the fleet destructiveHint inference (tool-name.ts)\n // only matches a `delete` name segment, so an irreversible `archive` call\n // needs an explicit annotation to be caught by the confirmation gate that\n // comradecircle-mcp/src/index.ts enables via enforceDestructiveConfirmation.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comArchiveCircle: boolean }>(\n ops.ARCHIVE_CIRCLE,\n { id },\n );\n return jsonResult({ archived: data.comArchiveCircle });\n } catch (error) {\n ctx.logger.error('comradecircle circles_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle channel tools — per-circle channels (text/voice/forum/announce).\n *\n * Surface (3): commchannels_{list,create,update}.\n *\n * Note: the MCP tool prefix is `commchannels_*` (not `channels_*`) to avoid\n * colliding with the generic `channels` module's tool names when both are\n * mounted in a shell. The GraphQL operations/types are unchanged.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ChannelTypeEnum, ChannelVisibilityEnum } from './shared.js';\n\nexport function registerChannelTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'commchannels_list')),\n {\n title: 'List Channels',\n description: 'List the channels belonging to a circle, ordered by position.',\n inputSchema: { circleId: z.string().describe('Circle ID') },\n },\n async ({ circleId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListChannels: Array<Record<string, unknown>>;\n }>(ops.LIST_CHANNELS, { circleId });\n return jsonResult(data.comListChannels);\n } catch (error) {\n ctx.logger.error('comradecircle commchannels_list failed', { error: String(error) });\n return errorResult(\n `Failed to list channels: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'commchannels_create')),\n {\n title: 'Create Channel',\n description:\n 'Create a channel within a circle. `slug` must be unique within the circle. `type` defaults to TEXT; `visibility` defaults to CIRCLE.',\n inputSchema: {\n circleId: z.string().min(1).describe('Parent circle ID'),\n name: z.string().min(1).describe('Channel display name'),\n slug: z.string().min(1).describe('URL slug, unique within the circle'),\n description: z.string().optional().describe('Channel description'),\n type: ChannelTypeEnum.optional().describe('Channel type (default TEXT)'),\n visibility: ChannelVisibilityEnum.optional().describe(\n 'Channel visibility (default CIRCLE)',\n ),\n position: z.number().int().optional().describe('Sort position within the circle'),\n },\n },\n async ({ circleId, name, slug, description, type, visibility, position }) => {\n try {\n const input: Record<string, unknown> = { circleId, name, slug };\n if (description !== undefined) input.description = description;\n if (type !== undefined) input.type = type;\n if (visibility !== undefined) input.visibility = visibility;\n if (position !== undefined) input.position = position;\n\n const data = await ctx.gql.workspace.request<{\n comCreateChannel: Record<string, unknown>;\n }>(ops.CREATE_CHANNEL, { input });\n return jsonResult(data.comCreateChannel);\n } catch (error) {\n ctx.logger.error('comradecircle commchannels_create failed', { error: String(error) });\n return errorResult(\n `Failed to create channel: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'commchannels_update')),\n {\n title: 'Update Channel',\n description:\n 'Update a channel. At least one mutable field must be provided. Use `isArchived` to archive/unarchive.',\n inputSchema: {\n id: z.string().describe('Channel ID'),\n name: z.string().optional().describe('Updated display name'),\n description: z.string().optional().describe('Updated description'),\n type: ChannelTypeEnum.optional().describe('Updated channel type'),\n visibility: ChannelVisibilityEnum.optional().describe('Updated visibility'),\n position: z.number().int().optional().describe('Updated sort position'),\n isArchived: z.boolean().optional().describe('Archive (true) or unarchive (false)'),\n },\n },\n async ({ id, name, description, type, visibility, position, isArchived }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (type !== undefined) input.type = type;\n if (visibility !== undefined) input.visibility = visibility;\n if (position !== undefined) input.position = position;\n if (isArchived !== undefined) input.isArchived = isArchived;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/type/visibility/position/isArchived',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdateChannel: Record<string, unknown>;\n }>(ops.UPDATE_CHANNEL, { id, input });\n return jsonResult(data.comUpdateChannel);\n } catch (error) {\n ctx.logger.error('comradecircle commchannels_update failed', { error: String(error) });\n return errorResult(\n `Failed to update channel: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle membership tools — join/leave lifecycle, roster + role management.\n *\n * Surface (4): memberships_{join,leave,list,set_role}. join/leave operate the\n * calling member's own membership of a circle; list/set_role manage the roster.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { MembershipStatusEnum, MemberRoleEnum, buildPagination } from './shared.js';\n\nexport function registerMembershipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_join')),\n {\n title: 'Join Circle',\n description:\n 'Join a circle as the calling member (idempotent — re-activates a LEFT membership). Returns the membership.',\n inputSchema: { circleId: z.string().describe('Circle ID to join') },\n },\n async ({ circleId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comJoinCircle: Record<string, unknown>;\n }>(ops.JOIN_CIRCLE, { circleId });\n return jsonResult(data.comJoinCircle);\n } catch (error) {\n ctx.logger.error('comradecircle memberships_join failed', { error: String(error) });\n return errorResult(\n `Failed to join circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_leave')),\n {\n title: 'Leave Circle',\n description: 'Leave a circle as the calling member. Returns true on success.',\n inputSchema: { circleId: z.string().describe('Circle ID to leave') },\n // BOFF-5868/BOFF-3907: `leave` is not caught by the fleet's name-based\n // destructiveHint inference. Gated conservatively — a sole OWNER leaving\n // orphans the circle, and an unattended agent leaving communities on the\n // user's behalf is exactly the outcome the confirmation gate exists for.\n annotations: { destructiveHint: true },\n },\n async ({ circleId }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comLeaveCircle: boolean }>(\n ops.LEAVE_CIRCLE,\n {\n circleId,\n },\n );\n return jsonResult({ left: data.comLeaveCircle });\n } catch (error) {\n ctx.logger.error('comradecircle memberships_leave failed', { error: String(error) });\n return errorResult(\n `Failed to leave circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_list')),\n {\n title: 'List Memberships',\n description:\n 'List circle memberships, optionally filtered by circle and/or status, with pagination.',\n inputSchema: {\n circleId: z.string().optional().describe('Filter by circle ID'),\n status: MembershipStatusEnum.optional().describe('Filter by membership status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ circleId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListMemberships: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MEMBERSHIPS, {\n circleId,\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListMemberships);\n } catch (error) {\n ctx.logger.error('comradecircle memberships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list memberships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_set_role')),\n {\n title: 'Set Member Role',\n description:\n 'Change a member’s role within a circle (OWNER/ADMIN/MODERATOR/MEMBER). Returns the updated membership.',\n inputSchema: {\n membershipId: z.string().describe('Membership ID'),\n role: MemberRoleEnum.describe('New role to assign'),\n },\n },\n async ({ membershipId, role }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comSetMemberRole: Record<string, unknown>;\n }>(ops.SET_MEMBER_ROLE, { membershipId, role });\n return jsonResult(data.comSetMemberRole);\n } catch (error) {\n ctx.logger.error('comradecircle memberships_set_role failed', { error: String(error) });\n return errorResult(\n `Failed to set member role: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle member-profile tools — member directory + self profile.\n *\n * Surface (3): profiles_{get,list,upsert}. `profiles_upsert` creates or updates\n * the calling member's profile (one per member per workspace).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PresenceEnum, buildPagination } from './shared.js';\n\nexport function registerProfileTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'profiles_get')),\n {\n title: 'Get Member Profile',\n description: 'Fetch a member’s Comradecircle profile by their member (user) ID.',\n inputSchema: { memberId: z.string().describe('Member (user) ID') },\n },\n async ({ memberId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comProfile: Record<string, unknown> | null;\n }>(ops.GET_PROFILE, { memberId });\n if (!data.comProfile) return errorResult(`Profile for member ${memberId} not found`);\n return jsonResult(data.comProfile);\n } catch (error) {\n ctx.logger.error('comradecircle profiles_get failed', { error: String(error) });\n return errorResult(\n `Failed to get profile: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'profiles_list')),\n {\n title: 'List Member Profiles',\n description:\n 'List member profiles in the bound workspace, optionally restricted to discoverable profiles, with pagination.',\n inputSchema: {\n discoverable: z.boolean().optional().describe('Only profiles that opted into discovery'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ discoverable, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListProfiles: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_PROFILES, {\n discoverable,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListProfiles);\n } catch (error) {\n ctx.logger.error('comradecircle profiles_list failed', { error: String(error) });\n return errorResult(\n `Failed to list profiles: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'profiles_upsert')),\n {\n title: 'Upsert My Profile',\n description:\n 'Create or update the calling member’s profile (one per member per workspace). `displayName` is required.',\n inputSchema: {\n displayName: z.string().min(1).describe('Display name'),\n headline: z.string().optional().describe('Short headline/title'),\n bio: z.string().optional().describe('Profile bio'),\n interests: z.array(z.string()).optional().describe('Interest tags'),\n skills: z.array(z.string()).optional().describe('Skill tags'),\n presence: PresenceEnum.optional().describe('Presence indicator'),\n discoverable: z.boolean().optional().describe('Opt into member discovery'),\n avatarFileId: z.string().optional().describe('wspace-files-svc File ID for the avatar'),\n },\n },\n async ({\n displayName,\n headline,\n bio,\n interests,\n skills,\n presence,\n discoverable,\n avatarFileId,\n }) => {\n try {\n const input: Record<string, unknown> = { displayName };\n if (headline !== undefined) input.headline = headline;\n if (bio !== undefined) input.bio = bio;\n if (interests !== undefined) input.interests = interests;\n if (skills !== undefined) input.skills = skills;\n if (presence !== undefined) input.presence = presence;\n if (discoverable !== undefined) input.discoverable = discoverable;\n if (avatarFileId !== undefined) input.avatarFileId = avatarFileId;\n\n const data = await ctx.gql.workspace.request<{\n comUpsertProfile: Record<string, unknown>;\n }>(ops.UPSERT_PROFILE, { input });\n return jsonResult(data.comUpsertProfile);\n } catch (error) {\n ctx.logger.error('comradecircle profiles_upsert failed', { error: String(error) });\n return errorResult(\n `Failed to upsert profile: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle post tools — channel posts + reactions.\n *\n * Surface (6): posts_{get,list,create,update,remove,react}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PostStatusEnum, ReactionTypeEnum, buildPagination } from './shared.js';\n\nexport function registerPostTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_get')),\n {\n title: 'Get Post',\n description: 'Fetch a single post by ID, including its comments and reactions.',\n inputSchema: { id: z.string().describe('Post ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comPost: Record<string, unknown> | null;\n }>(ops.GET_POST, { id });\n if (!data.comPost) return errorResult(`Post ${id} not found`);\n return jsonResult(data.comPost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_get failed', { error: String(error) });\n return errorResult(\n `Failed to get post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_list')),\n {\n title: 'List Posts',\n description:\n 'List posts, optionally filtered by channel and/or status, newest first, with pagination.',\n inputSchema: {\n channelId: z.string().optional().describe('Filter by channel ID'),\n status: PostStatusEnum.optional().describe('Filter by post status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ channelId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListPosts: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_POSTS, {\n channelId,\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListPosts);\n } catch (error) {\n ctx.logger.error('comradecircle posts_list failed', { error: String(error) });\n return errorResult(\n `Failed to list posts: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_create')),\n {\n title: 'Create Post',\n description:\n 'Create a post in a channel. `status` defaults to PUBLISHED. Attach files by their wspace-files-svc File IDs.',\n inputSchema: {\n channelId: z.string().min(1).describe('Target channel ID'),\n body: z.string().min(1).describe('Post body'),\n status: PostStatusEnum.optional().describe('Initial status (default PUBLISHED)'),\n tags: z.array(z.string()).optional().describe('Topical tags'),\n attachmentFileIds: z\n .array(z.string())\n .optional()\n .describe('wspace-files-svc File IDs to attach'),\n },\n },\n async ({ channelId, body, status, tags, attachmentFileIds }) => {\n try {\n const input: Record<string, unknown> = { channelId, body };\n if (status !== undefined) input.status = status;\n if (tags !== undefined) input.tags = tags;\n if (attachmentFileIds !== undefined) input.attachmentFileIds = attachmentFileIds;\n\n const data = await ctx.gql.workspace.request<{\n comCreatePost: Record<string, unknown>;\n }>(ops.CREATE_POST, { input });\n return jsonResult(data.comCreatePost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_create failed', { error: String(error) });\n return errorResult(\n `Failed to create post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_update')),\n {\n title: 'Update Post',\n description:\n 'Update a post. At least one mutable field must be provided. Use `isPinned` to pin/unpin and `status` to hide/publish.',\n inputSchema: {\n id: z.string().describe('Post ID'),\n body: z.string().optional().describe('Updated body'),\n status: PostStatusEnum.optional().describe('Updated status'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n isPinned: z.boolean().optional().describe('Pin (true) or unpin (false)'),\n },\n },\n async ({ id, body, status, tags, isPinned }) => {\n try {\n const input: Record<string, unknown> = {};\n if (body !== undefined) input.body = body;\n if (status !== undefined) input.status = status;\n if (tags !== undefined) input.tags = tags;\n if (isPinned !== undefined) input.isPinned = isPinned;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of body/status/tags/isPinned',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdatePost: Record<string, unknown>;\n }>(ops.UPDATE_POST, { id, input });\n return jsonResult(data.comUpdatePost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_update failed', { error: String(error) });\n return errorResult(\n `Failed to update post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_remove')),\n {\n title: 'Remove Post',\n description: 'Remove (soft-delete) a post. Returns true on success.',\n inputSchema: { id: z.string().describe('Post ID') },\n // BOFF-5868/BOFF-3907: see circles_archive — `remove` is not caught by\n // the fleet's name-based destructiveHint inference.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comRemovePost: boolean }>(ops.REMOVE_POST, {\n id,\n });\n return jsonResult({ removed: data.comRemovePost });\n } catch (error) {\n ctx.logger.error('comradecircle posts_remove failed', { error: String(error) });\n return errorResult(\n `Failed to remove post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_react')),\n {\n title: 'React to Post',\n description:\n 'Toggle a typed reaction on a post for the calling member (idempotent add/remove). Returns the updated post.',\n inputSchema: {\n postId: z.string().describe('Post ID'),\n type: ReactionTypeEnum.describe('Reaction type to toggle'),\n },\n },\n async ({ postId, type }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comReactToPost: Record<string, unknown>;\n }>(ops.REACT_TO_POST, { postId, type });\n return jsonResult(data.comReactToPost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_react failed', { error: String(error) });\n return errorResult(\n `Failed to react to post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle comment tools — threaded comments on posts.\n *\n * Surface (2): comments_list, comments_add.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerCommentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_list')),\n {\n title: 'List Comments',\n description: 'List the comments on a post (threaded via each comment’s parentId).',\n inputSchema: { postId: z.string().describe('Post ID') },\n },\n async ({ postId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListComments: Array<Record<string, unknown>>;\n }>(ops.LIST_COMMENTS, { postId });\n return jsonResult(data.comListComments);\n } catch (error) {\n ctx.logger.error('comradecircle comments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list comments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_add')),\n {\n title: 'Add Comment',\n description:\n 'Add a comment to a post as the calling member. Pass `parentId` to reply to an existing comment.',\n inputSchema: {\n postId: z.string().min(1).describe('Post being commented on'),\n body: z.string().min(1).describe('Comment body'),\n parentId: z.string().optional().describe('Parent comment ID (for replies)'),\n },\n },\n async ({ postId, body, parentId }) => {\n try {\n const input: Record<string, unknown> = { postId, body };\n if (parentId !== undefined) input.parentId = parentId;\n\n const data = await ctx.gql.workspace.request<{\n comAddComment: Record<string, unknown>;\n }>(ops.ADD_COMMENT, { input });\n return jsonResult(data.comAddComment);\n } catch (error) {\n ctx.logger.error('comradecircle comments_add failed', { error: String(error) });\n return errorResult(\n `Failed to add comment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle feed tools — unified home feed + follow graph.\n *\n * Surface (5): feed_my_feed, feed_my_follows, feed_follow, feed_unfollow,\n * feed_mute_follow.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { FollowTargetTypeEnum, buildPagination } from './shared.js';\n\nexport function registerFeedTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_my_feed')),\n {\n title: 'My Home Feed',\n description:\n 'The calling member’s unified home feed — published posts from every channel, member, and circle they follow, newest first.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comMyFeed: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.MY_FEED, { pagination: buildPagination(limit, offset, cursor) });\n return jsonResult(data.comMyFeed);\n } catch (error) {\n ctx.logger.error('comradecircle feed_my_feed failed', { error: String(error) });\n return errorResult(\n `Failed to load home feed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_my_follows')),\n {\n title: 'List My Follows',\n description:\n 'List the calling member’s feed-follows, optionally filtered by target type (CIRCLE/CHANNEL/MEMBER).',\n inputSchema: {\n targetType: FollowTargetTypeEnum.optional().describe('Filter by follow target type'),\n },\n },\n async ({ targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comMyFollows: Array<Record<string, unknown>>;\n }>(ops.MY_FOLLOWS, { targetType });\n return jsonResult(data.comMyFollows);\n } catch (error) {\n ctx.logger.error('comradecircle feed_my_follows failed', { error: String(error) });\n return errorResult(\n `Failed to list follows: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_follow')),\n {\n title: 'Follow Target',\n description:\n 'Follow a circle, channel, or member so their posts appear in the calling member’s home feed.',\n inputSchema: {\n targetId: z.string().min(1).describe('ID of the circle/channel/member to follow'),\n targetType: FollowTargetTypeEnum.describe('What is being followed'),\n },\n },\n async ({ targetId, targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comFollow: Record<string, unknown>;\n }>(ops.FOLLOW, { input: { targetId, targetType } });\n return jsonResult(data.comFollow);\n } catch (error) {\n ctx.logger.error('comradecircle feed_follow failed', { error: String(error) });\n return errorResult(\n `Failed to follow target: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_unfollow')),\n {\n title: 'Unfollow Target',\n description: 'Stop following a circle, channel, or member. Returns true on success.',\n inputSchema: {\n targetId: z.string().min(1).describe('ID of the circle/channel/member to unfollow'),\n targetType: FollowTargetTypeEnum.describe('What is being unfollowed'),\n },\n },\n async ({ targetId, targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comUnfollow: boolean }>(ops.UNFOLLOW, {\n input: { targetId, targetType },\n });\n return jsonResult({ unfollowed: data.comUnfollow });\n } catch (error) {\n ctx.logger.error('comradecircle feed_unfollow failed', { error: String(error) });\n return errorResult(\n `Failed to unfollow target: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_mute_follow')),\n {\n title: 'Mute Follow',\n description:\n 'Mute or unmute a feed-follow — muted targets stay followed but are suppressed from the home feed.',\n inputSchema: {\n id: z.string().describe('Feed-follow ID'),\n muted: z.boolean().describe('Mute (true) or unmute (false)'),\n },\n },\n async ({ id, muted }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comMuteFollow: Record<string, unknown>;\n }>(ops.MUTE_FOLLOW, { id, muted });\n return jsonResult(data.comMuteFollow);\n } catch (error) {\n ctx.logger.error('comradecircle feed_mute_follow failed', { error: String(error) });\n return errorResult(\n `Failed to mute follow: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle event tools — circle events + RSVPs.\n *\n * Surface (6): events_{get,list,create,update,transition,rsvp}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { EventModeEnum, EventStatusEnum, RsvpStatusEnum, buildPagination } from './shared.js';\n\nexport function registerEventTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_get')),\n {\n title: 'Get Event',\n description: 'Fetch a single event by ID, including its RSVPs.',\n inputSchema: { id: z.string().describe('Event ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comEvent: Record<string, unknown> | null;\n }>(ops.GET_EVENT, { id });\n if (!data.comEvent) return errorResult(`Event ${id} not found`);\n return jsonResult(data.comEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_get failed', { error: String(error) });\n return errorResult(\n `Failed to get event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_list')),\n {\n title: 'List Events',\n description: 'List events, optionally filtered by circle and/or status, with pagination.',\n inputSchema: {\n circleId: z.string().optional().describe('Filter by circle ID'),\n status: EventStatusEnum.optional().describe('Filter by event status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ circleId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListEvents: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_EVENTS, {\n circleId,\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListEvents);\n } catch (error) {\n ctx.logger.error('comradecircle events_list failed', { error: String(error) });\n return errorResult(\n `Failed to list events: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_create')),\n {\n title: 'Create Event',\n description:\n 'Schedule an event in a circle. `startsAt` is required (ISO-8601 DateTime); `mode` defaults to ONLINE.',\n inputSchema: {\n circleId: z.string().min(1).describe('Host circle ID'),\n title: z.string().min(1).describe('Event title'),\n startsAt: z.string().min(1).describe('Start time (ISO-8601 DateTime)'),\n description: z.string().optional().describe('Event description'),\n mode: EventModeEnum.optional().describe('Delivery mode (default ONLINE)'),\n location: z.string().optional().describe('Physical location (for IN_PERSON/HYBRID)'),\n joinUrl: z.string().optional().describe('Join URL (for ONLINE/HYBRID)'),\n capacity: z.number().int().optional().describe('Maximum attendees'),\n endsAt: z.string().optional().describe('End time (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Topical tags'),\n },\n },\n async ({\n circleId,\n title,\n startsAt,\n description,\n mode,\n location,\n joinUrl,\n capacity,\n endsAt,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { circleId, title, startsAt };\n if (description !== undefined) input.description = description;\n if (mode !== undefined) input.mode = mode;\n if (location !== undefined) input.location = location;\n if (joinUrl !== undefined) input.joinUrl = joinUrl;\n if (capacity !== undefined) input.capacity = capacity;\n if (endsAt !== undefined) input.endsAt = endsAt;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n comCreateEvent: Record<string, unknown>;\n }>(ops.CREATE_EVENT, { input });\n return jsonResult(data.comCreateEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_create failed', { error: String(error) });\n return errorResult(\n `Failed to create event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_update')),\n {\n title: 'Update Event',\n description:\n 'Update an event’s details. At least one mutable field must be provided. Use the transition tool to change status.',\n inputSchema: {\n id: z.string().describe('Event ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n mode: EventModeEnum.optional().describe('Updated delivery mode'),\n location: z.string().optional().describe('Updated location'),\n joinUrl: z.string().optional().describe('Updated join URL'),\n capacity: z.number().int().optional().describe('Updated capacity'),\n startsAt: z.string().optional().describe('Updated start time (ISO-8601 DateTime)'),\n endsAt: z.string().optional().describe('Updated end time (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n title,\n description,\n mode,\n location,\n joinUrl,\n capacity,\n startsAt,\n endsAt,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (title !== undefined) input.title = title;\n if (description !== undefined) input.description = description;\n if (mode !== undefined) input.mode = mode;\n if (location !== undefined) input.location = location;\n if (joinUrl !== undefined) input.joinUrl = joinUrl;\n if (capacity !== undefined) input.capacity = capacity;\n if (startsAt !== undefined) input.startsAt = startsAt;\n if (endsAt !== undefined) input.endsAt = endsAt;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of title/description/mode/location/joinUrl/capacity/startsAt/endsAt/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdateEvent: Record<string, unknown>;\n }>(ops.UPDATE_EVENT, { id, input });\n return jsonResult(data.comUpdateEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_update failed', { error: String(error) });\n return errorResult(\n `Failed to update event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_transition')),\n {\n title: 'Transition Event',\n description:\n 'Advance an event through its lifecycle (SCHEDULED → LIVE → COMPLETED; CANCELLED from any non-terminal state).',\n inputSchema: {\n id: z.string().describe('Event ID'),\n status: EventStatusEnum.describe('Target status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comTransitionEvent: Record<string, unknown>;\n }>(ops.TRANSITION_EVENT, { id, status });\n return jsonResult(data.comTransitionEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_rsvp')),\n {\n title: 'RSVP to Event',\n description:\n 'RSVP to an event as the calling member (idempotent — updates an existing RSVP). Returns the RSVP.',\n inputSchema: {\n eventId: z.string().describe('Event ID'),\n status: RsvpStatusEnum.describe('RSVP response'),\n note: z.string().optional().describe('Optional note to the host'),\n },\n },\n async ({ eventId, status, note }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comRsvpEvent: Record<string, unknown>;\n }>(ops.RSVP_EVENT, { eventId, status, note });\n return jsonResult(data.comRsvpEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_rsvp failed', { error: String(error) });\n return errorResult(\n `Failed to RSVP to event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle poll tools — circle polls + voting.\n *\n * Surface (5): polls_{get,list,create,close,vote}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PollStatusEnum } from './shared.js';\n\nexport function registerPollTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_get')),\n {\n title: 'Get Poll',\n description: 'Fetch a single poll by ID, including its options and vote counts.',\n inputSchema: { id: z.string().describe('Poll ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comPoll: Record<string, unknown> | null;\n }>(ops.GET_POLL, { id });\n if (!data.comPoll) return errorResult(`Poll ${id} not found`);\n return jsonResult(data.comPoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_get failed', { error: String(error) });\n return errorResult(\n `Failed to get poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_list')),\n {\n title: 'List Polls',\n description: 'List the polls in a circle, optionally filtered by status (OPEN/CLOSED).',\n inputSchema: {\n circleId: z.string().describe('Circle ID'),\n status: PollStatusEnum.optional().describe('Filter by poll status'),\n },\n },\n async ({ circleId, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListPolls: Array<Record<string, unknown>>;\n }>(ops.LIST_POLLS, { circleId, status });\n return jsonResult(data.comListPolls);\n } catch (error) {\n ctx.logger.error('comradecircle polls_list failed', { error: String(error) });\n return errorResult(\n `Failed to list polls: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_create')),\n {\n title: 'Create Poll',\n description:\n 'Create a poll in a circle with two or more options. `allowMultiple` and `isAnonymous` default to false.',\n inputSchema: {\n circleId: z.string().min(1).describe('Host circle ID'),\n question: z.string().min(1).describe('Poll question'),\n options: z.array(z.string()).min(2).describe('Option labels (at least two)'),\n allowMultiple: z.boolean().optional().describe('Allow selecting multiple options'),\n isAnonymous: z.boolean().optional().describe('Hide who voted for what'),\n closesAt: z.string().optional().describe('Auto-close time (ISO-8601 DateTime)'),\n },\n },\n async ({ circleId, question, options, allowMultiple, isAnonymous, closesAt }) => {\n try {\n const input: Record<string, unknown> = { circleId, question, options };\n if (allowMultiple !== undefined) input.allowMultiple = allowMultiple;\n if (isAnonymous !== undefined) input.isAnonymous = isAnonymous;\n if (closesAt !== undefined) input.closesAt = closesAt;\n\n const data = await ctx.gql.workspace.request<{\n comCreatePoll: Record<string, unknown>;\n }>(ops.CREATE_POLL, { input });\n return jsonResult(data.comCreatePoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_create failed', { error: String(error) });\n return errorResult(\n `Failed to create poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_close')),\n {\n title: 'Close Poll',\n description: 'Close a poll so no further votes can be cast. Returns the updated poll.',\n inputSchema: { id: z.string().describe('Poll ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comClosePoll: Record<string, unknown>;\n }>(ops.CLOSE_POLL, { id });\n return jsonResult(data.comClosePoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_close failed', { error: String(error) });\n return errorResult(\n `Failed to close poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_vote')),\n {\n title: 'Vote on Poll',\n description:\n 'Cast a vote for a poll option as the calling member (one vote per option). Returns the updated option.',\n inputSchema: {\n pollId: z.string().describe('Poll ID'),\n optionId: z.string().describe('Poll option ID to vote for'),\n },\n },\n async ({ pollId, optionId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comVotePoll: Record<string, unknown>;\n }>(ops.VOTE_POLL, { pollId, optionId });\n return jsonResult(data.comVotePoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_vote failed', { error: String(error) });\n return errorResult(\n `Failed to vote on poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle health tool.\n *\n * Surface (1): health — maps to the @public comHealth query (no auth required),\n * a liveness/identity probe for the Comradecircle subgraph.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health')),\n {\n title: 'Comradecircle Health Check',\n description:\n 'Public health probe for the Comradecircle subgraph (comHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ comHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.comHealth });\n } catch (error) {\n ctx.logger.error('comradecircle health failed', { error: String(error) });\n return errorResult(\n `Comradecircle health check failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { LIST_CIRCLES, LIST_PROFILES, MY_FEED } from './operations.js';\n\n/**\n * Read-only Comradecircle MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerComradecircleResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const circlesUri = track(mcpResourceUri(ctx.productName, 'circles'));\n const feedUri = track(mcpResourceUri(ctx.productName, 'feed'));\n const profilesUri = track(mcpResourceUri(ctx.productName, 'profiles'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'comradecircle-schema',\n schemaUri,\n {\n title: 'Comradecircle Domain Schema',\n description:\n 'Overview of the Comradecircle community domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# Comradecircle Domain (Overview)\n\nUnified social, communication & engagement platform for workspaces.\n\n## Entities\n- ComCircle — a community (channels, memberships, polls, events)\n- ComChannel — a channel within a circle (TEXT/VOICE/FORUM/ANNOUNCEMENT)\n- ComMembership — a member's membership of a circle (role + status)\n- ComProfile — a member's social profile (one per member per workspace)\n- ComPost (+ComComment, +ComReaction) — channel posts, threaded comments, typed reactions\n- ComFeedFollow — a follow edge feeding the unified home feed\n- ComEvent (+ComEventRsvp) — circle events + RSVPs\n- ComPoll (+ComPollOption) — circle polls + options/votes\n\n## Enums\n- ComCircleVisibility: PUBLIC, PRIVATE, SECRET\n- ComCircleStatus: ACTIVE, ARCHIVED, SUSPENDED\n- ComChannelType: TEXT, VOICE, FORUM, ANNOUNCEMENT\n- ComChannelVisibility: CIRCLE, PRIVATE\n- ComMemberRole: OWNER, ADMIN, MODERATOR, MEMBER\n- ComMembershipStatus: ACTIVE, PENDING, LEFT, BANNED\n- ComPostStatus: DRAFT, PUBLISHED, HIDDEN, REMOVED\n- ComReactionType: LIKE, LOVE, CELEBRATE, INSIGHTFUL, SUPPORT, LAUGH\n- ComFollowTargetType: CIRCLE, CHANNEL, MEMBER\n- ComEventMode: ONLINE, IN_PERSON, HYBRID\n- ComEventStatus: SCHEDULED, LIVE, COMPLETED, CANCELLED\n- ComRsvpStatus: GOING, INTERESTED, NOT_GOING, WAITLISTED\n- ComPollStatus: OPEN, CLOSED\n- ComPresence: ONLINE, AWAY, BUSY, OFFLINE\n\n## Tool groups\ncircles, channels, memberships, profiles, posts, comments, feed, events, polls.\nAll run against the WORKSPACE gateway (workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://circles — circle directory\n server.registerResource(\n 'comradecircle-circles',\n circlesUri,\n {\n title: 'Comradecircle Circle Directory',\n description: 'The first page of circles in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${circlesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ comListCircles: unknown }>(LIST_CIRCLES, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: circlesUri,\n text: JSON.stringify(data.comListCircles, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: circlesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://feed — the calling member's home feed\n server.registerResource(\n 'comradecircle-feed',\n feedUri,\n {\n title: 'Comradecircle Home Feed',\n description: 'The calling member’s unified home feed (first page).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${feedUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ comMyFeed: unknown }>(MY_FEED, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: feedUri,\n text: JSON.stringify(data.comMyFeed, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: feedUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://profiles — discoverable member directory\n server.registerResource(\n 'comradecircle-profiles',\n profilesUri,\n {\n title: 'Comradecircle Member Directory',\n description: 'The first page of discoverable member profiles in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${profilesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ comListProfiles: unknown }>(LIST_PROFILES, {\n discoverable: true,\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: profilesUri,\n text: JSON.stringify(data.comListProfiles, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: profilesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * Comradecircle MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerComradecirclePrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'community-setup'));\n const engagementName = track(mcpPromptName(p, 'community-engagement'));\n\n // <product>-community-setup — stand up a circle + channels\n server.registerPrompt(\n setupName,\n {\n title: 'Community Setup',\n description:\n 'Guide for standing up a new Comradecircle community end to end: create the circle, add channels, set up your profile, and seed the first post.',\n argsSchema: {\n name: z.string().optional().describe('Circle/community name'),\n visibility: z.string().optional().describe('Circle visibility (PUBLIC/PRIVATE/SECRET)'),\n },\n },\n ({ name, visibility }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { name, visibility });\n const nameNote = name\n ? `Use the community name \"${name}\".`\n : 'Ask the user for the community name.';\n const visibilityNote = visibility\n ? `Set visibility ${visibility}.`\n : 'Help the user pick a visibility (PUBLIC, PRIVATE, or SECRET).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me stand up a new Comradecircle community.\n\n1. **Create Circle**: Use ${p}_circles_create. ${nameNote} ${visibilityNote} Provide a unique slug; the caller becomes the OWNER.\n2. **Add Channels**: Use ${p}_commchannels_create for each channel — pick a type (TEXT/VOICE/FORUM/ANNOUNCEMENT) and a unique slug per circle. Start with a TEXT \"general\" and an ANNOUNCEMENT channel.\n3. **Set Up Profile**: Use ${p}_profiles_upsert to set your displayName, headline, interests, and skills.\n4. **Seed First Post**: Use ${p}_posts_create in the general channel to welcome members.\n5. **Verify**: Use ${p}_commchannels_list and ${p}_posts_list to confirm the setup.\n\nShow results at each step and confirm before posting.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-community-engagement — daily engagement ops\n server.registerPrompt(\n engagementName,\n {\n title: 'Community Engagement',\n description:\n 'Daily engagement workflow: review the home feed, moderate posts, run events and polls, and grow the follow graph.',\n argsSchema: {\n circleId: z.string().optional().describe('Circle ID to operate'),\n },\n },\n ({ circleId }) => {\n ctx.logger.debug(`Prompt ${engagementName} called`, { circleId });\n const circleNote = circleId\n ? `Operate circle \"${circleId}\".`\n : `First list circles with ${p}_circles_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily Comradecircle community engagement. ${circleNote}\n\n1. **Home Feed**: Use ${p}_feed_my to scan the latest activity from followed circles/channels/members.\n2. **Memberships**: Use ${p}_memberships_list to review the roster; use ${p}_memberships_set_role to promote moderators.\n3. **Moderate Posts**: Use ${p}_posts_list filtered by channel; pin highlights with ${p}_posts_update (isPinned=true) and hide/remove abuse with ${p}_posts_update (status=HIDDEN) or ${p}_posts_remove.\n4. **Engage**: Reply with ${p}_comments_add and acknowledge with ${p}_posts_react.\n5. **Events**: Use ${p}_events_list and ${p}_events_create to schedule meetups; advance live events with ${p}_events_transition.\n6. **Polls**: Use ${p}_polls_create to gather input; close stale ones with ${p}_polls_close.\n7. **Grow the Graph**: Use ${p}_feed_follow to follow active members and channels.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Comradecircle module — domain module for the future-products ecosystem program.\n *\n * Covers all 12 @key entities of wspace-comradecircle-svc grouped into\n * per-entity sub-APIs: circles, channels, memberships, profiles, posts,\n * comments, feed, events, polls, plus the public health probe. Mirrors the\n * kadaikodi module's structure (tools/<entity>.ts + resources.ts + prompts.ts)\n * and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/comradecircle/wspace-comradecircle-svc/\n * (Hive service name `comradecircle`). All operations run against the WORKSPACE\n * gateway; the @public comHealth probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerCircleTools } from './tools/circles.js';\nimport { registerChannelTools } from './tools/channels.js';\nimport { registerMembershipTools } from './tools/memberships.js';\nimport { registerProfileTools } from './tools/profiles.js';\nimport { registerPostTools } from './tools/posts.js';\nimport { registerCommentTools } from './tools/comments.js';\nimport { registerFeedTools } from './tools/feed.js';\nimport { registerEventTools } from './tools/events.js';\nimport { registerPollTools } from './tools/polls.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerComradecircleResources } from './resources.js';\nimport { registerComradecirclePrompts } from './prompts.js';\n\nconst comradecircleModule: McpModule = {\n id: 'comradecircle',\n version: '0.0.1',\n displayName: 'Comradecircle',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerCircleTools(server, ctx, trackTool);\n registerChannelTools(server, ctx, trackTool);\n registerMembershipTools(server, ctx, trackTool);\n registerProfileTools(server, ctx, trackTool);\n registerPostTools(server, ctx, trackTool);\n registerCommentTools(server, ctx, trackTool);\n registerFeedTools(server, ctx, trackTool);\n registerEventTools(server, ctx, trackTool);\n registerPollTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerComradecircleResources(server, ctx, trackResource);\n registerComradecirclePrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default comradecircleModule;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/errors.ts","../../../src/core/tool-name.ts","../../../src/core/result.ts","../../../src/modules/comradecircle/operations.ts","../../../src/modules/comradecircle/tools/shared.ts","../../../src/modules/comradecircle/tools/circles.ts","../../../src/modules/comradecircle/tools/channels.ts","../../../src/modules/comradecircle/tools/memberships.ts","../../../src/modules/comradecircle/tools/profiles.ts","../../../src/modules/comradecircle/tools/posts.ts","../../../src/modules/comradecircle/tools/comments.ts","../../../src/modules/comradecircle/tools/feed.ts","../../../src/modules/comradecircle/tools/events.ts","../../../src/modules/comradecircle/tools/polls.ts","../../../src/modules/comradecircle/tools/health.ts","../../../src/modules/comradecircle/resources.ts","../../../src/modules/comradecircle/prompts.ts","../../../src/modules/comradecircle/index.ts"],"names":["z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error classes for MCP SDK.\n *\n * Modules MUST throw these instead of throwing raw Errors. The registerTool\n * wrapper in result.ts catches and maps them to MCP-protocol-compliant\n * `{ isError: true, content: [...] }` responses.\n *\n * Throwing past the wrapper to the protocol surfaces as JSON-RPC -32603 to\n * the client and is a protocol bug.\n */\n\nexport class McpUserError extends Error {\n public readonly hint: string | undefined;\n\n constructor(message: string, opts?: { hint?: string }) {\n super(message);\n this.name = 'McpUserError';\n this.hint = opts?.hint;\n }\n}\n\nexport class McpAuthError extends McpUserError {\n constructor(message: string, opts?: { hint?: string }) {\n super(message, {\n hint: opts?.hint ?? 'Run the auth_login tool to authenticate.',\n });\n this.name = 'McpAuthError';\n }\n}\n\nexport class McpInternalError extends Error {\n public override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'McpInternalError';\n this.cause = cause;\n }\n}\n","/**\n * Tool / resource / prompt naming helpers.\n *\n * Mandatory product prefix avoids collisions when Claude Desktop runs\n * multiple MCP servers concurrently (typical setup is ~6).\n *\n * Tool names are capped at 63 characters — Claude Desktop pre-1.x\n * truncated at 64 in some versions.\n */\n\nimport { McpInternalError } from './errors.js';\n\nconst MAX_TOOL_NAME_LENGTH = 63;\n\nfunction assertSafeName(name: string, kind: 'tool' | 'resource' | 'prompt'): string {\n if (kind === 'tool' && name.length > MAX_TOOL_NAME_LENGTH) {\n throw new McpInternalError(\n `Tool name '${name}' exceeds ${MAX_TOOL_NAME_LENGTH} characters (some MCP clients truncate at 64).`,\n );\n }\n return name;\n}\n\n/**\n * Build a tool name. Format: `<productName>_<...parts>` (snake_case).\n * Example: mcpToolName('vibecontrols', 'vibes', 'list') -> 'vibecontrols_vibes_list'\n */\nexport function mcpToolName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpToolName: productName is required');\n }\n const name = [productName, ...parts].filter(Boolean).join('_');\n return assertSafeName(name, 'tool');\n}\n\n/**\n * Build a resource URI. Format: `<productName>://<...parts>`.\n * Example: mcpResourceUri('vibecontrols', 'schema') -> 'vibecontrols://schema'\n */\nexport function mcpResourceUri(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpResourceUri: productName is required');\n }\n return `${productName}://${parts.filter(Boolean).join('/')}`;\n}\n\n/**\n * Build a prompt name. Format: `<productName>-<...parts>` (kebab-case).\n * Example: mcpPromptName('vibecontrols', 'setup') -> 'vibecontrols-setup'\n */\nexport function mcpPromptName(productName: string, ...parts: string[]): string {\n if (!productName) {\n throw new McpInternalError('mcpPromptName: productName is required');\n }\n return [productName, ...parts].filter(Boolean).join('-');\n}\n\nexport const TOOL_NAME_LIMIT = MAX_TOOL_NAME_LENGTH;\n\n/**\n * Name-based hint heuristics for MCP `annotations` (readOnlyHint /\n * destructiveHint). Used by tool-governance.ts to auto-fill annotations for\n * the fleet of product modules that call `server.registerTool` directly\n * (bypassing the `registerTool()` core helper) and so never set them\n * explicitly today (BOFF-3903). Deliberately conservative — matched against\n * whole `_`-delimited segments so e.g. `timeentries_delete` and\n * `pomodoro_delete_goal` match, but a hypothetical `undeletable_check`\n * would not.\n *\n * A module can always override the inference by passing an explicit\n * `annotations` object to `registerTool()` / `server.registerTool()`.\n */\nconst DESTRUCTIVE_NAME_SEGMENT = /(?:^|_)delete(?:_|$)/i;\nconst READ_ONLY_NAME_SEGMENT = /(?:^|_)(?:list|get|search|check|read|count|stats|by_date)(?:_|$)/i;\n\n/** True when a tool name looks destructive (irreversibly deletes data) by naming convention. */\nexport function inferDestructiveHint(toolName: string): boolean {\n return DESTRUCTIVE_NAME_SEGMENT.test(toolName);\n}\n\n/**\n * True when a tool name looks read-only by naming convention. Never true for\n * a name that also looks destructive (a tool can't be both).\n */\nexport function inferReadOnlyHint(toolName: string): boolean {\n return !inferDestructiveHint(toolName) && READ_ONLY_NAME_SEGMENT.test(toolName);\n}\n","/**\n * MCP tool result helpers + central handler.\n *\n * Modules NEVER call server.registerTool directly — they use registerTool()\n * from this module so the central try/catch wraps the handler and:\n * - maps thrown McpUserError / McpAuthError / McpInternalError to\n * MCP-protocol-compliant `{ isError: true, content: [...] }` shapes\n * - threads `_meta.progressToken` into ctx.progress for long ops\n * - emits a structured log line on every error\n * - never leaks `cause` from McpInternalError to the client\n *\n * This is the analog of cli-sdk's createProgram() central error handler.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ZodRawShape } from 'zod';\nimport type { McpContext } from './context.js';\nimport { McpAuthError, McpInternalError, McpUserError } from './errors.js';\nimport type { ToolAnnotations } from './tool-governance.js';\n\nexport interface ToolTextContent {\n type: 'text';\n text: string;\n [k: string]: unknown;\n}\n\nexport interface ToolResult {\n content: ToolTextContent[];\n isError?: boolean;\n structuredContent?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\nexport interface ToolMeta {\n progressToken?: string | number;\n}\n\n/**\n * Build a successful tool result with JSON content (pretty-printed).\n */\nexport function jsonResult(data: unknown, structured?: Record<string, unknown>): ToolResult {\n const result: ToolResult = {\n content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],\n };\n if (structured !== undefined) {\n result.structuredContent = structured;\n }\n return result;\n}\n\n/**\n * Build a successful tool result with plain text content.\n */\nexport function textResult(text: string): ToolResult {\n return { content: [{ type: 'text', text }] };\n}\n\n/**\n * Build an error tool result. Honors MCP's `{ isError: true, content }` shape.\n * Optional hint is appended on a new line so the LLM can react.\n */\nexport function errorResult(message: string, hint?: string): ToolResult {\n const text = hint ? `${message}\\n\\nHint: ${hint}` : message;\n return { content: [{ type: 'text', text }], isError: true };\n}\n\nexport interface ToolMetadata {\n title: string;\n description: string;\n inputSchema?: ZodRawShape;\n /**\n * Explicit MCP annotations (readOnlyHint / destructiveHint / ...). Optional\n * — when omitted, `wrapServerWithToolGovernance` (applied centrally in\n * `createMcpServer`) infers them from the tool name. Set this to override\n * the inference for a tool whose name doesn't match the naming convention.\n */\n annotations?: ToolAnnotations;\n}\n\nexport type ToolHandler<TArgs = Record<string, unknown>> = (\n args: TArgs,\n ctx: McpContext,\n meta: ToolMeta,\n) => Promise<unknown>;\n\n/**\n * Register a tool with the central error wrapper.\n *\n * The handler returns a plain value or void. The wrapper:\n * - wraps non-undefined returns in jsonResult()\n * - if the value already looks like a ToolResult (has `content`), passes through\n * - catches McpAuthError / McpUserError / McpInternalError / generic Error\n * - logs every error via ctx.logger.error\n */\nexport function registerTool<TArgs extends Record<string, unknown>>(\n server: McpServer,\n ctx: McpContext,\n name: string,\n metadata: ToolMetadata,\n handler: ToolHandler<TArgs>,\n): void {\n const sdkConfig = {\n title: metadata.title,\n description: metadata.description,\n ...(metadata.inputSchema ? { inputSchema: metadata.inputSchema } : {}),\n ...(metadata.annotations ? { annotations: metadata.annotations } : {}),\n };\n\n // The MCP SDK's registerTool signature is `(name, config, handler)`. The\n // handler arity depends on whether inputSchema is present (1-arg without,\n // 2-arg with). We accept a unified handler shape and dispatch at runtime.\n // The SDK's typing is strict and conditional on the inputSchema generic;\n // bypass with a cast since runtime acceptance is unconditional.\n const wrapped = async (...callbackArgs: unknown[]): Promise<ToolResult> => {\n const hasArgs = callbackArgs.length === 2;\n const args = (hasArgs ? callbackArgs[0] : {}) as TArgs;\n const extra = (hasArgs ? callbackArgs[1] : callbackArgs[0]) as\n { _meta?: { progressToken?: string | number } } | undefined;\n\n const progressToken = extra?._meta?.progressToken;\n const meta: ToolMeta = progressToken !== undefined ? { progressToken } : {};\n\n try {\n const result = await handler(args, ctx, meta);\n if (isToolResult(result)) return result;\n if (result === undefined) return textResult('OK');\n return jsonResult(result);\n } catch (error) {\n return mapErrorToResult(error, ctx, name);\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (server as any).registerTool(name, sdkConfig, wrapped);\n}\n\nfunction isToolResult(value: unknown): value is ToolResult {\n return (\n !!value &&\n typeof value === 'object' &&\n 'content' in value &&\n Array.isArray((value as ToolResult).content)\n );\n}\n\nfunction mapErrorToResult(error: unknown, ctx: McpContext, toolName: string): ToolResult {\n if (error instanceof McpAuthError) {\n ctx.logger.warn(`${toolName}: auth required`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpUserError) {\n ctx.logger.info(`${toolName}: user error`, { message: error.message });\n return errorResult(error.message, error.hint);\n }\n if (error instanceof McpInternalError) {\n ctx.logger.error(`${toolName}: internal error`, {\n message: error.message,\n cause: stringifyCause(error.cause),\n });\n return errorResult(`Internal error in ${toolName}.`);\n }\n const message = error instanceof Error ? error.message : String(error);\n ctx.logger.error(`${toolName}: unhandled error`, { message });\n return errorResult(`${toolName}: ${message}`);\n}\n\nfunction stringifyCause(cause: unknown): string | undefined {\n if (cause === undefined || cause === null) return undefined;\n if (cause instanceof Error) return cause.message;\n try {\n return JSON.stringify(cause);\n } catch {\n return String(cause);\n }\n}\n","/**\n * Centralized GraphQL operations for the Comradecircle MCP module.\n *\n * Comradecircle is the unified social, communication & engagement platform\n * (workspace-layer greenfield product). Backend subgraph:\n * ~/products/comradecircle/wspace-comradecircle-svc/ (Hive service name `comradecircle`).\n *\n * All operations run against the WORKSPACE gateway. Workspace scoping is\n * carried by the gateway headers (x-workspace-id / X-Workspace-Authorization)\n * issued by the auth module — Comradecircle inputs do NOT carry a workspaceId.\n *\n * Every product-owned root field is prefixed `com` and every type/enum/input is\n * prefixed `Com` (the subgraph's collision-avoidance contract); operations call\n * fields by their EXACT real names. Uses template-string interpolation (not gql\n * tagged fragments) to match the canonical kadaikodi/vibecontrols modules.\n */\n\n// ---------------------------------------------------------------------------\n// Field fragments\n// ---------------------------------------------------------------------------\n\nexport const PAGE_INFO_FIELDS = `cursor hasMore`;\n\nexport const CIRCLE_FIELDS = `\n id name slug description topic tags status visibility memberCount\n workspaceId createdAt updatedAt\n avatar { id }\n`;\n\nexport const CHANNEL_FIELDS = `\n id circleId name slug description type visibility position isArchived\n workspaceId createdAt updatedAt\n`;\n\nexport const MEMBERSHIP_FIELDS = `\n id circleId memberId role status joinedAt workspaceId createdAt updatedAt\n member { id }\n`;\n\nexport const PROFILE_FIELDS = `\n id memberId displayName headline bio interests skills presence discoverable\n workspaceId createdAt updatedAt\n avatar { id }\n member { id }\n`;\n\nexport const COMMENT_FIELDS = `\n id postId parentId authorId body isHidden workspaceId createdAt updatedAt\n author { id }\n`;\n\nexport const REACTION_FIELDS = `\n id postId memberId type createdAt workspaceId\n member { id }\n`;\n\nexport const POST_FIELDS = `\n id channelId authorId body status tags attachmentFileIds isPinned\n commentCount reactionCount workspaceId createdAt updatedAt\n author { id }\n`;\n\nexport const RSVP_FIELDS = `\n id eventId memberId status note workspaceId createdAt updatedAt\n member { id }\n`;\n\nexport const EVENT_FIELDS = `\n id circleId hostId title description mode status location joinUrl capacity\n rsvpCount startsAt endsAt tags workspaceId createdAt updatedAt\n host { id }\n`;\n\nexport const POLL_OPTION_FIELDS = `\n id pollId label position voteCount workspaceId createdAt\n`;\n\nexport const POLL_FIELDS = `\n id circleId question status isAnonymous allowMultiple closesAt\n workspaceId createdAt updatedAt\n options { ${POLL_OPTION_FIELDS} }\n`;\n\nexport const FEED_FOLLOW_FIELDS = `\n id followerId targetId targetType muted workspaceId createdAt updatedAt\n`;\n\n// ---------------------------------------------------------------------------\n// Circles\n// ---------------------------------------------------------------------------\n\nexport const GET_CIRCLE = `\n query ComradecircleGetCircle($id: ID!) {\n comCircle(id: $id) {\n ${CIRCLE_FIELDS}\n channels { ${CHANNEL_FIELDS} }\n memberships { ${MEMBERSHIP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_CIRCLES = `\n query ComradecircleListCircles(\n $pagination: PaginationInput\n $status: ComCircleStatus\n $visibility: ComCircleVisibility\n ) {\n comListCircles(pagination: $pagination, status: $status, visibility: $visibility) {\n items { ${CIRCLE_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const CREATE_CIRCLE = `\n mutation ComradecircleCreateCircle($input: ComCreateCircleInput!) {\n comCreateCircle(input: $input) {\n ${CIRCLE_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CIRCLE = `\n mutation ComradecircleUpdateCircle($id: ID!, $input: ComUpdateCircleInput!) {\n comUpdateCircle(id: $id, input: $input) {\n ${CIRCLE_FIELDS}\n }\n }\n`;\n\nexport const ARCHIVE_CIRCLE = `\n mutation ComradecircleArchiveCircle($id: ID!) {\n comArchiveCircle(id: $id)\n }\n`;\n\nexport const JOIN_CIRCLE = `\n mutation ComradecircleJoinCircle($circleId: ID!) {\n comJoinCircle(circleId: $circleId) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\nexport const LEAVE_CIRCLE = `\n mutation ComradecircleLeaveCircle($circleId: ID!) {\n comLeaveCircle(circleId: $circleId)\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Channels\n// ---------------------------------------------------------------------------\n\nexport const LIST_CHANNELS = `\n query ComradecircleListChannels($circleId: ID!) {\n comListChannels(circleId: $circleId) {\n ${CHANNEL_FIELDS}\n }\n }\n`;\n\nexport const CREATE_CHANNEL = `\n mutation ComradecircleCreateChannel($input: ComCreateChannelInput!) {\n comCreateChannel(input: $input) {\n ${CHANNEL_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_CHANNEL = `\n mutation ComradecircleUpdateChannel($id: ID!, $input: ComUpdateChannelInput!) {\n comUpdateChannel(id: $id, input: $input) {\n ${CHANNEL_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Memberships\n// ---------------------------------------------------------------------------\n\nexport const LIST_MEMBERSHIPS = `\n query ComradecircleListMemberships(\n $circleId: ID\n $pagination: PaginationInput\n $status: ComMembershipStatus\n ) {\n comListMemberships(circleId: $circleId, pagination: $pagination, status: $status) {\n items { ${MEMBERSHIP_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const SET_MEMBER_ROLE = `\n mutation ComradecircleSetMemberRole($membershipId: ID!, $role: ComMemberRole!) {\n comSetMemberRole(membershipId: $membershipId, role: $role) {\n ${MEMBERSHIP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Profiles\n// ---------------------------------------------------------------------------\n\nexport const GET_PROFILE = `\n query ComradecircleGetProfile($memberId: ID!) {\n comProfile(memberId: $memberId) {\n ${PROFILE_FIELDS}\n }\n }\n`;\n\nexport const LIST_PROFILES = `\n query ComradecircleListProfiles($discoverable: Boolean, $pagination: PaginationInput) {\n comListProfiles(discoverable: $discoverable, pagination: $pagination) {\n items { ${PROFILE_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const UPSERT_PROFILE = `\n mutation ComradecircleUpsertProfile($input: ComUpsertProfileInput!) {\n comUpsertProfile(input: $input) {\n ${PROFILE_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Posts\n// ---------------------------------------------------------------------------\n\nexport const GET_POST = `\n query ComradecircleGetPost($id: ID!) {\n comPost(id: $id) {\n ${POST_FIELDS}\n comments { ${COMMENT_FIELDS} }\n reactions { ${REACTION_FIELDS} }\n }\n }\n`;\n\nexport const LIST_POSTS = `\n query ComradecircleListPosts(\n $channelId: ID\n $pagination: PaginationInput\n $status: ComPostStatus\n ) {\n comListPosts(channelId: $channelId, pagination: $pagination, status: $status) {\n items { ${POST_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const CREATE_POST = `\n mutation ComradecircleCreatePost($input: ComCreatePostInput!) {\n comCreatePost(input: $input) {\n ${POST_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_POST = `\n mutation ComradecircleUpdatePost($id: ID!, $input: ComUpdatePostInput!) {\n comUpdatePost(id: $id, input: $input) {\n ${POST_FIELDS}\n }\n }\n`;\n\nexport const REMOVE_POST = `\n mutation ComradecircleRemovePost($id: ID!) {\n comRemovePost(id: $id)\n }\n`;\n\nexport const REACT_TO_POST = `\n mutation ComradecircleReactToPost($postId: ID!, $type: ComReactionType!) {\n comReactToPost(postId: $postId, type: $type) {\n ${POST_FIELDS}\n reactions { ${REACTION_FIELDS} }\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Comments\n// ---------------------------------------------------------------------------\n\nexport const LIST_COMMENTS = `\n query ComradecircleListComments($postId: ID!) {\n comListComments(postId: $postId) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\nexport const ADD_COMMENT = `\n mutation ComradecircleAddComment($input: ComCreateCommentInput!) {\n comAddComment(input: $input) {\n ${COMMENT_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Feed + follows\n// ---------------------------------------------------------------------------\n\nexport const MY_FEED = `\n query ComradecircleMyFeed($pagination: PaginationInput) {\n comMyFeed(pagination: $pagination) {\n items { ${POST_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const MY_FOLLOWS = `\n query ComradecircleMyFollows($targetType: ComFollowTargetType) {\n comMyFollows(targetType: $targetType) {\n ${FEED_FOLLOW_FIELDS}\n }\n }\n`;\n\nexport const FOLLOW = `\n mutation ComradecircleFollow($input: ComFollowInput!) {\n comFollow(input: $input) {\n ${FEED_FOLLOW_FIELDS}\n }\n }\n`;\n\nexport const UNFOLLOW = `\n mutation ComradecircleUnfollow($input: ComFollowInput!) {\n comUnfollow(input: $input)\n }\n`;\n\nexport const MUTE_FOLLOW = `\n mutation ComradecircleMuteFollow($id: ID!, $muted: Boolean!) {\n comMuteFollow(id: $id, muted: $muted) {\n ${FEED_FOLLOW_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Events\n// ---------------------------------------------------------------------------\n\nexport const GET_EVENT = `\n query ComradecircleGetEvent($id: ID!) {\n comEvent(id: $id) {\n ${EVENT_FIELDS}\n rsvps { ${RSVP_FIELDS} }\n }\n }\n`;\n\nexport const LIST_EVENTS = `\n query ComradecircleListEvents(\n $circleId: ID\n $pagination: PaginationInput\n $status: ComEventStatus\n ) {\n comListEvents(circleId: $circleId, pagination: $pagination, status: $status) {\n items { ${EVENT_FIELDS} }\n pageInfo { ${PAGE_INFO_FIELDS} }\n }\n }\n`;\n\nexport const CREATE_EVENT = `\n mutation ComradecircleCreateEvent($input: ComCreateEventInput!) {\n comCreateEvent(input: $input) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const UPDATE_EVENT = `\n mutation ComradecircleUpdateEvent($id: ID!, $input: ComUpdateEventInput!) {\n comUpdateEvent(id: $id, input: $input) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const TRANSITION_EVENT = `\n mutation ComradecircleTransitionEvent($id: ID!, $status: ComEventStatus!) {\n comTransitionEvent(id: $id, status: $status) {\n ${EVENT_FIELDS}\n }\n }\n`;\n\nexport const RSVP_EVENT = `\n mutation ComradecircleRsvpEvent($eventId: ID!, $status: ComRsvpStatus!, $note: String) {\n comRsvpEvent(eventId: $eventId, status: $status, note: $note) {\n ${RSVP_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Polls\n// ---------------------------------------------------------------------------\n\nexport const GET_POLL = `\n query ComradecircleGetPoll($id: ID!) {\n comPoll(id: $id) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const LIST_POLLS = `\n query ComradecircleListPolls($circleId: ID!, $status: ComPollStatus) {\n comListPolls(circleId: $circleId, status: $status) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const CREATE_POLL = `\n mutation ComradecircleCreatePoll($input: ComCreatePollInput!) {\n comCreatePoll(input: $input) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const CLOSE_POLL = `\n mutation ComradecircleClosePoll($id: ID!) {\n comClosePoll(id: $id) {\n ${POLL_FIELDS}\n }\n }\n`;\n\nexport const VOTE_POLL = `\n mutation ComradecircleVotePoll($pollId: ID!, $optionId: ID!) {\n comVotePoll(pollId: $pollId, optionId: $optionId) {\n ${POLL_OPTION_FIELDS}\n }\n }\n`;\n\n// ---------------------------------------------------------------------------\n// Health\n// ---------------------------------------------------------------------------\n\nexport const HEALTH = `\n query ComradecircleHealth {\n comHealth\n }\n`;\n","/**\n * Shared zod schemas for the Comradecircle tool surface.\n *\n * Every backend enum is mirrored as a tight zod enum so Claude Desktop grounds\n * tool calls against the exact allowed values. Pagination is exposed as flat\n * limit/offset/cursor args and re-assembled into the subgraph's\n * `PaginationInput` shape by each list tool.\n */\n\nimport { z } from 'zod';\n\nexport const ChannelTypeEnum = z\n .enum(['ANNOUNCEMENT', 'FORUM', 'TEXT', 'VOICE'])\n .describe('Kind of channel within a circle');\n\nexport const ChannelVisibilityEnum = z\n .enum(['CIRCLE', 'PRIVATE'])\n .describe('Who can see a channel: CIRCLE-wide or PRIVATE');\n\nexport const CircleStatusEnum = z\n .enum(['ACTIVE', 'ARCHIVED', 'SUSPENDED'])\n .describe('Lifecycle/moderation status of a circle');\n\nexport const CircleVisibilityEnum = z\n .enum(['PUBLIC', 'PRIVATE', 'SECRET'])\n .describe('Discoverability of a circle: PUBLIC, PRIVATE (join-by-request), or SECRET');\n\nexport const EventModeEnum = z\n .enum(['ONLINE', 'IN_PERSON', 'HYBRID'])\n .describe('Delivery mode of an event');\n\nexport const EventStatusEnum = z\n .enum(['SCHEDULED', 'LIVE', 'COMPLETED', 'CANCELLED'])\n .describe('Lifecycle status of an event');\n\nexport const FollowTargetTypeEnum = z\n .enum(['CIRCLE', 'CHANNEL', 'MEMBER'])\n .describe('What a feed-follow targets');\n\nexport const MemberRoleEnum = z\n .enum(['OWNER', 'ADMIN', 'MODERATOR', 'MEMBER'])\n .describe('Role of a member within a circle');\n\nexport const MembershipStatusEnum = z\n .enum(['ACTIVE', 'PENDING', 'LEFT', 'BANNED'])\n .describe('Status of a circle membership');\n\nexport const PollStatusEnum = z.enum(['OPEN', 'CLOSED']).describe('Lifecycle status of a poll');\n\nexport const PostStatusEnum = z\n .enum(['DRAFT', 'PUBLISHED', 'HIDDEN', 'REMOVED'])\n .describe('Publication status of a post');\n\nexport const PresenceEnum = z\n .enum(['ONLINE', 'AWAY', 'BUSY', 'OFFLINE'])\n .describe('Presence indicator of a member profile');\n\nexport const ReactionTypeEnum = z\n .enum(['LIKE', 'LOVE', 'CELEBRATE', 'INSIGHTFUL', 'SUPPORT', 'LAUGH'])\n .describe('Typed reaction on a post');\n\nexport const RsvpStatusEnum = z\n .enum(['GOING', 'INTERESTED', 'NOT_GOING', 'WAITLISTED'])\n .describe('RSVP response to an event');\n\n/**\n * Assemble the subgraph's `PaginationInput` from flat tool args. Returns\n * `undefined` when no pagination args were supplied so the backend applies its\n * own defaults (limit 50, offset 0).\n */\nexport function buildPagination(\n limit?: number,\n offset?: number,\n cursor?: string,\n): Record<string, unknown> | undefined {\n if (limit === undefined && offset === undefined && cursor === undefined) return undefined;\n const pagination: Record<string, unknown> = {};\n if (limit !== undefined) pagination.limit = limit;\n if (offset !== undefined) pagination.offset = offset;\n if (cursor !== undefined) pagination.cursor = cursor;\n return pagination;\n}\n","/**\n * Comradecircle circle tools — community CRUD.\n *\n * Surface (5): circles_{get,list,create,update,archive}. The membership\n * lifecycle (join/leave) lives under the memberships sub-API.\n * Backend root fields carry the `com` product prefix\n * (comCircle / comListCircles / comCreateCircle / …) and are called by their\n * REAL names in operations.ts.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { CircleStatusEnum, CircleVisibilityEnum, buildPagination } from './shared.js';\n\nexport function registerCircleTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_get')),\n {\n title: 'Get Circle',\n description:\n 'Fetch a single Comradecircle circle (community) by ID, including its channels and memberships.',\n inputSchema: { id: z.string().describe('Circle ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comCircle: Record<string, unknown> | null;\n }>(ops.GET_CIRCLE, { id });\n if (!data.comCircle) return errorResult(`Circle ${id} not found`);\n return jsonResult(data.comCircle);\n } catch (error) {\n ctx.logger.error('comradecircle circles_get failed', { error: String(error) });\n return errorResult(\n `Failed to get circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_list')),\n {\n title: 'List Circles',\n description:\n 'List circles in the bound workspace with optional status/visibility filters and pagination.',\n inputSchema: {\n status: CircleStatusEnum.optional().describe('Filter by lifecycle status'),\n visibility: CircleVisibilityEnum.optional().describe('Filter by visibility'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ status, visibility, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListCircles: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_CIRCLES, {\n status,\n visibility,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListCircles);\n } catch (error) {\n ctx.logger.error('comradecircle circles_list failed', { error: String(error) });\n return errorResult(\n `Failed to list circles: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_create')),\n {\n title: 'Create Circle',\n description:\n 'Create a new circle (community). `slug` must be unique within the workspace. The caller is enrolled as the OWNER.',\n inputSchema: {\n name: z.string().min(1).describe('Circle display name'),\n slug: z.string().min(1).describe('URL slug, unique within the workspace'),\n description: z.string().optional().describe('Circle description'),\n topic: z.string().optional().describe('Short topic/tagline'),\n tags: z.array(z.string()).optional().describe('Free-form topical tags'),\n visibility: CircleVisibilityEnum.optional().describe('Visibility (default PUBLIC)'),\n avatarFileId: z.string().optional().describe('wspace-files-svc File ID for the avatar'),\n },\n },\n async ({ name, slug, description, topic, tags, visibility, avatarFileId }) => {\n try {\n const input: Record<string, unknown> = { name, slug };\n if (description !== undefined) input.description = description;\n if (topic !== undefined) input.topic = topic;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n if (avatarFileId !== undefined) input.avatarFileId = avatarFileId;\n\n const data = await ctx.gql.workspace.request<{\n comCreateCircle: Record<string, unknown>;\n }>(ops.CREATE_CIRCLE, { input });\n return jsonResult(data.comCreateCircle);\n } catch (error) {\n ctx.logger.error('comradecircle circles_create failed', { error: String(error) });\n return errorResult(\n `Failed to create circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_update')),\n {\n title: 'Update Circle',\n description:\n 'Update a circle. At least one mutable field must be provided. Use the archive tool to soft-delete.',\n inputSchema: {\n id: z.string().describe('Circle ID'),\n name: z.string().optional().describe('Updated display name'),\n description: z.string().optional().describe('Updated description'),\n topic: z.string().optional().describe('Updated topic/tagline'),\n tags: z.array(z.string()).optional().describe('Updated topical tags'),\n visibility: CircleVisibilityEnum.optional().describe('Updated visibility'),\n avatarFileId: z.string().optional().describe('Updated avatar File ID'),\n },\n },\n async ({ id, name, description, topic, tags, visibility, avatarFileId }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (topic !== undefined) input.topic = topic;\n if (tags !== undefined) input.tags = tags;\n if (visibility !== undefined) input.visibility = visibility;\n if (avatarFileId !== undefined) input.avatarFileId = avatarFileId;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/topic/tags/visibility/avatarFileId',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdateCircle: Record<string, unknown>;\n }>(ops.UPDATE_CIRCLE, { id, input });\n return jsonResult(data.comUpdateCircle);\n } catch (error) {\n ctx.logger.error('comradecircle circles_update failed', { error: String(error) });\n return errorResult(\n `Failed to update circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'circles_archive')),\n {\n title: 'Archive Circle',\n description: 'Archive (soft-delete) a circle. Returns true on success.',\n inputSchema: { id: z.string().describe('Circle ID') },\n // BOFF-5868/BOFF-3907: the fleet destructiveHint inference (tool-name.ts)\n // only matches a `delete` name segment, so an irreversible `archive` call\n // needs an explicit annotation to be caught by the confirmation gate that\n // comradecircle-mcp/src/index.ts enables via enforceDestructiveConfirmation.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comArchiveCircle: boolean }>(\n ops.ARCHIVE_CIRCLE,\n { id },\n );\n return jsonResult({ archived: data.comArchiveCircle });\n } catch (error) {\n ctx.logger.error('comradecircle circles_archive failed', { error: String(error) });\n return errorResult(\n `Failed to archive circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle channel tools — per-circle channels (text/voice/forum/announce).\n *\n * Surface (3): commchannels_{list,create,update}.\n *\n * Note: the MCP tool prefix is `commchannels_*` (not `channels_*`) to avoid\n * colliding with the generic `channels` module's tool names when both are\n * mounted in a shell. The GraphQL operations/types are unchanged.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { ChannelTypeEnum, ChannelVisibilityEnum } from './shared.js';\n\nexport function registerChannelTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'commchannels_list')),\n {\n title: 'List Channels',\n description: 'List the channels belonging to a circle, ordered by position.',\n inputSchema: { circleId: z.string().describe('Circle ID') },\n },\n async ({ circleId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListChannels: Array<Record<string, unknown>>;\n }>(ops.LIST_CHANNELS, { circleId });\n return jsonResult(data.comListChannels);\n } catch (error) {\n ctx.logger.error('comradecircle commchannels_list failed', { error: String(error) });\n return errorResult(\n `Failed to list channels: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'commchannels_create')),\n {\n title: 'Create Channel',\n description:\n 'Create a channel within a circle. `slug` must be unique within the circle. `type` defaults to TEXT; `visibility` defaults to CIRCLE.',\n inputSchema: {\n circleId: z.string().min(1).describe('Parent circle ID'),\n name: z.string().min(1).describe('Channel display name'),\n slug: z.string().min(1).describe('URL slug, unique within the circle'),\n description: z.string().optional().describe('Channel description'),\n type: ChannelTypeEnum.optional().describe('Channel type (default TEXT)'),\n visibility: ChannelVisibilityEnum.optional().describe(\n 'Channel visibility (default CIRCLE)',\n ),\n position: z.number().int().optional().describe('Sort position within the circle'),\n },\n },\n async ({ circleId, name, slug, description, type, visibility, position }) => {\n try {\n const input: Record<string, unknown> = { circleId, name, slug };\n if (description !== undefined) input.description = description;\n if (type !== undefined) input.type = type;\n if (visibility !== undefined) input.visibility = visibility;\n if (position !== undefined) input.position = position;\n\n const data = await ctx.gql.workspace.request<{\n comCreateChannel: Record<string, unknown>;\n }>(ops.CREATE_CHANNEL, { input });\n return jsonResult(data.comCreateChannel);\n } catch (error) {\n ctx.logger.error('comradecircle commchannels_create failed', { error: String(error) });\n return errorResult(\n `Failed to create channel: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'commchannels_update')),\n {\n title: 'Update Channel',\n description:\n 'Update a channel. At least one mutable field must be provided. Use `isArchived` to archive/unarchive.',\n inputSchema: {\n id: z.string().describe('Channel ID'),\n name: z.string().optional().describe('Updated display name'),\n description: z.string().optional().describe('Updated description'),\n type: ChannelTypeEnum.optional().describe('Updated channel type'),\n visibility: ChannelVisibilityEnum.optional().describe('Updated visibility'),\n position: z.number().int().optional().describe('Updated sort position'),\n isArchived: z.boolean().optional().describe('Archive (true) or unarchive (false)'),\n },\n },\n async ({ id, name, description, type, visibility, position, isArchived }) => {\n try {\n const input: Record<string, unknown> = {};\n if (name !== undefined) input.name = name;\n if (description !== undefined) input.description = description;\n if (type !== undefined) input.type = type;\n if (visibility !== undefined) input.visibility = visibility;\n if (position !== undefined) input.position = position;\n if (isArchived !== undefined) input.isArchived = isArchived;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of name/description/type/visibility/position/isArchived',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdateChannel: Record<string, unknown>;\n }>(ops.UPDATE_CHANNEL, { id, input });\n return jsonResult(data.comUpdateChannel);\n } catch (error) {\n ctx.logger.error('comradecircle commchannels_update failed', { error: String(error) });\n return errorResult(\n `Failed to update channel: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle membership tools — join/leave lifecycle, roster + role management.\n *\n * Surface (4): memberships_{join,leave,list,set_role}. join/leave operate the\n * calling member's own membership of a circle; list/set_role manage the roster.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { MembershipStatusEnum, MemberRoleEnum, buildPagination } from './shared.js';\n\nexport function registerMembershipTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_join')),\n {\n title: 'Join Circle',\n description:\n 'Join a circle as the calling member (idempotent — re-activates a LEFT membership). Returns the membership.',\n inputSchema: { circleId: z.string().describe('Circle ID to join') },\n },\n async ({ circleId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comJoinCircle: Record<string, unknown>;\n }>(ops.JOIN_CIRCLE, { circleId });\n return jsonResult(data.comJoinCircle);\n } catch (error) {\n ctx.logger.error('comradecircle memberships_join failed', { error: String(error) });\n return errorResult(\n `Failed to join circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_leave')),\n {\n title: 'Leave Circle',\n description: 'Leave a circle as the calling member. Returns true on success.',\n inputSchema: { circleId: z.string().describe('Circle ID to leave') },\n // BOFF-5868/BOFF-3907: `leave` is not caught by the fleet's name-based\n // destructiveHint inference. Gated conservatively — a sole OWNER leaving\n // orphans the circle, and an unattended agent leaving communities on the\n // user's behalf is exactly the outcome the confirmation gate exists for.\n annotations: { destructiveHint: true },\n },\n async ({ circleId }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comLeaveCircle: boolean }>(\n ops.LEAVE_CIRCLE,\n {\n circleId,\n },\n );\n return jsonResult({ left: data.comLeaveCircle });\n } catch (error) {\n ctx.logger.error('comradecircle memberships_leave failed', { error: String(error) });\n return errorResult(\n `Failed to leave circle: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_list')),\n {\n title: 'List Memberships',\n description:\n 'List circle memberships, optionally filtered by circle and/or status, with pagination.',\n inputSchema: {\n circleId: z.string().optional().describe('Filter by circle ID'),\n status: MembershipStatusEnum.optional().describe('Filter by membership status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ circleId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListMemberships: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_MEMBERSHIPS, {\n circleId,\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListMemberships);\n } catch (error) {\n ctx.logger.error('comradecircle memberships_list failed', { error: String(error) });\n return errorResult(\n `Failed to list memberships: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'memberships_set_role')),\n {\n title: 'Set Member Role',\n description:\n 'Change a member’s role within a circle (OWNER/ADMIN/MODERATOR/MEMBER). Returns the updated membership.',\n inputSchema: {\n membershipId: z.string().describe('Membership ID'),\n role: MemberRoleEnum.describe('New role to assign'),\n },\n },\n async ({ membershipId, role }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comSetMemberRole: Record<string, unknown>;\n }>(ops.SET_MEMBER_ROLE, { membershipId, role });\n return jsonResult(data.comSetMemberRole);\n } catch (error) {\n ctx.logger.error('comradecircle memberships_set_role failed', { error: String(error) });\n return errorResult(\n `Failed to set member role: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle member-profile tools — member directory + self profile.\n *\n * Surface (3): profiles_{get,list,upsert}. `profiles_upsert` creates or updates\n * the calling member's profile (one per member per workspace).\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PresenceEnum, buildPagination } from './shared.js';\n\nexport function registerProfileTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'profiles_get')),\n {\n title: 'Get Member Profile',\n description: 'Fetch a member’s Comradecircle profile by their member (user) ID.',\n inputSchema: { memberId: z.string().describe('Member (user) ID') },\n },\n async ({ memberId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comProfile: Record<string, unknown> | null;\n }>(ops.GET_PROFILE, { memberId });\n if (!data.comProfile) return errorResult(`Profile for member ${memberId} not found`);\n return jsonResult(data.comProfile);\n } catch (error) {\n ctx.logger.error('comradecircle profiles_get failed', { error: String(error) });\n return errorResult(\n `Failed to get profile: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'profiles_list')),\n {\n title: 'List Member Profiles',\n description:\n 'List member profiles in the bound workspace, optionally restricted to discoverable profiles, with pagination.',\n inputSchema: {\n discoverable: z.boolean().optional().describe('Only profiles that opted into discovery'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ discoverable, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListProfiles: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_PROFILES, {\n discoverable,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListProfiles);\n } catch (error) {\n ctx.logger.error('comradecircle profiles_list failed', { error: String(error) });\n return errorResult(\n `Failed to list profiles: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'profiles_upsert')),\n {\n title: 'Upsert My Profile',\n description:\n 'Create or update the calling member’s profile (one per member per workspace). `displayName` is required.',\n inputSchema: {\n displayName: z.string().min(1).describe('Display name'),\n headline: z.string().optional().describe('Short headline/title'),\n bio: z.string().optional().describe('Profile bio'),\n interests: z.array(z.string()).optional().describe('Interest tags'),\n skills: z.array(z.string()).optional().describe('Skill tags'),\n presence: PresenceEnum.optional().describe('Presence indicator'),\n discoverable: z.boolean().optional().describe('Opt into member discovery'),\n avatarFileId: z.string().optional().describe('wspace-files-svc File ID for the avatar'),\n },\n },\n async ({\n displayName,\n headline,\n bio,\n interests,\n skills,\n presence,\n discoverable,\n avatarFileId,\n }) => {\n try {\n const input: Record<string, unknown> = { displayName };\n if (headline !== undefined) input.headline = headline;\n if (bio !== undefined) input.bio = bio;\n if (interests !== undefined) input.interests = interests;\n if (skills !== undefined) input.skills = skills;\n if (presence !== undefined) input.presence = presence;\n if (discoverable !== undefined) input.discoverable = discoverable;\n if (avatarFileId !== undefined) input.avatarFileId = avatarFileId;\n\n const data = await ctx.gql.workspace.request<{\n comUpsertProfile: Record<string, unknown>;\n }>(ops.UPSERT_PROFILE, { input });\n return jsonResult(data.comUpsertProfile);\n } catch (error) {\n ctx.logger.error('comradecircle profiles_upsert failed', { error: String(error) });\n return errorResult(\n `Failed to upsert profile: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle post tools — channel posts + reactions.\n *\n * Surface (6): posts_{get,list,create,update,remove,react}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PostStatusEnum, ReactionTypeEnum, buildPagination } from './shared.js';\n\nexport function registerPostTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_get')),\n {\n title: 'Get Post',\n description: 'Fetch a single post by ID, including its comments and reactions.',\n inputSchema: { id: z.string().describe('Post ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comPost: Record<string, unknown> | null;\n }>(ops.GET_POST, { id });\n if (!data.comPost) return errorResult(`Post ${id} not found`);\n return jsonResult(data.comPost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_get failed', { error: String(error) });\n return errorResult(\n `Failed to get post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_list')),\n {\n title: 'List Posts',\n description:\n 'List posts, optionally filtered by channel and/or status, newest first, with pagination.',\n inputSchema: {\n channelId: z.string().optional().describe('Filter by channel ID'),\n status: PostStatusEnum.optional().describe('Filter by post status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ channelId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListPosts: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_POSTS, {\n channelId,\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListPosts);\n } catch (error) {\n ctx.logger.error('comradecircle posts_list failed', { error: String(error) });\n return errorResult(\n `Failed to list posts: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_create')),\n {\n title: 'Create Post',\n description:\n 'Create a post in a channel. `status` defaults to PUBLISHED. Attach files by their wspace-files-svc File IDs.',\n inputSchema: {\n channelId: z.string().min(1).describe('Target channel ID'),\n body: z.string().min(1).describe('Post body'),\n status: PostStatusEnum.optional().describe('Initial status (default PUBLISHED)'),\n tags: z.array(z.string()).optional().describe('Topical tags'),\n attachmentFileIds: z\n .array(z.string())\n .optional()\n .describe('wspace-files-svc File IDs to attach'),\n },\n },\n async ({ channelId, body, status, tags, attachmentFileIds }) => {\n try {\n const input: Record<string, unknown> = { channelId, body };\n if (status !== undefined) input.status = status;\n if (tags !== undefined) input.tags = tags;\n if (attachmentFileIds !== undefined) input.attachmentFileIds = attachmentFileIds;\n\n const data = await ctx.gql.workspace.request<{\n comCreatePost: Record<string, unknown>;\n }>(ops.CREATE_POST, { input });\n return jsonResult(data.comCreatePost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_create failed', { error: String(error) });\n return errorResult(\n `Failed to create post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_update')),\n {\n title: 'Update Post',\n description:\n 'Update a post. At least one mutable field must be provided. Use `isPinned` to pin/unpin and `status` to hide/publish.',\n inputSchema: {\n id: z.string().describe('Post ID'),\n body: z.string().optional().describe('Updated body'),\n status: PostStatusEnum.optional().describe('Updated status'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n isPinned: z.boolean().optional().describe('Pin (true) or unpin (false)'),\n },\n },\n async ({ id, body, status, tags, isPinned }) => {\n try {\n const input: Record<string, unknown> = {};\n if (body !== undefined) input.body = body;\n if (status !== undefined) input.status = status;\n if (tags !== undefined) input.tags = tags;\n if (isPinned !== undefined) input.isPinned = isPinned;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of body/status/tags/isPinned',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdatePost: Record<string, unknown>;\n }>(ops.UPDATE_POST, { id, input });\n return jsonResult(data.comUpdatePost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_update failed', { error: String(error) });\n return errorResult(\n `Failed to update post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_remove')),\n {\n title: 'Remove Post',\n description: 'Remove (soft-delete) a post. Returns true on success.',\n inputSchema: { id: z.string().describe('Post ID') },\n // BOFF-5868/BOFF-3907: see circles_archive — `remove` is not caught by\n // the fleet's name-based destructiveHint inference.\n annotations: { destructiveHint: true },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comRemovePost: boolean }>(ops.REMOVE_POST, {\n id,\n });\n return jsonResult({ removed: data.comRemovePost });\n } catch (error) {\n ctx.logger.error('comradecircle posts_remove failed', { error: String(error) });\n return errorResult(\n `Failed to remove post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'posts_react')),\n {\n title: 'React to Post',\n description:\n 'Toggle a typed reaction on a post for the calling member (idempotent add/remove). Returns the updated post.',\n inputSchema: {\n postId: z.string().describe('Post ID'),\n type: ReactionTypeEnum.describe('Reaction type to toggle'),\n },\n },\n async ({ postId, type }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comReactToPost: Record<string, unknown>;\n }>(ops.REACT_TO_POST, { postId, type });\n return jsonResult(data.comReactToPost);\n } catch (error) {\n ctx.logger.error('comradecircle posts_react failed', { error: String(error) });\n return errorResult(\n `Failed to react to post: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle comment tools — threaded comments on posts.\n *\n * Surface (2): comments_list, comments_add.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerCommentTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_list')),\n {\n title: 'List Comments',\n description: 'List the comments on a post (threaded via each comment’s parentId).',\n inputSchema: { postId: z.string().describe('Post ID') },\n },\n async ({ postId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListComments: Array<Record<string, unknown>>;\n }>(ops.LIST_COMMENTS, { postId });\n return jsonResult(data.comListComments);\n } catch (error) {\n ctx.logger.error('comradecircle comments_list failed', { error: String(error) });\n return errorResult(\n `Failed to list comments: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'comments_add')),\n {\n title: 'Add Comment',\n description:\n 'Add a comment to a post as the calling member. Pass `parentId` to reply to an existing comment.',\n inputSchema: {\n postId: z.string().min(1).describe('Post being commented on'),\n body: z.string().min(1).describe('Comment body'),\n parentId: z.string().optional().describe('Parent comment ID (for replies)'),\n },\n },\n async ({ postId, body, parentId }) => {\n try {\n const input: Record<string, unknown> = { postId, body };\n if (parentId !== undefined) input.parentId = parentId;\n\n const data = await ctx.gql.workspace.request<{\n comAddComment: Record<string, unknown>;\n }>(ops.ADD_COMMENT, { input });\n return jsonResult(data.comAddComment);\n } catch (error) {\n ctx.logger.error('comradecircle comments_add failed', { error: String(error) });\n return errorResult(\n `Failed to add comment: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle feed tools — unified home feed + follow graph.\n *\n * Surface (5): feed_my_feed, feed_my_follows, feed_follow, feed_unfollow,\n * feed_mute_follow.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { FollowTargetTypeEnum, buildPagination } from './shared.js';\n\nexport function registerFeedTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_my_feed')),\n {\n title: 'My Home Feed',\n description:\n 'The calling member’s unified home feed — published posts from every channel, member, and circle they follow, newest first.',\n inputSchema: {\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comMyFeed: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.MY_FEED, { pagination: buildPagination(limit, offset, cursor) });\n return jsonResult(data.comMyFeed);\n } catch (error) {\n ctx.logger.error('comradecircle feed_my_feed failed', { error: String(error) });\n return errorResult(\n `Failed to load home feed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_my_follows')),\n {\n title: 'List My Follows',\n description:\n 'List the calling member’s feed-follows, optionally filtered by target type (CIRCLE/CHANNEL/MEMBER).',\n inputSchema: {\n targetType: FollowTargetTypeEnum.optional().describe('Filter by follow target type'),\n },\n },\n async ({ targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comMyFollows: Array<Record<string, unknown>>;\n }>(ops.MY_FOLLOWS, { targetType });\n return jsonResult(data.comMyFollows);\n } catch (error) {\n ctx.logger.error('comradecircle feed_my_follows failed', { error: String(error) });\n return errorResult(\n `Failed to list follows: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_follow')),\n {\n title: 'Follow Target',\n description:\n 'Follow a circle, channel, or member so their posts appear in the calling member’s home feed.',\n inputSchema: {\n targetId: z.string().min(1).describe('ID of the circle/channel/member to follow'),\n targetType: FollowTargetTypeEnum.describe('What is being followed'),\n },\n },\n async ({ targetId, targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comFollow: Record<string, unknown>;\n }>(ops.FOLLOW, { input: { targetId, targetType } });\n return jsonResult(data.comFollow);\n } catch (error) {\n ctx.logger.error('comradecircle feed_follow failed', { error: String(error) });\n return errorResult(\n `Failed to follow target: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_unfollow')),\n {\n title: 'Unfollow Target',\n description: 'Stop following a circle, channel, or member. Returns true on success.',\n inputSchema: {\n targetId: z.string().min(1).describe('ID of the circle/channel/member to unfollow'),\n targetType: FollowTargetTypeEnum.describe('What is being unfollowed'),\n },\n },\n async ({ targetId, targetType }) => {\n try {\n const data = await ctx.gql.workspace.request<{ comUnfollow: boolean }>(ops.UNFOLLOW, {\n input: { targetId, targetType },\n });\n return jsonResult({ unfollowed: data.comUnfollow });\n } catch (error) {\n ctx.logger.error('comradecircle feed_unfollow failed', { error: String(error) });\n return errorResult(\n `Failed to unfollow target: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'feed_mute_follow')),\n {\n title: 'Mute Follow',\n description:\n 'Mute or unmute a feed-follow — muted targets stay followed but are suppressed from the home feed.',\n inputSchema: {\n id: z.string().describe('Feed-follow ID'),\n muted: z.boolean().describe('Mute (true) or unmute (false)'),\n },\n },\n async ({ id, muted }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comMuteFollow: Record<string, unknown>;\n }>(ops.MUTE_FOLLOW, { id, muted });\n return jsonResult(data.comMuteFollow);\n } catch (error) {\n ctx.logger.error('comradecircle feed_mute_follow failed', { error: String(error) });\n return errorResult(\n `Failed to mute follow: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle event tools — circle events + RSVPs.\n *\n * Surface (6): events_{get,list,create,update,transition,rsvp}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { EventModeEnum, EventStatusEnum, RsvpStatusEnum, buildPagination } from './shared.js';\n\nexport function registerEventTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_get')),\n {\n title: 'Get Event',\n description: 'Fetch a single event by ID, including its RSVPs.',\n inputSchema: { id: z.string().describe('Event ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comEvent: Record<string, unknown> | null;\n }>(ops.GET_EVENT, { id });\n if (!data.comEvent) return errorResult(`Event ${id} not found`);\n return jsonResult(data.comEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_get failed', { error: String(error) });\n return errorResult(\n `Failed to get event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_list')),\n {\n title: 'List Events',\n description: 'List events, optionally filtered by circle and/or status, with pagination.',\n inputSchema: {\n circleId: z.string().optional().describe('Filter by circle ID'),\n status: EventStatusEnum.optional().describe('Filter by event status'),\n limit: z.number().int().optional().describe('Page size (default 50)'),\n offset: z.number().int().optional().describe('Pagination offset (default 0)'),\n cursor: z.string().optional().describe('Opaque pagination cursor'),\n },\n },\n async ({ circleId, status, limit, offset, cursor }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListEvents: { items: Array<Record<string, unknown>>; pageInfo: unknown };\n }>(ops.LIST_EVENTS, {\n circleId,\n status,\n pagination: buildPagination(limit, offset, cursor),\n });\n return jsonResult(data.comListEvents);\n } catch (error) {\n ctx.logger.error('comradecircle events_list failed', { error: String(error) });\n return errorResult(\n `Failed to list events: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_create')),\n {\n title: 'Create Event',\n description:\n 'Schedule an event in a circle. `startsAt` is required (ISO-8601 DateTime); `mode` defaults to ONLINE.',\n inputSchema: {\n circleId: z.string().min(1).describe('Host circle ID'),\n title: z.string().min(1).describe('Event title'),\n startsAt: z.string().min(1).describe('Start time (ISO-8601 DateTime)'),\n description: z.string().optional().describe('Event description'),\n mode: EventModeEnum.optional().describe('Delivery mode (default ONLINE)'),\n location: z.string().optional().describe('Physical location (for IN_PERSON/HYBRID)'),\n joinUrl: z.string().optional().describe('Join URL (for ONLINE/HYBRID)'),\n capacity: z.number().int().optional().describe('Maximum attendees'),\n endsAt: z.string().optional().describe('End time (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Topical tags'),\n },\n },\n async ({\n circleId,\n title,\n startsAt,\n description,\n mode,\n location,\n joinUrl,\n capacity,\n endsAt,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = { circleId, title, startsAt };\n if (description !== undefined) input.description = description;\n if (mode !== undefined) input.mode = mode;\n if (location !== undefined) input.location = location;\n if (joinUrl !== undefined) input.joinUrl = joinUrl;\n if (capacity !== undefined) input.capacity = capacity;\n if (endsAt !== undefined) input.endsAt = endsAt;\n if (tags !== undefined) input.tags = tags;\n\n const data = await ctx.gql.workspace.request<{\n comCreateEvent: Record<string, unknown>;\n }>(ops.CREATE_EVENT, { input });\n return jsonResult(data.comCreateEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_create failed', { error: String(error) });\n return errorResult(\n `Failed to create event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_update')),\n {\n title: 'Update Event',\n description:\n 'Update an event’s details. At least one mutable field must be provided. Use the transition tool to change status.',\n inputSchema: {\n id: z.string().describe('Event ID'),\n title: z.string().optional().describe('Updated title'),\n description: z.string().optional().describe('Updated description'),\n mode: EventModeEnum.optional().describe('Updated delivery mode'),\n location: z.string().optional().describe('Updated location'),\n joinUrl: z.string().optional().describe('Updated join URL'),\n capacity: z.number().int().optional().describe('Updated capacity'),\n startsAt: z.string().optional().describe('Updated start time (ISO-8601 DateTime)'),\n endsAt: z.string().optional().describe('Updated end time (ISO-8601 DateTime)'),\n tags: z.array(z.string()).optional().describe('Updated tags'),\n },\n },\n async ({\n id,\n title,\n description,\n mode,\n location,\n joinUrl,\n capacity,\n startsAt,\n endsAt,\n tags,\n }) => {\n try {\n const input: Record<string, unknown> = {};\n if (title !== undefined) input.title = title;\n if (description !== undefined) input.description = description;\n if (mode !== undefined) input.mode = mode;\n if (location !== undefined) input.location = location;\n if (joinUrl !== undefined) input.joinUrl = joinUrl;\n if (capacity !== undefined) input.capacity = capacity;\n if (startsAt !== undefined) input.startsAt = startsAt;\n if (endsAt !== undefined) input.endsAt = endsAt;\n if (tags !== undefined) input.tags = tags;\n\n if (Object.keys(input).length === 0) {\n return errorResult(\n 'No updates specified — provide at least one of title/description/mode/location/joinUrl/capacity/startsAt/endsAt/tags',\n );\n }\n\n const data = await ctx.gql.workspace.request<{\n comUpdateEvent: Record<string, unknown>;\n }>(ops.UPDATE_EVENT, { id, input });\n return jsonResult(data.comUpdateEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_update failed', { error: String(error) });\n return errorResult(\n `Failed to update event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_transition')),\n {\n title: 'Transition Event',\n description:\n 'Advance an event through its lifecycle (SCHEDULED → LIVE → COMPLETED; CANCELLED from any non-terminal state).',\n inputSchema: {\n id: z.string().describe('Event ID'),\n status: EventStatusEnum.describe('Target status'),\n },\n },\n async ({ id, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comTransitionEvent: Record<string, unknown>;\n }>(ops.TRANSITION_EVENT, { id, status });\n return jsonResult(data.comTransitionEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_transition failed', { error: String(error) });\n return errorResult(\n `Failed to transition event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'events_rsvp')),\n {\n title: 'RSVP to Event',\n description:\n 'RSVP to an event as the calling member (idempotent — updates an existing RSVP). Returns the RSVP.',\n inputSchema: {\n eventId: z.string().describe('Event ID'),\n status: RsvpStatusEnum.describe('RSVP response'),\n note: z.string().optional().describe('Optional note to the host'),\n },\n },\n async ({ eventId, status, note }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comRsvpEvent: Record<string, unknown>;\n }>(ops.RSVP_EVENT, { eventId, status, note });\n return jsonResult(data.comRsvpEvent);\n } catch (error) {\n ctx.logger.error('comradecircle events_rsvp failed', { error: String(error) });\n return errorResult(\n `Failed to RSVP to event: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle poll tools — circle polls + voting.\n *\n * Surface (5): polls_{get,list,create,close,vote}.\n */\n\nimport { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\nimport { PollStatusEnum } from './shared.js';\n\nexport function registerPollTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_get')),\n {\n title: 'Get Poll',\n description: 'Fetch a single poll by ID, including its options and vote counts.',\n inputSchema: { id: z.string().describe('Poll ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comPoll: Record<string, unknown> | null;\n }>(ops.GET_POLL, { id });\n if (!data.comPoll) return errorResult(`Poll ${id} not found`);\n return jsonResult(data.comPoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_get failed', { error: String(error) });\n return errorResult(\n `Failed to get poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_list')),\n {\n title: 'List Polls',\n description: 'List the polls in a circle, optionally filtered by status (OPEN/CLOSED).',\n inputSchema: {\n circleId: z.string().describe('Circle ID'),\n status: PollStatusEnum.optional().describe('Filter by poll status'),\n },\n },\n async ({ circleId, status }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comListPolls: Array<Record<string, unknown>>;\n }>(ops.LIST_POLLS, { circleId, status });\n return jsonResult(data.comListPolls);\n } catch (error) {\n ctx.logger.error('comradecircle polls_list failed', { error: String(error) });\n return errorResult(\n `Failed to list polls: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_create')),\n {\n title: 'Create Poll',\n description:\n 'Create a poll in a circle with two or more options. `allowMultiple` and `isAnonymous` default to false.',\n inputSchema: {\n circleId: z.string().min(1).describe('Host circle ID'),\n question: z.string().min(1).describe('Poll question'),\n options: z.array(z.string()).min(2).describe('Option labels (at least two)'),\n allowMultiple: z.boolean().optional().describe('Allow selecting multiple options'),\n isAnonymous: z.boolean().optional().describe('Hide who voted for what'),\n closesAt: z.string().optional().describe('Auto-close time (ISO-8601 DateTime)'),\n },\n },\n async ({ circleId, question, options, allowMultiple, isAnonymous, closesAt }) => {\n try {\n const input: Record<string, unknown> = { circleId, question, options };\n if (allowMultiple !== undefined) input.allowMultiple = allowMultiple;\n if (isAnonymous !== undefined) input.isAnonymous = isAnonymous;\n if (closesAt !== undefined) input.closesAt = closesAt;\n\n const data = await ctx.gql.workspace.request<{\n comCreatePoll: Record<string, unknown>;\n }>(ops.CREATE_POLL, { input });\n return jsonResult(data.comCreatePoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_create failed', { error: String(error) });\n return errorResult(\n `Failed to create poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_close')),\n {\n title: 'Close Poll',\n description: 'Close a poll so no further votes can be cast. Returns the updated poll.',\n inputSchema: { id: z.string().describe('Poll ID') },\n },\n async ({ id }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comClosePoll: Record<string, unknown>;\n }>(ops.CLOSE_POLL, { id });\n return jsonResult(data.comClosePoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_close failed', { error: String(error) });\n return errorResult(\n `Failed to close poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n\n server.registerTool(\n track(mcpToolName(ctx.productName, 'polls_vote')),\n {\n title: 'Vote on Poll',\n description:\n 'Cast a vote for a poll option as the calling member (one vote per option). Returns the updated option.',\n inputSchema: {\n pollId: z.string().describe('Poll ID'),\n optionId: z.string().describe('Poll option ID to vote for'),\n },\n },\n async ({ pollId, optionId }) => {\n try {\n const data = await ctx.gql.workspace.request<{\n comVotePoll: Record<string, unknown>;\n }>(ops.VOTE_POLL, { pollId, optionId });\n return jsonResult(data.comVotePoll);\n } catch (error) {\n ctx.logger.error('comradecircle polls_vote failed', { error: String(error) });\n return errorResult(\n `Failed to vote on poll: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","/**\n * Comradecircle health tool.\n *\n * Surface (1): health — maps to the @public comHealth query (no auth required),\n * a liveness/identity probe for the Comradecircle subgraph.\n */\n\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { jsonResult, errorResult, mcpToolName, type McpContext } from '../../../core/index.js';\nimport * as ops from '../operations.js';\n\nexport function registerHealthTools(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n server.registerTool(\n track(mcpToolName(ctx.productName, 'health')),\n {\n title: 'Comradecircle Health Check',\n description:\n 'Public health probe for the Comradecircle subgraph (comHealth). Requires no authentication.',\n inputSchema: {},\n },\n async () => {\n try {\n const data = await ctx.gql.workspace.request<{ comHealth: string }>(ops.HEALTH, {});\n return jsonResult({ ok: true, status: data.comHealth });\n } catch (error) {\n ctx.logger.error('comradecircle health failed', { error: String(error) });\n return errorResult(\n `Comradecircle health check failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n },\n );\n}\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpResourceUri, type McpContext } from '../../core/index.js';\nimport { LIST_CIRCLES, LIST_PROFILES, MY_FEED } from './operations.js';\n\n/**\n * Read-only Comradecircle MCP resources. URIs are product-prefixed via\n * mcpResourceUri so they don't collide when multiple MCP servers run side by\n * side. Each is tracked at function entry so the shell manifest reflects what\n * was registered even though registration is imperative.\n */\nexport function registerComradecircleResources(\n server: McpServer,\n ctx: McpContext,\n track: (uri: string) => string,\n): void {\n const schemaUri = track(mcpResourceUri(ctx.productName, 'schema'));\n const circlesUri = track(mcpResourceUri(ctx.productName, 'circles'));\n const feedUri = track(mcpResourceUri(ctx.productName, 'feed'));\n const profilesUri = track(mcpResourceUri(ctx.productName, 'profiles'));\n\n // <product>://schema — domain overview\n server.registerResource(\n 'comradecircle-schema',\n schemaUri,\n {\n title: 'Comradecircle Domain Schema',\n description:\n 'Overview of the Comradecircle community domain — entities, enums, and the per-entity tool surface.',\n mimeType: 'text/plain',\n },\n async () => {\n ctx.logger.debug(`Resource ${schemaUri} requested`);\n const schema = `# Comradecircle Domain (Overview)\n\nUnified social, communication & engagement platform for workspaces.\n\n## Entities\n- ComCircle — a community (channels, memberships, polls, events)\n- ComChannel — a channel within a circle (TEXT/VOICE/FORUM/ANNOUNCEMENT)\n- ComMembership — a member's membership of a circle (role + status)\n- ComProfile — a member's social profile (one per member per workspace)\n- ComPost (+ComComment, +ComReaction) — channel posts, threaded comments, typed reactions\n- ComFeedFollow — a follow edge feeding the unified home feed\n- ComEvent (+ComEventRsvp) — circle events + RSVPs\n- ComPoll (+ComPollOption) — circle polls + options/votes\n\n## Enums\n- ComCircleVisibility: PUBLIC, PRIVATE, SECRET\n- ComCircleStatus: ACTIVE, ARCHIVED, SUSPENDED\n- ComChannelType: TEXT, VOICE, FORUM, ANNOUNCEMENT\n- ComChannelVisibility: CIRCLE, PRIVATE\n- ComMemberRole: OWNER, ADMIN, MODERATOR, MEMBER\n- ComMembershipStatus: ACTIVE, PENDING, LEFT, BANNED\n- ComPostStatus: DRAFT, PUBLISHED, HIDDEN, REMOVED\n- ComReactionType: LIKE, LOVE, CELEBRATE, INSIGHTFUL, SUPPORT, LAUGH\n- ComFollowTargetType: CIRCLE, CHANNEL, MEMBER\n- ComEventMode: ONLINE, IN_PERSON, HYBRID\n- ComEventStatus: SCHEDULED, LIVE, COMPLETED, CANCELLED\n- ComRsvpStatus: GOING, INTERESTED, NOT_GOING, WAITLISTED\n- ComPollStatus: OPEN, CLOSED\n- ComPresence: ONLINE, AWAY, BUSY, OFFLINE\n\n## Tool groups\ncircles, channels, memberships, profiles, posts, comments, feed, events, polls.\nAll run against the WORKSPACE gateway (workspace-scoped) except the public health probe.\n`;\n return {\n contents: [{ uri: schemaUri, text: schema, mimeType: 'text/plain' }],\n };\n },\n );\n\n // <product>://circles — circle directory\n server.registerResource(\n 'comradecircle-circles',\n circlesUri,\n {\n title: 'Comradecircle Circle Directory',\n description: 'The first page of circles in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${circlesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ comListCircles: unknown }>(LIST_CIRCLES, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: circlesUri,\n text: JSON.stringify(data.comListCircles, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: circlesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://feed — the calling member's home feed\n server.registerResource(\n 'comradecircle-feed',\n feedUri,\n {\n title: 'Comradecircle Home Feed',\n description: 'The calling member’s unified home feed (first page).',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${feedUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ comMyFeed: unknown }>(MY_FEED, {\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: feedUri,\n text: JSON.stringify(data.comMyFeed, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: feedUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n\n // <product>://profiles — discoverable member directory\n server.registerResource(\n 'comradecircle-profiles',\n profilesUri,\n {\n title: 'Comradecircle Member Directory',\n description: 'The first page of discoverable member profiles in the bound workspace.',\n mimeType: 'application/json',\n },\n async () => {\n ctx.logger.debug(`Resource ${profilesUri} requested`);\n try {\n const data = await ctx.gql.workspace.request<{ comListProfiles: unknown }>(LIST_PROFILES, {\n discoverable: true,\n pagination: { limit: 50, offset: 0 },\n });\n return {\n contents: [\n {\n uri: profilesUri,\n text: JSON.stringify(data.comListProfiles, null, 2),\n mimeType: 'application/json',\n },\n ],\n };\n } catch (error) {\n return {\n contents: [\n {\n uri: profilesUri,\n text: JSON.stringify({\n error: error instanceof Error ? error.message : String(error),\n }),\n mimeType: 'application/json',\n },\n ],\n };\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { mcpPromptName, type McpContext } from '../../core/index.js';\n\n/**\n * Comradecircle MCP prompts — guided multi-step workflows. Names are\n * product-prefixed via mcpPromptName and tracked at function entry.\n */\nexport function registerComradecirclePrompts(\n server: McpServer,\n ctx: McpContext,\n track: (n: string) => string,\n): void {\n const p = ctx.productName;\n const setupName = track(mcpPromptName(p, 'community-setup'));\n const engagementName = track(mcpPromptName(p, 'community-engagement'));\n\n // <product>-community-setup — stand up a circle + channels\n server.registerPrompt(\n setupName,\n {\n title: 'Community Setup',\n description:\n 'Guide for standing up a new Comradecircle community end to end: create the circle, add channels, set up your profile, and seed the first post.',\n argsSchema: {\n name: z.string().optional().describe('Circle/community name'),\n visibility: z.string().optional().describe('Circle visibility (PUBLIC/PRIVATE/SECRET)'),\n },\n },\n ({ name, visibility }) => {\n ctx.logger.debug(`Prompt ${setupName} called`, { name, visibility });\n const nameNote = name\n ? `Use the community name \"${name}\".`\n : 'Ask the user for the community name.';\n const visibilityNote = visibility\n ? `Set visibility ${visibility}.`\n : 'Help the user pick a visibility (PUBLIC, PRIVATE, or SECRET).';\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Help me stand up a new Comradecircle community.\n\n1. **Create Circle**: Use ${p}_circles_create. ${nameNote} ${visibilityNote} Provide a unique slug; the caller becomes the OWNER.\n2. **Add Channels**: Use ${p}_commchannels_create for each channel — pick a type (TEXT/VOICE/FORUM/ANNOUNCEMENT) and a unique slug per circle. Start with a TEXT \"general\" and an ANNOUNCEMENT channel.\n3. **Set Up Profile**: Use ${p}_profiles_upsert to set your displayName, headline, interests, and skills.\n4. **Seed First Post**: Use ${p}_posts_create in the general channel to welcome members.\n5. **Verify**: Use ${p}_commchannels_list and ${p}_posts_list to confirm the setup.\n\nShow results at each step and confirm before posting.`,\n },\n },\n ],\n };\n },\n );\n\n // <product>-community-engagement — daily engagement ops\n server.registerPrompt(\n engagementName,\n {\n title: 'Community Engagement',\n description:\n 'Daily engagement workflow: review the home feed, moderate posts, run events and polls, and grow the follow graph.',\n argsSchema: {\n circleId: z.string().optional().describe('Circle ID to operate'),\n },\n },\n ({ circleId }) => {\n ctx.logger.debug(`Prompt ${engagementName} called`, { circleId });\n const circleNote = circleId\n ? `Operate circle \"${circleId}\".`\n : `First list circles with ${p}_circles_list and pick one.`;\n return {\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: `Run daily Comradecircle community engagement. ${circleNote}\n\n1. **Home Feed**: Use ${p}_feed_my to scan the latest activity from followed circles/channels/members.\n2. **Memberships**: Use ${p}_memberships_list to review the roster; use ${p}_memberships_set_role to promote moderators.\n3. **Moderate Posts**: Use ${p}_posts_list filtered by channel; pin highlights with ${p}_posts_update (isPinned=true) and hide/remove abuse with ${p}_posts_update (status=HIDDEN) or ${p}_posts_remove.\n4. **Engage**: Reply with ${p}_comments_add and acknowledge with ${p}_posts_react.\n5. **Events**: Use ${p}_events_list and ${p}_events_create to schedule meetups; advance live events with ${p}_events_transition.\n6. **Polls**: Use ${p}_polls_create to gather input; close stale ones with ${p}_polls_close.\n7. **Grow the Graph**: Use ${p}_feed_follow to follow active members and channels.\n\nSummarize what needs attention after each step.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Comradecircle module — domain module for the future-products ecosystem program.\n *\n * Covers all 12 @key entities of wspace-comradecircle-svc grouped into\n * per-entity sub-APIs: circles, channels, memberships, profiles, posts,\n * comments, feed, events, polls, plus the public health probe. Mirrors the\n * kadaikodi module's structure (tools/<entity>.ts + resources.ts + prompts.ts)\n * and the canonical tags module's typing discipline.\n *\n * Backend: ~/products/comradecircle/wspace-comradecircle-svc/\n * (Hive service name `comradecircle`). All operations run against the WORKSPACE\n * gateway; the @public comHealth probe is exposed as `<product>_health`.\n */\n\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { McpContext, McpModule, ModuleRegistration } from '../../core/index.js';\nimport { registerCircleTools } from './tools/circles.js';\nimport { registerChannelTools } from './tools/channels.js';\nimport { registerMembershipTools } from './tools/memberships.js';\nimport { registerProfileTools } from './tools/profiles.js';\nimport { registerPostTools } from './tools/posts.js';\nimport { registerCommentTools } from './tools/comments.js';\nimport { registerFeedTools } from './tools/feed.js';\nimport { registerEventTools } from './tools/events.js';\nimport { registerPollTools } from './tools/polls.js';\nimport { registerHealthTools } from './tools/health.js';\nimport { registerComradecircleResources } from './resources.js';\nimport { registerComradecirclePrompts } from './prompts.js';\n\nconst comradecircleModule: McpModule = {\n id: 'comradecircle',\n version: '0.0.1',\n displayName: 'Comradecircle',\n dependsOn: ['auth'],\n capabilities: { tools: {}, resources: {}, prompts: {} },\n\n register(server: McpServer, ctx: McpContext): ModuleRegistration {\n const tools: string[] = [];\n const resources: string[] = [];\n const prompts: string[] = [];\n\n const trackTool = (n: string): string => {\n tools.push(n);\n return n;\n };\n const trackResource = (uri: string): string => {\n resources.push(uri);\n return uri;\n };\n const trackPrompt = (n: string): string => {\n prompts.push(n);\n return n;\n };\n\n registerCircleTools(server, ctx, trackTool);\n registerChannelTools(server, ctx, trackTool);\n registerMembershipTools(server, ctx, trackTool);\n registerProfileTools(server, ctx, trackTool);\n registerPostTools(server, ctx, trackTool);\n registerCommentTools(server, ctx, trackTool);\n registerFeedTools(server, ctx, trackTool);\n registerEventTools(server, ctx, trackTool);\n registerPollTools(server, ctx, trackTool);\n registerHealthTools(server, ctx, trackTool);\n\n registerComradecircleResources(server, ctx, trackResource);\n registerComradecirclePrompts(server, ctx, trackPrompt);\n\n return { tools, resources, prompts };\n },\n};\n\nexport default comradecircleModule;\n"]}
|