Kanto Labs MCP server
An MCP server that gives AI assistants (Claude, Cursor, VS Code Copilot and any other MCP client) 14 web, data and media tools, backed by Kanto Labs' actors on the Apify Store:
Failed or unreachable inputs are not charged.
Coming soon:
enrich_company,upscale_image,get_topic_trends,get_trending_topics,check_website_traffic_rank,search_free_imagesare listed already, but their actors are not yet public on the Apify Store; until they are, calls to them return an "actor not yet public" error (nothing is charged).
How billing works
The server is free and open source (MIT). Each tool call runs the matching actor on Apify with your own Apify API token, so the actor's pay-per-event price is billed to your Apify account (Apify's free plan includes monthly credit). There is no Kanto Labs account, key or subscription.
Every call carries a spending cap: maxTotalChargeUsd (default $1.00, change it with the KANTO_MAX_CHARGE_USD env var or per call). Apify stops the run once it has charged that much, so an assistant cannot run up a large bill by accident. Each result states what the call cost.
Setup
- Get an Apify API token: sign up at apify.com, then Settings -> API & Integrations (console.apify.com/settings/integrations).
- Add the server to your client (Node.js 18.17+ required;
npxdownloads and builds it from GitHub on first run).
Claude Desktop
Edit claude_desktop_config.json (Settings -> Developer -> Edit Config):
{
"mcpServers": {
"kanto-labs": {
"command": "npx",
"args": ["-y", "github:kanto-labs/kanto-labs-mcp"],
"env": { "APIFY_TOKEN": "apify_api_your_token_here" }
}
}
}
Or install the one-click bundle kanto-labs-mcp.mcpb from the Releases page: double-click it and paste your token when asked.
Claude Code
claude mcp add kanto-labs -e APIFY_TOKEN=apify_api_your_token_here -- npx -y github:kanto-labs/kanto-labs-mcp
Cursor
~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"kanto-labs": {
"command": "npx",
"args": ["-y", "github:kanto-labs/kanto-labs-mcp"],
"env": { "APIFY_TOKEN": "apify_api_your_token_here" }
}
}
}
VS Code (GitHub Copilot agent mode)
.vscode/mcp.json - the token is asked for once and stored securely:
{
"inputs": [
{ "type": "promptString", "id": "apify_token", "description": "Apify API token", "password": true }
],
"servers": {
"kanto-labs": {
"type": "stdio",
"command": "npx",
"args": ["-y", "github:kanto-labs/kanto-labs-mcp"],
"env": { "APIFY_TOKEN": "${input:apify_token}" }
}
}
}
Windsurf, Cline, Zed and others
Any client that launches stdio servers works: command npx, args -y github:kanto-labs/kanto-labs-mcp, env APIFY_TOKEN.
Windows: if your client reports
spawn npx ENOENT, use"command": "cmd"with"args": ["/c", "npx", "-y", "github:kanto-labs/kanto-labs-mcp"].
Example prompts
- "What is stripe.com built with? And shopify.com?"
- "Convert https://arxiv.org/pdf/1706.03762 to Markdown and summarize section 3."
- "Audit the SEO of https://example.com and list the three most important fixes."
- "Crawl up to 20 pages of example.com, check broken links, keep it under $0.10."
- "Read the text on this receipt: https://example.com/receipt.jpg - what is the total?"
- "OCR this scanned Japanese PDF with the accurate model, first 5 pages only."
- "When do stripe.com and shopify.com expire, who is their registrar, and do they have DMARC set up?"
- "Is kanto-example-name.com still available to register?"
- "Pull 8 frames from https://media.w3.org/2010/05/sintel/trailer.mp4 and describe what happens in the video."
- "Download all product images wider than 300 px from https://books.toscrape.com/ as WEBP."
- "Which of these link-building prospects has the highest domain authority: example-blog.com, another-site.org, third-site.net?"
- "Enrich hubspot.com, Siemens and canva.com: industry, HQ, employees, logo and LinkedIn page."
- "Upscale https://example.com/product-small.jpg 4x as PNG."
- "Compare interest in ChatGPT, Gemini and Claude over the past 12 months. Which is growing?"
- "What were people in Japan and Germany reading about yesterday?"
- "How popular are zalando.de and allegro.pl, and in which countries?"
- "Find 10 landscape photos of the Eiffel Tower at night that need no attribution."
Tool parameters
All tools also accept:
detect_website_tech_stack: urls (required), minConfidence, includeDescriptions.
convert_document_to_markdown: documentUrls (required), chunkSize, chunkOverlap, includeMarkdown, maxFileSizeMb.
audit_website_seo: urls (required), maxPagesPerSite, checkBrokenLinks, maxLinksToCheckPerPage.
extract_text_from_image: sources (required), quality (fast/accurate), includeLines (default false here), minConfidence (0.3/0.4/0.5/0.6/0.7/0.8), pdfMode (auto/ocr), maxPdfPages, pdfDpi.
lookup_domain: domains (required), includeWhois, includeDns, includeSsl, includeEmailSecurity.
extract_video_frames: videoUrls (required), mode (auto/scenes/count/interval), frameCount, intervalSeconds, maxFramesPerVideo, sceneThreshold (0.15/0.2/0.3/0.4/0.5), imageFormat (jpg/png/webp), maxWidth, contactSheet.
download_images: urls (required), maxImagesPerPage, minWidth, minHeight, minFileSizeKb, allowedFormats, includeSvg, includeCssBackgrounds, includeIcons, convertTo (original/jpg/png/webp), maxDimension, dedupe.
check_domain_authority: (required).
: (required), , , .
: (required), (/), (/), (//), , .
: (required), , (//////), , , (///), , , , (///).
: , , , , (///).
: (required), .
: (required), , (//), , , (///), , , , .
Each call returns two text blocks: a short human-readable summary (results, failures, cost) and compact JSON with every result item (empty fields dropped, very long text truncated at KANTO_MAX_TEXT_CHARS).
Environment variables
Adding actors
Tools are generated from actors.config.json: the Apify actor ID, the tool description, typed parameters, price (with optional per-result price rules and a per-result charge count for actors that bill several events per row), input defaults, and a one-line summary template. Adding an actor is a config entry, no code. comingSoon: true marks an actor that is not public on the Apify Store yet (the tool is listed with a notice and a 404 is explained); fixedInput pins actor input for a tool (one actor can back several tools). npm run build regenerates the tool table above and manifest.json from the config.
Development
npm install
npm run build
npm test # offline: lists tools, checks the missing-token error
APIFY_TOKEN=... npm run test:live # one tiny real call per tool (about $0.04)
npx @modelcontextprotocol/inspector node dist/index.js # interactive inspector
npm run bundle # builds build/kanto-labs-mcp.mcpb
Privacy
The server runs on your machine and talks only to api.apify.com. The URLs and domains you pass are processed by the actors on Apify; see each actor's page on the Apify Store. Your token is sent only to Apify and is never logged.
License
MIT - see LICENSE.