Server definition
- Hash
- sha256:65d8011e3e92d7368425ed9edd02754e33b1203fddba71b0aa8f52f37d7f0dc4
- What it is
- What a remote MCP server returned when asked what it offers: 9 tools
The blob, as servednamed by its sha256
{
"instructions": "Moltline's Personal Suite: 20 personal-assistant persona-skill products (inbox, calendar, travel, meals, fitness admin, finance admin, family logistics and more). Free: list_products, get_free_skill, budget_split, spaced_repetition_plan. Premium: get_full_product, get_full_skill.",
"tools": [
{
"description": "Split monthly income into needs/wants/savings buckets with weekly equivalents. FREE.\n\nDefaults to the 50/30/20 rule, fully customizable. Typical input\n{\"monthly_income\": 4000} returns {\"needs\": {\"pct\": 50, \"monthly\":\n2000.0, \"weekly\": 461.54}, \"wants\": {...}, \"savings\": {...},\n\"note\": \"...\"}.\n\nUse when monthly income needs allocating across buckets. Not for how long\na target takes to reach (savings_goal). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"monthly_income must be > 0\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"monthly_income": {
"description": "Take-home monthly income; must be greater than 0.",
"exclusiveMinimum": 0,
"type": "number"
},
"needs_pct": {
"default": 50,
"description": "Percentage for needs; all three percentages must sum to\n100. Default 50.",
"type": "number"
},
"savings_pct": {
"default": 20,
"description": "Percentage for savings. Default 20.",
"type": "number"
},
"wants_pct": {
"default": 30,
"description": "Percentage for wants. Default 30.",
"type": "number"
}
},
"required": [
"monthly_income"
],
"type": "object"
},
"name": "budget_split",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Count the days until each named event, soonest first. FREE.\n\nTypical input {\"events\": {\"Launch\": \"2026-10-01\", \"Trip\":\n\"2026-09-05\"}} returns {\"today\": \"YYYY-MM-DD\", \"events\": [{\"event\":\n\"Trip\", \"date\": \"2026-09-05\", \"days_away\": 20}, ...]}; a bad date gets\na per-event error entry instead of failing the whole call.\n\nUse to rank named dates by how soon they arrive. Not for working-day math,\nwhich the timeops server's business_days handles, and not for building a\nreview schedule (spaced_repetition_plan). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"events": {
"additionalProperties": true,
"description": "Mapping of event name to ISO date YYYY-MM-DD, e.g.\n{\"Launch\": \"2026-10-01\"}. The first 30 events are used.",
"type": "object"
}
},
"required": [
"events"
],
"type": "object"
},
"name": "countdown_days",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load a product's free gateway skill with its complete instructions. FREE.\n\nTypical input {\"slug\": \"inbox-assistant\"} returns {\"slug\": ...,\n\"skill\": \"<skill name>\", \"instructions\": \"<full skill text>\"}.\n\nReturns exactly one skill - the product's free gateway skill - chosen\nautomatically from the slug, with no plan required. Use when the caller\nwants usable instructions immediately. Not for the product's other skills:\nthose are named and need get_full_skill with a skill_name, which requires\na paid plan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown slug '<value>'. Use list_products.\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Product slug exactly as returned by list_products,\ne.g. \"inbox-assistant\".",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_free_skill",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load one product in full: its persona plus every paid skill. PREMIUM (license).\n\nTypical input {\"slug\": \"inbox-assistant\"} returns {\"slug\": ...,\n\"name\": ..., \"persona\": \"<persona text>\", \"skills\": [{\"name\": ...,\n\"instructions\": ...}, ...], \"free_skill\": {...}}.\n\nReturns persona plus every skill for one product. Use when the caller\nwants the whole product. Not for a single skill (get_full_skill) and not\nfor a free look, which list_products and get_free_skill provide with no\nplan. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown slug '<value>'\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"slug": {
"description": "Product slug exactly as returned by list_products,\ne.g. \"inbox-assistant\".",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_full_product",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Load one paid skill's complete instructions from a product. PREMIUM (license).\n\nTypical input {\"slug\": \"inbox-assistant\", \"skill_name\": \"Zero Sweep\"}\nreturns {\"slug\": ..., \"skill\": ..., \"instructions\": \"<full skill\ntext>\"}.\n\nReturns one named skill, selected by skill_name. Use when the caller wants\none specific paid skill. Not for the free gateway skill, which\nget_free_skill returns with no plan, and not for every skill at once\n(get_full_product). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"unknown slug '<value>'\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"skill_name": {
"description": "Exact skill name as listed in that product's \"skills\"\narray from list_products.",
"type": "string"
},
"slug": {
"description": "Product slug exactly as returned by list_products.",
"type": "string"
}
},
"required": [
"slug",
"skill_name"
],
"type": "object"
},
"name": "get_full_skill",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "List every product in the Personal Suite line with its included skills. FREE.\n\nTakes no arguments. Returns a list of 20 product objects, each {\"slug\":\n\"inbox-assistant\", \"name\": ..., \"tagline\": ..., \"skills\": [\"Skill A\",\n...], \"free_skill\": \"Gateway Skill Name\"}. Use the returned slug values\nwith get_free_skill, get_full_product, or get_full_skill.\n\nReturns metadata only - no persona text and no skill instructions. Use\nwhen the caller wants to see what this server covers. Not for keyword\nsearch across the whole 138-product catalog, which the catalog server's\nsearch_catalog does, and not for instructions the caller can act on\n(get_free_skill). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_products",
"outputSchema": {
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
}
},
"required": [
"result"
],
"type": "object",
"x-fastmcp-wrap-result": true
}
},
{
"description": "Compute months to reach a savings target at a monthly contribution. FREE.\n\nOptionally compounds interest monthly. Administrative math only — not\nfinancial advice. Typical input {\"target\": 10000, \"monthly_saving\":\n400, \"annual_rate_pct\": 4} returns {\"months\": 24, \"years\": 2.0,\n\"final_balance\": 10021.94, \"interest_earned\": 421.94, \"note\": \"...\"}.\n\nUse when a target amount and a monthly contribution are known. Not for\nallocating income across categories (budget_split) and not for loan\nrepayment, which the business server's loan_payment computes. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"target and monthly_saving must be > 0\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"annual_rate_pct": {
"default": 0,
"description": "Annual interest rate percentage, 0 to 100,\ncompounded monthly. Default 0.",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"monthly_saving": {
"description": "Contribution per month; must be greater than 0.",
"exclusiveMinimum": 0,
"type": "number"
},
"target": {
"description": "The savings goal; must be greater than 0.",
"exclusiveMinimum": 0,
"type": "number"
}
},
"required": [
"target",
"monthly_saving"
],
"type": "object"
},
"name": "savings_goal",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Build a spaced-repetition review schedule with expanding intervals. FREE.\n\nIntervals follow 1, 3, 7, 14, 30, 60, 120, 240 days. Typical input\n{\"start_date\": \"2026-09-01\", \"sessions\": 4} returns {\"start\":\n\"2026-09-01\", \"reviews\": [{\"session\": 1, \"day_offset\": 1, \"date\":\n\"2026-09-02\"}, ...]}.\n\nUse when material must be reviewed on expanding intervals. Not for timing\na single session, which the educator server's lesson_timer handles. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"start_date must be YYYY-MM-DD\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"sessions": {
"default": 6,
"description": "Number of review sessions; values outside 1-8 are\nclamped. Default 6.",
"type": "integer"
},
"start_date": {
"description": "The day you learned the material, ISO YYYY-MM-DD.",
"type": "string"
}
},
"required": [
"start_date"
],
"type": "object"
},
"name": "spaced_repetition_plan",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Compute the tip and per-person split for a bill. FREE.\n\nTypical input {\"bill\": 86.40, \"tip_pct\": 20, \"people\": 4} returns\n{\"tip\": 17.28, \"total\": 103.68, \"per_person\": 25.92}.\n\nUse for one bill shared among a group. Not for recurring household\nbudgeting (budget_split). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {\"error\": \"<what is wrong and how to fix it>\"} (for example {\"error\": \"bill must be > 0 and people >= 1\"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"bill": {
"description": "The pre-tip bill amount; must be greater than 0.",
"exclusiveMinimum": 0,
"type": "number"
},
"people": {
"default": 1,
"description": "How many people split the total; at least 1. Default 1.",
"minimum": 1,
"type": "integer"
},
"tip_pct": {
"default": 18,
"description": "Tip percentage, 0 to 100. Default 18.",
"maximum": 100,
"minimum": 0,
"type": "number"
}
},
"required": [
"bill"
],
"type": "object"
},
"name": "tip_split",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:65d8011e3e92d7368425ed9edd02754e33b1203fddba71b0aa8f52f37d7f0dc4 | sha256sum