Skip to main content
Glama
phuihock

TA-Lib MCP Server

by phuihock

calculate_dema

Compute the Double Exponential Moving Average (DEMA) for financial time series analysis to reduce lag in trend identification.

Instructions

Calculate Double Exponential Moving Average (DEMA).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
kwargsYes

Implementation Reference

  • The handler function for the 'calculate_dema' MCP tool. It retrieves the DEMA indicator from the registry, creates MarketData from input close prices, calls the indicator's calculate method, and returns the result or error.
    @mcp.tool() async def calculate_dema(close: List[float], timeperiod: int = 30) -> Dict[str, Any]: try: indicator = registry.get_indicator("dema") if not indicator: raise ValueError("DEMA indicator not found") market_data = MarketData(close=close) result = await indicator.calculate(market_data, {"timeperiod": timeperiod}) if result.success: return {"success": True, "values": result.values, "metadata": result.metadata} return {"success": False, "error": result.error_message} except Exception as e: return {"success": False, "error": str(e)}
  • The DEMAIndicator class providing the core logic for DEMA calculation using TA-Lib's DEMA function. Includes input schema definition and the calculate method.
    class DEMAIndicator(BaseIndicator): def __init__(self): super().__init__(name="dema", description="Double Exponential Moving Average (DEMA)") @property def input_schema(self) -> Dict[str, Any]: return { "type": "object", "properties": { "close_prices": {"type": "array", "items": {"type": "number"}}, "timeperiod": {"type": "integer", "default": 30}, }, "required": ["close_prices"], } async def calculate(self, market_data: MarketData, options: Dict[str, Any] = None) -> IndicatorResult: if options is None: options = {} timeperiod = options.get("timeperiod", 30) close = np.asarray(market_data.close, dtype=float) try: out = ta.DEMA(close, timeperiod=timeperiod) return IndicatorResult( indicator_name=self.name, success=True, values={"dema": out.tolist()}, metadata={"timeperiod": timeperiod, "input_points": len(close), "output_points": len(out)}, ) except Exception as e: return IndicatorResult(indicator_name=self.name, success=False, values={}, error_message=str(e))
  • Registration of the DEMAIndicator in the global IndicatorRegistry under the key 'dema', which is used by the tool handler.
    registry.register("dema", DEMAIndicator)

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/phuihock/mcp-talib'

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