import { AuthProvider, WorkspaceConfig } from "../auth/auth-provider.js";
export const workspaceToolDefinitions = [
{
name: "slack_list_workspaces",
description:
"List all connected Slack workspaces. Shows available workspaces and indicates which one is currently active.",
inputSchema: {
type: "object" as const,
properties: {},
required: [],
},
},
{
name: "slack_switch_workspace",
description:
"Switch to a different Slack workspace. All subsequent Slack operations will use the selected workspace.",
inputSchema: {
type: "object" as const,
properties: {
team_id: {
type: "string",
description: "The team/workspace ID to switch to (e.g., T0123456789)",
},
},
required: ["team_id"],
},
},
{
name: "slack_get_current_workspace",
description: "Get information about the currently active Slack workspace.",
inputSchema: {
type: "object" as const,
properties: {},
required: [],
},
},
];
export interface WorkspaceInfo {
teamId: string;
teamName: string;
isActive: boolean;
}
export function listWorkspaces(): WorkspaceInfo[] {
const authProvider = AuthProvider.getInstance();
const workspaces = authProvider.getWorkspaces();
const activeId = authProvider.getActiveWorkspaceId();
return workspaces.map((ws) => ({
teamId: ws.teamId,
teamName: ws.teamName,
isActive: ws.teamId === activeId,
}));
}
export function switchWorkspace(teamId: string): {
success: boolean;
workspace: WorkspaceInfo;
message: string;
} {
const authProvider = AuthProvider.getInstance();
const workspace = authProvider.switchWorkspace(teamId);
return {
success: true,
workspace: {
teamId: workspace.teamId,
teamName: workspace.teamName,
isActive: true,
},
message: `Switched to workspace: ${workspace.teamName} (${workspace.teamId})`,
};
}
export function getCurrentWorkspace(): WorkspaceInfo | null {
const authProvider = AuthProvider.getInstance();
const workspace = authProvider.getActiveWorkspace();
if (!workspace) {
return null;
}
return {
teamId: workspace.teamId,
teamName: workspace.teamName,
isActive: true,
};
}