{"name":"com.moltlinestudio/personal","slug":"moltlinestudio-personal","title":"Moltline Personal Suite","description":"20 inbox, calendar, travel, meals and family-logistics skill products. 7 of 9 free.","url":"https://mcp.market/server/moltlinestudio-personal","rating":null,"grade":"A","score":87,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce","email","productivity","maps"],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-09-19T15:00:29.000Z","license":"MIT"},"uptime":{"percent":100,"checks":2,"ok":2,"last_checked_at":"2026-09-19T21:40:46.218Z","last_ok_at":"2026-09-19T21:40:46.218Z","latency_ms":116},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/GarphenGate/moltline-mcp","website":"https://moltlinestudio.com/servers.html#personal","version":"1.2.0","remotes":[{"type":"streamable-http","url":"https://mcp.moltlinestudio.com/personal"}],"packages":[],"tools":[{"name":"budget_split","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"monthly_income":{"exclusiveMinimum":0,"type":"number","description":"Take-home monthly income; must be greater than 0."},"needs_pct":{"default":50,"type":"number","description":"Percentage for needs; all three percentages must sum to\n100. Default 50."},"wants_pct":{"default":30,"type":"number","description":"Percentage for wants. Default 30."},"savings_pct":{"default":20,"type":"number","description":"Percentage for savings. Default 20."}},"required":["monthly_income"],"additionalProperties":false}},{"name":"countdown_days","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"events":{"additionalProperties":true,"type":"object","description":"Mapping of event name to ISO date YYYY-MM-DD, e.g.\n{\"Launch\": \"2026-10-01\"}. The first 30 events are used."}},"required":["events"],"additionalProperties":false}},{"name":"get_free_skill","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Product slug exactly as returned by list_products,\ne.g. \"inbox-assistant\"."}},"required":["slug"],"additionalProperties":false}},{"name":"get_full_product","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Product slug exactly as returned by list_products,\ne.g. \"inbox-assistant\"."}},"required":["slug"],"additionalProperties":false}},{"name":"get_full_skill","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Product slug exactly as returned by list_products."},"skill_name":{"type":"string","description":"Exact skill name as listed in that product's \"skills\"\narray from list_products."}},"required":["slug","skill_name"],"additionalProperties":false}},{"name":"list_products","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"savings_goal","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"target":{"exclusiveMinimum":0,"type":"number","description":"The savings goal; must be greater than 0."},"monthly_saving":{"exclusiveMinimum":0,"type":"number","description":"Contribution per month; must be greater than 0."},"annual_rate_pct":{"default":0,"maximum":100,"minimum":0,"type":"number","description":"Annual interest rate percentage, 0 to 100,\ncompounded monthly. Default 0."}},"required":["target","monthly_saving"],"additionalProperties":false}},{"name":"spaced_repetition_plan","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"start_date":{"type":"string","description":"The day you learned the material, ISO YYYY-MM-DD."},"sessions":{"default":6,"type":"integer","description":"Number of review sessions; values outside 1-8 are\nclamped. Default 6."}},"required":["start_date"],"additionalProperties":false}},{"name":"tip_split","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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"bill":{"exclusiveMinimum":0,"type":"number","description":"The pre-tip bill amount; must be greater than 0."},"tip_pct":{"default":18,"maximum":100,"minimum":0,"type":"number","description":"Tip percentage, 0 to 100. Default 18."},"people":{"default":1,"minimum":1,"type":"integer","description":"How many people split the total; at least 1. Default 1."}},"required":["bill"],"additionalProperties":false}}],"scan":{"score":87,"grade":"A","scanned_at":"2026-09-20T00:23:52.904Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:23:52.917Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 309ms"]},"poisoning":{"score":15,"max":15,"notes":["9 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":5,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.moltlinestudio.com/personal","reachable":true,"authRequired":false,"latencyMs":309,"serverInfo":{"name":"moltline-personal","version":"1.1.0"}}],"packages":[],"repo":{"found":true,"owner":"GarphenGate","repo":"moltline-mcp","archived":false,"pushedAt":"2026-09-19T15:00:29Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/316633241?v=4","ownerCreatedAt":"2026-08-13T15:17:26Z","license":"MIT"},"icon":{"url":"https://moltlinestudio.com/icon-192.png","source":"registry","width":192,"height":192},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-19T15:00:29.000Z","score":23}}}},"grade_history":[],"reviews":[]}