Connect QuillAI to any AI assistant
QuillAI ships a Model Context Protocol (MCP) server so AI assistants — Antigravity, Claude Desktop, Cursor, ChatGPT, Cline — can transcribe audio and video on your behalf without writing a line of integration code.
https://mcp.quillhub.ai/mcpAuthenticate with the same
qai_live_ bearer token you use for the REST API. Create or rotate keys →Why MCP?
MCP is the open standard that lets AI assistants discover and call external tools. One protocol, every major client:
- No glue code — add one JSON snippet to your client and it sees all QuillAI tools with typed inputs and descriptions.
- Conversational — the assistant reads the tool schemas itself, picks the right one, fills in the fields, and handles pagination.
- Same guarantees as the REST API — identical auth model, identical error envelope, identical point cost.
Quick start
Three steps to go from zero to "Claude, transcribe this YouTube video":
Antigravity
Open the MCP manager, click View raw config, and merge the snippet below into your mcp.json.
{
"quillai": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.quillhub.ai/mcp",
"--header",
"Authorization:Bearer qai_live_YOUR_KEY"
]
}
}Claude Desktop
Edit claude_desktop_config.json — on macOS it lives at ~/Library/Application Support/Claude/, on Windows at %APPDATA%/Claude/.
{
"mcpServers": {
"quillai": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.quillhub.ai/mcp",
"--header",
"Authorization:Bearer qai_live_YOUR_KEY"
]
}
}
}Fully quit Claude (from the tray or dock — not just close the window) and reopen it for the change to take effect.
Cursor / Cline / other MCP clients
Any client that supports the standard mcpServers config works the same way. Drop this into the client's MCP config file.
{
"mcpServers": {
"quillai": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.quillhub.ai/mcp",
"--header",
"Authorization:Bearer qai_live_YOUR_KEY"
]
}
}
}Tools exposed
The server advertises six tools. Schemas mirror the REST API — if you've used the HTTP endpoints, these will feel familiar.
| Tool | Description |
|---|---|
get_account | Fetch the authenticated account — user id, remaining points, subscription. Cheap; use as a liveness check. |
create_transcription | Create a transcription from a URL (YouTube, Instagram, direct audio/video) or inline base64 file (≤25 MB). |
get_transcription | Fetch a single transcription in one of six formats: `summary` (default, ~3-6 kB), `text`, `segments`, `paragraphs`, `chapters`, `subtitles`. Pick the smallest one for the task. |
list_transcriptions | Lightweight summaries of the key owner's transcriptions, newest first. Each row has title, summary, key_theses, highlights, duration — NOT the full transcript. Filter with `q` (text search), `created_before`, `created_after`. |
cancel_transcription | Cancel a queued or processing job. No-op on already-terminal transcriptions. |
wait_for_transcription | Poll a transcription until it's terminal or the timeout fires. Saves agents from writing their own polling loop. |
get_developer_docs | Return QuillAI developer docs as markdown for agents writing integration code. Omit `topic` for the index; pass `all` or a section name (e.g. `webhooks`) for content. |
Direct HTTP (no MCP client)
You can also call the MCP server directly over HTTP with plain JSON-RPC — useful for debugging, scripts, or custom agents. Every POST needs the Authorization header and a JSON-RPC body.
curl -X POST https://mcp.quillhub.ai/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer qai_live_YOUR_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_transcription",
"arguments": { "url": "https://youtu.be/dQw4w9WgXcQ" }
}
}'Limitations
- Inline base64 uploads are capped at
25 MB. For larger files, upload to S3/Wasabi/any public URL and pass theurlfield instead. - No webhooks through MCP — agents can't receive inbound POSTs. Use REST webhooks for push notifications.
- wait_for_transcription has a 300-second ceiling to stay within client timeouts. On timeout it returns the last-known non-terminal state, not an error, so the agent can simply call it again.