Plan: what this MCP server does

Endpoint: https://mcp.kacperadler.pl/mcp (Streamable HTTP). Protocol revisions served: 2026-07-28 and 2025-11-25; the newer one is per-request and stateless, the older one is served statelessly for clients that still open with initialize. It is run by Kacper Adler.

Tools

Every tool declares an input schema and an output schema. Every successful result carries structuredContent that matches the output schema, plus a short text block for people (a summary, or for transcribe the transcript as [start] text lines). Failures come back as tool results with isError: true and a plain message naming the link or file and what is wrong.

ToolInputOutputWhat it does
memo_write{ text }{ id, created_at } Saves a note (up to 20,000 characters) and records which OAuth client wrote it.
memo_search{ query, limit? }{ notes: [{ id, text, created_at, client }] } Finds notes, newest first. Every word of the query must appear in the note (case-insensitive substring match). An empty query returns the newest notes. limit defaults to 20 (max 100). client is the OAuth client id that wrote the note. All approved clients see all notes.
upload{ filename, content_base64, content_type? }{ url, filename, content_type, size, sha256 } Stores a file (base64 content, at most 20 MB decoded) and returns a public link on this host, https://mcp.kacperadler.pl/files/<random id>/<name>. Anyone with the link can open it. Files are served with X-Content-Type-Options: nosniff and Content-Security-Policy: sandbox, so an uploaded page cannot run scripts on this host.
transcribe{ url }{ segments: [{ start, end, text }], language, duration } Downloads audio (or video) from a public http(s) URL (at most 50 MB, 60 s download), converts it with ffmpeg and transcribes it with whisper.cpp, model small, 8-bit, kept loaded (language detected automatically). start, end and duration are seconds, rounded to 0.1 s. A clock time the model writes with a dot after a word like "at" ("at 9.40") is written as "at 9:40". Links to private, loopback or link-local addresses are refused, also after redirects. Links to files uploaded here are read locally.

How sign-in works

  1. A request to /mcp without a token gets 401 with WWW-Authenticate: Bearer resource_metadata="https://mcp.kacperadler.pl/.well-known/oauth-protected-resource".
  2. The protected resource metadata names this host as the OAuth 2.1 authorization server (metadata).
  3. Clients identify themselves with a Client ID Metadata Document (an https client_id URL that this server fetches) or register with Dynamic Client Registration at /register.
  4. The client sends the owner to /authorize with PKCE (S256 only) and the resource https://mcp.kacperadler.pl/mcp. A consent page names the client, its client id and where it will send the owner back. The owner approves each client with his password, or denies it. Redirect URIs must match a registered one exactly.
  5. The client exchanges the code at /token with its PKCE verifier. Access tokens are opaque, bound to https://mcp.kacperadler.pl/mcp and last 1 hour. Refresh tokens last 30 days and rotate on every use; reusing an old one revokes the whole grant.

What data it keeps