import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import type { BirstClient } from "../../client/birstClient.js";
import { z } from "zod";
interface DataflowResponse {
sources?: unknown[];
joins?: unknown[];
relationships?: unknown[];
}
const inputSchema = z.object({
spaceId: z.string().describe("The ID of the space to get dataflow from"),
});
export function registerGetDataflow(server: McpServer, client: BirstClient): void {
server.tool(
"birst_get_dataflow",
"Get the data flow visualization for a Birst space. Shows how data sources are connected.",
inputSchema.shape,
async (args) => {
const { spaceId } = inputSchema.parse(args);
const dataflow = await client.rest<DataflowResponse>(
`/spaces/${spaceId}/dataflow`
);
return {
content: [
{
type: "text" as const,
text: JSON.stringify(
{
success: true,
spaceId,
dataflow: {
sourceCount: Array.isArray(dataflow.sources) ? dataflow.sources.length : 0,
joinCount: Array.isArray(dataflow.joins) ? dataflow.joins.length : 0,
relationshipCount: Array.isArray(dataflow.relationships) ? dataflow.relationships.length : 0,
sources: dataflow.sources,
joins: dataflow.joins,
relationships: dataflow.relationships,
},
},
null,
2
),
},
],
};
}
);
}