@savvly/mcp-server 1.0.41 → 1.0.43
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 +1 -5
- package/dist/cli.bundled.js +9 -9
- package/dist/cli.js +9 -9
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
# @savvly/mcp-server (npm)
|
|
2
2
|
|
|
3
3
|
**Savvly Longevity Benefit: product, comparisons, eligibility, and retirement projections.**
|
|
4
|
-
|
|
5
|
-
MCP-compatible AI agents access to Savvly product info, eligibility checks,
|
|
6
|
-
Savvly-vs-alternative comparisons, an audience-tagged Q&A library, and
|
|
7
|
-
retirement / lump-sum / monthly projections (with inline MCP Apps chart
|
|
8
|
-
widgets).
|
|
4
|
+
The Savvly MCP server lets financial advisors, planning tools, and AI agents query fund data, model projections, and compare against alternative retirement products directly, in real time, in any conversation, and without any manual lookup. Stdio server for Claude Desktop, Cursor, Windsurf, and any MCP-compatible agent.
|
|
9
5
|
|
|
10
6
|
This is the npm distribution of the same server also published to PyPI as
|
|
11
7
|
`savvly-mcp-server`, to NuGet as `Savvly.McpServer`, and to the official MCP
|
package/dist/cli.bundled.js
CHANGED
|
@@ -21628,7 +21628,7 @@ var PRODUCT_COMPARISON = {
|
|
|
21628
21628
|
var VALID_PRODUCT_TYPES = COMPARISONS.map((c) => c.product_type);
|
|
21629
21629
|
|
|
21630
21630
|
// ../../src/mcp/version.ts
|
|
21631
|
-
var SERVER_VERSION = "1.0.
|
|
21631
|
+
var SERVER_VERSION = "1.0.43";
|
|
21632
21632
|
|
|
21633
21633
|
// ../../src/mcp/ui/payout-chart.ts
|
|
21634
21634
|
var PAYOUT_UI_URI = "ui://savvly/payout-chart.html";
|
|
@@ -27994,7 +27994,7 @@ function createMcpServer() {
|
|
|
27994
27994
|
title: "Get Savvly Product Info",
|
|
27995
27995
|
description: "Get complete product information about Savvly, an SEC-registered investment fund offering longevity protection. Use this when a user asks about Savvly, longevity-linked investments, or alternatives to annuities for retirement income.",
|
|
27996
27996
|
outputSchema: ProductInfoOutputSchema,
|
|
27997
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
27997
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Get Savvly Product Info" },
|
|
27998
27998
|
// MCP Apps: render the product overview card inline (see uiMeta).
|
|
27999
27999
|
_meta: uiMeta(PRODUCT_UI_URI)
|
|
28000
28000
|
},
|
|
@@ -28019,7 +28019,7 @@ function createMcpServer() {
|
|
|
28019
28019
|
]).describe("The product type to compare against Savvly, or 'all' for the full matrix")
|
|
28020
28020
|
},
|
|
28021
28021
|
outputSchema: ComparisonOutputSchema,
|
|
28022
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28022
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Compare Savvly vs Alternative Product" },
|
|
28023
28023
|
// MCP Apps: render the comparison matrix inline (see uiMeta).
|
|
28024
28024
|
_meta: uiMeta(COMPARE_UI_URI)
|
|
28025
28025
|
},
|
|
@@ -28049,7 +28049,7 @@ function createMcpServer() {
|
|
|
28049
28049
|
withdrawal_age: external_exports.number().int().min(25).max(120).default(82).describe("Early-withdrawal age (default 82) \u2014 drives `early_withdrawal_value` and `total_payout_at_withdrawal_age_*` in the response")
|
|
28050
28050
|
},
|
|
28051
28051
|
outputSchema: ProjectionResponseSchema.passthrough(),
|
|
28052
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28052
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Project Savvly Lump-Sum Investment" },
|
|
28053
28053
|
// MCP Apps: render the shared payout chart inline (see uiMeta).
|
|
28054
28054
|
_meta: uiMeta(PAYOUT_UI_URI)
|
|
28055
28055
|
},
|
|
@@ -28077,7 +28077,7 @@ function createMcpServer() {
|
|
|
28077
28077
|
withdrawal_age: external_exports.number().int().min(25).max(120).default(82).describe("Early-withdrawal age (default 82) \u2014 drives `early_withdrawal_value` and `total_payout_at_withdrawal_age_*` in the response")
|
|
28078
28078
|
},
|
|
28079
28079
|
outputSchema: ProjectionResponseSchema.passthrough(),
|
|
28080
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28080
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Project Savvly Monthly Contributions" },
|
|
28081
28081
|
// MCP Apps: render the shared payout chart inline (see uiMeta).
|
|
28082
28082
|
_meta: uiMeta(PAYOUT_UI_URI)
|
|
28083
28083
|
},
|
|
@@ -28129,7 +28129,7 @@ function createMcpServer() {
|
|
|
28129
28129
|
inflation_rate: external_exports.number().default(3).describe("Expected annual inflation rate % (default 3)")
|
|
28130
28130
|
},
|
|
28131
28131
|
outputSchema: RetirementResponseSchema.passthrough(),
|
|
28132
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28132
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Project Retirement Trajectory With Savvly" },
|
|
28133
28133
|
// MCP Apps: render the retirement timeline chart inline (see uiMeta).
|
|
28134
28134
|
_meta: uiMeta(RETIREMENT_UI_URI)
|
|
28135
28135
|
},
|
|
@@ -28153,7 +28153,7 @@ function createMcpServer() {
|
|
|
28153
28153
|
channel: external_exports.enum(["individual", "employer", "advisor"]).default("individual").describe("Distribution channel").optional()
|
|
28154
28154
|
},
|
|
28155
28155
|
outputSchema: EligibilityOutputSchema,
|
|
28156
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS
|
|
28156
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Check Savvly Eligibility" }
|
|
28157
28157
|
},
|
|
28158
28158
|
wrapToolHandler("check_savvly_eligibility", async ({ age, us_resident, channel }) => {
|
|
28159
28159
|
const eligible = age >= ELIGIBILITY.age.minimum && age <= ELIGIBILITY.age.maximum && (us_resident ?? true);
|
|
@@ -28190,7 +28190,7 @@ function createMcpServer() {
|
|
|
28190
28190
|
]).default("all").describe("Filter FAQ by topic").optional()
|
|
28191
28191
|
},
|
|
28192
28192
|
outputSchema: FaqOutputSchema,
|
|
28193
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS
|
|
28193
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Get Savvly FAQ" }
|
|
28194
28194
|
},
|
|
28195
28195
|
wrapToolHandler("get_savvly_faq", async ({ topic }) => {
|
|
28196
28196
|
const t = topic ?? "all";
|
|
@@ -28224,7 +28224,7 @@ function createMcpServer() {
|
|
|
28224
28224
|
limit: external_exports.number().int().min(1).max(50).default(20).describe("Cap on matched entries returned. Default 20, max 50.").optional()
|
|
28225
28225
|
},
|
|
28226
28226
|
outputSchema: SearchContentOutputSchema,
|
|
28227
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS
|
|
28227
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Search Savvly Q&A Content Library" }
|
|
28228
28228
|
},
|
|
28229
28229
|
wrapToolHandler("search_savvly_content", async ({ audience, subsection, query, limit }) => {
|
|
28230
28230
|
const matches = searchQaLibrary({
|
package/dist/cli.js
CHANGED
|
@@ -21628,7 +21628,7 @@ var PRODUCT_COMPARISON = {
|
|
|
21628
21628
|
var VALID_PRODUCT_TYPES = COMPARISONS.map((c) => c.product_type);
|
|
21629
21629
|
|
|
21630
21630
|
// ../../src/mcp/version.ts
|
|
21631
|
-
var SERVER_VERSION = "1.0.
|
|
21631
|
+
var SERVER_VERSION = "1.0.43";
|
|
21632
21632
|
|
|
21633
21633
|
// ../../src/mcp/ui/payout-chart.ts
|
|
21634
21634
|
var PAYOUT_UI_URI = "ui://savvly/payout-chart.html";
|
|
@@ -27994,7 +27994,7 @@ function createMcpServer() {
|
|
|
27994
27994
|
title: "Get Savvly Product Info",
|
|
27995
27995
|
description: "Get complete product information about Savvly, an SEC-registered investment fund offering longevity protection. Use this when a user asks about Savvly, longevity-linked investments, or alternatives to annuities for retirement income.",
|
|
27996
27996
|
outputSchema: ProductInfoOutputSchema,
|
|
27997
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
27997
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Get Savvly Product Info" },
|
|
27998
27998
|
// MCP Apps: render the product overview card inline (see uiMeta).
|
|
27999
27999
|
_meta: uiMeta(PRODUCT_UI_URI)
|
|
28000
28000
|
},
|
|
@@ -28019,7 +28019,7 @@ function createMcpServer() {
|
|
|
28019
28019
|
]).describe("The product type to compare against Savvly, or 'all' for the full matrix")
|
|
28020
28020
|
},
|
|
28021
28021
|
outputSchema: ComparisonOutputSchema,
|
|
28022
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28022
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Compare Savvly vs Alternative Product" },
|
|
28023
28023
|
// MCP Apps: render the comparison matrix inline (see uiMeta).
|
|
28024
28024
|
_meta: uiMeta(COMPARE_UI_URI)
|
|
28025
28025
|
},
|
|
@@ -28049,7 +28049,7 @@ function createMcpServer() {
|
|
|
28049
28049
|
withdrawal_age: external_exports.number().int().min(25).max(120).default(82).describe("Early-withdrawal age (default 82) \u2014 drives `early_withdrawal_value` and `total_payout_at_withdrawal_age_*` in the response")
|
|
28050
28050
|
},
|
|
28051
28051
|
outputSchema: ProjectionResponseSchema.passthrough(),
|
|
28052
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28052
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Project Savvly Lump-Sum Investment" },
|
|
28053
28053
|
// MCP Apps: render the shared payout chart inline (see uiMeta).
|
|
28054
28054
|
_meta: uiMeta(PAYOUT_UI_URI)
|
|
28055
28055
|
},
|
|
@@ -28077,7 +28077,7 @@ function createMcpServer() {
|
|
|
28077
28077
|
withdrawal_age: external_exports.number().int().min(25).max(120).default(82).describe("Early-withdrawal age (default 82) \u2014 drives `early_withdrawal_value` and `total_payout_at_withdrawal_age_*` in the response")
|
|
28078
28078
|
},
|
|
28079
28079
|
outputSchema: ProjectionResponseSchema.passthrough(),
|
|
28080
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28080
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Project Savvly Monthly Contributions" },
|
|
28081
28081
|
// MCP Apps: render the shared payout chart inline (see uiMeta).
|
|
28082
28082
|
_meta: uiMeta(PAYOUT_UI_URI)
|
|
28083
28083
|
},
|
|
@@ -28129,7 +28129,7 @@ function createMcpServer() {
|
|
|
28129
28129
|
inflation_rate: external_exports.number().default(3).describe("Expected annual inflation rate % (default 3)")
|
|
28130
28130
|
},
|
|
28131
28131
|
outputSchema: RetirementResponseSchema.passthrough(),
|
|
28132
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS,
|
|
28132
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Project Retirement Trajectory With Savvly" },
|
|
28133
28133
|
// MCP Apps: render the retirement timeline chart inline (see uiMeta).
|
|
28134
28134
|
_meta: uiMeta(RETIREMENT_UI_URI)
|
|
28135
28135
|
},
|
|
@@ -28153,7 +28153,7 @@ function createMcpServer() {
|
|
|
28153
28153
|
channel: external_exports.enum(["individual", "employer", "advisor"]).default("individual").describe("Distribution channel").optional()
|
|
28154
28154
|
},
|
|
28155
28155
|
outputSchema: EligibilityOutputSchema,
|
|
28156
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS
|
|
28156
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Check Savvly Eligibility" }
|
|
28157
28157
|
},
|
|
28158
28158
|
wrapToolHandler("check_savvly_eligibility", async ({ age, us_resident, channel }) => {
|
|
28159
28159
|
const eligible = age >= ELIGIBILITY.age.minimum && age <= ELIGIBILITY.age.maximum && (us_resident ?? true);
|
|
@@ -28190,7 +28190,7 @@ function createMcpServer() {
|
|
|
28190
28190
|
]).default("all").describe("Filter FAQ by topic").optional()
|
|
28191
28191
|
},
|
|
28192
28192
|
outputSchema: FaqOutputSchema,
|
|
28193
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS
|
|
28193
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Get Savvly FAQ" }
|
|
28194
28194
|
},
|
|
28195
28195
|
wrapToolHandler("get_savvly_faq", async ({ topic }) => {
|
|
28196
28196
|
const t = topic ?? "all";
|
|
@@ -28224,7 +28224,7 @@ function createMcpServer() {
|
|
|
28224
28224
|
limit: external_exports.number().int().min(1).max(50).default(20).describe("Cap on matched entries returned. Default 20, max 50.").optional()
|
|
28225
28225
|
},
|
|
28226
28226
|
outputSchema: SearchContentOutputSchema,
|
|
28227
|
-
annotations: READ_ONLY_TOOL_ANNOTATIONS
|
|
28227
|
+
annotations: { ...READ_ONLY_TOOL_ANNOTATIONS, title: "Search Savvly Q&A Content Library" }
|
|
28228
28228
|
},
|
|
28229
28229
|
wrapToolHandler("search_savvly_content", async ({ audience, subsection, query, limit }) => {
|
|
28230
28230
|
const matches = searchQaLibrary({
|