The bot supports Model Context Protocol (MCP) servers that extend Claude’s capabilities beyond basic file access and shell commands. Built-in MCP servers provide session control and user interaction, and you can add custom servers for Things, Notion, Typefully, and more.Documentation Index
Fetch the complete documentation index at: https://superturtle.dev/docs/llms.txt
Use this file to discover all available pages before exploring further.
Built-In MCP Servers
ask_user — Interactive Buttons
ask_user shows Telegram inline buttons in the active chat and pauses the turn so the user can pick an option.
Tool input shape:
questionis requiredoptionsis required- At least 2 options are required (schema allows up to 10; 2-6 is recommended)
- MCP server writes
/tmp/ask-user-<id>.jsonwithstatus: "pending"and the currentchat_id - The streaming handler scans
/tmp, sends❓ <question>with inline buttons, then marks the request assent - When the user taps a button, callback handling loads the same request file, validates the selected index, and deletes the file
- The selected option text is injected as the user’s next message, and the model continues from that choice
- Success:
[Buttons sent to user. STOP HERE - do not output any more text. Wait for user to tap a button.] - Invalid input: throws
question and at least 2 options required
bot_control — Session Management
bot_control is the bot’s control-plane tool. It handles usage checks, model/driver switching, session management, and process restart.
Tool input shape:
actionis requiredparamsis optional and depends on action
- MCP server writes a pending request file to
/tmp/bot-control-<id>.json - The streaming handler scans
/tmp, executes the action, then writes result back into the same file - MCP server polls every 100ms, up to 10 seconds, and returns the result text to Claude
- Request files are deleted after completion/error (best-effort cleanup)
| Action | Params | What it does | Returns |
|---|---|---|---|
usage | none | Fetches Claude usage and, when enabled, Codex quota | Usage text block, or failure message |
switch_model | model?: string, effort?: string | Updates current session model/effort | Updated model/effort summary, or validation error |
switch_driver | driver: "claude" | "codex" | Switches active driver and resets running driver sessions | "Switched to Codex" / "Switched to Claude Code", or error |
new_session | none | Stops and kills current session so next message starts fresh | "Session cleared. Next message will start a fresh session." |
list_sessions | none | Lists saved sessions with title/date/ID prefix | Numbered list, or "No saved sessions." |
resume_session | session_id: string | Resumes a saved session by full ID or prefix | Resumed: "...", or validation/failure message |
restart | none | Stops active driver sessions and exits process after a short delay | "Restarting bot..." |
usage
- Params: none
- Example call:
- Return:
USAGE DATA (show this to the user as-is, in a code block): ...orFailed to fetch usage data.
switch_model
- Params:
model(optional): model ID or display nameeffort(optional)
- Effort values:
- Claude driver:
low,medium,high - Codex driver:
minimal,low,medium,high,xhigh
- Claude driver:
- Example call:
- Return: current or updated model/effort summary, or an
Unknown model.../Invalid effort...message
switch_driver
- Params:
driverrequired (claudeorcodex) - Example call:
- Return:
- Success:
"Switched to Codex"or"Switched to Claude Code" - Validation:
Invalid driver "...". Use: claude or codex - Availability failure:
Cannot switch to Codex: ...if Codex is disabled/unavailable
- Success:
new_session
- Params: none
pino_logs — Pino Log Tail
pino_logs returns recent entries from the bot’s Pino log file with simple filters.
Tool input shape:
levelis the minimum severity (default:error)levels(optional) is an exact list of levels like["error","warn"](overrideslevel)limitcontrols how many entries to return (1-500)modulefilters bymodulefield (e.g.,claude,streaming,bot)
- MCP server writes
/tmp/pino-logs-<id>.jsonwithstatus: "pending"and the currentchat_id - The streaming handler scans
/tmp, tails the log file, filters entries, and writes the result back - MCP server polls every 100ms, up to 10 seconds, and returns the result text to Claude
- Example call:
- Return:
"Session cleared. Next message will start a fresh session."
list_sessions
- Params: none
- Example call:
- Return: numbered lines in the format
"<index>. "<title>" (<date>) — ID: <prefix>..."or"No saved sessions."
resume_session
- Params:
session_idrequired (full ID or prefix) - Example call:
- Return:
- Success:
Resumed: "<title>" - Errors:
Missing session_id parameter.,No session found matching "...", orFailed: ...
- Success:
restart
- Params: none
- Example call:
- Return:
"Restarting bot..."
send_turtle — Emoji Kitchen Turtle Stickers
send_turtle sends a turtle mashup sticker to the current Telegram chat. It combines 🐢 with another emoji using Google’s Emoji Kitchen images.
Tool input shape:
emojiis optional. It accepts either a Unicode emoji ("😍") or hex codepoint ("1f60d"). If omitted, it sends turtle + turtle.captionis optional text.
- MCP server resolves the emoji combo to a prebuilt Emoji Kitchen URL
- It writes
/tmp/send-turtle-<id>.json - The streaming handler sends the sticker to Telegram for the active chat
- If sticker upload fails, it falls back to sending the URL as a text message
- Success:
[Turtle sticker sent to chat: 🐢 + <emoji>] - Missing combo:
[No turtle combo found for emoji "..." (codepoint: ...). Try a different emoji ...]
Custom MCP Servers
Adding Your Own Tools
The bot loads MCP server definitions frommcp-config.ts. This file connects Claude to external tools like:
- Things 3 — Your to-do manager
- Notion — Your notes and databases
- Typefully — Social media scheduling
- Slack — Team communication
- GitHub — Repository management
- Stripe — Payment processing
- Custom tools you create
Setup: Create mcp-config.ts
Copy the example:mcp-config.ts is gitignored — keep it local. Store secrets in environment variables, not in the file.Server Configuration
Each MCP server config has:| Field | Type | Description |
|---|---|---|
command | string | Command to run (e.g., npx, python, /path/to/binary) |
args | string[] | Arguments passed to the command |
env | object | Environment variables (credentials, configs) |
timeout | number? | Timeout in ms (default: 5000) |
Popular MCP Servers
Things 3 (macOS)
Todo management via natural language:Notion
Query and update Notion databases:GitHub
Access repositories and pull requests:Slack
Send messages and query channels:Secrets Management
Never commit secrets to git. Use environment variables:mcp-config.ts:
Troubleshooting
MCP server not connecting?-
Check the bot logs:
-
Verify the command runs:
-
Check environment variables are set:
- Ensure
mcp-config.tsexists (not just the example) - Restart the bot after editing
mcp-config.ts - Ask Claude explicitly: “Use my Notion integration to…”
- Check
/statusto see which MCP servers loaded
- Increase the
timeoutin the config (default: 5000ms) - Check if the external service is responding
- Look at service logs for errors
Examples
Personal Assistant Setup
Connect your entire workflow:- Check your to-dos (Things)
- Query your notes (Notion)
- Review PRs (GitHub)
- Send team messages (Slack)
- All from your phone
Workflow Example
Next Steps
- Personal Assistant Guide — Full setup for using Claude as your assistant
- Security — How secrets are handled safely
- Environment Variables — Full config reference
