calc_eval
Evaluate mathematical expressions and calculate results with configurable precision for accurate computations.
Instructions
Alias of calc.eval
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| expr | Yes | ||
| precision | No |
Implementation Reference
- src/tools/calc.ts:20-33 (handler)Core handler function implementing the calculation logic: normalizes expression, evaluates with mathjs, applies precision formatting, returns success/error object.export async function calcEval(expr: string, precision?: number) { try { const norm = normalizeExponent(expr); const res = math.evaluate(norm); let out = String(res); if (typeof res === 'number' && Number.isFinite(res) && typeof precision === 'number') { const p = Math.max(0, Math.min(precision, 20)); out = res.toFixed(p); } return { ok: true, result: out }; } catch (e: any) { return { ok: false, error: e?.message || 'calc error' }; } }
- src/server.ts:30-30 (schema)Zod input schema for calc_eval tool: required string expr, optional integer precision (0-64).{ expr: z.string(), precision: z.number().int().min(0).max(64).optional() },
- src/server.ts:29-36 (registration)MCP server registration of 'calc_eval' tool: defines name, description, schema, options, and thin async handler wrapper around calcEval.server.tool('calc_eval', 'Alias of calc.eval', { expr: z.string(), precision: z.number().int().min(0).max(64).optional() }, OPEN, async ({ expr, precision }) => { const res = await calcEval(expr, precision); return { content: [{ type: 'text', text: JSON.stringify(res) }] }; } );
- src/tools/calc.ts:5-18 (helper)Helper utility to normalize mathematical expressions, converting ** to ^ and Vietnamese exponent terms (e.g., 'mũ', 'lũy thừa') to ^ for mathjs compatibility.function normalizeExponent(s: string): string { let t = s; // Python style t = t.replace(/\*\*/g, '^'); // "mũ", "mu" (viết không dấu), "lũy thừa" // ví dụ: "5 mũ 10" -> "5 ^ 10" t = t.replace(/\s*(m[ũu]|lu[ũu]y\s*thừa)\s*/gi, ' ^ '); // tuỳ chọn: gom nhiều khoảng trắng t = t.replace(/\s+/g, ' ').trim(); return t; }