Skip to main content
Glama
JCF0

CG Alpha MCP

by JCF0

ta_bollinger

Calculate Bollinger Bands for market analysis to identify volatility and potential price breakouts using moving averages and standard deviation.

Instructions

Compute Bollinger Bands (SMA + population stdev). Inputs: values:number[] (oldest→newest), period?:number(20), mult?:number(2).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
valuesYes
periodNo
multNo

Implementation Reference

  • The MCP tool handler for 'ta_bollinger'. Validates input parameters (values array, optional period and mult), calls the bollinger helper function, and formats the response.
    "ta_bollinger": async (args) => {
      const values = Array.isArray(args?.values) ? args.values : null;
      const period = Number.isFinite(Number(args?.period)) ? Number(args.period) : 20;
      const mult   = Number.isFinite(Number(args?.mult))   ? Number(args.mult)   : 2;
      if (!values || values.length === 0) {
        return { content: textContent({ error:true, message:"'values' must be a non-empty array of numbers (oldest → newest)" }), isError:true };
      }
      const out = taBoll(values, period, mult);
      return { content: textContent({ ok:true, ...out, period, mult }) };
    },
  • mcp-server.js:336-344 (registration)
    Tool registration entry in the tools list, including description, input schema, and annotations. Used by the MCP server's tools/list method.
    { name:"ta_bollinger",
      description:"Compute Bollinger Bands (SMA + population stdev). Inputs: values:number[] (oldest→newest), period?:number(20), mult?:number(2).",
      inputSchema:{ type:"object", properties:{
        values:{ type:"array", items:{ type:"number" } },
        period:{ type:"number" },
        mult:{ type:"number" }
      }, required:["values"] },
      annotations:{ title:"TA: Bollinger Bands", readOnlyHint:true, openWorldHint:false }
    },
  • Input schema definition for the ta_bollinger tool, specifying the expected arguments.
    inputSchema:{ type:"object", properties:{
      values:{ type:"array", items:{ type:"number" } },
      period:{ type:"number" },
      mult:{ type:"number" }
    }, required:["values"] },
  • Core implementation of Bollinger Bands computation: calculates SMA mean, population stdev, upper/lower bands, and derived metrics (percentB, bandwidth) over the last 'period' values.
    export function bollinger(values, period = 20, mult = 2) {
      const arr = normalize(values);
      if (arr.length < period) return null;
    
      const slice = arr.slice(-period);
      const mean = avg(slice);
      if (!isFiniteNum(mean)) return null;
    
      const variance = avg(slice.map(v => (v - mean) * (v - mean)));
      const stdev = Math.sqrt(variance);
      if (!isFiniteNum(stdev)) return null;
    
      const upper = mean + mult * stdev;
      const lower = mean - mult * stdev;
      const last  = arr[arr.length - 1];
    
      // Avoid division by zero in derived metrics
      const denomBands = upper - lower;
      const denomMean  = mean;
    
      const percentB =
        isFiniteNum(denomBands) && denomBands !== 0
          ? (last - lower) / denomBands
          : null;
    
      const bandwidth =
        isFiniteNum(denomMean) && denomMean !== 0
          ? (upper - lower) / denomMean
          : null;
    
      return {
        mean,
        upper,
        lower,
        last,
        percentB: isFiniteNum(percentB) ? percentB : null,
        bandwidth: isFiniteNum(bandwidth) ? bandwidth : null
      };
    }

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/JCF0/cg-alpha-mcp'

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