Skip to content

MCP server

Hosted MCP server

A single hosted Model Context Protocol server that gives any MCP-capable agent five to-text tools — YouTube transcripts, transcription, OCR, web-to-Markdown, and file conversion. No install, no local models.

Streamable HTTP · https://mcp.textify.me/mcp

What it is

The server speaks MCP over streamable HTTP and authenticates with an API key sent as a bearer header (Authorization: Bearer atx_…) — the same key the REST API uses. Tool discovery is keyless; tool calls that cost credits spend from the same balance as the REST API, so create a key and you're set.

Connect a client

Claude Code

Add the server over HTTP with your API key as a header:

terminal
claude mcp add --transport http textify https://mcp.textify.me/mcp \
  --header "Authorization: Bearer atx_YOUR_API_KEY"

Claude.ai (custom connector)

  1. Open Settings → Connectors → Add custom connector.
  2. Name it Textify and paste the URL https://mcp.textify.me/mcp.
  3. Authenticate with your API key as an Authorization: Bearer atx_YOUR_API_KEY header. If your client can't attach a header to a remote connector, use the npm shim (stdio) below, which passes the key for you; the tools then appear in chat.

Cursor

Add to ~/.cursor/mcp.json (or a project .cursor/mcp.json):

~/.cursor/mcp.json
{
  "mcpServers": {
    "textify": {
      "url": "https://mcp.textify.me/mcp",
      "headers": {
        "Authorization": "Bearer atx_YOUR_API_KEY"
      }
    }
  }
}

Any streamable-HTTP client

Generic MCP client config — point it at the URL and pass your key as a header:

mcp.json
{
  "mcpServers": {
    "textify": {
      "type": "http",
      "url": "https://mcp.textify.me/mcp",
      "headers": {
        "Authorization": "Bearer atx_YOUR_API_KEY"
      }
    }
  }
}

Local config via the npm shim (stdio)

For editors that only speak stdio, the @textifyme/mcp package bridges to the hosted server:

mcp.json (stdio)
{
  "mcpServers": {
    "textify": {
      "command": "npx",
      "args": ["-y", "@textifyme/mcp"],
      "env": { "TEXTIFY_API_KEY": "atx_YOUR_API_KEY" }
    }
  }
}

Running locally

The Worker isn't deployed yet. To point a client at a local build, run wrangler dev in apps/mcp and use http://127.0.0.1:8788/mcp as the URL. Local mock mode answers without real provider keys.

Tools

Five tools, each mapping to a REST endpoint and billed the same way. Schemas below are rendered from the server's tool manifest.

youtube_transcript

1 credit per video

Fetch the caption track for a public YouTube video and return it as text plus timestamped segments. Captions only — never downloads the video.

1 credit with captions; 3 if the video has none and falls back to provider ASR; cached transcripts are free.

Field Type Description
url required string YouTube watch/share URL or 11-character video id.
lang optional string Optional ISO language code (e.g. "en").
ai_fallback optional boolean When true (default), a caption-less video is transcribed with AI (3 credits, needs a key). Set false to only return existing captions, for free. (default: true)
arguments
{
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
}
result
{
  "videoId": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
  "language": "en",
  "text": "Never gonna give you up Never gonna let you down"
}

transcribe_audio

15 credits per audio-hour

Run cloud speech-to-text over an audio URL and return the transcript with timestamped segments.

Billed per audio-hour, prorated. duration_sec is required so the job can be priced up front.

Field Type Description
audio_url required string Publicly reachable URL of the audio file.
duration_sec required number Audio length in seconds (required — prices the per-audio-hour job).
language optional string Optional ISO language hint; omit to auto-detect.
arguments
{
  "audio_url": "https://cdn.example.com/interviews/ep-42.mp3",
  "duration_sec": 372
}
result
{
  "language": "en",
  "durationSec": 372,
  "text": "Welcome back to the show..."
}

ocr_image

1 credit per image or page

Extract text from an image URL — photos, screenshots, receipts, and handwriting.

1 credit per image.

Field Type Description
image_url required string Publicly reachable URL of the image.
arguments
{
  "image_url": "https://cdn.example.com/receipts/2026-07-01.jpg"
}
result
{
  "text": "WHOLE FOODS MARKET\nBananas 1.29\nOat milk 4.49\nTOTAL 5.78",
  "confidence": 0.98
}

file_to_markdown

1 credit per fetch

Convert a digital Word/docx, PowerPoint/pptx, spreadsheet/xlsx, or EPUB at a URL into clean Markdown. PDF is not supported — use the in-browser PDF tool, or ocr_image for scanned pages.

1 credit per converted file.

Field Type Description
file_url required string Publicly reachable URL of the document (docx/pptx/xlsx/epub).
arguments
{
  "file_url": "https://cdn.example.com/reports/q2-2026.docx"
}
result
{
  "kind": "docx",
  "format": "markdown",
  "text": "# Q2 2026 Report\n\n## Summary\n..."
}

webpage_to_markdown

1 credit per fetch

Fetch a public web page and return the main article as clean Markdown — no nav, ads, or clutter. SSRF-guarded.

1 credit per fetch; cached pages (24h) are free.

Field Type Description
url required string The public web page URL to convert.
arguments
{
  "url": "https://example.com/blog/shipping-fast"
}
result
{
  "title": "Shipping Fast Without Breaking Things",
  "wordCount": 812,
  "markdown": "# Shipping Fast Without Breaking Things\n\n..."
}

Agent-flow example: summarize a YouTube video

Once the server is connected, an agent can chain the tools on its own. Ask it to summarize a talk, and it fetches the transcript first, then writes the summary from the returned text — no scraping, no manual copy-paste:

"Summarize this talk in three bullets: https://www.youtube.com/watch?v=dQw4w9WgXcQ"
tool call → result
// The agent calls the MCP tool:
{
  "name": "youtube_transcript",
  "arguments": { "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }
}

// Textify returns the transcript, which the agent then summarizes:
{
  "videoId": "dQw4w9WgXcQ",
  "title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
  "language": "en",
  "text": "Never gonna give you up Never gonna let you down"
}

You can drive the same flow programmatically from the Claude Messages API using its MCP connector — Textify runs the tool server-side and hands the transcript back to the model to summarize:

TypeScript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const message = await client.beta.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  betas: ["mcp-client-2025-11-20"],
  mcp_servers: [
    {
      type: "url",
      name: "textify",
      url: "https://mcp.textify.me/mcp",
      authorization_token: "atx_YOUR_API_KEY",
    },
  ],
  tools: [{ type: "mcp_toolset", mcp_server_name: "textify" }],
  messages: [
    {
      role: "user",
      content:
        "Fetch the transcript of https://www.youtube.com/watch?v=dQw4w9WgXcQ and summarize it in 3 bullets.",
    },
  ],
});

console.log(message.content);
Prefer plain HTTP? The same five tools are available as the REST API with copy-paste curl, TypeScript, and Python.