@cyanheads/calculator-mcp-server 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +9 -4
- package/CLAUDE.md +9 -4
- package/README.md +3 -3
- package/dist/mcp-server/tools/definitions/calculate.tool.d.ts +4 -4
- package/dist/mcp-server/tools/definitions/calculate.tool.js +12 -12
- package/dist/mcp-server/tools/definitions/calculate.tool.js.map +1 -1
- package/dist/services/math/math-service.d.ts +16 -0
- package/dist/services/math/math-service.d.ts.map +1 -1
- package/dist/services/math/math-service.js +70 -5
- package/dist/services/math/math-service.js.map +1 -1
- package/package.json +5 -4
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** calculator-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.3.1
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.21`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` 1.29.0
|
|
8
8
|
**Zod:** 4.4.3
|
|
@@ -20,7 +20,7 @@ A publicly-hosted calculator MCP server that lets any LLM verify mathematical co
|
|
|
20
20
|
|
|
21
21
|
### Security Model
|
|
22
22
|
|
|
23
|
-
MathService wraps a **hardened math.js instance** — dangerous functions (`import`, `createUnit`, `evaluate`, `parse`, `compile`, `chain`, `config`, `resolve`, `reviver`, `parser`) are disabled in the expression scope. `simplify` and `derivative` are also disabled in expressions but called programmatically by the tool handler. Evaluation runs inside `vm.runInNewContext()` with a timeout. Input length is capped. Expression separators (semicolons and newlines) are rejected — single expression per call only. Variable scope accepts `z.record(z.number())` only with prototype-polluting keys blocked. Result types are validated (functions, parsers, and result sets rejected). Result size is capped via `CALC_MAX_RESULT_LENGTH`. The math.js `version` constant is redacted to prevent fingerprinting.
|
|
23
|
+
MathService wraps a **hardened math.js instance** — dangerous functions (`import`, `createUnit`, `evaluate`, `parse`, `compile`, `chain`, `config`, `resolve`, `reviver`, `parser`) are disabled in the expression scope. `simplify` and `derivative` are also disabled in expressions but called programmatically by the tool handler. Evaluation runs inside `vm.runInNewContext()` with a timeout. Input length is capped. Expression separators (semicolons and newlines) are rejected — single expression per call only (the separator scan is string-literal-aware so `;` inside `"..."` is not treated as a statement break). Variable scope accepts `z.record(z.number())` only with prototype-polluting keys blocked. Result types are validated (functions, parsers, and result sets rejected). `.toString()` / `.toLocaleString()` access on any value is rejected at parse time via an AST check — these method calls on function-valued identifiers would otherwise bypass the result-type guard by returning source as a plain string. Result size is capped via `CALC_MAX_RESULT_LENGTH`. The math.js `version` constant is redacted to prevent fingerprinting.
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
@@ -272,8 +272,9 @@ Available skills:
|
|
|
272
272
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
273
273
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
274
274
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
275
|
-
| `release-and-publish` |
|
|
275
|
+
| `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
276
276
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
277
|
+
| `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
|
|
277
278
|
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
278
279
|
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
279
280
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
@@ -282,12 +283,15 @@ Available skills:
|
|
|
282
283
|
| `api-context` | Context interface, logger, state, progress |
|
|
283
284
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
284
285
|
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
|
|
286
|
+
| `api-mirror` | MirrorService: persistent SQLite-backed local mirror of bulk upstream datasets — Tier 3 opt-in, Node/Bun only |
|
|
285
287
|
| `api-services` | LLM, Speech, Graph services |
|
|
286
288
|
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
287
289
|
| `api-testing` | createMockContext, test patterns |
|
|
288
290
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
289
291
|
| `api-workers` | Cloudflare Workers runtime |
|
|
290
292
|
|
|
293
|
+
**Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
|
|
294
|
+
|
|
291
295
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
292
296
|
|
|
293
297
|
---
|
|
@@ -310,6 +314,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
310
314
|
| `bun run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
|
|
311
315
|
| `bun run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
|
|
312
316
|
| `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
|
|
317
|
+
| `bun run release:github` | Create GitHub Release with tag subject as title, attach `.mcpb` bundle if present |
|
|
313
318
|
| `bun run test` | Run tests |
|
|
314
319
|
| `bun run start:stdio` | Production mode (stdio) |
|
|
315
320
|
| `bun run start:http` | Production mode (HTTP) |
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Agent Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** calculator-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.3.1
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.21`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` 1.29.0
|
|
8
8
|
**Zod:** 4.4.3
|
|
@@ -20,7 +20,7 @@ A publicly-hosted calculator MCP server that lets any LLM verify mathematical co
|
|
|
20
20
|
|
|
21
21
|
### Security Model
|
|
22
22
|
|
|
23
|
-
MathService wraps a **hardened math.js instance** — dangerous functions (`import`, `createUnit`, `evaluate`, `parse`, `compile`, `chain`, `config`, `resolve`, `reviver`, `parser`) are disabled in the expression scope. `simplify` and `derivative` are also disabled in expressions but called programmatically by the tool handler. Evaluation runs inside `vm.runInNewContext()` with a timeout. Input length is capped. Expression separators (semicolons and newlines) are rejected — single expression per call only. Variable scope accepts `z.record(z.number())` only with prototype-polluting keys blocked. Result types are validated (functions, parsers, and result sets rejected). Result size is capped via `CALC_MAX_RESULT_LENGTH`. The math.js `version` constant is redacted to prevent fingerprinting.
|
|
23
|
+
MathService wraps a **hardened math.js instance** — dangerous functions (`import`, `createUnit`, `evaluate`, `parse`, `compile`, `chain`, `config`, `resolve`, `reviver`, `parser`) are disabled in the expression scope. `simplify` and `derivative` are also disabled in expressions but called programmatically by the tool handler. Evaluation runs inside `vm.runInNewContext()` with a timeout. Input length is capped. Expression separators (semicolons and newlines) are rejected — single expression per call only (the separator scan is string-literal-aware so `;` inside `"..."` is not treated as a statement break). Variable scope accepts `z.record(z.number())` only with prototype-polluting keys blocked. Result types are validated (functions, parsers, and result sets rejected). `.toString()` / `.toLocaleString()` access on any value is rejected at parse time via an AST check — these method calls on function-valued identifiers would otherwise bypass the result-type guard by returning source as a plain string. Result size is capped via `CALC_MAX_RESULT_LENGTH`. The math.js `version` constant is redacted to prevent fingerprinting.
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
@@ -272,8 +272,9 @@ Available skills:
|
|
|
272
272
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
273
273
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
274
274
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
275
|
-
| `release-and-publish` |
|
|
275
|
+
| `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
|
|
276
276
|
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
|
|
277
|
+
| `orchestrations` | Chain task skills into a gated multi-phase pipeline — build-out, QA-fix, update-ship — when you can spawn sub-agents |
|
|
277
278
|
| `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
|
|
278
279
|
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
279
280
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
@@ -282,12 +283,15 @@ Available skills:
|
|
|
282
283
|
| `api-context` | Context interface, logger, state, progress |
|
|
283
284
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
284
285
|
| `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
|
|
286
|
+
| `api-mirror` | MirrorService: persistent SQLite-backed local mirror of bulk upstream datasets — Tier 3 opt-in, Node/Bun only |
|
|
285
287
|
| `api-services` | LLM, Speech, Graph services |
|
|
286
288
|
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
287
289
|
| `api-testing` | createMockContext, test patterns |
|
|
288
290
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
289
291
|
| `api-workers` | Cloudflare Workers runtime |
|
|
290
292
|
|
|
293
|
+
**Chaining skills into pipelines.** When the user wants a multi-phase effort — build this server out, QA-and-fix the surface, update-and-ship — *and you can spawn sub-agents*, `skills/orchestrations/SKILL.md` sequences the task skills above into a gated pipeline with verification at each step. Read it to drive the run. Optional: skip it if you can't orchestrate sub-agents, and ignore it entirely if you were *spawned* as one — you've already been scoped to a single phase.
|
|
294
|
+
|
|
291
295
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
292
296
|
|
|
293
297
|
---
|
|
@@ -310,6 +314,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
310
314
|
| `bun run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
|
|
311
315
|
| `bun run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
|
|
312
316
|
| `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
|
|
317
|
+
| `bun run release:github` | Create GitHub Release with tag subject as title, attach `.mcpb` bundle if present |
|
|
313
318
|
| `bun run test` | Run tests |
|
|
314
319
|
| `bun run start:stdio` | Production mode (stdio) |
|
|
315
320
|
| `bun run start:http` | Production mode (HTTP) |
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/calculator-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/calculator-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -84,7 +84,7 @@ A public instance is available at `https://calculator.caseyjhand.com/mcp` — no
|
|
|
84
84
|
```json
|
|
85
85
|
{
|
|
86
86
|
"mcpServers": {
|
|
87
|
-
"calculator": {
|
|
87
|
+
"calculator-mcp-server": {
|
|
88
88
|
"type": "streamable-http",
|
|
89
89
|
"url": "https://calculator.caseyjhand.com/mcp"
|
|
90
90
|
}
|
|
@@ -99,7 +99,7 @@ Add to your MCP client config (e.g., `claude_desktop_config.json`):
|
|
|
99
99
|
```json
|
|
100
100
|
{
|
|
101
101
|
"mcpServers": {
|
|
102
|
-
"calculator": {
|
|
102
|
+
"calculator-mcp-server": {
|
|
103
103
|
"type": "stdio",
|
|
104
104
|
"command": "bunx",
|
|
105
105
|
"args": ["@cyanheads/calculator-mcp-server@latest"]
|
|
@@ -24,8 +24,8 @@ export declare const calculateTool: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
24
24
|
simplify: "simplify";
|
|
25
25
|
derivative: "derivative";
|
|
26
26
|
}>;
|
|
27
|
-
scopeVars: z.
|
|
28
|
-
precisionUsed: z.
|
|
27
|
+
scopeVars: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
28
|
+
precisionUsed: z.ZodOptional<z.ZodNumber>;
|
|
29
29
|
}, z.core.$strip>, readonly [{
|
|
30
30
|
readonly reason: "empty_expression";
|
|
31
31
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
@@ -49,8 +49,8 @@ export declare const calculateTool: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
49
49
|
}, {
|
|
50
50
|
readonly reason: "disallowed_result_type";
|
|
51
51
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
52
|
-
readonly when: "Result
|
|
53
|
-
readonly recovery: "Rewrite the expression to produce a value (number, matrix, unit) instead of a function or
|
|
52
|
+
readonly when: "Result is a function, parser, or multi-expression ResultSet, or the expression converts a function to a string (e.g. `cos.toString()`) — security guard.";
|
|
53
|
+
readonly recovery: "Rewrite the expression to produce a value (number, matrix, unit) instead of a function or its source.";
|
|
54
54
|
}, {
|
|
55
55
|
readonly reason: "result_too_large";
|
|
56
56
|
readonly code: JsonRpcErrorCode.ValidationError;
|
|
@@ -56,12 +56,12 @@ export const calculateTool = tool('calculate', {
|
|
|
56
56
|
.describe('The operation that was applied.'),
|
|
57
57
|
scopeVars: z
|
|
58
58
|
.array(z.string())
|
|
59
|
-
.
|
|
60
|
-
.describe('Keys from the scope that were active during evaluation
|
|
59
|
+
.optional()
|
|
60
|
+
.describe('Keys from the scope that were active during evaluation. Omitted when no scope was provided. Values are omitted to keep output compact.'),
|
|
61
61
|
precisionUsed: z
|
|
62
62
|
.number()
|
|
63
|
-
.
|
|
64
|
-
.describe('Significant-digit precision
|
|
63
|
+
.optional()
|
|
64
|
+
.describe('Significant-digit precision applied to the result. Omitted when full precision was used or the operation is symbolic.'),
|
|
65
65
|
}),
|
|
66
66
|
errors: [
|
|
67
67
|
{
|
|
@@ -91,8 +91,8 @@ export const calculateTool = tool('calculate', {
|
|
|
91
91
|
{
|
|
92
92
|
reason: 'disallowed_result_type',
|
|
93
93
|
code: JsonRpcErrorCode.ValidationError,
|
|
94
|
-
when: 'Result
|
|
95
|
-
recovery: 'Rewrite the expression to produce a value (number, matrix, unit) instead of a function or
|
|
94
|
+
when: 'Result is a function, parser, or multi-expression ResultSet, or the expression converts a function to a string (e.g. `cos.toString()`) — security guard.',
|
|
95
|
+
recovery: 'Rewrite the expression to produce a value (number, matrix, unit) instead of a function or its source.',
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
reason: 'result_too_large',
|
|
@@ -138,29 +138,29 @@ export const calculateTool = tool('calculate', {
|
|
|
138
138
|
...math.evaluateExpression(expression, ctx, scope, precision),
|
|
139
139
|
expression,
|
|
140
140
|
operation,
|
|
141
|
-
|
|
142
|
-
precisionUsed
|
|
141
|
+
// Omit context fields that carry no signal: scopeVars only when a scope
|
|
142
|
+
// was supplied, precisionUsed only when a precision was applied (#14).
|
|
143
|
+
...(scope ? { scopeVars: Object.keys(scope) } : {}),
|
|
144
|
+
...(precision !== undefined ? { precisionUsed: precision } : {}),
|
|
143
145
|
};
|
|
144
146
|
case 'simplify':
|
|
145
147
|
ctx.log.info('Simplified expression', { expression });
|
|
148
|
+
// Symbolic operations never carry scope/precision context — omit both.
|
|
146
149
|
return {
|
|
147
150
|
...math.simplifyExpression(expression, ctx),
|
|
148
151
|
expression,
|
|
149
152
|
operation,
|
|
150
|
-
scopeVars: null,
|
|
151
|
-
precisionUsed: null,
|
|
152
153
|
};
|
|
153
154
|
case 'derivative':
|
|
154
155
|
if (!variable) {
|
|
155
156
|
throw ctx.fail('derivative_missing_variable', "The 'variable' parameter is required when operation is 'derivative'.", { ...ctx.recoveryFor('derivative_missing_variable') });
|
|
156
157
|
}
|
|
157
158
|
ctx.log.info('Differentiated expression', { expression, variable });
|
|
159
|
+
// Symbolic operations never carry scope/precision context — omit both.
|
|
158
160
|
return {
|
|
159
161
|
...math.differentiateExpression(expression, variable, ctx),
|
|
160
162
|
expression,
|
|
161
163
|
operation,
|
|
162
|
-
scopeVars: null,
|
|
163
|
-
precisionUsed: null,
|
|
164
164
|
};
|
|
165
165
|
default:
|
|
166
166
|
throw new Error(`Unhandled operation: ${operation}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculate.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/calculate.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE;IAC7C,WAAW,EACT,0NAA0N;IAC5N,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACrB;IACD,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,+dAA+d,CAChe;QACH,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;aAC5C,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CACP,+RAA+R,CAChS;QACH,QAAQ,EAAE,CAAC;aACR,KAAK,CAAC;YACL,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC5D,CAAC;iBACE,MAAM,EAAE;iBACR,GAAG,CAAC,EAAE,CAAC;iBACP,KAAK,CACJ,0BAA0B,EAC1B,wDAAwD,CACzD;iBACA,QAAQ,CAAC,mEAAmE,CAAC;SACjF,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,CACP,uIAAuI,CACxI;QACH,KAAK,EAAE,CAAC;aACL,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;aAC9B,QAAQ,EAAE;aACV,QAAQ,CACP,mGAAmG,CACpG;QACH,SAAS,EAAE,CAAC;aACT,KAAK,CAAC;YACL,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC5D,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;SAChF,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,CACP,qKAAqK,CACtK;KACJ,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC/D,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,CACP,6IAA6I,CAC9I;QACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QACvE,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;aAC5C,QAAQ,CAAC,iCAAiC,CAAC;QAC9C,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,wIAAwI,CACzI;QACH,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,
|
|
1
|
+
{"version":3,"file":"calculate.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/calculate.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import type { ServerConfig } from '../../config/server-config.js';
|
|
|
9
9
|
import type { MathResult } from './types.js';
|
|
10
10
|
export declare class MathService {
|
|
11
11
|
private readonly evaluate;
|
|
12
|
+
private readonly parse;
|
|
12
13
|
private readonly simplify;
|
|
13
14
|
private readonly derivative;
|
|
14
15
|
private readonly simplifyRules;
|
|
@@ -33,6 +34,21 @@ export declare class MathService {
|
|
|
33
34
|
private validateFinite;
|
|
34
35
|
/** Reject results that exceed the configured maximum size. */
|
|
35
36
|
private validateResultSize;
|
|
37
|
+
/**
|
|
38
|
+
* Reject expressions that access `.toString` / `.toLocaleString` on any value.
|
|
39
|
+
* math.js permits these methods on function-valued identifiers (`cos.toString()`,
|
|
40
|
+
* `import.toString()`), returning the function's source as a plain string — which
|
|
41
|
+
* slips past {@link validateResultType}, whose function defense only inspects the
|
|
42
|
+
* value AFTER stringification. The check is parse-time and AST-based rather than a
|
|
43
|
+
* runtime `Function.prototype` patch: math.js itself calls `toString` on functions
|
|
44
|
+
* internally while evaluating units, statistics, and complex results, so patching
|
|
45
|
+
* the prototype would reject legitimate expressions. No real calculator expression
|
|
46
|
+
* needs `.toString()`/`.toLocaleString()`, so blocking the accessor outright (dot
|
|
47
|
+
* or bracket form, on any operand) is both sufficient and side-effect-free. String
|
|
48
|
+
* literals that merely contain the text "toString" parse as ConstantNodes, not
|
|
49
|
+
* accessors, so they are unaffected.
|
|
50
|
+
*/
|
|
51
|
+
private validateNoFunctionStringification;
|
|
36
52
|
/** Runs a synchronous function inside a vm sandbox with timeout protection. */
|
|
37
53
|
private runWithTimeout;
|
|
38
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math-service.d.ts","sourceRoot":"","sources":["../../../src/services/math/math-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"math-service.d.ts","sourceRoot":"","sources":["../../../src/services/math/math-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA0L7C,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4D;IACrF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmE;IAC5F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6D;IACxF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAGX;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;gBAE1B,MAAM,EAAE,YAAY;IAiChC,6EAA6E;IAC7E,kBAAkB,CAChB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,OAAO,EACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,UAAU;IAuBb,qDAAqD;IACrD,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU;IAYhE,mFAAmF;IACnF,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU;IASvF,qFAAqF;IACrF,cAAc,IAAI,MAAM;IAIxB,OAAO,CAAC,aAAa;IAqBrB,uEAAuE;IACvE,OAAO,CAAC,aAAa;IAWrB,iGAAiG;IACjG,OAAO,CAAC,kBAAkB;IAS1B,2HAA2H;IAC3H,OAAO,CAAC,cAAc;IAStB,8DAA8D;IAC9D,OAAO,CAAC,kBAAkB;IAS1B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iCAAiC;IAyBzC,+EAA+E;IAC/E,OAAO,CAAC,cAAc;CAoBvB;AAMD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE1D;AAED,iDAAiD;AACjD,wBAAgB,cAAc,IAAI,WAAW,CAG5C"}
|
|
@@ -76,6 +76,14 @@ const REDACTED_CONSTANTS = {
|
|
|
76
76
|
* ResultSet indicates multi-expression evaluation (newline bypass).
|
|
77
77
|
*/
|
|
78
78
|
const BLOCKED_RESULT_TYPES = new Set(['function', 'Function', 'ResultSet', 'Parser']);
|
|
79
|
+
/**
|
|
80
|
+
* Method names that coerce a value to a string. Blocked at parse time on any
|
|
81
|
+
* accessor: `.toString()` / `.toLocaleString()` on a function-valued identifier
|
|
82
|
+
* (e.g. `cos.toString()`) otherwise returns internal source as a plain string,
|
|
83
|
+
* slipping past {@link BLOCKED_RESULT_TYPES} (which only sees the value after
|
|
84
|
+
* stringification). See {@link MathService.validateNoFunctionStringification}.
|
|
85
|
+
*/
|
|
86
|
+
const STRINGIFYING_METHODS = new Set(['toString', 'toLocaleString']);
|
|
79
87
|
/**
|
|
80
88
|
* Scope key names that could pollute the object prototype chain or shadow
|
|
81
89
|
* critical Object.prototype methods. Validated before passing to math.js.
|
|
@@ -96,14 +104,35 @@ const BLOCKED_SCOPE_KEYS = new Set([
|
|
|
96
104
|
'toLocaleString',
|
|
97
105
|
]);
|
|
98
106
|
/**
|
|
99
|
-
* Check for expression separators
|
|
100
|
-
*
|
|
101
|
-
*
|
|
107
|
+
* Check for expression separators (`;` or newline) that split the input into
|
|
108
|
+
* multiple statements. Three contexts are NOT separators and are skipped:
|
|
109
|
+
* - `;` inside `[...]` — a matrix row separator (`[1, 2; 3, 4]`).
|
|
110
|
+
* - `;` or a newline inside a double-quoted string literal — part of the data,
|
|
111
|
+
* not a statement break (`"a;b"`, `concat("a;b", "c")`).
|
|
112
|
+
* - `[` / `]` inside a string literal — they must not shift the bracket depth,
|
|
113
|
+
* or a string such as `"]"` would let a later top-level `;` slip past.
|
|
114
|
+
*
|
|
115
|
+
* Single quotes are NOT string delimiters in math.js — `'` is the transpose
|
|
116
|
+
* operator (`A'`) — so only `"` opens a string span, and a backslash escapes the
|
|
117
|
+
* next character within it (`"\""` stays open). The scan is intentionally
|
|
118
|
+
* lexical rather than a full parse: it only has to recognize quoted spans, and a
|
|
119
|
+
* genuine multi-statement input (`1+2; 3+4`) is still caught at depth 0.
|
|
102
120
|
*/
|
|
103
121
|
function hasExpressionSeparator(expr) {
|
|
104
122
|
let depth = 0;
|
|
105
|
-
|
|
106
|
-
|
|
123
|
+
let inString = false;
|
|
124
|
+
for (let i = 0; i < expr.length; i++) {
|
|
125
|
+
const ch = expr[i];
|
|
126
|
+
if (inString) {
|
|
127
|
+
if (ch === '\\')
|
|
128
|
+
i++;
|
|
129
|
+
else if (ch === '"')
|
|
130
|
+
inString = false;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (ch === '"')
|
|
134
|
+
inString = true;
|
|
135
|
+
else if (ch === '[')
|
|
107
136
|
depth++;
|
|
108
137
|
else if (ch === ']')
|
|
109
138
|
depth--;
|
|
@@ -160,6 +189,7 @@ function normalizeNotation(expression) {
|
|
|
160
189
|
}
|
|
161
190
|
export class MathService {
|
|
162
191
|
evaluate;
|
|
192
|
+
parse;
|
|
163
193
|
simplify;
|
|
164
194
|
derivative;
|
|
165
195
|
simplifyRules;
|
|
@@ -172,6 +202,7 @@ export class MathService {
|
|
|
172
202
|
const math = create(all);
|
|
173
203
|
// Save references before overriding — these bypass the expression scope restrictions
|
|
174
204
|
this.evaluate = math.evaluate.bind(math);
|
|
205
|
+
this.parse = math.parse.bind(math);
|
|
175
206
|
this.simplify = math.simplify.bind(math);
|
|
176
207
|
this.derivative = math.derivative.bind(math);
|
|
177
208
|
this.simplifyRules = [...math.simplify.rules, ...TRIG_SIMPLIFY_RULES];
|
|
@@ -200,6 +231,7 @@ export class MathService {
|
|
|
200
231
|
if (scope)
|
|
201
232
|
this.validateScope(scope, ctx);
|
|
202
233
|
const normalized = normalizeNotation(expression);
|
|
234
|
+
this.validateNoFunctionStringification(normalized, ctx);
|
|
203
235
|
const raw = this.runWithTimeout(() => (scope ? this.evaluate(normalized, scope) : this.evaluate(normalized)), ctx);
|
|
204
236
|
const resultType = this.typeOf(raw);
|
|
205
237
|
this.validateResultType(resultType, ctx);
|
|
@@ -276,6 +308,39 @@ export class MathService {
|
|
|
276
308
|
throw validationError(`Result exceeds maximum size (${this.config.maxResultLength} characters). Reduce matrix dimensions or simplify the expression.`, { reason: 'result_too_large', ...ctx.recoveryFor('result_too_large') });
|
|
277
309
|
}
|
|
278
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Reject expressions that access `.toString` / `.toLocaleString` on any value.
|
|
313
|
+
* math.js permits these methods on function-valued identifiers (`cos.toString()`,
|
|
314
|
+
* `import.toString()`), returning the function's source as a plain string — which
|
|
315
|
+
* slips past {@link validateResultType}, whose function defense only inspects the
|
|
316
|
+
* value AFTER stringification. The check is parse-time and AST-based rather than a
|
|
317
|
+
* runtime `Function.prototype` patch: math.js itself calls `toString` on functions
|
|
318
|
+
* internally while evaluating units, statistics, and complex results, so patching
|
|
319
|
+
* the prototype would reject legitimate expressions. No real calculator expression
|
|
320
|
+
* needs `.toString()`/`.toLocaleString()`, so blocking the accessor outright (dot
|
|
321
|
+
* or bracket form, on any operand) is both sufficient and side-effect-free. String
|
|
322
|
+
* literals that merely contain the text "toString" parse as ConstantNodes, not
|
|
323
|
+
* accessors, so they are unaffected.
|
|
324
|
+
*/
|
|
325
|
+
validateNoFunctionStringification(expr, ctx) {
|
|
326
|
+
let ast;
|
|
327
|
+
try {
|
|
328
|
+
ast = this.parse(expr);
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// Let the evaluate path surface parse errors with full mathjs context.
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const accessesStringifier = ast.filter((node) => {
|
|
335
|
+
if (node.type !== 'IndexNode')
|
|
336
|
+
return false;
|
|
337
|
+
const { dimensions } = node;
|
|
338
|
+
return dimensions.some((dim) => dim.type === 'ConstantNode' && STRINGIFYING_METHODS.has(String(dim.value)));
|
|
339
|
+
});
|
|
340
|
+
if (accessesStringifier.length > 0) {
|
|
341
|
+
throw validationError('Converting a function to a string is not allowed — it would expose internal source. Only numeric, string, matrix, complex, unit, and boolean results are allowed.', { reason: 'disallowed_result_type', ...ctx.recoveryFor('disallowed_result_type') });
|
|
342
|
+
}
|
|
343
|
+
}
|
|
279
344
|
/** Runs a synchronous function inside a vm sandbox with timeout protection. */
|
|
280
345
|
runWithTimeout(fn, ctx) {
|
|
281
346
|
const sandbox = { fn, result: undefined };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math-service.js","sourceRoot":"","sources":["../../../src/services/math/math-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"math-service.js","sourceRoot":"","sources":["../../../src/services/math/math-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/calculator-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Evaluate, simplify, and differentiate mathematical expressions via MCP. STDIO or Streamable HTTP.",
|
|
5
5
|
"mcpName": "io.github.cyanheads/calculator-mcp-server",
|
|
6
6
|
"type": "module",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/calculator-mcp-server.mcpb",
|
|
26
26
|
"changelog:build": "bun scripts/build-changelog.ts",
|
|
27
27
|
"changelog:check": "bun scripts/build-changelog.ts --check",
|
|
28
|
+
"release:github": "bun scripts/release-github.ts",
|
|
28
29
|
"test": "vitest run",
|
|
29
30
|
"start": "node dist/index.js",
|
|
30
31
|
"start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
|
|
@@ -76,7 +77,7 @@
|
|
|
76
77
|
"zod": "^4.4.3"
|
|
77
78
|
},
|
|
78
79
|
"dependencies": {
|
|
79
|
-
"@cyanheads/mcp-ts-core": "^0.9.
|
|
80
|
+
"@cyanheads/mcp-ts-core": "^0.9.21",
|
|
80
81
|
"mathjs": "^15.2.0",
|
|
81
82
|
"pino-pretty": "^13.1.3",
|
|
82
83
|
"zod": "^4.4.3"
|
|
@@ -87,8 +88,8 @@
|
|
|
87
88
|
"depcheck": "^1.4.7",
|
|
88
89
|
"ignore": "^7.0.5",
|
|
89
90
|
"tsc-alias": "^1.8.17",
|
|
90
|
-
"tsx": "^4.22.
|
|
91
|
+
"tsx": "^4.22.4",
|
|
91
92
|
"typescript": "^6.0.3",
|
|
92
|
-
"vitest": "^4.1.
|
|
93
|
+
"vitest": "^4.1.8"
|
|
93
94
|
}
|
|
94
95
|
}
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/calculator-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.3.1",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/calculator-mcp-server",
|
|
21
21
|
"runtimeHint": "bun",
|
|
22
|
-
"version": "0.
|
|
22
|
+
"version": "0.3.1",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{
|
|
25
25
|
"type": "positional",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
70
70
|
"identifier": "@cyanheads/calculator-mcp-server",
|
|
71
71
|
"runtimeHint": "bun",
|
|
72
|
-
"version": "0.
|
|
72
|
+
"version": "0.3.1",
|
|
73
73
|
"packageArguments": [
|
|
74
74
|
{
|
|
75
75
|
"type": "positional",
|