calc_eval
Evaluate mathematical expressions with custom precision using this tool. Ideal for performing accurate calculations directly within the MCP ecosystem, enhancing computation capabilities for local LLMs.
Instructions
Alias of calc.eval
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| expr | Yes | ||
| precision | No |
Implementation Reference
- src/server.ts:29-36 (registration)Registration of the 'calc_eval' MCP tool. Defines input schema, calls the calcEval helper, and formats MCP response.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:20-33 (handler)Core handler logic for evaluating mathematical expressions using mathjs library, with support for precision and error handling.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 validation for the calc_eval tool: required 'expr' string and optional 'precision' integer (0-64).{ expr: z.string(), precision: z.number().int().min(0).max(64).optional() },
- src/tools/calc.ts:5-18 (helper)Utility function to normalize exponentiation notation, converting '**', Vietnamese terms like 'mũ' or 'lũy thừa' to '^', and cleaning whitespace.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; }