Skip to main content
Glama

second_opinion

Analyzes user requests with an LLM to identify critical considerations and provide alternative perspectives for improved decision-making.

Instructions

Provides a second opinion on a user's request by analyzing it with an LLM and listing critical considerations.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
user_requestYesThe user's original request (e.g., 'Explain Python to me' or 'Build a login system')

Implementation Reference

  • The main handler function implementing the core logic: rate limiting, input validation, prompt creation, Deepseek API call, and response handling with optional reasoning.
    export async function handler(args: unknown) {
      // Check rate limit first
      if (!checkRateLimit()) {
        return {
          content: [
            {
              type: 'text',
              text: 'Rate limit exceeded. Please try again later.',
            },
          ],
          isError: true,
        };
      }
    
      try {
        // Type guard for SecondOpinionArgs
        if (!args || typeof args !== 'object' || !('user_request' in args) || 
            typeof args.user_request !== 'string') {
          return {
            content: [
              {
                type: 'text',
                text: 'Missing or invalid user_request parameter.',
              },
            ],
            isError: true,
          };
        }
    
        const typedArgs = args as SecondOpinionArgs;
    
        // Create the complete prompt
        const prompt = createPrompt(PROMPT_TEMPLATE, {
          user_request: typedArgs.user_request
        });
    
        // Make the API call
        const response = await makeDeepseekAPICall(prompt, SYSTEM_PROMPT);
    
        if (response.isError) {
          return {
            content: [
              {
                type: 'text',
                text: `Error generating second opinion: ${response.errorMessage || 'Unknown error'}`,
              },
            ],
            isError: true,
          };
        }
    
        // Return both the reasoning and the final response
        return {
          content: [
            {
              type: 'text',
              text: response.text,
            },
          ],
          // Include the Chain of Thought reasoning if available
          ...(response.reasoning ? {
            reasoning: [
              {
                type: 'text',
                text: `<reasoning>\n${response.reasoning}\n</reasoning>`,
              },
            ],
          } : {}),
        };
      } catch (error) {
        console.error('Second opinion tool error:', error);
        return {
          content: [
            {
              type: 'text',
              text: `Error processing request: ${error instanceof Error ? error.message : 'Unknown error'}`,
            },
          ],
          isError: true,
        };
      }
  • ToolDefinition object defining the tool's name, description, and input schema for MCP validation.
    export const definition: ToolDefinition = {
      name: 'second_opinion',
      description: 'Provides a second opinion on a user\'s request by analyzing it with an LLM and listing critical considerations.',
      inputSchema: {
        type: 'object',
        properties: {
          user_request: {
            type: 'string',
            description: 'The user\'s original request (e.g., \'Explain Python to me\' or \'Build a login system\')',
          },
        },
        required: ['user_request'],
      },
    };
  • TypeScript interface for input arguments used in type guarding within the handler.
    export interface SecondOpinionArgs {
      user_request: string;
    }
  • src/server.ts:56-64 (registration)
    Registration of the second_opinion.definition in the MCP server's list of available tools.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
      tools: [
        secondOpinion.definition,
        codeReview.definition,
        designCritique.definition,
        writingFeedback.definition,
        brainstormEnhancements.definition,
      ],
    }));
  • src/server.ts:81-89 (registration)
    Switch case dispatching calls to 'second_opinion' tool to the imported handler function with input validation.
    case "second_opinion": {
      if (!args || !('user_request' in args) || typeof args.user_request !== 'string') {
        throw new McpError(
          ErrorCode.InvalidParams,
          "Missing required parameter: user_request"
        );
      }
      response = await secondOpinion.handler({ user_request: args.user_request });
      break;

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/cyanheads/mentor-mcp-server'

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