Koskamo

ServiceSchedule MCP

ServiceSchedule provides MCP tools for AI assistants to calculate car maintenance due dates, estimate costs, and generate seasonal checklists based on odometer readings and driving habits. It performs pure arithmetic on user-provided numbers without booking or inspecting vehicles.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

ServiceSchedule MCP logo, by MagicTeamsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by MagicTeams
MCP endpoint (Streamable HTTP)
https://service-schedule.magicteams.ai/mcp
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

4 of 4 have a description · 4 of 4 declare behavior hints · 4 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Determine which car maintenance services are due based on current odometer reading
  • Estimate typical US parts-and-labor price ranges for specific maintenance services
  • Project the next 12 months of driving and list which maintenance services fall due
  • Generate a preventive car checklist for a specific season and climate

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
service-schedule 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

ServiceSchedule plans car maintenance: which services are due, typical US cost ranges by shop tier, a month-by-month schedule and seasonal checklists. All maths only; nothing stored.

Tools

4 advertised

due_services — Due services
Advertised by the server during the last successful anonymous check.
Advertised read-only

Work out which car maintenance services (oil, tires, brakes, filters, coolant, plugs, transmission, battery) are due, due soon or ok from the current odometer and optional service history, and name the next one. Use to check what a car needs now. Do NOT use for prices (use service_cost_estimate) or a 12-month plan (use service_timeline).

due_services input schema
{
  "type": "object",
  "required": [
    "odometer"
  ],
  "properties": {
    "unit": {
      "enum": [
        "km",
        "mi"
      ],
      "type": "string",
      "description": "Unit of odometer and last_service odometer values: 'km' (default) or 'mi'"
    },
    "odometer": {
      "type": "number",
      "minimum": 0,
      "description": "Current odometer reading, non-negative, in the unit given by unit, e.g. 48000"
    },
    "km_per_month": {
      "type": "number",
      "maximum": 10000,
      "minimum": 100,
      "description": "Average distance driven per month in km (always km, 100-10000); adds a 'next due in about N months' hint"
    },
    "last_service": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "enum": [
              "oil_change",
              "tire_rotation",
              "brake_inspection",
              "air_filter",
              "cabin_filter",
              "coolant_service",
              "spark_plugs",
              "transmission_service",
              "battery_check"
            ],
            "type": "string",
            "description": "Service id, e.g. 'oil_change'"
          },
          "odometer": {
            "type": "number",
            "minimum": 0,
            "description": "Odometer when this service was last done, same unit as odometer and not above it"
          },
          "months_ago": {
            "type": "number",
            "minimum": 0,
            "description": "Months since this service was last done"
          }
        }
      },
      "description": "Optional per-service history, one entry per service id; items without an entry assume last service at odometer 0"
    },
    "months_since_last_oil": {
      "type": "number",
      "minimum": 0,
      "description": "Months since the last oil change; used as the time baseline for every item without its own history, default 0"
    }
  }
}
due_services output schema
{
  "type": "object",
  "required": [
    "odometer_km",
    "odometer_input",
    "services",
    "next_service",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Summary counts, baseline assumptions and caveats"
    },
    "services": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "status",
          "due_at_km",
          "km_left",
          "due_in_months",
          "months_left",
          "items"
        ],
        "properties": {
          "id": {
            "enum": [
              "oil_change",
              "tire_rotation",
              "brake_inspection",
              "air_filter",
              "cabin_filter",
              "coolant_service",
              "spark_plugs",
              "transmission_service",
              "battery_check"
            ],
            "type": "string",
            "description": "Service id"
          },
          "name": {
            "type": "string",
            "description": "Service name, e.g. 'Oil change'"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "What the service typically includes"
          },
          "status": {
            "enum": [
              "due",
              "soon",
              "ok"
            ],
            "type": "string",
            "description": "'due' (within 1000 km or 1 month, or overdue), 'soon' (within 3000 km or 3 months) or 'ok'"
          },
          "km_left": {
            "type": [
              "number",
              "null"
            ],
            "description": "Km until due (negative = overdue); null for time-only items"
          },
          "due_at_km": {
            "type": [
              "number",
              "null"
            ],
            "description": "Odometer (km) at which the service is due; null for time-only items such as battery_check"
          },
          "months_left": {
            "type": "number",
            "description": "Months left on the time interval (same as due_in_months)"
          },
          "due_in_months": {
            "type": "number",
            "description": "Months from now until due by time (negative = overdue)"
          }
        }
      },
      "description": "Status of every tracked maintenance service"
    },
    "odometer_km": {
      "type": "number",
      "description": "Current odometer converted to km (1 decimal)"
    },
    "next_service": {
      "type": "object",
      "required": [
        "id",
        "name",
        "status",
        "due_at_km",
        "km_left",
        "due_in_months",
        "months_left"
      ],
      "properties": {
        "id": {
          "enum": [
            "oil_change",
            "tire_rotation",
            "brake_inspection",
            "air_filter",
            "cabin_filter",
            "coolant_service",
            "spark_plugs",
            "transmission_service",
            "battery_check"
          ],
          "type": "string",
          "description": "Service id"
        },
        "name": {
          "type": "string",
          "description": "Service name, e.g. 'Oil change'"
        },
        "status": {
          "enum": [
            "due",
            "soon",
            "ok"
          ],
          "type": "string",
          "description": "'due' (within 1000 km or 1 month, or overdue), 'soon' (within 3000 km or 3 months) or 'ok'"
        },
        "km_left": {
          "type": [
            "number",
            "null"
          ],
          "description": "Km until due (negative = overdue); null for time-only items"
        },
        "due_at_km": {
          "type": [
            "number",
            "null"
          ],
          "description": "Odometer (km) at which the service is due; null for time-only items such as battery_check"
        },
        "months_left": {
          "type": "number",
          "description": "Months left on the time interval (same as due_in_months)"
        },
        "due_in_months": {
          "type": "number",
          "description": "Months from now until due by time (negative = overdue)"
        }
      },
      "description": "The most urgent service"
    },
    "odometer_input": {
      "type": "object",
      "required": [
        "value",
        "unit"
      ],
      "properties": {
        "unit": {
          "enum": [
            "km",
            "mi"
          ],
          "type": "string",
          "description": "Unit of the supplied value"
        },
        "value": {
          "type": "number",
          "description": "Odometer value as supplied"
        }
      },
      "description": "Odometer value and unit as supplied"
    }
  }
}
due_services annotations
{
  "title": "Due services",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
service_cost_estimate — Service cost estimate
Advertised by the server during the last successful anonymous check.
Advertised read-only

Estimate typical US parts-and-labor price ranges (USD) for a list of car maintenance services at an economy, mid or luxury shop, with low and high totals. Use when budgeting for known services. An estimate, not a quote. Do NOT use to find which services are due (use due_services).

service_cost_estimate input schema
{
  "type": "object",
  "required": [
    "services"
  ],
  "properties": {
    "tier": {
      "enum": [
        "economy",
        "mid",
        "luxury"
      ],
      "type": "string",
      "description": "Shop tier: 'economy' (x0.85), 'mid' (default) or 'luxury' (x1.6)"
    },
    "services": {
      "type": "array",
      "items": {
        "enum": [
          "oil_change",
          "tire_rotation",
          "brake_inspection",
          "air_filter",
          "cabin_filter",
          "coolant_service",
          "spark_plugs",
          "transmission_service",
          "battery_check"
        ],
        "type": "string"
      },
      "minItems": 1,
      "description": "Service ids to price (duplicates ignored), e.g. [\"oil_change\",\"brake_inspection\"]"
    }
  }
}
service_cost_estimate output schema
{
  "type": "object",
  "required": [
    "tier",
    "items",
    "total_low",
    "total_high",
    "note",
    "source_note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Summary of what was priced"
    },
    "tier": {
      "enum": [
        "economy",
        "mid",
        "luxury"
      ],
      "type": "string",
      "description": "Shop tier used for pricing"
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "low",
          "high"
        ],
        "properties": {
          "id": {
            "enum": [
              "oil_change",
              "tire_rotation",
              "brake_inspection",
              "air_filter",
              "cabin_filter",
              "coolant_service",
              "spark_plugs",
              "transmission_service",
              "battery_check"
            ],
            "type": "string",
            "description": "Service id"
          },
          "low": {
            "type": "number",
            "description": "Low end of the typical price, USD"
          },
          "high": {
            "type": "number",
            "description": "High end of the typical price, USD"
          },
          "name": {
            "type": "string",
            "description": "Service name"
          }
        }
      },
      "description": "Price range per service in USD"
    },
    "total_low": {
      "type": "number",
      "description": "Sum of low prices, USD"
    },
    "total_high": {
      "type": "number",
      "description": "Sum of high prices, USD"
    },
    "source_note": {
      "type": "string",
      "description": "Source and estimate-not-quote caveat"
    }
  }
}
service_cost_estimate annotations
{
  "title": "Service cost estimate",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
service_timeline — Service timeline
Advertised by the server during the last successful anonymous check.
Advertised read-only

Project the next 12 months of driving and list which maintenance services fall due in each month, from the odometer and monthly distance. Use when planning maintenance over the coming year. Do NOT use for what is due right now (use due_services) or prices (use service_cost_estimate).

service_timeline input schema
{
  "type": "object",
  "required": [
    "odometer",
    "km_per_month"
  ],
  "properties": {
    "unit": {
      "enum": [
        "km",
        "mi"
      ],
      "type": "string",
      "description": "Unit of the odometer value: 'km' (default) or 'mi'"
    },
    "odometer": {
      "type": "number",
      "minimum": 0,
      "description": "Current odometer reading, non-negative, in the unit given by unit, e.g. 48000"
    },
    "km_per_month": {
      "type": "number",
      "maximum": 10000,
      "minimum": 100,
      "description": "Average distance driven per month in km (always km, 100-10000), e.g. 1200"
    },
    "months_since_last_oil": {
      "type": "number",
      "minimum": 0,
      "description": "Months since the last oil change; time baseline for every service, default 0"
    }
  }
}
service_timeline output schema
{
  "type": "object",
  "required": [
    "months",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Assumptions behind the projection"
    },
    "months": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "month",
          "projected_km",
          "due"
        ],
        "properties": {
          "due": {
            "type": "array",
            "items": {
              "enum": [
                "oil_change",
                "tire_rotation",
                "brake_inspection",
                "air_filter",
                "cabin_filter",
                "coolant_service",
                "spark_plugs",
                "transmission_service",
                "battery_check"
              ],
              "type": "string"
            },
            "description": "Service ids due that month"
          },
          "month": {
            "type": "integer",
            "description": "Months from now, 1-12"
          },
          "projected_km": {
            "type": "number",
            "description": "Projected odometer in km at that month"
          }
        }
      },
      "description": "Twelve monthly entries, month 1 = next month"
    }
  }
}
service_timeline annotations
{
  "title": "Service timeline",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
seasonal_checklist — Seasonal checklist
Advertised by the server during the last successful anonymous check.
Advertised read-only

Generate a preventive car checklist for spring, summer, fall or winter, grouped by area (tires, battery, fluids, wipers and more) and tuned for a hot, cold or mixed climate. Use when getting a car ready for the season ahead. Do NOT use for mileage-based maintenance status (use due_services).

seasonal_checklist input schema
{
  "type": "object",
  "required": [
    "season"
  ],
  "properties": {
    "season": {
      "enum": [
        "spring",
        "summer",
        "fall",
        "winter"
      ],
      "type": "string",
      "description": "Season to prepare for"
    },
    "climate": {
      "enum": [
        "hot",
        "cold",
        "mixed"
      ],
      "type": "string",
      "description": "Local climate: 'hot', 'cold' or 'mixed' (default)"
    }
  }
}
seasonal_checklist output schema
{
  "type": "object",
  "required": [
    "season",
    "climate",
    "checklist",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string",
      "description": "Item count and preventive-only caveat"
    },
    "season": {
      "enum": [
        "spring",
        "summer",
        "fall",
        "winter"
      ],
      "type": "string",
      "description": "Season the checklist covers"
    },
    "climate": {
      "enum": [
        "hot",
        "cold",
        "mixed"
      ],
      "type": "string",
      "description": "Climate the checklist is tuned for"
    },
    "checklist": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "area",
          "items"
        ],
        "properties": {
          "area": {
            "type": "string",
            "description": "Area name, e.g. 'Tires'"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Checks for this area"
          }
        }
      },
      "description": "Checks grouped by area"
    }
  }
}
seasonal_checklist annotations
{
  "title": "Seasonal checklist",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
225 ms
95th percentile latency
225 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 225 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http serviceschedule-mcp https://service-schedule.magicteams.ai/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add serviceschedule-mcp --url https://service-schedule.magicteams.ai/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable serviceschedule-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "serviceschedule-mcp": {
      "url": "https://service-schedule.magicteams.ai/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "serviceschedule-mcp": {
      "type": "streamableHttp",
      "url": "https://service-schedule.magicteams.ai/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start serviceschedule-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "serviceschedule-mcp": {
      "type": "http",
      "url": "https://service-schedule.magicteams.ai/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http serviceschedule-mcp https://service-schedule.magicteams.ai/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://service-schedule.magicteams.ai/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "serviceschedule-mcp": {
      "serverUrl": "https://service-schedule.magicteams.ai/mcp"
    }
  }
}

Let your agent find its tools

Find servers like ServiceSchedule MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.