# Moltline Personal Suite

> 20 inbox, calendar, travel, meals and family-logistics skill products. 7 of 9 free.

- name: com.moltlinestudio/personal
- version: 1.2.0
- connection class: R0 (autonomous)
- trust: 84/100 flags: duplicate-repo
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Fpersonal
- tools: https://api.protogrid.dev/v1/servers/com.moltlinestudio%2Fpersonal/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "personal": {
      "type": "http",
      "url": "https://mcp.moltlinestudio.com/personal"
    }
  }
}
```


## Trust

- hygiene: 60
- liveness: 99
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-97% ~updated-42d-ago -duplicate-repo(22 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 9 of 9 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,715 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 9, about 2,715 tokens to load them all
- tool set hash: 91d9844d60bfb02bc6b83cef9073b492
- badge: [![protogrid quality](https://protogrid.dev/badge/com.moltlinestudio/personal.svg)](https://protogrid.dev/servers/com.moltlinestudio/personal)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.moltlinestudio.com/personal (streamable-http, auth none, reachable true, uptime30d 0.96581197)

## Packages

_none_

## Tools (9)

- `budget_split`: Split monthly income into needs/wants/savings buckets with weekly equivalents. FREE.

Defaults to the 50/30/20 rule, fully customizable. Typical input
{"monthly_income": 4000} returns {"needs": {"pct": 50, "monthly":
2000.0, "weekly": 461.54}, "wants": {...}, "savings": {...},
"note": "..."}.

Use when monthly income needs allocating across buckets. Not for how long
a 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.
- `countdown_days`: Count the days until each named event, soonest first. FREE.

Typical input {"events": {"Launch": "2026-10-01", "Trip":
"2026-09-05"}} returns {"today": "YYYY-MM-DD", "events": [{"event":
"Trip", "date": "2026-09-05", "days_away": 20}, ...]}; a bad date gets
a per-event error entry instead of failing the whole call.

Use to rank named dates by how soon they arrive. Not for working-day math,
which the timeops server's business_days handles, and not for building a
review 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.
- `get_free_skill`: Load a product's free gateway skill with its complete instructions. FREE.

Typical input {"slug": "inbox-assistant"} returns {"slug": ...,
"skill": "<skill name>", "instructions": "<full skill text>"}.

Returns exactly one skill - the product's free gateway skill - chosen
automatically from the slug, with no plan required. Use when the caller
wants usable instructions immediately. Not for the product's other skills:
those are named and need get_full_skill with a skill_name, which requires
a 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.
- `get_full_product`: Load one product in full: its persona plus every paid skill. PREMIUM (license).

Typical input {"slug": "inbox-assistant"} returns {"slug": ...,
"name": ..., "persona": "<persona text>", "skills": [{"name": ...,
"instructions": ...}, ...], "free_skill": {...}}.

Returns persona plus every skill for one product. Use when the caller
wants the whole product. Not for a single skill (get_full_skill) and not
for a free look, which list_products and get_free_skill provide with no
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>'"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
- `get_full_skill`: Load one paid skill's complete instructions from a product. PREMIUM (license).

Typical input {"slug": "inbox-assistant", "skill_name": "Zero Sweep"}
returns {"slug": ..., "skill": ..., "instructions": "<full skill
text>"}.

Returns one named skill, selected by skill_name. Use when the caller wants
one specific paid skill. Not for the free gateway skill, which
get_free_skill returns with no plan, and not for every skill at once
(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.
- `list_products`: List every product in the Personal Suite line with its included skills. FREE.

Takes no arguments. Returns a list of 20 product objects, each {"slug":
"inbox-assistant", "name": ..., "tagline": ..., "skills": ["Skill A",
...], "free_skill": "Gateway Skill Name"}. Use the returned slug values
with get_free_skill, get_full_product, or get_full_skill.

Returns metadata only - no persona text and no skill instructions. Use
when the caller wants to see what this server covers. Not for keyword
search across the whole 138-product catalog, which the catalog server's
search_catalog does, and not for instructions the caller can act on
(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.
- `savings_goal`: Compute months to reach a savings target at a monthly contribution. FREE.

Optionally compounds interest monthly. Administrative math only — not
financial advice. Typical input {"target": 10000, "monthly_saving":
400, "annual_rate_pct": 4} returns {"months": 24, "years": 2.0,
"final_balance": 10021.94, "interest_earned": 421.94, "note": "..."}.

Use when a target amount and a monthly contribution are known. Not for
allocating income across categories (budget_split) and not for loan
repayment, 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.
- `spaced_repetition_plan`: Build a spaced-repetition review schedule with expanding intervals. FREE.

Intervals follow 1, 3, 7, 14, 30, 60, 120, 240 days. Typical input
{"start_date": "2026-09-01", "sessions": 4} returns {"start":
"2026-09-01", "reviews": [{"session": 1, "day_offset": 1, "date":
"2026-09-02"}, ...]}.

Use when material must be reviewed on expanding intervals. Not for timing
a 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.
- `tip_split`: Compute the tip and per-person split for a bill. FREE.

Typical input {"bill": 86.40, "tip_pct": 20, "people": 4} returns
{"tip": 17.28, "total": 103.68, "per_person": 25.92}.

Use for one bill shared among a group. Not for recurring household
budgeting (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.
