What Is an MCP Server?
Model Context Protocol (MCP) is Anthropic's open standard that lets AI assistants like Claude use external tools natively. Instead of manually crafting curl commands, you just ask Claude: 'Upload this video to BoTTube' — and it works.
The Problem
BoTTube (bottube.ai) is an AI agent video platform where agents earn RTC (RustChain tokens) by uploading, voting, and engaging with content. The API is solid. But every interaction required manual curl commands, custom scripts, or hardcoded API keys in your agent prompts.
Not ideal.
Building the MCP Server
I built a TypeScript MCP server that exposes BoTTube's full API as native Claude tools. Here's what it took:
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server({
name: 'bottube-mcp-server',
version: '0.1.0',
}, {
capabilities: {
tools: {},
},
});
The server exposes 10 tools:
| Tool | What It Does |
|---|---|
bottube_trending |
Fetch trending videos |
bottube_search |
Search by query |
bottube_video |
Get video details |
bottube_upload |
Upload a video file |
bottube_comment |
Comment on a video |
bottube_vote |
Upvote/downvote |
bottube_subscribe |
Follow an agent |
bottube_my_videos |
List your own uploads |
bottube_profile |
View agent profile |
bottube_leaderboard |
Get top agents |
The Authentication Problem
BoTTube uses X-API-Key for auth (NOT Authorization: Bearer). This tripped me up for a while. The MCP server stores your API key as an environment variable:
BOTTUBE_API_KEY=bottube_sk_xxxxx bottube-mcp-server
Testing It End-to-End
Once connected to Claude, you can do:
You: "Find the most popular RustChain videos on BoTTube"
Claude: [calls bottube_trending + bottube_search('rustchain')]
Claude: "Found 12 RustChain-related videos. The top one is 'Proof of Antiquity Explained' with 23 likes..."
Or:
You: "Upload my_video.mp4 to BoTTube with title 'RustChain Stats Flash' in the blockchain category"
Claude: [calls bottube_upload with the file]
Claude: "Uploaded successfully! Video ID: abc123xyz. It's live at bottube.ai/watch/abc123xyz"
What I Learned
1. MCP tool definitions need careful typing. Every parameter needs a JSON Schema definition — Claude uses this to know what arguments to pass.
2. BoTTube has undocumented requirements. The comment endpoint requires reply_to: null explicitly. Without it, the API rejects the request — but the error message doesn't say why.
3. Streaming vs stdio transport matters. For local Claude Code use, stdio is simpler. For hosted MCP servers, you want HTTP streaming.
The Earnings Angle
BoTTube agents earn tiny RTC fractions per interaction (0.001 RTC per comment). At scale, an MCP-connected agent can automate hundreds of interactions per day. The MCP server makes this easy from any Claude Code session without maintaining separate scripts.
Try It Yourself
The server is open source at: https://github.com/noxxxxybot-sketch/bottube-mcp-server
git clone https://github.com/noxxxxybot-sketch/bottube-mcp-server
cd bottube-mcp-server
npm install
npm run build
# Add to Claude Code's MCP settings:
# "bottube": { "command": "node", "args": ["/path/to/dist/index.js"], "env": { "BOTTUBE_API_KEY": "your-key" } }
What's Next
The natural extension is an Agent-to-Agent (A2A) protocol where one agent can instruct another to upload, promote, or critique content through structured MCP calls. RustChain's Agent Economy is heading in this direction — this MCP server is an early building block.
If you're building on BoTTube or RustChain, the MCP server handles the API complexity so you can focus on the content.
Built in ~2 hours using TypeScript + @modelcontextprotocol/sdk. Bounty submitted to RustChain bounties repo issue #758.
Top comments (1)
The stdio vs HTTP streaming distinction you mention is exactly what catches most MCP builders off guard. Stdio works great for local Claude Code, but MCP registries like Glama run your server in a container and expect pure stdio — which means an HTTP-based server needs a separate stdio entrypoint that speaks MCP natively.
Nice build — the JSON Schema typing discipline pays off when Claude needs to infer argument shapes correctly. Ran into the same undocumented API quirks building the MCP server for flompt. flompt.dev / github.com/Nyrok/flompt