Skip to main content
Glama

ta_bollinger

Calculate Bollinger Bands for market analysis using SMA and population standard deviation. Input data arrays and customize period or multiplier for precise technical insights on token performance.

Instructions

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
multNo
periodNo
valuesYes

Implementation Reference

  • MCP tool handler for ta_bollinger: validates args (values array, optional period/mult) and calls taBoll
    "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 in tools list: defines name, description, inputSchema, annotations for MCP tools/list
    { 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 defining parameters: values (required array of numbers), optional period and mult
    inputSchema:{ type:"object", properties:{ values:{ type:"array", items:{ type:"number" } }, period:{ type:"number" }, mult:{ type:"number" } }, required:["values"] },
  • Core implementation of Bollinger Bands: computes SMA (mean), stdev, upper/lower bands, last price, %B, and bandwidth using pure math on values array
    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 }; }
  • Helper to normalize input values array to finite numbers only
    function normalize(values) { // Coerce to numbers and drop non-finite entries to keep math stable. if (!Array.isArray(values)) return []; const out = []; for (let i = 0; i < values.length; i++) { const x = Number(values[i]); if (Number.isFinite(x)) out.push(x); } return out; }

Other Tools

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

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