import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import type { BirstClient } from "../../client/birstClient.js";
import { z } from "zod";
interface Space {
id: string;
name: string;
ownerUsername?: string;
comments?: string;
automatic?: boolean;
spaceTimeZone?: string;
usageTracking?: boolean;
isDocumentRepository?: boolean;
alwaysOn?: boolean;
useNewDashboards?: boolean;
readOnly?: boolean;
}
const inputSchema = z.object({});
export function registerListSpaces(server: McpServer, client: BirstClient): void {
server.tool(
"birst_list_spaces",
"List all Birst analytical spaces accessible to the current user. Use this to discover available data spaces before running queries.",
inputSchema.shape,
async () => {
const spaces = await client.rest<Space[]>("/spaces");
const simplified = spaces.map((space) => ({
id: space.id,
name: space.name,
owner: space.ownerUsername,
description: space.comments,
timezone: space.spaceTimeZone,
readOnly: space.readOnly,
}));
return {
content: [
{
type: "text" as const,
text: JSON.stringify(
{
success: true,
count: spaces.length,
spaces: simplified,
},
null,
2
),
},
],
};
}
);
}