Skip to main content
Glama
nahmanmate

Code Research MCP Server

by nahmanmate

search_stackoverflow

Search Stack Overflow for programming questions and answers to find code examples and solutions. Input a query to retrieve relevant results.

Instructions

Search Stack Overflow for programming questions and answers

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query
limitNoMaximum number of results (default: 5)

Implementation Reference

  • The core handler function that implements the search_stackoverflow tool logic: queries Stack Overflow API, extracts and formats results using Cheerio, applies caching, and handles errors.
    private async searchStackOverflow(query: string, limit: number = 5): Promise<string> {
      const cacheKey = `stackoverflow:${query}:${limit}`;
      const cached = cache.get<string>(cacheKey);
      if (cached) return cached;
    
      try {
        const response = await this.axiosInstance.get(
          `https://api.stackexchange.com/2.3/search/advanced`,
          {
            params: {
              q: query,
              site: 'stackoverflow',
              pagesize: limit,
              order: 'desc',
              sort: 'votes',
              filter: 'withbody'
            }
          }
        );
    
        const results = response.data.items.map((item: any) => {
          const $ = cheerio.load(item.body);
          return {
            title: item.title,
            link: item.link,
            score: item.score,
            answer_count: item.answer_count,
            excerpt: $.text().substring(0, 200) + '...'
          };
        });
    
        const formatted = results.map((r: any, i: number) => 
          `${i + 1}. ${r.title}\n   Score: ${r.score} | Answers: ${r.answer_count}\n   ${r.link}\n   ${r.excerpt}\n`
        ).join('\n');
    
        cache.set(cacheKey, formatted);
        return formatted;
      } catch (error) {
        throw new McpError(
          ErrorCode.InternalError,
          `Stack Overflow API error: ${error instanceof Error ? error.message : 'Unknown error'}`
        );
      }
    }
  • Input schema for the search_stackoverflow tool, defining query (required string) and optional limit (number 1-10).
    inputSchema: {
      type: 'object',
      properties: {
        query: {
          type: 'string',
          description: 'Search query'
        },
        limit: {
          type: 'number',
          description: 'Maximum number of results (default: 5)',
          minimum: 1,
          maximum: 10
        }
      },
      required: ['query']
    }
  • src/index.ts:321-339 (registration)
    Registration of the search_stackoverflow tool in the ListTools response, including name, description, and input schema.
      name: 'search_stackoverflow',
      description: 'Search Stack Overflow for programming questions and answers',
      inputSchema: {
        type: 'object',
        properties: {
          query: {
            type: 'string',
            description: 'Search query'
          },
          limit: {
            type: 'number',
            description: 'Maximum number of results (default: 5)',
            minimum: 1,
            maximum: 10
          }
        },
        required: ['query']
      }
    },
  • Dispatch handler in CallToolRequestSchema that extracts arguments, calls the searchStackOverflow function, and formats the MCP response.
    case 'search_stackoverflow': {
      const { query, limit } = request.params.arguments as { query: string; limit?: number };
      const results = await this.searchStackOverflow(query, limit);
      return {
        content: [
          {
            type: 'text',
            text: results
          }
        ]
      };
    }

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/nahmanmate/code-research-mcp-server'

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