kel-mcp
kel-mcp 1.0.0 · a personal remote MCP server · endpoint https://mcp.qala.ovh/mcp
Tools
| Tool | Input | Result | What it does |
|---|---|---|---|
memo_write | { text } | { id } | Saves a text note exactly as given. |
memo_search | { query, limit? } | { notes: [{ id, text, created_at, client }] } | Finds notes containing every word of the query, case-insensitive, newest first. An empty query lists the newest notes. Default 20, at most 100. |
upload | { filename, content_base64 | text | source_url, content_type? } or { filename, staged: true } | { url } | Stores a file (up to 20 MB) and returns a public link on this host, https://mcp.qala.ovh/f/<id>/<name>. Anyone with the link can open it. For larger files (up to 90 MB), staged: true returns the link first: PUT the raw bytes to that link, once, within 15 minutes. HTML, SVG, XML and script files are served as downloads only. |
transcribe | { url, language? } | { segments: [{ start, end, text }], language?, duration? } | Fetches audio from a public http(s) URL or an upload link (up to 20 MB) and turns speech into text with Whisper large v3 turbo on Cloudflare Workers AI. start and end are seconds from the start of the audio. |
Every result is returned as structuredContent that matches the tool's declared output schema, with the same JSON in a text block. Errors come back as tool results with isError: true and a message saying what to change.
Protocol: MCP revision 2026-07-28 over Streamable HTTP (stateless, server/discover), and 2025-11-25 for older clients.
Sign-in
The server is an OAuth 2.1 protected resource, and it runs its own authorization server on the same host.
- Discovery: an unauthenticated call to
/mcpgets401withWWW-Authenticatepointing at the protected resource metadata,https://mcp.qala.ovh/.well-known/oauth-protected-resource/mcp. That names the authorization serverhttps://mcp.qala.ovh, whose metadata is athttps://mcp.qala.ovh/.well-known/oauth-authorization-server. - Clients register with a Client ID Metadata Document (an https
client_id) or with Dynamic Client Registration athttps://mcp.qala.ovh/register. - Authorization code flow with PKCE (S256) and the
resourceparameter. Tokens are bound tohttps://mcp.qala.ovh/mcp; the scope ismcp:tools. - Only the owner can let a client in: the consent page at
https://mcp.qala.ovh/authorizeshows the client's name and where access goes, and approves only with the owner's passphrase. Five wrong passphrases from one address block it for 15 minutes. - Access tokens last 1 hour. Refresh tokens last 30 days and rotate on use. Send the token as
Authorization: Beareron every request.
Data kept
- Notes: the text, when it was saved, and which client saved it, in a Cloudflare D1 database. Kept until the owner deletes them. Every client the owner lets in can read all notes.
- Files: the bytes, name, type, upload time and uploading client, in a Cloudflare R2 bucket. Public to anyone with the link. Kept until the owner deletes them.
- Audio for transcribe: fetched, sent to Workers AI, and not stored. The transcript is returned and not stored.
- Staged uploads: a pending upload (file name, type, client) in Cloudflare KV for at most 15 minutes, deleted when used.
- Sign-in: client registrations (90 days for dynamic ones), grants and tokens in Cloudflare KV. Tokens and codes are stored only as hashes. Failed passphrase counts per IP address, for 15 minutes.
- Logs: Cloudflare Workers request logs (time, path, status), kept by Cloudflare for a few days. Tokens and passphrases are never logged.
One owner, who runs this host. Runs on Cloudflare Workers.