Koskamo

Sonatina Piano Camps MCP

An MCP server that allows AI assistants to retrieve Sonatina piano camp programs, dates, and tuition information. It facilitates enrollment by asking the user the necessary form questions and returning a pre-filled link to the official Sonatina enrollment form, without submitting data or charging fees.

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.

Sonatina Piano Camps MCP logo, by Sonatina Piano CampsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-02Published by Sonatina Piano Camps
MCP endpoint (Streamable HTTP)
https://www.sonatina.com/mcp
Vendor documentation

What its tools do

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

3 of 3 have a description · 3 of 3 declare behavior hints · 0 of 2 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

  • Retrieve upcoming camp dates and tuition fees
  • Identify required enrollment form fields
  • Generate a pre-filled enrollment form link

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
sonatina 0.1.0
MCP protocol negotiated in check
2025-06-18
Tools
3 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

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

Sonatina Piano Camps (Bennington, Vermont): adult camps (The Sonatas, Intermezzi, Capriccios & Suites), Summer Sonatina for children, and virtual courses. You can help someone enroll by interviewing them and handing back a prefilled enrollment form link. You cannot enroll anyone yourself. 1. get_catalog for programs, dates, tuition and policies. 2. get_enrollment_form for a program's upcoming weeks and the questions to ask. 3. Ask the person those questions in conversation. Only use what they tell you; never guess an answer. 4. build_enrollment_link. If it returns warnings (say, an email domain that looks misspelled, which voice dictation often causes), read those answers back and fix them with the person first. Then give them the link. The person must open the link themselves, check every answer, read and accept the waivers, choose and pay on the form, and submit. Never submit the form, accept terms or enter payment details for them, even if you can drive a browser. For Summer Sonatina the person must be the child's parent or guardian. Seat availability is not available here; it is on https://www.sonatina.com/enrollment.

Tools

3 advertised

get_catalog — Sonatina programs, dates, tuition and policies
Advertised by the server during the last successful anonymous check.
Advertised read-only

This year's programs with session dates and tuition, next year's under `nextYear` once its dates are posted, the online offerings, and the policy FAQ (payment deadlines, cancellations). Session dates carry no year: take it from `year` or `nextYear.year`. Some of this year's sessions may be over; get_enrollment_form lists only weeks still ahead. Read-only. No seat counts.

get_catalog input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {}
}
get_catalog annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
get_enrollment_form — A program's enrollment form: upcoming weeks and the questions to ask
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything needed to interview someone for one program's enrollment form: the upcoming weeks on the form (productId, dates, pay-in-full / deposit prices, whether enrollment is open), the questions you may prefill (key, what to ask, kind, choices, required), who must fill it in, and what they still have to do on the form themselves. Read-only. Programs: sonata = The Sonatas (adult week-long camps); intermezzo = The Intermezzi (adult long weekends); capriccio = The Capriccios & Suites (adult); sonatina = Summer Sonatina (children); virtual = Virtual courses and camps.

get_enrollment_form input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "program"
  ],
  "properties": {
    "program": {
      "enum": [
        "sonata",
        "intermezzo",
        "capriccio",
        "sonatina",
        "virtual"
      ],
      "type": "string"
    }
  }
}
get_enrollment_form annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
build_enrollment_link — Build a prefilled enrollment form link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Builds a link to the program's Jotform with the person's answers filled in and, if given, the week and the pay-in-full / deposit choice preselected. This does NOT enroll, reserve a seat or charge anything: the person must open the link, check the answers, accept the waivers, pay and submit on the form. Answers are not stored or logged. Use keys from get_enrollment_form; unknown keys and invalid answers are returned in `skipped`, required questions not yet answered in `missingRequired` (they can still answer them on the form), and answers to confirm with the person before handing over the link in `warnings`.

build_enrollment_link input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "program",
    "answers"
  ],
  "properties": {
    "answers": {
      "type": "object",
      "description": "Question key → answer. Addresses are objects; everything else is a string.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          }
        ]
      }
    },
    "program": {
      "enum": [
        "sonata",
        "intermezzo",
        "capriccio",
        "sonatina",
        "virtual"
      ],
      "type": "string"
    },
    "productId": {
      "type": "string",
      "description": "A week from get_enrollment_form. Omit to let them pick on the form."
    },
    "paymentOption": {
      "type": "string",
      "description": "One of the week's paymentOptions labels, e.g. 'Pay Deposit'."
    }
  }
}
build_enrollment_link annotations
{
  "readOnlyHint": true,
  "openWorldHint": 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-02: 2 of 2 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
326 ms
95th percentile latency
326 ms

Maintenance history

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

  • · probe · passed · 326 ms · metadata changed · 3 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 sonatina-piano-camps-mcp https://www.sonatina.com/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 sonatina-piano-camps-mcp --url https://www.sonatina.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable sonatina-piano-camps-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "sonatina-piano-camps-mcp": {
      "url": "https://www.sonatina.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "sonatina-piano-camps-mcp": {
      "type": "streamableHttp",
      "url": "https://www.sonatina.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start sonatina-piano-camps-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "sonatina-piano-camps-mcp": {
      "type": "http",
      "url": "https://www.sonatina.com/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 sonatina-piano-camps-mcp https://www.sonatina.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "sonatina-piano-camps-mcp": {
      "url": "https://www.sonatina.com/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": {
    "sonatina-piano-camps-mcp": {
      "serverUrl": "https://www.sonatina.com/mcp"
    }
  }
}

Let your agent find its tools

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