{"name":"com.savvly/savvly","slug":"savvly","title":null,"description":"Savvly MCP: query fund data, model projections, and compare against alternative retirement products.","url":"https://mcp.market/server/savvly","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce","ai"],"presence":{"score":40,"stars":2,"forks":0,"downloads_week":349,"last_push_at":"2026-09-09T21:12:55.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-19T21:51:10.316Z","last_ok_at":"2026-09-19T21:51:10.316Z","latency_ms":421},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/Savvly/savvly-mcp","website":"https://savvly.com","version":"1.0.93","remotes":[{"type":"streamable-http","url":"https://api.savvly.com/mcp"}],"packages":[{"registryType":"npm","identifier":"@savvly/mcp-server","version":"1.0.93","runtimeHint":"npx","transport":{"type":"stdio"}},{"registryType":"pypi","identifier":"savvly-mcp-server","version":"1.0.93","runtimeHint":"uvx","transport":{"type":"stdio"}},{"registryType":"nuget","identifier":"Savvly.McpServer","version":"1.0.93","runtimeHint":"dnx","transport":{"type":"stdio"}},{"registryType":"oci","identifier":"ghcr.io/savvly/savvly-mcp-server:1.0.93","transport":{"type":"stdio"}},{"registryType":"mcpb","identifier":"https://github.com/Savvly/savvly-mcp/releases/download/v1.0.93/savvly-mcp-server.mcpb","fileSha256":"a8c60fca53ec1d4d35b40fadc2d5c86a136be1b3439330504e7b1564af33ebab","transport":{"type":"stdio"}}],"tools":[{"name":"check_savvly_eligibility","description":"Check if a person is eligible to invest in the Savvly Longevity Benefit. Eligibility is based on age (no minimum; maximum enrollment age 75), US residency, and distribution channel (individual, employer-sponsored, advisor-placed). Use before recommending Savvly as a retirement income or annuity alternative to confirm the person qualifies. These facts come from Savvly's own current records; the response includes primary sources (e.g. SEC filings) for reference.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"age":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Person's current age"},"us_resident":{"default":true,"description":"Whether the person is a US resident","type":"boolean"},"channel":{"description":"Distribution channel — one of 'individual', 'employer', 'advisor' (default 'individual').","default":"individual","type":"string","enum":["individual","employer","advisor"]}},"required":["age"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"compare_savvly_vs_alternative","description":"Get a structured comparison between Savvly and another retirement product type — use it whenever the user compares Savvly to annuities, target-date funds, managed-payout funds, or any alternative, or asks how Savvly stacks up. It renders an interactive comparison widget the user expects to see. Pass 'all' for the full matrix, or a specific product type. These facts come from Savvly's own current records; the response includes primary sources (e.g. SEC filings) for reference.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"alternative":{"description":"Which product type to compare Savvly against. Use EXACTLY one of: 'fixed_annuity', 'variable_annuity', 'indexed_annuity', 'target_date_fund', 'managed_payout_fund', or 'all' for the full matrix. Pick a SPECIFIC annuity subtype — there is no generic 'annuity'.","default":"all","type":"string","enum":["fixed_annuity","variable_annuity","indexed_annuity","target_date_fund","managed_payout_fund","all"]}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_savvly_faq","description":"Get answers to frequently asked questions about Savvly. Use when the user has specific questions about how Savvly works, expenses, withdrawals, or regulatory status. It is a convenience view of `search_savvly_content` scoped to the factual FAQ; for richer, audience-specific Q&As (employee / advisor / broker / employer), use `search_savvly_content` instead. These facts come from Savvly's own current records; the response includes primary sources (e.g. SEC filings) for reference.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"section":{"description":"Filter the FAQ to one section (kebab-case, e.g. 'tax-legacy'); 'all' returns every entry.","default":"all","type":"string","enum":["all","understanding-savvly","investment-custody","payouts","withdrawals-estate","expenses-cost","tax-legacy","employer-portability","safety-regulatory"]}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_savvly_product_info","description":"Get complete product information about Savvly, an SEC-registered security offering longevity protection — use it whenever the user asks what Savvly is, how it works, its expenses, eligibility, or payouts, or wants an overview. Pass `section` to focus the answer (default 'all'). It renders an interactive product overview card the user expects to see. These facts come from Savvly's own current records; the response includes primary sources (e.g. SEC filings) for reference.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"section":{"description":"Which part of the product profile to focus the text on — one of 'all', 'overview', 'regulatory', 'investment', 'expenses', 'payouts', 'tax', 'distribution' (default 'all'). The full overview card always renders regardless.","default":"all","type":"string","enum":["all","overview","regulatory","investment","expenses","payouts","tax","distribution"]}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"project_retirement_with_savvly","description":"Full retirement simulation showing the projected savings trajectory WITH and WITHOUT a Savvly allocation across the planning horizon (current_age → life_expectancy). Requires current_age ≤ retirement_age ≤ life_expectancy. Returns `gap_score`, `possible_higher_monthly_paycheck`, a server-provided headline message, and a per-year `age_dependent_values[]` timeline. Disclaimers + per-field hints under `metadata`. DISCLOSURE REQUIRED: display `disclosure.text` verbatim and link `disclosure.url` to the user alongside any figures from this response. Required by SEC Marketing Rule and FINRA Rule 2210 — do not paraphrase or omit. VISUALIZATION: this tool emits an interactive chart widget (MCP Apps — see `_meta.ui`) that the HOST renders inline and editable; other clients render only your text and show no chart. That widget is the canonical chart for these numbers: do NOT draw, generate, or re-render a duplicate of it. You MAY still create your OWN, DIFFERENT visualization (e.g. a table or an alternate breakdown) and place it wherever you judge best — only the MCP App widget's position is constrained. Do NOT claim or imply a chart is visible (avoid 'the chart above shows…'); you cannot tell whether the host rendered the widget. Summarize the key figures in prose and show the `disclosure` text and link, and reference the widget only conditionally (e.g. 'if your client shows the interactive chart, its fields are editable to re-run the projection'). ORDER: BEFORE you call this tool, ALWAYS write at least one short lead-in paragraph (1-3 sentences) framing what the projection will show — do NOT invent specific figures you do not have yet. On hosts that render the widget inline at the tool call, this keeps your text ahead of the chart so the widget is never the first thing shown; THEN call the tool (this lead-in is framing, NOT asking the user for inputs — still call it in the same turn without waiting) and give the grounded figures + disclosure after it returns. This lead-in rule applies to the MCP App widget only; any visualization you create yourself may appear wherever you judge best. INPUTS: every parameter is OPTIONAL and defaults to a sensible value. Call this tool IMMEDIATELY — pass only the values the user explicitly stated and omit the rest. Do NOT ask the user for starting values, assumptions, or missing parameters before calling; the rendered widget has editable fields so they adjust age, amounts, and other assumptions inline after it appears.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"current_age":{"default":40,"description":"Current age (default 40)","type":"integer","minimum":18,"maximum":75},"retirement_age":{"default":68,"description":"Planned retirement age (default 68)","type":"integer","minimum":50,"maximum":80},"life_expectancy":{"default":100,"description":"Planning horizon (default 100)","type":"integer","minimum":60,"maximum":120},"monthly_contribution":{"default":1000,"description":"Monthly retirement contribution in USD (default 1000)","type":"number","minimum":0},"current_retirement_savings":{"default":60000,"description":"Current total retirement savings in USD (default 60000)","type":"number","minimum":0},"monthly_paycheck":{"default":4500,"description":"Desired monthly retirement paycheck in USD (default 4500)","type":"number","minimum":0},"other_retirement_income":{"default":1600,"description":"Other monthly retirement income in USD (default 1600)","type":"number","minimum":0},"annual_income_increase":{"default":2,"description":"Annual contribution % increase (default 2)","type":"number","minimum":0,"maximum":20},"percentage_in_savvly":{"default":5,"description":"Percentage of the retirement portfolio allocated to Savvly (default 5)","type":"number","minimum":0,"maximum":50},"pre_retirement_return":{"default":6,"description":"Expected pre-retirement annual return % (default 6)","type":"number"},"post_retirement_return":{"default":5,"description":"Expected post-retirement annual return % (default 5)","type":"number"},"inflation_rate":{"default":3,"description":"Expected annual inflation rate % (default 3)","type":"number"}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"project_savvly_lumpsum","description":"Retirement projection for a lump-sum investment in the Savvly Longevity Benefit. Returns payout amounts at each milestone age (80, 85, 90, 95) with Savvly vs market alone cumulative totals, per-age breakdowns, and server-provided `_lower`/`_upper` range bounds. Use `_upper` as the central illustrative estimate and `_lower` to communicate downside. Suitable for retirement income planning, annuity alternative analysis, and longevity benefit illustration. Response embeds SEC-style disclaimers and per-field interpretation hints under `metadata`. Payout methodology — Savvly vs market alone: the payout values are calculated by comparing two investors of the same age committing the same principal. Investor 1 invests in the market with the Savvly Longevity Benefit; Investor 2 invests in the market alone (no longevity overlay). To make the comparison apples-to-apples, at each milestone age (80, 85, 90, 95) Investor 2 withdraws from their market alone portfolio the same dollar amount Investor 1 receives as a payout from Savvly. The `payout_market_alone_*` and `total_market_alone_*` figures are therefore what Investor 2 can actually withdraw to match Savvly's payouts before running out — they fall to 0 once the market alone portfolio is depleted. The `savvly_upside_*` (and `total_savvly_upside_*`) fields quantify how much more total money Investor 1 receives in payouts from Savvly than Investor 2 is able to withdraw over time to match those payouts. DISCLOSURE REQUIRED: display `disclosure.text` verbatim and link `disclosure.url` to the user alongside any figures from this response. Required by SEC Marketing Rule and FINRA Rule 2210 — do not paraphrase or omit. VISUALIZATION: this tool emits an interactive chart widget (MCP Apps — see `_meta.ui`) that the HOST renders inline and editable; other clients render only your text and show no chart. That widget is the canonical chart for these numbers: do NOT draw, generate, or re-render a duplicate of it. You MAY still create your OWN, DIFFERENT visualization (e.g. a table or an alternate breakdown) and place it wherever you judge best — only the MCP App widget's position is constrained. Do NOT claim or imply a chart is visible (avoid 'the chart above shows…'); you cannot tell whether the host rendered the widget. Summarize the key figures in prose and show the `disclosure` text and link, and reference the widget only conditionally (e.g. 'if your client shows the interactive chart, its fields are editable to re-run the projection'). ORDER: BEFORE you call this tool, ALWAYS write at least one short lead-in paragraph (1-3 sentences) framing what the projection will show — do NOT invent specific figures you do not have yet. On hosts that render the widget inline at the tool call, this keeps your text ahead of the chart so the widget is never the first thing shown; THEN call the tool (this lead-in is framing, NOT asking the user for inputs — still call it in the same turn without waiting) and give the grounded figures + disclosure after it returns. This lead-in rule applies to the MCP App widget only; any visualization you create yourself may appear wherever you judge best. INPUTS: every parameter is OPTIONAL and defaults to a sensible value. Call this tool IMMEDIATELY — pass only the values the user explicitly stated and omit the rest. Do NOT ask the user for starting values, assumptions, or missing parameters before calling; the rendered widget has editable fields so they adjust age, amounts, and other assumptions inline after it appears.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"current_age":{"default":40,"description":"Investor's current age (default 40). Min 18 (the projection matrix floor); max 75 (max enrollment age)","type":"integer","minimum":18,"maximum":75},"funding_amount":{"default":10000,"description":"Lump sum investment in USD (default 10000)","type":"number","minimum":100},"average_return":{"default":8,"description":"Expected average annual S&P 500 return % (default 8)","type":"integer","minimum":1,"maximum":15},"withdrawal_age":{"default":82,"description":"Early-withdrawal age (default 82) — drives `early_withdrawal_value` and `total_payout_at_withdrawal_age_*` in the response","type":"integer","minimum":18,"maximum":120}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"project_savvly_monthly","description":"Retirement projection for monthly contributions to the Savvly Longevity Benefit over a number of years. Returns payout amounts at milestone ages 80/85/90/95 with Savvly vs market alone cumulative totals, per-age breakdowns, and server-provided `_lower`/`_upper` range bounds. Use `_upper` as the central illustrative estimate and `_lower` to communicate downside. Suitable for retirement savings planning, annuity alternative comparison, and longevity benefit illustration. Supports an optional annual contribution increase and an optional early-withdrawal age. Contributions must finish by age 80: an omitted `contribution_years` auto-fits this, and an explicit one must satisfy `current_age + contribution_years` ≤ 80. Disclaimers + per-field hints under `metadata`. Payout methodology — Savvly vs market alone: the payout values are calculated by comparing two investors of the same age committing the same principal. Investor 1 invests in the market with the Savvly Longevity Benefit; Investor 2 invests in the market alone (no longevity overlay). To make the comparison apples-to-apples, at each milestone age (80, 85, 90, 95) Investor 2 withdraws from their market alone portfolio the same dollar amount Investor 1 receives as a payout from Savvly. The `payout_market_alone_*` and `total_market_alone_*` figures are therefore what Investor 2 can actually withdraw to match Savvly's payouts before running out — they fall to 0 once the market alone portfolio is depleted. The `savvly_upside_*` (and `total_savvly_upside_*`) fields quantify how much more total money Investor 1 receives in payouts from Savvly than Investor 2 is able to withdraw over time to match those payouts. DISCLOSURE REQUIRED: display `disclosure.text` verbatim and link `disclosure.url` to the user alongside any figures from this response. Required by SEC Marketing Rule and FINRA Rule 2210 — do not paraphrase or omit. VISUALIZATION: this tool emits an interactive chart widget (MCP Apps — see `_meta.ui`) that the HOST renders inline and editable; other clients render only your text and show no chart. That widget is the canonical chart for these numbers: do NOT draw, generate, or re-render a duplicate of it. You MAY still create your OWN, DIFFERENT visualization (e.g. a table or an alternate breakdown) and place it wherever you judge best — only the MCP App widget's position is constrained. Do NOT claim or imply a chart is visible (avoid 'the chart above shows…'); you cannot tell whether the host rendered the widget. Summarize the key figures in prose and show the `disclosure` text and link, and reference the widget only conditionally (e.g. 'if your client shows the interactive chart, its fields are editable to re-run the projection'). ORDER: BEFORE you call this tool, ALWAYS write at least one short lead-in paragraph (1-3 sentences) framing what the projection will show — do NOT invent specific figures you do not have yet. On hosts that render the widget inline at the tool call, this keeps your text ahead of the chart so the widget is never the first thing shown; THEN call the tool (this lead-in is framing, NOT asking the user for inputs — still call it in the same turn without waiting) and give the grounded figures + disclosure after it returns. This lead-in rule applies to the MCP App widget only; any visualization you create yourself may appear wherever you judge best. INPUTS: every parameter is OPTIONAL and defaults to a sensible value. Call this tool IMMEDIATELY — pass only the values the user explicitly stated and omit the rest. Do NOT ask the user for starting values, assumptions, or missing parameters before calling; the rendered widget has editable fields so they adjust age, amounts, and other assumptions inline after it appears.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"current_age":{"default":40,"description":"Investor's current age (default 40). Min 18 (the projection matrix floor); max 75 (max enrollment age)","type":"integer","minimum":18,"maximum":75},"monthly_amount":{"default":100,"description":"Monthly deposit in USD (default 100)","type":"number","minimum":10},"contribution_years":{"type":"integer","minimum":1,"maximum":55,"description":"Number of years contributing. Omit to use a sensible default of min(27, 80 − current_age) — 27 for the canonical age-40 scenario, and always small enough that contributions finish by age 80 (the advisor limit). If you pass an explicit value, current_age + contribution_years must be ≤ 80."},"average_return":{"default":8,"description":"Expected average annual S&P 500 return % (default 8)","type":"integer","minimum":1,"maximum":15},"installment_increase_percentage":{"type":"number","minimum":0,"maximum":20,"description":"Optional annual % increase applied to monthly contributions"},"withdrawal_age":{"default":82,"description":"Early-withdrawal age (default 82) — drives `early_withdrawal_value` and `total_payout_at_withdrawal_age_*` in the response","type":"integer","minimum":18,"maximum":120}},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"search_savvly_content","description":"Search the Savvly Q&A Content Library — audience-tagged questions and answers compiled from Savvly's marketing collateral plus the factual FAQ, organized by stakeholder (employee, advisor, broker, employer, universal, general) and section (kebab-case slugs, e.g. 'tax-legacy', 'retention-talent-strategy', 'implementation'). Use this when the user asks about Savvly's positioning, value props, audience-specific talking points, or Q&A-style messaging. Each entry carries the verbatim answer plus any disclaimer footnotes attached to it in the source. These facts come from Savvly's own current records; the response includes primary sources (e.g. SEC filings) for reference.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"audience":{"description":"Restrict to one stakeholder audience. Use EXACTLY one of: 'employee', 'advisor', 'broker', 'employer', 'universal', or 'general' ('general' is the factual FAQ). Omit to search across all audiences.","type":"string","enum":["employee","advisor","broker","employer","universal","general"]},"section":{"type":"string","description":"Substring match against section slugs (e.g. 'tax', 'retention', 'eligibility'). Case-insensitive."},"query":{"type":"string","description":"Free-text search over questions, answers, and footnotes (case-insensitive). Multi-word queries match entries containing ANY of the words, ranked by relevance."},"limit":{"default":20,"description":"Cap on matched entries returned. Default 20, max 50.","type":"integer","minimum":1,"maximum":50}},"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-19T19:15:24.343Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:15:24.491Z","components":{"code":{"score":20,"max":25,"notes":["3 source files scanned","16 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 691ms"]},"poisoning":{"score":13,"max":15,"notes":["8 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 10 days ago"]},"identity":{"score":10,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/cli.bundled.js: …ourceCode, sch); const validate = new Function(`${names_1.default.self}`, `${names_1.de…"},{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool project_savvly_lumpsum: …Retirement projection for a lump-sum investment in the Savvly Longevity Benefit. Returns payout amounts at each milestone age (80, 85, 90, 95) with Savvly vs market alone cumulative totals, per-age breakdowns, and server-provided `_lower`/`_upper` range bounds. Use `_upper` as the central illustrative estimate and `_lower` to communicate downside. Suitable for retirement income planning, annuity alternative analysis, and longevity benefit illustration. Response embeds SEC-style disclaimers and per-field interpretation hints under `metadata`. Payout methodology — Savvly vs market alone: the payout values are calculated by comparing two investors of the same age committing the same principal. Investor 1 invests in the market with the Savvly Longevity Benefit; Investor 2 invests in the market alone (no longevity overlay). To make the comparison apples-to-apples, at each milestone age (80, 85, 90, 95) Investor 2 withdraws from their market alone portfolio the same dollar amount Investor 1 receives as a payout from Savvly. The `payout_market_alone_*` and `total_market_alone_*` figures are therefore what Investor 2 can actually withdraw to match Savvly's payouts before running out — they fall to 0 once the market alone portfolio is depleted. The `savvly_upside_*` (and `total_savvly_upside_*`) fields quantify how much more total money Investor 1 receives in payouts from Savvly than Investor 2 is able to withdraw over time to match those payouts. DISCLOSURE REQUIRED: display `disclosure.text` verbatim and link `disclosure.url` to the user alongside any figures from this response. Required by SEC Marketing Rule and FINRA Rule 2210 — do not paraphrase or omit. VISUALIZATION: this tool emits an interactive chart widget (MCP Apps — see `_meta.ui`) that the HOST renders inline and editable; other clients render only your text and show no chart. That widget is the canonical chart for these numbers: do NOT draw, generate, or re-render a duplicate of it. You MAY still create your OWN, DIFFERENT visualization (e.g. a table or an alternate breakdown) and place it wherever you judge best — only the MCP App widget's position is constrained. Do NOT claim or imply a chart is visible (avoid 'the chart above shows…'); you cannot tell whether the host rendered the widget. Summarize the key figures in prose and show the `disclosure` text and link, and reference the widget only conditionally (e.g. 'if your client shows the interactive chart, its fields are editable to re-run the projection'). ORDER: BEFORE you call this tool, ALWAYS write at least one short lead-in paragraph (1-3 sentences) framing what the projection will show — do NOT invent specific figures you do not have yet. On hosts that render the widget inline at the tool call, this keeps your text ahead of the chart so the widget is never the first thing shown; THEN call the tool (this lead-in is framing, NOT asking the user for inputs — still call it in the same turn without waiting) and give the grounded figures + disclosure after it returns. This lead-in rule applies to the MCP App widget only; any visualization you create yourself may appear wherever you judge best. INPUTS: every parameter is OPTIONAL and defaults to a sensible value. Call this tool IMMEDIATELY — pass only the values the user explicitly stated and omit the rest. Do NOT ask the user for starting values, assumptions, or missing parameters before calling; the rendered widget has editable fields so they adjust age, amounts, and other assumptions inline after it appears.…"}],"inputs":{"probes":[{"url":"https://api.savvly.com/mcp","reachable":true,"authRequired":false,"latencyMs":691,"serverInfo":{"name":"savvly","version":"1.0.93"}}],"packages":[{"registryType":"npm","identifier":"@savvly/mcp-server","version":"1.0.93","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-09-09T21:12:14.352Z","repositoryUrl":"git+https://github.com/Savvly/savvly-mcp.git","weeklyDownloads":199},{"registryType":"pypi","identifier":"savvly-mcp-server","version":"1.0.93","found":true,"weeklyDownloads":150,"license":"Apache-2.0","dependencyCount":3,"publishedAt":"2026-09-09T21:12:28.380018Z","repositoryUrl":"https://github.com/Savvly/savvly-mcp"}],"repo":{"found":true,"owner":"Savvly","repo":"savvly-mcp","archived":false,"pushedAt":"2026-09-09T21:12:55Z","stars":2,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/98651102?v=4","ownerCreatedAt":"2022-01-29T14:02:52Z","license":"Apache-2.0"},"icon":{"url":"https://cdn.prod.website-files.com/65083a5e7eff201d6747238f/65205d7b2ae82b97e42d974b_63a0da60f7c6154f6c81312d_Savvly%20S%20-%20Black%20svg%20(1).svg","source":"site"},"presence":{"stars":2,"forks":0,"downloadsWeek":349,"license":"Apache-2.0","lastPushAt":"2026-09-09T21:12:55.000Z","score":40}}}},"grade_history":[],"reviews":[]}