Skip to main content
Glama

get_post

Retrieve detailed information about a specific customer feedback post from Canny.io using the post ID to access comprehensive feedback data.

Instructions

Get detailed information about a specific Canny post

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
postIdYesID of the post to retrieve

Implementation Reference

  • Core implementation of the 'get_post' tool, including name, description, input schema, and handler function that validates input, calls the Canny API client, handles errors, and returns formatted post details.
    export const getPostTool = {
      name: 'get_post',
      description: 'Get detailed information about a specific Canny post',
      inputSchema: {
        type: 'object',
        properties: {
          postId: { type: 'string', description: 'ID of the post to retrieve' },
        },
        required: ['postId'],
        additionalProperties: false,
      },
      handler: async (args: unknown, client: CannyClient) => {
        const { postId } = validateToolInput<GetPostInput>(args, GetPostSchema);
        
        const response = await client.getPost(postId);
        
        if (response.error) {
          throw new Error(`Failed to fetch post: ${response.error}`);
        }
    
        if (!response.data) {
          return `Post with ID ${postId} not found.`;
        }
    
        const post = response.data;
        return `**${post.title}**\n` +
          `ID: ${post.id}\n` +
          `Status: ${post.status}\n` +
          `Author: ${post.author.name} (${post.author.email || 'No email'})\n` +
          `Board: ${post.board.name}\n` +
          `Category: ${post.category?.name || 'None'}\n` +
          `Votes: ${post.votes} | Score: ${post.score}\n` +
          `Tags: ${post.tags.length > 0 ? post.tags.map(tag => tag.name).join(', ') : 'None'}\n` +
          `Created: ${new Date(post.createdAt).toLocaleString()}\n` +
          `Updated: ${new Date(post.updatedAt).toLocaleString()}\n` +
          `URL: ${post.url}\n\n` +
          `**Details:**\n${post.details || 'No description provided'}`;
      },
    };
  • Zod validation schema for get_post tool input parameters.
    const GetPostSchema = z.object({
      postId: z.string().min(1, 'Post ID is required'),
    });
  • Registration of all tools including getPostTool in the main tools export array used for MCP tool discovery.
    export const tools: Tool[] = [
      // Board management
      getBoardsTool,
      
      // Post management
      getPostsTool,
      getPostTool,
      searchPostsTool,
      createPostTool,
      updatePostTool,
    
      // Extended functionality - temporarily disabled for debugging
      // getCategoresTool,
      // getCommentsTool,
      // getUsersTool,
      // getTagsTool,
    ];
  • CannyClient method invoked by the get_post handler to retrieve post data from the Canny API.
    async getPost(postId: string): Promise<CannyApiResponse<CannyPost>> {
      return this.makeRequest<CannyPost>({
        method: 'GET',
        url: '/posts/retrieve',
        params: { id: postId },
      });
    }
  • src/tools/index.ts:3-9 (registration)
    Import statement that brings getPostTool into the index for registration.
    import { 
      getPostsTool, 
      getPostTool, 
      searchPostsTool, 
      createPostTool, 
      updatePostTool 
    } from './posts.js';

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/itsocialist/canny-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server