import { z } from "zod";
import type { PostsParams, McpResponse, McpTextContent } from '../types/index.ts';
import { fetchPosts } from '../services/api.ts';
import { TOOL_CONFIG } from '../config/api.ts';
/**
* MCP tool definition for getting posts
*/
export const getPostsTool = {
name: TOOL_CONFIG.posts.name,
description: TOOL_CONFIG.posts.description,
parameters: {
id: z.string().optional().describe("Filter posts by ID"),
title: z.string().optional().describe("Filter posts by title"),
language: z.string().optional().describe("Filter posts by language"),
portal: z.string().optional().describe("Filter posts by portal"),
skip: z.number().optional().default(0).describe("Number of posts to skip"),
limit: z.number().optional().default(10).describe("Maximum number of posts to return"),
},
handler: async (params: PostsParams): Promise<McpResponse> => {
try {
const result = await fetchPosts(params);
if (!result.getPosts) {
throw new Error('No results returned from API');
}
const content: McpTextContent = {
type: "text",
text: `Posts Results:\n\n${JSON.stringify(result.getPosts, null, 2)}`
};
return {
content: [content],
};
} catch (error) {
throw new Error(`Failed to fetch posts: ${error.message}`);
}
}
};