@chinchillaenterprises/mcp-slack
Version:
MCP server for Slack. Single account loaded from env (SLACK_BOT_TOKEN); multi-workspace via separate server entries.
163 lines • 5.61 kB
TypeScript
/**
* Compact result formatter. Default (lean) form is single-line / minimal — NO
* pretty-print — so it doesn't bloat the context window. Pass { verbose: true } for
* the fuller, indented form when a human actually needs to read every field.
*
* Accepts an already-prepared `data` value. Callers are expected to have already
* trimmed to the fields that matter for the lean case (see the READ tools), but this
* function is also safe to hand a full object for the verbose path.
*/
export declare function leanResult(data: unknown, opts?: {
verbose?: boolean;
}): string;
export declare function isFlatObject(v: unknown): v is Record<string, unknown>;
interface RenderTableColumn {
key: string;
label?: string;
align?: "left" | "right";
maxWidth?: number;
}
/**
* Render tabular data as a clean, column-aligned monospace ASCII table using
* box-drawing characters. The output is meant to be dropped inside a Slack code
* block (```) so it renders with a fixed-width font and column alignment survives.
*
* Accepts any of:
* - array of flat objects → columns inferred from keys (or pass `columns`)
* - 2D array (string[][]) → first row treated as header
* - a markdown table string (| a | b |\n|---|---|\n| 1 | 2 |)
*
* Long cells are truncated with an ellipsis past a per-column max width (default 40).
* Numeric-looking columns are right-aligned automatically unless overridden.
*/
export declare function renderTable(rows: Record<string, unknown>[] | unknown[][] | string, columns?: RenderTableColumn[]): string;
export declare function cellToString(v: unknown): string;
export declare function parseMarkdownTable(md: string): {
headers: string[];
body: string[][];
};
/**
* Render a unicode progress bar, e.g. renderProgressBar(40) => "▰▰▰▰▱▱▱▱▱▱ 40%".
*/
export declare function renderProgressBar(pct: number, width?: number): string;
interface CardSection {
text?: string;
fields?: {
label?: string;
value: string;
}[];
}
interface BuildCardOpts {
header: string;
sections?: CardSection[];
context?: string;
color?: string;
}
/**
* Build a Slack Block Kit blocks[] array: a header block, section blocks (each with
* optional two-column fields), dividers between sections, and an optional context
* footer. Used by slack_send_card and the task-lifecycle summary cards.
*
* Returns { blocks } always, plus { attachments } when a color bar is requested
* (Slack only supports the colored left-bar via the legacy attachments wrapper).
*/
export declare function buildCard(opts: BuildCardOpts): {
blocks: any[];
attachments?: any[];
};
export declare function truncatePlain(s: string, max: number): string;
export declare class SlackerV3Server {
private server;
private accountState;
private readonly CACHE_TTL_MS;
private usersCache;
private channelsCache;
private taskRegistry;
private browser;
private browserIdleTimer;
private readonly BROWSER_IDLE_MS;
private static readonly NO_TOKEN_MESSAGE;
constructor();
private loadAccountFromEnv;
private getActiveClient;
private getActiveUserClient;
private ensureWorkspaceInfo;
private currentAccountKey;
private getAllUsersCached;
private getAllChannelsCached;
private describeActiveAccount;
private getActiveAccount;
private listAccounts;
private slackListChannels;
private convertMarkdownToSlackMrkdwn;
private processExplicitMentions;
private resolveRecipient;
private slackSendMessage;
private slackSendTable;
private taskKey;
private identityOverrides;
private swapReaction;
private slackSendCard;
private slackStartTask;
private slackUpdateTask;
private slackCompleteTask;
private static readonly NATO_CALL_SIGNS;
private legateStateDir;
private sanitizeCallSign;
private loadLegateState;
private saveLegateState;
private tsGreater;
private mentionsToken;
private classifyAddressing;
private looksSelfAuthored;
private slackPoll;
private laneKey;
private parseLaneClaim;
private slackClaimLane;
private slackCheckin;
private slackGetChannelHistory;
private moreFooter;
private slackAddReaction;
private slackListUsers;
private slackGetUserByName;
private slackGetUserInfo;
private slackSearchFiles;
private slackSearchMessages;
private searchFooter;
private slackSearchByUser;
private slackSearchByDateRange;
private slackPinMessage;
private slackUnpinMessage;
private slackCreateChannel;
private slackInviteUsers;
private slackInviteExternal;
private slackArchiveChannel;
private slackRenameChannel;
private slackSetChannelTopic;
private slackDeleteMessage;
private slackEditMessage;
private slackScheduleMessage;
private slackGetUserStatus;
private slackGetUserProfile;
private slackCreateReminder;
private slackListReminders;
private slackGetCustomEmoji;
private slackSendFormattedMessage;
private slackAuditUserActivity;
private slackBulkReactMessages;
private slackForwardMessage;
private slackBulkForwardMessages;
private slackGetThreadReplies;
private slackGetWorkspaceStats;
private slackUploadFile;
private slackSendDiagram;
private getBrowser;
private scheduleBrowserIdleClose;
private closeBrowser;
private renderHtmlToPng;
private setupHandlers;
run(): Promise<void>;
}
export {};
//# sourceMappingURL=index.d.ts.map