Skip to main content
Glama
phuihock

TA-Lib MCP Server

by phuihock

calculate_dema

Compute the Double Exponential Moving Average (DEMA) indicator for technical analysis of financial market price data, enabling trend identification and smoothing calculations.

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 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 that performs the actual DEMA calculation using TA-Lib's DEMA function. Used by the tool handler.
    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))
  • Registers the DEMAIndicator in the central indicator registry, allowing it to be retrieved by name 'dema'.
    registry.register("dema", DEMAIndicator)
  • Tool specification schema for 'dema' used in the dynamic MCP server creation, including description, parameters, defaults, and market data argument mapping.
    "dema": { "description": "Double Exponential Moving Average (DEMA)", "params": {"close": List[float], "timeperiod": int}, "defaults": {"timeperiod": 30}, "market_data_args": {"close": "close"}, },

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