@markcolabs/mcp 0.1.0 → 0.3.0

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.
Files changed (88) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSE-API.md +111 -0
  3. package/README.md +128 -205
  4. package/dist/engines/compoundInterest.d.ts +8 -6
  5. package/dist/engines/compoundInterest.d.ts.map +1 -1
  6. package/dist/engines/compoundInterest.js +8 -6
  7. package/dist/engines/compoundInterest.js.map +1 -1
  8. package/dist/engines/data/irs2026.d.ts +110 -3
  9. package/dist/engines/data/irs2026.d.ts.map +1 -1
  10. package/dist/engines/data/irs2026.js +86 -3
  11. package/dist/engines/data/irs2026.js.map +1 -1
  12. package/dist/engines/data/rmd2026.d.ts +59 -0
  13. package/dist/engines/data/rmd2026.d.ts.map +1 -0
  14. package/dist/engines/data/rmd2026.js +75 -0
  15. package/dist/engines/data/rmd2026.js.map +1 -0
  16. package/dist/engines/data/stateTax2026.d.ts +114 -0
  17. package/dist/engines/data/stateTax2026.d.ts.map +1 -0
  18. package/dist/engines/data/stateTax2026.js +348 -0
  19. package/dist/engines/data/stateTax2026.js.map +1 -0
  20. package/dist/engines/hsa.d.ts +110 -0
  21. package/dist/engines/hsa.d.ts.map +1 -0
  22. package/dist/engines/hsa.js +83 -0
  23. package/dist/engines/hsa.js.map +1 -0
  24. package/dist/engines/ira.d.ts +115 -0
  25. package/dist/engines/ira.d.ts.map +1 -0
  26. package/dist/engines/ira.js +127 -0
  27. package/dist/engines/ira.js.map +1 -0
  28. package/dist/engines/mortgage.d.ts +7 -6
  29. package/dist/engines/mortgage.d.ts.map +1 -1
  30. package/dist/engines/mortgage.js +7 -6
  31. package/dist/engines/mortgage.js.map +1 -1
  32. package/dist/engines/paycheck.d.ts +57 -18
  33. package/dist/engines/paycheck.d.ts.map +1 -1
  34. package/dist/engines/paycheck.js +59 -26
  35. package/dist/engines/paycheck.js.map +1 -1
  36. package/dist/engines/retirement401k.d.ts +7 -3
  37. package/dist/engines/retirement401k.d.ts.map +1 -1
  38. package/dist/engines/retirement401k.js +7 -3
  39. package/dist/engines/retirement401k.js.map +1 -1
  40. package/dist/engines/rmd.d.ts +107 -0
  41. package/dist/engines/rmd.d.ts.map +1 -0
  42. package/dist/engines/rmd.js +109 -0
  43. package/dist/engines/rmd.js.map +1 -0
  44. package/dist/engines/rothConversion.d.ts +124 -0
  45. package/dist/engines/rothConversion.d.ts.map +1 -0
  46. package/dist/engines/rothConversion.js +145 -0
  47. package/dist/engines/rothConversion.js.map +1 -0
  48. package/dist/engines/socialSecurity.d.ts +7 -3
  49. package/dist/engines/socialSecurity.d.ts.map +1 -1
  50. package/dist/engines/socialSecurity.js +7 -3
  51. package/dist/engines/socialSecurity.js.map +1 -1
  52. package/dist/index.d.ts +21 -9
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +109 -11
  55. package/dist/index.js.map +1 -1
  56. package/dist/shared/bounds.d.ts +50 -0
  57. package/dist/shared/bounds.d.ts.map +1 -1
  58. package/dist/shared/bounds.js +85 -0
  59. package/dist/shared/bounds.js.map +1 -1
  60. package/dist/tools/hsa.d.ts +58 -0
  61. package/dist/tools/hsa.d.ts.map +1 -0
  62. package/dist/tools/hsa.js +129 -0
  63. package/dist/tools/hsa.js.map +1 -0
  64. package/dist/tools/ira.d.ts +55 -0
  65. package/dist/tools/ira.d.ts.map +1 -0
  66. package/dist/tools/ira.js +117 -0
  67. package/dist/tools/ira.js.map +1 -0
  68. package/dist/tools/paycheck.d.ts +14 -7
  69. package/dist/tools/paycheck.d.ts.map +1 -1
  70. package/dist/tools/paycheck.js +24 -11
  71. package/dist/tools/paycheck.js.map +1 -1
  72. package/dist/tools/retirement401k.d.ts +3 -3
  73. package/dist/tools/retirement401k.d.ts.map +1 -1
  74. package/dist/tools/retirement401k.js +3 -3
  75. package/dist/tools/retirement401k.js.map +1 -1
  76. package/dist/tools/rmd.d.ts +60 -0
  77. package/dist/tools/rmd.d.ts.map +1 -0
  78. package/dist/tools/rmd.js +130 -0
  79. package/dist/tools/rmd.js.map +1 -0
  80. package/dist/tools/rothConversion.d.ts +66 -0
  81. package/dist/tools/rothConversion.d.ts.map +1 -0
  82. package/dist/tools/rothConversion.js +141 -0
  83. package/dist/tools/rothConversion.js.map +1 -0
  84. package/dist/tools/socialSecurity.d.ts +3 -3
  85. package/dist/tools/socialSecurity.d.ts.map +1 -1
  86. package/dist/tools/socialSecurity.js +3 -3
  87. package/dist/tools/socialSecurity.js.map +1 -1
  88. package/package.json +19 -5
@@ -0,0 +1,141 @@
1
+ /**
2
+ * MCP tool wrapper for `dc.calculator.rothConversion.taxImpact`.
3
+ *
4
+ * Per ADR-0039 § 1: tool name locked.
5
+ * Per ADR-0039 § 2: Zod input with bounds from shared/bounds.ts; rate as
6
+ * whole-number Percent; enum for filing status.
7
+ * Per ADR-0039 § 3: returns ToolResult<RothConversionTaxImpactResult>.
8
+ * Per ADR-0039 § 4: errors funnel through ToolError.
9
+ *
10
+ * Scope per S141 Risk #2: SINGLE-CONVERSION tax impact only. Multi-year
11
+ * conversion-ladder optimization is a future tool. State tax and IRMAA tier
12
+ * impact are out of scope (documented in the tool description).
13
+ */
14
+ import { z } from "zod";
15
+ import { taxImpact, ENGINE_VERSION, } from "../engines/rothConversion.js";
16
+ import { ROTH_CONVERSION_BOUNDS } from "../shared/bounds.js";
17
+ import { FEDERAL_FILING_STATUS } from "../shared/bounds.js";
18
+ import { YMYL_DISCLAIMER } from "../disclaimers/ymyl.js";
19
+ import { makeResult, makeError, } from "../envelope.js";
20
+ /** Locked tool name per ADR-0039 § 1. */
21
+ export const TOOL_NAME = "dc.calculator.rothConversion.taxImpact";
22
+ /** Methodology pointer — ADR-0039 § 3. */
23
+ const METHODOLOGY = {
24
+ url: "https://www.digitalcalculator.info/roth-conversion-calculator/",
25
+ version: "2026-05-27",
26
+ };
27
+ /**
28
+ * Zod input schema. Bounds come from shared/bounds.ts. Filing status uses
29
+ * the paycheck-engine FEDERAL_FILING_STATUS enum (single | married |
30
+ * marriedSeparate | headOfHousehold) for consistency with other federal-tax
31
+ * tools.
32
+ */
33
+ export const RothConversionTaxImpactInputSchema = z.object({
34
+ conversionAmount: z
35
+ .number()
36
+ .min(ROTH_CONVERSION_BOUNDS.MIN_CONVERSION)
37
+ .max(ROTH_CONVERSION_BOUNDS.MAX_CONVERSION)
38
+ .describe("Conversion amount in USD."),
39
+ age: z
40
+ .number()
41
+ .int()
42
+ .min(ROTH_CONVERSION_BOUNDS.MIN_AGE)
43
+ .max(ROTH_CONVERSION_BOUNDS.MAX_AGE)
44
+ .describe("Current age. Drives the Roth 5-year-rule flag (applies if age < 59.5)."),
45
+ filingStatus: z
46
+ .enum(FEDERAL_FILING_STATUS)
47
+ .describe("Federal filing status: single | married | marriedSeparate | headOfHousehold."),
48
+ currentTaxableIncome: z
49
+ .number()
50
+ .min(ROTH_CONVERSION_BOUNDS.MIN_TAXABLE_INCOME)
51
+ .max(ROTH_CONVERSION_BOUNDS.MAX_TAXABLE_INCOME)
52
+ .describe("Current federal taxable income BEFORE adding the conversion, USD. Used as the lower bound for the incremental-tax bracket walk."),
53
+ retirementMarginalRatePercent: z
54
+ .number()
55
+ .min(ROTH_CONVERSION_BOUNDS.MIN_RETIREMENT_RATE_PERCENT)
56
+ .max(ROTH_CONVERSION_BOUNDS.MAX_RETIREMENT_RATE_PERCENT)
57
+ .optional()
58
+ .describe("Optional expected retirement marginal federal tax rate, whole-number percent (e.g., 12 for 12%). When omitted, breakEvenYears returns null."),
59
+ expectedReturnPercent: z
60
+ .number()
61
+ .min(ROTH_CONVERSION_BOUNDS.MIN_RETURN_PERCENT)
62
+ .max(ROTH_CONVERSION_BOUNDS.MAX_RETURN_PERCENT)
63
+ .optional()
64
+ .describe("Optional real annual return on the converted Roth balance, whole-number percent. Defaults to 7. Used only for the break-even calculation."),
65
+ });
66
+ /** Tool description used in mcp.tools/list. */
67
+ export const TOOL_DESCRIPTION = "Compute the federal income tax impact of a SINGLE Roth conversion using " +
68
+ "2026 IRS brackets. Returns the incremental tax owed, the top marginal " +
69
+ "bracket the conversion pushes you into, the effective rate, a Roth 5-year-" +
70
+ "rule flag, and optional break-even years if you provide your expected " +
71
+ "retirement marginal rate. SCOPE LIMITS: single-conversion only (multi-year " +
72
+ "optimization is a future tool); state tax and IRMAA tier impact are NOT " +
73
+ "modeled — caller is responsible for those.";
74
+ /**
75
+ * Execute the tool. Validation + engine call wrapped in the standard envelope.
76
+ *
77
+ * Tagged-union return:
78
+ * { ok: true, value: ToolResult<...> }
79
+ * { ok: false, error: ToolError }
80
+ *
81
+ * The MCP SDK adapter at src/index.ts maps `ok=false` to `isError: true`.
82
+ */
83
+ export function execute(rawInput) {
84
+ const parsed = RothConversionTaxImpactInputSchema.safeParse(rawInput);
85
+ if (!parsed.success) {
86
+ const first = parsed.error.issues[0];
87
+ return {
88
+ ok: false,
89
+ error: makeError({
90
+ code: "INPUT_VALIDATION",
91
+ message: first?.message ?? "Invalid input.",
92
+ field: first?.path.join(".") || undefined,
93
+ retriable: false,
94
+ }),
95
+ };
96
+ }
97
+ const input = parsed.data;
98
+ let payload;
99
+ try {
100
+ payload = taxImpact(input);
101
+ }
102
+ catch (err) {
103
+ return {
104
+ ok: false,
105
+ error: makeError({
106
+ code: "INTERNAL",
107
+ message: "Engine error computing Roth conversion tax impact.",
108
+ retriable: false,
109
+ }),
110
+ };
111
+ }
112
+ // Sanity check: NaN / non-finite results are an internal failure.
113
+ // breakEvenYears may legitimately be null (no retirement rate given) or
114
+ // Infinity (mathematically unreachable), both of which we allow.
115
+ const beOk = payload.breakEvenYears === null ||
116
+ payload.breakEvenYears === Infinity ||
117
+ Number.isFinite(payload.breakEvenYears);
118
+ if (!Number.isFinite(payload.taxOwed) ||
119
+ !Number.isFinite(payload.marginalRateOnConversion) ||
120
+ !Number.isFinite(payload.effectiveRateOnConversion) ||
121
+ !beOk) {
122
+ return {
123
+ ok: false,
124
+ error: makeError({
125
+ code: "INTERNAL",
126
+ message: "Roth conversion engine produced a non-finite result.",
127
+ retriable: false,
128
+ }),
129
+ };
130
+ }
131
+ return {
132
+ ok: true,
133
+ value: makeResult({
134
+ result: payload,
135
+ methodology: METHODOLOGY,
136
+ engineVersion: ENGINE_VERSION,
137
+ disclaimer: YMYL_DISCLAIMER,
138
+ }),
139
+ };
140
+ }
141
+ //# sourceMappingURL=rothConversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rothConversion.js","sourceRoot":"","sources":["../../src/tools/rothConversion.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MCP tool wrapper for `dc.calculator.socialSecurity.estimate`.
2
+ * MCP tool wrapper for `dc.calculator.socialSecurity.estimatedBenefit`.
3
3
  *
4
4
  * Per ADR-0039 § 1: tool name is locked.
5
5
  * Per ADR-0039 § 2: Zod input schema with bounds from shared/bounds.ts.
@@ -15,8 +15,8 @@
15
15
  import { z } from "zod";
16
16
  import { type SocialSecurityEstimateResult } from "../engines/socialSecurity.js";
17
17
  import { type ToolResult, type ToolError } from "../envelope.js";
18
- /** Locked tool name per ADR-0039 § 1. */
19
- export declare const TOOL_NAME = "dc.calculator.socialSecurity.estimate";
18
+ /** Locked tool name per ADR-0039 § 1 (corrected v0.2.0 per ADR-0041 D2). */
19
+ export declare const TOOL_NAME = "dc.calculator.socialSecurity.estimatedBenefit";
20
20
  export declare const SocialSecurityEstimateInputSchema: z.ZodObject<{
21
21
  birthYear: z.ZodNumber;
22
22
  currentEarnings: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"socialSecurity.d.ts","sourceRoot":"","sources":["../../src/tools/socialSecurity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB,yCAAyC;AACzC,eAAO,MAAM,SAAS,0CAA0C,CAAC;AAOjE,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;EAsC5C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,iCAAiC,CACzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAMmC,CAAC;AAEjE;;GAEG;AACH,wBAAgB,OAAO,CACrB,QAAQ,EAAE,OAAO,GAEf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,4BAA4B,CAAC,CAAA;CAAE,GAC7D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAuDlC"}
1
+ {"version":3,"file":"socialSecurity.d.ts","sourceRoot":"","sources":["../../src/tools/socialSecurity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAExB,4EAA4E;AAC5E,eAAO,MAAM,SAAS,kDAAkD,CAAC;AAOzE,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;EAsC5C,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CACnD,OAAO,iCAAiC,CACzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAMmC,CAAC;AAEjE;;GAEG;AACH,wBAAgB,OAAO,CACrB,QAAQ,EAAE,OAAO,GAEf;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,4BAA4B,CAAC,CAAA;CAAE,GAC7D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAuDlC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * MCP tool wrapper for `dc.calculator.socialSecurity.estimate`.
2
+ * MCP tool wrapper for `dc.calculator.socialSecurity.estimatedBenefit`.
3
3
  *
4
4
  * Per ADR-0039 § 1: tool name is locked.
5
5
  * Per ADR-0039 § 2: Zod input schema with bounds from shared/bounds.ts.
@@ -17,8 +17,8 @@ import { estimate, ENGINE_VERSION, } from "../engines/socialSecurity.js";
17
17
  import { SOCIAL_SECURITY_BOUNDS } from "../shared/bounds.js";
18
18
  import { YMYL_DISCLAIMER } from "../disclaimers/ymyl.js";
19
19
  import { makeResult, makeError, } from "../envelope.js";
20
- /** Locked tool name per ADR-0039 § 1. */
21
- export const TOOL_NAME = "dc.calculator.socialSecurity.estimate";
20
+ /** Locked tool name per ADR-0039 § 1 (corrected v0.2.0 per ADR-0041 D2). */
21
+ export const TOOL_NAME = "dc.calculator.socialSecurity.estimatedBenefit";
22
22
  const METHODOLOGY = {
23
23
  url: "https://www.digitalcalculator.info/social-security-calculator/methodology/",
24
24
  version: "2026-05-09",
@@ -1 +1 @@
1
- {"version":3,"file":"socialSecurity.js","sourceRoot":"","sources":["../../src/tools/socialSecurity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,cAAc,GAEf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,SAAS,GAGV,MAAM,gBAAgB,CAAC;AAExB,yCAAyC;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAEjE,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,4EAA4E;IACjF,OAAO,EAAE,YAAY;CACtB,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,sBAAsB,CAAC,cAAc,CAAC;SAC1C,GAAG,CAAC,sBAAsB,CAAC,cAAc,CAAC;SAC1C,QAAQ,CACP,iGAAiG,CAClG;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,GAAG,CAAC,sBAAsB,CAAC,oBAAoB,CAAC;SAChD,GAAG,CAAC,sBAAsB,CAAC,oBAAoB,CAAC;SAChD,QAAQ,CAAC,uCAAuC,CAAC;IACpD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC;SACzC,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC;SACzC,QAAQ,CACP,6FAA6F,CAC9F;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;SAC5C,GAAG,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;SAC5C,QAAQ,EAAE;SACV,QAAQ,CACP,8EAA8E,CAC/E;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;SAC/C,GAAG,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;SAC/C,QAAQ,EAAE;SACV,QAAQ,CACP,6EAA6E,CAC9E;CACJ,CAAC,CAAC;AAMH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,wEAAwE;IACxE,2EAA2E;IAC3E,8DAA8D,CAAC;AAEjE;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,QAAiB;IAIjB,MAAM,MAAM,GAAG,iCAAiC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,gBAAgB;gBAC3C,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;gBACzC,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;IAE1B,IAAI,OAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,kDAAkD;gBAC3D,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC7C,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAChD,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,EACnD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,SAAS,CAAC;gBACf,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,sDAAsD;gBAC/D,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,UAAU,CAAC;YAChB,MAAM,EAAE,OAAO;YACf,WAAW,EAAE,WAAW;YACxB,aAAa,EAAE,cAAc;YAC7B,UAAU,EAAE,eAAe;SAC5B,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"socialSecurity.js","sourceRoot":"","sources":["../../src/tools/socialSecurity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@markcolabs/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
- "description": "Model Context Protocol server for digitalcalculator.info financial calculators. v0.1.0 ships 5 calculator tools (mortgage monthlyPayment, compound-interest futureValue, 401k projection, Social Security estimate, paycheck netPay). Per ADR-0039.",
5
+ "description": "Model Context Protocol server for digitalcalculator.info financial calculators. v0.3.0 ships 9 calculator tools (mortgage monthlyPayment, compound-interest futureValue, retirement401k projection, Social Security estimatedBenefit, paycheck netPay, IRA contributionLimit, Roth conversion taxImpact, RMD distributionAmount, HSA contributionLimit). Per ADR-0039 + ADR-0041 contract reconciliation.",
6
6
  "type": "module",
7
7
  "main": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
@@ -18,7 +18,9 @@
18
18
  },
19
19
  "files": [
20
20
  "dist",
21
- "README.md"
21
+ "README.md",
22
+ "LICENSE",
23
+ "LICENSE-API.md"
22
24
  ],
23
25
  "dependencies": {
24
26
  "@modelcontextprotocol/sdk": "^1.0.0",
@@ -35,19 +37,31 @@
35
37
  "keywords": [
36
38
  "mcp",
37
39
  "model-context-protocol",
40
+ "mcp-server",
41
+ "claude-mcp",
42
+ "anthropic",
38
43
  "financial-calculator",
39
44
  "mortgage",
40
45
  "compound-interest",
41
46
  "401k",
42
47
  "social-security",
43
48
  "paycheck",
44
- "digitalcalculator"
49
+ "ira",
50
+ "roth-conversion",
51
+ "rmd",
52
+ "hsa",
53
+ "digitalcalculator",
54
+ "digitalcalculator.info"
45
55
  ],
46
56
  "author": "Markcolabs LLC",
47
57
  "license": "MIT",
58
+ "homepage": "https://www.digitalcalculator.info/mcp/",
59
+ "bugs": {
60
+ "url": "https://github.com/mark57-ux/digitalcalculator/issues"
61
+ },
48
62
  "repository": {
49
63
  "type": "git",
50
- "url": "https://github.com/digitalcalculator/digitalcalculator.git",
64
+ "url": "https://github.com/mark57-ux/digitalcalculator.git",
51
65
  "directory": "packages/mcp"
52
66
  }
53
67
  }