actual-mcp-server 0.6.54 → 0.6.56

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/README.md CHANGED
@@ -755,4 +755,4 @@ The software is provided **as-is**, without warranty of any kind. The author acc
755
755
 
756
756
  ---
757
757
 
758
- **Version:** 0.6.54 | **Tool Count:** 71 (verified LibreChat-compatible)
758
+ **Version:** 0.6.56 | **Tool Count:** 71 (verified LibreChat-compatible)
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "actual-mcp-server",
3
3
  "displayName": "Actual MCP Server",
4
- "version": "0.6.54",
4
+ "version": "0.6.56",
5
5
  "engines": {
6
6
  "node": ">=20.0.0",
7
7
  "npm": ">=10.0.0"
@@ -30,7 +30,7 @@
30
30
  "verify-tools": "npm run build && node scripts/verify-tools.js",
31
31
  "check:coverage": "node scripts/list-actual-api-methods.mjs",
32
32
  "direct-sync": "node scripts/direct-sync/bank-sync-direct.mjs",
33
- "test:unit-js": "node tests/unit/transactions_create.test.js && node tests/unit/generated_tools.smoke.test.js && node tests/unit/schema_validation.test.js && node tests/unit/config_https_validation.test.js && node tests/unit/config_data_dir.test.js && node tests/unit/config_drift.test.js && node tests/unit/port_alignment.test.js && node tests/unit/dockerfile_data_dir_alignment.test.js && node tests/unit/compose_profile_sync.test.js && node tests/unit/config_insecure_upstream.test.js && node tests/unit/auth-acl.test.js && node tests/unit/bug76.test.js && node tests/unit/budgets_setAmount.test.js && node tests/unit/budgets_transfer.test.js && node tests/unit/transactions_uncategorized.test.js && node tests/unit/httpServer_session_init.test.js && node tests/unit/httpServer_session_not_found.test.js && node tests/unit/manual_mcp_client_retry.test.js && node tests/unit/manual_mcp_client_session.test.js && node tests/unit/manual_mcp_client_circuit.test.js && node tests/unit/manual_runner_killswitch.test.js && node tests/unit/adapter_auth_rate_limit.test.js && node tests/unit/adapter_session_reuse.test.js && node tests/unit/retry_classifier.test.js && node tests/unit/adapter_module_surface.test.js && node tests/unit/adapter_nonidempotent_no_retry.test.js && node tests/unit/pool_liveness.test.js && node tests/unit/pool_shutdown_all.test.js && node tests/unit/query_where_operators.test.js && node tests/unit/query_run_validation.test.js && node tests/unit/adapter_with_write_session.test.js && node tests/unit/category_groups_delete.test.js && node tests/unit/rules_delete.test.js && node tests/unit/schedules_delete.test.js && node tests/unit/payees_delete.test.js && node tests/unit/rules_create_or_update.test.js && node tests/unit/unhandled-rejection.test.js && node tests/unit/rejection-allowlist-purity.test.js && node tests/unit/httpServer_bearer_auth.test.js && node tests/unit/httpServer_oidc_audience.test.js && node tests/unit/httpServer_oidc_auth_verification.test.js && node tests/unit/httpServer_body_limit.test.js && node tests/unit/adapter_write_pool_cooperation.test.js && node tests/unit/budget_acl_enforcement.test.js && node tests/unit/budget_preference_store.test.js && node tests/unit/budget_preference_restore.test.js && node tests/unit/tags_list.test.js && node tests/unit/tags_create.test.js && node tests/unit/tags_update.test.js && node tests/unit/tags_delete.test.js && node tests/unit/notes_get.test.js && node tests/unit/notes_update.test.js && node tests/unit/payees_common_list.test.js && node tests/unit/transactions_update_guard.test.js && node tests/unit/entities_search.test.js && node tests/unit/transactions_import_schema.test.js && node tests/unit/tool_schema_shape.test.js && node tests/unit/zod_error_format.test.js && node tests/unit/tool_count_sync.test.js && node tests/unit/stdio_transport.test.js && node tests/unit/logger_structured.test.js && node tests/unit/logger_redaction.test.js && node tests/unit/logger_correlation.test.js && node tests/unit/check_coverage.test.js",
33
+ "test:unit-js": "node tests/unit/transactions_create.test.js && node tests/unit/generated_tools.smoke.test.js && node tests/unit/schema_validation.test.js && node tests/unit/config_https_validation.test.js && node tests/unit/config_data_dir.test.js && node tests/unit/config_drift.test.js && node tests/unit/port_alignment.test.js && node tests/unit/dockerfile_data_dir_alignment.test.js && node tests/unit/compose_profile_sync.test.js && node tests/unit/advertised_tools_sync.test.js && node tests/unit/knip_config.test.js && node tests/unit/node_polyfill_order.test.js && node tests/unit/config_insecure_upstream.test.js && node tests/unit/auth-acl.test.js && node tests/unit/bug76.test.js && node tests/unit/budgets_setAmount.test.js && node tests/unit/budgets_transfer.test.js && node tests/unit/transactions_uncategorized.test.js && node tests/unit/httpServer_session_init.test.js && node tests/unit/httpServer_session_not_found.test.js && node tests/unit/manual_mcp_client_retry.test.js && node tests/unit/manual_mcp_client_session.test.js && node tests/unit/manual_mcp_client_circuit.test.js && node tests/unit/manual_runner_killswitch.test.js && node tests/unit/adapter_auth_rate_limit.test.js && node tests/unit/adapter_session_reuse.test.js && node tests/unit/retry_classifier.test.js && node tests/unit/adapter_module_surface.test.js && node tests/unit/adapter_nonidempotent_no_retry.test.js && node tests/unit/pool_liveness.test.js && node tests/unit/pool_shutdown_all.test.js && node tests/unit/query_where_operators.test.js && node tests/unit/query_run_validation.test.js && node tests/unit/adapter_with_write_session.test.js && node tests/unit/category_groups_delete.test.js && node tests/unit/rules_delete.test.js && node tests/unit/schedules_delete.test.js && node tests/unit/payees_delete.test.js && node tests/unit/rules_create_or_update.test.js && node tests/unit/unhandled-rejection.test.js && node tests/unit/rejection-allowlist-purity.test.js && node tests/unit/httpServer_bearer_auth.test.js && node tests/unit/httpServer_oidc_audience.test.js && node tests/unit/httpServer_oidc_auth_verification.test.js && node tests/unit/httpServer_body_limit.test.js && node tests/unit/adapter_write_pool_cooperation.test.js && node tests/unit/budget_acl_enforcement.test.js && node tests/unit/budget_preference_store.test.js && node tests/unit/budget_preference_restore.test.js && node tests/unit/tags_list.test.js && node tests/unit/tags_create.test.js && node tests/unit/tags_update.test.js && node tests/unit/tags_delete.test.js && node tests/unit/notes_get.test.js && node tests/unit/notes_update.test.js && node tests/unit/payees_common_list.test.js && node tests/unit/transactions_update_guard.test.js && node tests/unit/entities_search.test.js && node tests/unit/transactions_import_schema.test.js && node tests/unit/tool_schema_shape.test.js && node tests/unit/zod_error_format.test.js && node tests/unit/tool_count_sync.test.js && node tests/unit/stdio_transport.test.js && node tests/unit/logger_structured.test.js && node tests/unit/logger_redaction.test.js && node tests/unit/logger_correlation.test.js && node tests/unit/check_coverage.test.js",
34
34
  "test:adapter": "npm run build && node dist/src/tests_adapter_runner.js",
35
35
  "test:e2e": "npx playwright test",
36
36
  "test:e2e:docker": "./tests/e2e/run-docker-e2e.sh",
@@ -56,7 +56,8 @@
56
56
  "release:minor": "npm run version:bump -- minor",
57
57
  "release:patch": "npm run version:bump -- patch",
58
58
  "tool-count": "node scripts/tool-count.mjs",
59
- "config-drift": "npm run build && node scripts/config-drift.mjs"
59
+ "config-drift": "npm run build && node scripts/config-drift.mjs",
60
+ "knip": "knip --no-exit-code"
60
61
  },
61
62
  "dependencies": {
62
63
  "@actual-app/api": "^26.6.0",
@@ -78,6 +79,7 @@
78
79
  "@playwright/test": "^1.60.0",
79
80
  "@types/express": "^5.0.3",
80
81
  "@types/node": "^25.9.2",
82
+ "knip": "^6.16.1",
81
83
  "node-fetch": "^3.3.2",
82
84
  "tsconfig-paths": "^4.2.0",
83
85
  "typescript": "^6.0.3"
@@ -1,3 +1,5 @@
1
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
2
+ import './lib/node-polyfills.js';
1
3
  import fs from 'fs';
2
4
  import path from 'path';
3
5
  import os from 'os';
@@ -1,3 +1,6 @@
1
+ // src/actualToolsManager.ts
2
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
3
+ import './lib/node-polyfills.js';
1
4
  import logger from './logger.js';
2
5
  import { z } from 'zod';
3
6
  import { formatZodError } from './lib/zod-error-format.js';
@@ -10,6 +10,8 @@
10
10
  * For true concurrent multi-session support, the Actual Budget API would
11
11
  * need to support multiple instances or we'd need request queuing.
12
12
  */
13
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
14
+ import './node-polyfills.js';
13
15
  import api from '@actual-app/api';
14
16
  import logger from '../logger.js';
15
17
  import config from '../config.js';
@@ -1,4 +1,6 @@
1
1
  // lib/ActualMCPConnection.ts
2
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
3
+ import './node-polyfills.js';
2
4
  import { EventEmitter } from 'events';
3
5
  import * as actual from '@actual-app/api';
4
6
  import actualToolsManager from '../actualToolsManager.js';
@@ -65,6 +65,9 @@ export const DEFAULT_BIND_HOST = 'localhost';
65
65
  * Default HTTP port for MCP server. Canonical default is 3600 (#230): it matches
66
66
  * the listen-port fallback in src/index.ts, the Dockerfile EXPOSE/HEALTHCHECK, the
67
67
  * published image, .env.example, and every deployment guide.
68
+ *
69
+ * @public Consumed by the text-parsing port_alignment guard (tests/unit/port_alignment.test.js),
70
+ * not by a runtime import, so Knip cannot see the usage. Alive: removing it breaks the guard.
68
71
  */
69
72
  export const DEFAULT_HTTP_PORT = 3600;
70
73
  /**
@@ -1,4 +1,6 @@
1
1
  // Example resource: summary of all accounts
2
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
3
+ import '../lib/node-polyfills.js';
2
4
  import api from '@actual-app/api';
3
5
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
6
  const { getAccounts } = api;
@@ -1,3 +1,5 @@
1
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
2
+ import '../lib/node-polyfills.js';
1
3
  import { z } from 'zod';
2
4
  import adapter from '../lib/actual-adapter.js';
3
5
  import api from '@actual-app/api';
@@ -1,3 +1,5 @@
1
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
2
+ import '../lib/node-polyfills.js';
1
3
  import { z } from 'zod';
2
4
  import adapter from '../lib/actual-adapter.js';
3
5
  import { notFoundMsg } from '../lib/errors.js';
@@ -17,6 +17,8 @@
17
17
  * - No wrapToolCall — uses direct call() pattern
18
18
  * - Reuses exact same ConditionSchema / ActionSchema / FIELD_OPERATORS as rules_create.ts
19
19
  */
20
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
21
+ import '../lib/node-polyfills.js';
20
22
  import { z } from 'zod';
21
23
  import adapter, { normalizeToId } from '../lib/actual-adapter.js';
22
24
  import api from '@actual-app/api';
@@ -1,3 +1,5 @@
1
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
2
+ import '../lib/node-polyfills.js';
1
3
  import { z } from 'zod';
2
4
  import adapter from '../lib/actual-adapter.js';
3
5
  import { notFoundMsg } from '../lib/errors.js';
@@ -1,3 +1,5 @@
1
+ // #232: load the navigator polyfill before @actual-app/api so the Node 20 global is defined first.
2
+ import '../lib/node-polyfills.js';
1
3
  import { z } from 'zod';
2
4
  import adapter from '../lib/actual-adapter.js';
3
5
  import { UUID_PATTERN } from '../lib/constants.js';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "actual-mcp-server",
3
3
  "displayName": "Actual MCP Server",
4
- "version": "0.6.54",
4
+ "version": "0.6.56",
5
5
  "engines": {
6
6
  "node": ">=20.0.0",
7
7
  "npm": ">=10.0.0"
@@ -30,7 +30,7 @@
30
30
  "verify-tools": "npm run build && node scripts/verify-tools.js",
31
31
  "check:coverage": "node scripts/list-actual-api-methods.mjs",
32
32
  "direct-sync": "node scripts/direct-sync/bank-sync-direct.mjs",
33
- "test:unit-js": "node tests/unit/transactions_create.test.js && node tests/unit/generated_tools.smoke.test.js && node tests/unit/schema_validation.test.js && node tests/unit/config_https_validation.test.js && node tests/unit/config_data_dir.test.js && node tests/unit/config_drift.test.js && node tests/unit/port_alignment.test.js && node tests/unit/dockerfile_data_dir_alignment.test.js && node tests/unit/compose_profile_sync.test.js && node tests/unit/config_insecure_upstream.test.js && node tests/unit/auth-acl.test.js && node tests/unit/bug76.test.js && node tests/unit/budgets_setAmount.test.js && node tests/unit/budgets_transfer.test.js && node tests/unit/transactions_uncategorized.test.js && node tests/unit/httpServer_session_init.test.js && node tests/unit/httpServer_session_not_found.test.js && node tests/unit/manual_mcp_client_retry.test.js && node tests/unit/manual_mcp_client_session.test.js && node tests/unit/manual_mcp_client_circuit.test.js && node tests/unit/manual_runner_killswitch.test.js && node tests/unit/adapter_auth_rate_limit.test.js && node tests/unit/adapter_session_reuse.test.js && node tests/unit/retry_classifier.test.js && node tests/unit/adapter_module_surface.test.js && node tests/unit/adapter_nonidempotent_no_retry.test.js && node tests/unit/pool_liveness.test.js && node tests/unit/pool_shutdown_all.test.js && node tests/unit/query_where_operators.test.js && node tests/unit/query_run_validation.test.js && node tests/unit/adapter_with_write_session.test.js && node tests/unit/category_groups_delete.test.js && node tests/unit/rules_delete.test.js && node tests/unit/schedules_delete.test.js && node tests/unit/payees_delete.test.js && node tests/unit/rules_create_or_update.test.js && node tests/unit/unhandled-rejection.test.js && node tests/unit/rejection-allowlist-purity.test.js && node tests/unit/httpServer_bearer_auth.test.js && node tests/unit/httpServer_oidc_audience.test.js && node tests/unit/httpServer_oidc_auth_verification.test.js && node tests/unit/httpServer_body_limit.test.js && node tests/unit/adapter_write_pool_cooperation.test.js && node tests/unit/budget_acl_enforcement.test.js && node tests/unit/budget_preference_store.test.js && node tests/unit/budget_preference_restore.test.js && node tests/unit/tags_list.test.js && node tests/unit/tags_create.test.js && node tests/unit/tags_update.test.js && node tests/unit/tags_delete.test.js && node tests/unit/notes_get.test.js && node tests/unit/notes_update.test.js && node tests/unit/payees_common_list.test.js && node tests/unit/transactions_update_guard.test.js && node tests/unit/entities_search.test.js && node tests/unit/transactions_import_schema.test.js && node tests/unit/tool_schema_shape.test.js && node tests/unit/zod_error_format.test.js && node tests/unit/tool_count_sync.test.js && node tests/unit/stdio_transport.test.js && node tests/unit/logger_structured.test.js && node tests/unit/logger_redaction.test.js && node tests/unit/logger_correlation.test.js && node tests/unit/check_coverage.test.js",
33
+ "test:unit-js": "node tests/unit/transactions_create.test.js && node tests/unit/generated_tools.smoke.test.js && node tests/unit/schema_validation.test.js && node tests/unit/config_https_validation.test.js && node tests/unit/config_data_dir.test.js && node tests/unit/config_drift.test.js && node tests/unit/port_alignment.test.js && node tests/unit/dockerfile_data_dir_alignment.test.js && node tests/unit/compose_profile_sync.test.js && node tests/unit/advertised_tools_sync.test.js && node tests/unit/knip_config.test.js && node tests/unit/node_polyfill_order.test.js && node tests/unit/config_insecure_upstream.test.js && node tests/unit/auth-acl.test.js && node tests/unit/bug76.test.js && node tests/unit/budgets_setAmount.test.js && node tests/unit/budgets_transfer.test.js && node tests/unit/transactions_uncategorized.test.js && node tests/unit/httpServer_session_init.test.js && node tests/unit/httpServer_session_not_found.test.js && node tests/unit/manual_mcp_client_retry.test.js && node tests/unit/manual_mcp_client_session.test.js && node tests/unit/manual_mcp_client_circuit.test.js && node tests/unit/manual_runner_killswitch.test.js && node tests/unit/adapter_auth_rate_limit.test.js && node tests/unit/adapter_session_reuse.test.js && node tests/unit/retry_classifier.test.js && node tests/unit/adapter_module_surface.test.js && node tests/unit/adapter_nonidempotent_no_retry.test.js && node tests/unit/pool_liveness.test.js && node tests/unit/pool_shutdown_all.test.js && node tests/unit/query_where_operators.test.js && node tests/unit/query_run_validation.test.js && node tests/unit/adapter_with_write_session.test.js && node tests/unit/category_groups_delete.test.js && node tests/unit/rules_delete.test.js && node tests/unit/schedules_delete.test.js && node tests/unit/payees_delete.test.js && node tests/unit/rules_create_or_update.test.js && node tests/unit/unhandled-rejection.test.js && node tests/unit/rejection-allowlist-purity.test.js && node tests/unit/httpServer_bearer_auth.test.js && node tests/unit/httpServer_oidc_audience.test.js && node tests/unit/httpServer_oidc_auth_verification.test.js && node tests/unit/httpServer_body_limit.test.js && node tests/unit/adapter_write_pool_cooperation.test.js && node tests/unit/budget_acl_enforcement.test.js && node tests/unit/budget_preference_store.test.js && node tests/unit/budget_preference_restore.test.js && node tests/unit/tags_list.test.js && node tests/unit/tags_create.test.js && node tests/unit/tags_update.test.js && node tests/unit/tags_delete.test.js && node tests/unit/notes_get.test.js && node tests/unit/notes_update.test.js && node tests/unit/payees_common_list.test.js && node tests/unit/transactions_update_guard.test.js && node tests/unit/entities_search.test.js && node tests/unit/transactions_import_schema.test.js && node tests/unit/tool_schema_shape.test.js && node tests/unit/zod_error_format.test.js && node tests/unit/tool_count_sync.test.js && node tests/unit/stdio_transport.test.js && node tests/unit/logger_structured.test.js && node tests/unit/logger_redaction.test.js && node tests/unit/logger_correlation.test.js && node tests/unit/check_coverage.test.js",
34
34
  "test:adapter": "npm run build && node dist/src/tests_adapter_runner.js",
35
35
  "test:e2e": "npx playwright test",
36
36
  "test:e2e:docker": "./tests/e2e/run-docker-e2e.sh",
@@ -56,7 +56,8 @@
56
56
  "release:minor": "npm run version:bump -- minor",
57
57
  "release:patch": "npm run version:bump -- patch",
58
58
  "tool-count": "node scripts/tool-count.mjs",
59
- "config-drift": "npm run build && node scripts/config-drift.mjs"
59
+ "config-drift": "npm run build && node scripts/config-drift.mjs",
60
+ "knip": "knip --no-exit-code"
60
61
  },
61
62
  "dependencies": {
62
63
  "@actual-app/api": "^26.6.0",
@@ -78,6 +79,7 @@
78
79
  "@playwright/test": "^1.60.0",
79
80
  "@types/express": "^5.0.3",
80
81
  "@types/node": "^25.9.2",
82
+ "knip": "^6.16.1",
81
83
  "node-fetch": "^3.3.2",
82
84
  "tsconfig-paths": "^4.2.0",
83
85
  "typescript": "^6.0.3"