import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import type { BirstClient } from "../../client/birstClient.js";
import { z } from "zod";
interface SpaceVariable {
name: string;
query?: string;
defaultIfInvalid?: string;
multiValue?: boolean;
constant?: boolean;
session?: boolean;
secured?: boolean;
connection?: string;
}
const inputSchema = z.object({
spaceId: z.string().describe("The ID of the space to list variables from"),
});
export function registerListVariables(server: McpServer, client: BirstClient): void {
server.tool(
"birst_list_variables",
"List variables (parameters) defined in a Birst space. Variables are used for dynamic filtering.",
inputSchema.shape,
async (args) => {
const { spaceId } = inputSchema.parse(args);
const variables = await client.rest<SpaceVariable[]>(
`/spaces/${spaceId}/variables`
);
const simplified = variables.map((variable) => ({
name: variable.name,
query: variable.query,
default: variable.defaultIfInvalid,
multiValue: variable.multiValue,
isConstant: variable.constant,
isSession: variable.session,
isSecured: variable.secured,
connection: variable.connection,
}));
return {
content: [
{
type: "text" as const,
text: JSON.stringify(
{
success: true,
spaceId,
count: variables.length,
variables: simplified,
},
null,
2
),
},
],
};
}
);
}