Skip to main content
Glama
sieteunoseis

mcp-cisco-support

Get Bug Details

get_bug_details

Retrieve detailed information for specific Cisco bug IDs to analyze issues and implement solutions. Input up to 5 comma-separated bug IDs to access comprehensive bug data.

Instructions

Get details for up to 5 specific bug IDs

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bug_idsYesComma-separated list of bug IDs (max 5)

Implementation Reference

  • Specific handler case in BugApi.executeTool that constructs the Cisco Bug API endpoint `/bugs/bug_ids/{bug_ids}` for retrieving details of specified bug IDs.
    case 'get_bug_details':
      endpoint = `/bugs/bug_ids/${encodeURIComponent(processedArgs.bug_ids)}`;
      break;
  • Core HTTP client implementation in BaseApi.makeApiCall that executes the API request to Cisco Bug Search service with authentication, query params, timeout handling (60s), and automatic token refresh on 401.
    protected async makeApiCall(endpoint: string, params: Record<string, any> = {}): Promise<ApiResponse> {
      const token = await getValidToken();
      
      // Build query string
      const queryParams = new URLSearchParams();
      Object.entries(params).forEach(([key, value]) => {
        if (value !== undefined && value !== null && value !== '') {
          queryParams.append(key, String(value));
        }
      });
      
      const queryString = queryParams.toString();
      const url = `${this.baseUrl}${endpoint}${queryString ? '?' + queryString : ''}`;
      
      try {
        logger.info(`Making ${this.apiName} API call`, {
          endpoint,
          params,
          fullUrl: url,
          queryString: queryString || '(none)'
        });
        
        const controller = new AbortController();
        const timeoutId = setTimeout(() => controller.abort(), 60000); // 60 second timeout
        
        const response = await fetch(url, {
          method: 'GET',
          headers: {
            'Authorization': `Bearer ${token}`,
            'Accept': 'application/json',
            'User-Agent': 'mcp-cisco-support/1.0'
          },
          signal: controller.signal
        });
        
        clearTimeout(timeoutId);
    
        if (response.status === 401) {
          logger.warn('Received 401, token may be expired, refreshing...');
          // Token expired, refresh and retry once
          const newToken = await getValidToken();
          const retryController = new AbortController();
          const retryTimeoutId = setTimeout(() => retryController.abort(), 60000); // 60 second timeout
          
          const retryResponse = await fetch(url, {
            method: 'GET',
            headers: {
              'Authorization': `Bearer ${newToken}`,
              'Accept': 'application/json',
              'User-Agent': 'mcp-cisco-support/1.0'
            },
            signal: retryController.signal
          });
          
          clearTimeout(retryTimeoutId);
          
          if (!retryResponse.ok) {
            const errorText = await retryResponse.text();
            throw new Error(`${this.apiName} API call failed after token refresh: ${retryResponse.status} ${retryResponse.statusText} - ${errorText}`);
          }
          
          const retryData = await retryResponse.json() as ApiResponse;
          return retryData;
        }
    
        if (!response.ok) {
          const errorText = await response.text();
          logger.error(`${this.apiName} API call failed`, {
            status: response.status,
            statusText: response.statusText,
            url: url,
            params: params,
            errorText: errorText.substring(0, 500)
          });
          throw new Error(`${this.apiName} API call failed: ${response.status} ${response.statusText} - URL: ${url} - ${errorText}`);
        }
    
        const data = await response.json() as ApiResponse;
        logger.info(`${this.apiName} API call successful`, { 
          endpoint, 
          resultCount: this.getResultCount(data)
        });
        
        return data;
      } catch (error) {
  • Tool schema definition in BugApi.getTools(): defines name, description, and input validation requiring 'bug_ids' as comma-separated string.
    {
      name: 'get_bug_details',
      title: 'Get Bug Details',
      description: 'Get details for up to 5 specific bug IDs',
      inputSchema: {
        type: 'object',
        properties: {
          bug_ids: {
            type: 'string',
            description: 'Comma-separated list of bug IDs (max 5)'
          }
        },
        required: ['bug_ids']
      }
    },
  • Registers BugApi instance in ApiRegistry.apis map under 'bug' key, making its tools (including get_bug_details) available.
    this.apis.set('bug', new BugApi());
  • Initializes the global apiRegistry instance used by MCP server for tool listing and execution.
    apiRegistry = createApiRegistry(server);
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions 'up to 5 specific bug IDs', which adds some behavioral context about limits, but doesn't disclose other important traits like whether this is a read-only operation, authentication requirements, rate limits, error handling, or what the output format looks like. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and constraint, making it easy to parse quickly. Every part of the sentence serves a clear purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (single parameter with clear schema, no output schema, no annotations), the description is minimally adequate but incomplete. It covers the basic purpose and parameter constraint, but lacks usage guidance, behavioral details, and output information. For a tool in a context with many similar siblings, more contextual information would be beneficial to ensure correct agent selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the parameter 'bug_ids' clearly documented as 'Comma-separated list of bug IDs (max 5)'. The description adds the same constraint ('up to 5 specific bug IDs') but doesn't provide additional semantic context beyond what's in the schema, such as ID format examples or validation rules. With high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'details for up to 5 specific bug IDs', making the purpose understandable. However, it doesn't explicitly distinguish this tool from sibling tools like 'get_case_details' or various bug search tools, which would require mentioning it's for retrieving specific bug details by ID rather than searching or getting case information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With many sibling tools like 'search_bugs_by_keyword', 'progressive_bug_search', and 'get_case_details', there's no indication that this tool is for looking up specific bug IDs rather than searching or handling cases. The description only states what it does, not when it's appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/sieteunoseis/mcp-cisco-support'

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