Skip to main content
Glama
LamaTok — TikTok MCP

LamaTok — TikTok MCP

lamatok-mcp

npm version npm downloads License: MIT

MCP server for LamaTok — TikTok data API. Available on npm: lamatok-mcp.

Generates MCP tools from the LamaTok OpenAPI spec at startup. Tools map 1:1 to REST endpoints (GET /v1/user/by/username → get_v1_user_by_username). By default you get a core set of ~23 tools, one per task, each with a description that tells the assistant when to use it; LAMATOK_TOOLS=all exposes every non-deprecated endpoint.

Get 100 Free API Requests

Sign up with this link and get 100 free LamaTok requests — no credit card required. Enough to wire up the MCP server, try a few prompts in Claude/Cursor/Codex, and evaluate the data quality before committing.

Get your free 100 requests here

Related MCP server: DataLikers — Instagram & TikTok MCP

Quick start

  1. Get an API key at lamatok.com.

  2. Add the server to your AI assistant.

  3. Ask your assistant something like:

    • "Get the TikTok profile for @nasa."

    • "List the last 10 videos by user_id 6707206320333226502."

    • "Find recent TikTok videos for the hashtag photography."

Claude Code

claude mcp add lamatok -e LAMATOK_KEY=your-api-key -- npx -y lamatok-mcp

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "lamatok": {
      "command": "npx",
      "args": ["-y", "lamatok-mcp"],
      "env": {
        "LAMATOK_KEY": "your-api-key"
      }
    }
  }
}

Cursor / Windsurf

Same shape as Claude Desktop — put the block under mcpServers in the app's MCP config file.

Zed

Add to ~/.config/zed/settings.json:

{
  "context_servers": {
    "lamatok": {
      "command": "npx",
      "args": ["-y", "lamatok-mcp"],
      "env": {
        "LAMATOK_KEY": "your-api-key"
      }
    }
  }
}

OpenAI Codex

Append to ~/.codex/config.toml:

[mcp_servers.lamatok]
command = "npx"
args = ["-y", "lamatok-mcp"]

[mcp_servers.lamatok.env]
LAMATOK_KEY = "your-api-key"

Tools

Tools are generated at startup from the live LamaTok OpenAPI spec. The default core set keeps one endpoint per task and drops version duplicates:

Group

Tools

Examples

Profiles and audience

12

get_v1_user_by_username, get_v2_user_medias_by_secUid, get_v1_user_followers_by_username

Videos and comments

4

get_v1_media_by_url, get_v1_media_by_id, get_v1_media_comments_by_id

Download links

4

get_v1_media_video_download_by_url, get_v1_media_music_download_by_id

Hashtags and search

3

get_v1_hashtag_info, get_v1_hashtag_medias, get_v2_search

Core tools carry hand-written descriptions (what the tool does, when to prefer a sibling, pagination, billing) and every tool is annotated read-only. The list lives in src/curated.ts.

Set LAMATOK_TOOLS=all to expose every non-deprecated endpoint instead — same tool names as before, so existing prompts keep working. Tool names mirror their endpoint (GET /v1/user/by/username → get_v1_user_by_username); call tools/list over MCP for the current list with parameter schemas. /sys, Legacy, and System tag groups are excluded in both modes.

Configuration

Variable

Description

Required

LAMATOK_KEY

Your LamaTok access key (sent as x-access-key header)

yes

LAMATOK_URL

Base URL. Default: https://api.lamatok.com

no

LAMATOK_SPEC_URL

OpenAPI spec URL. Default: ${LAMATOK_URL}/openapi.json

no

LAMATOK_TOOLS

core (default): curated set, one tool per task. all: every non-deprecated endpoint

no

LAMATOK_TAGS

Whitelist: only include operations with these tags (comma-separated)

no

LAMATOK_EXCLUDE_TAGS

Blacklist: additional tags to exclude (on top of Legacy, System, /sys)

no

LAMATOK_TIMEOUT_MS

Per-request timeout for API calls. Default: 30000

no

LAMATOK_SPEC_TIMEOUT_MS

Timeout for the startup spec fetch. Default: 60000

no

LAMATOK_SPEC_RETRY_DELAY_MS

Base delay between the 3 startup spec fetch attempts. Default: 2000

no

LAMATOK_MAX_RESPONSE_BYTES

Max bytes read from each API response. Default: 10485760 (10 MB)

no

LAMATOK_MAX_SPEC_BYTES

Max bytes read from the OpenAPI spec. Default: 8388608 (8 MB)

no

Legacy, System, and /sys tags are excluded by default. Deprecated operations are also skipped.

If LAMATOK_URL points to a host other than api.lamatok.com, the server prints a warning on startup — your key will be sent there, so only use it for a self-hosted or proxied LamaTok.

Requests are sent with User-Agent: lamatok-mcp/<version>.

How it works

AI Assistant ←stdio→ lamatok-mcp ──https──> api.lamatok.com
                          │
                          └─ fetches /openapi.json once on startup,
                             builds one MCP tool per GET endpoint
                             (core set by default)

Tool arguments map to the endpoint's query and path parameters. The response body is returned as-is (JSON text). Non-2xx responses are surfaced as tool errors with the HTTP status and body.

Development

git clone https://github.com/subzeroid/lamatok-mcp.git
cd lamatok-mcp
npm install
npm run build
LAMATOK_KEY=your-key node dist/index.js

Run in watch mode:

LAMATOK_KEY=your-key npm run dev

Run tests (unit + stdio smoke tests against a local mock server, no network/API key required):

npm test

License

MIT

Available Tools

23 tools
get_v1_hashtag_infoA
Read-only

Get a TikTok hashtag (challenge) by name: pass hashtag without #. Use it to get the hashtag id that get_v1_hashtag_medias needs. Live request to TikTok, billed per call. (GET /v1/hashtag/info)

Inputs: hashtag (required).

get_v1_hashtag_mediasA
Read-only

List videos under a TikTok hashtag, one page per call. Pass the hashtag id (from get_v1_hashtag_info, not the name); count sets the page size (default 30) and cursor pages through. Use get_v2_search to search by free text instead. Live request to TikTok, billed per call. (GET /v1/hashtag/medias)

Inputs: id (required), count, cursor.

get_v1_media_by_idA
Read-only

Get a TikTok video by numeric video id. Use it when you have the id from another tool; use get_v1_media_by_url when you have a link. Returns the video object; use get_v1_media_comments_by_id for its comments. Live request to TikTok, billed per call. (GET /v1/media/by/id)

Inputs: id (required).

get_v1_media_by_urlA
Read-only

Get a TikTok video by its link. Use it when you have a tiktok.com URL; use get_v1_media_by_id when you already have the numeric video id. Returns the video object; pass its id to the comment tools. Live request to TikTok, billed per call. (GET /v1/media/by/url)

Inputs: url (required).

get_v1_media_comment_replies_by_idA
Read-only

Get replies under one comment of a TikTok video, one page per call. Use it to read a thread; use get_v1_media_comments_by_id for the top-level comments. Pass media_id and comment_id (both from the comments tool); count sets the page size and cursor pages through. Live request to TikTok, billed per call. (GET /v1/media/comment/replies/by/id)

Inputs: media_id (required), comment_id (required), count, cursor.

get_v1_media_comments_by_idA
Read-only

Get comments on a TikTok video, one page per call. Use get_v1_media_comment_replies_by_id for replies under one comment. Pass the video id; count sets the page size (default 30) and cursor pages through. Live request to TikTok, billed per call. (GET /v1/media/comments/by/id)

Inputs: id (required), count, cursor.

get_v1_media_music_download_by_idA
Read-only

Get a download link for the audio track of a TikTok video, by video id. Returns the file URL and the HTTP headers to send with it; the file itself is not downloaded. Use get_v1_media_music_download_by_url when you have a link and get_v1_media_video_download_by_id for the video file. Live request to TikTok, billed per call. (GET /v1/media/music/download/by/id)

Inputs: id (required).

get_v1_media_music_download_by_urlA
Read-only

Get a download link for the audio track of a TikTok video, by the video's URL. Returns the file URL and the HTTP headers to send with it; the file itself is not downloaded. Use get_v1_media_music_download_by_id when you have the video id and get_v1_media_video_download_by_url for the video file. Live request to TikTok, billed per call. (GET /v1/media/music/download/by/url)

Inputs: url (required).

get_v1_media_video_download_by_idA
Read-only

Get a download link for a TikTok video by video id. Returns the file URL and the HTTP headers to send with it; the file itself is not downloaded. watermark (default true) selects the watermarked version. Use get_v1_media_video_download_by_url when you have a link and get_v1_media_music_download_by_id for the audio track only. Live request to TikTok, billed per call. (GET /v1/media/video/download/by/id)

Inputs: id (required), watermark.

get_v1_media_video_download_by_urlA
Read-only

Get a download link for a TikTok video by its URL. Returns the file URL and the HTTP headers to send with it; the file itself is not downloaded. watermark (default true) selects the watermarked version. Use get_v1_media_video_download_by_id when you have the video id and get_v1_media_music_download_by_url for the audio track only. Live request to TikTok, billed per call. (GET /v1/media/video/download/by/url)

Inputs: url (required), watermark.

get_v1_user_by_usernameA
Read-only

Get a TikTok profile by username (without @). Use it first for any account; if it answers 404 ProfileUnavailable, use get_v3_user_by_username, which also returns profiles TikTok does not serve on the web. Returns the user object; take the user's secUid from it for the by-secUid tools. Live request to TikTok, billed per call. (GET /v1/user/by/username)

Inputs: username (required).

get_v1_user_followers_by_secUidA
Read-only

List a TikTok user's followers by secUid, one page per call. Use it when you already have the secUid from a profile; use get_v1_user_followers_by_username when you only have a handle. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/followers/by/secUid)

Inputs: secUid (required), count, page_id.

get_v1_user_followers_by_usernameA
Read-only

List a TikTok user's followers by username, one page per call. Use it when you have a handle; use get_v1_user_followers_by_secUid when you already have the secUid and get_v1_user_following_by_username for accounts the user follows. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/followers/by/username)

Inputs: username (required), count, page_id.

get_v1_user_following_by_secUidA
Read-only

List accounts a TikTok user follows by secUid, one page per call. Use it when you already have the secUid from a profile; use get_v1_user_following_by_username when you only have a handle. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/following/by/secUid)

Inputs: secUid (required), count, page_id.

get_v1_user_following_by_usernameA
Read-only

List accounts a TikTok user follows by username, one page per call. Use it when you have a handle; use get_v1_user_following_by_secUid when you already have the secUid and get_v1_user_followers_by_username for the user's followers. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/following/by/username)

Inputs: username (required), count, page_id.

get_v1_user_playlists_by_secUidA
Read-only

List a TikTok user's playlists by secUid, one page per call. Use it when you already have the secUid from a profile; use get_v1_user_playlists_by_username when you only have a handle. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/playlists/by/secUid)

Inputs: secUid (required), count, page_id.

get_v1_user_playlists_by_usernameA
Read-only

List a TikTok user's playlists by username, one page per call. Use it when you have a handle; use get_v1_user_playlists_by_secUid when you already have the secUid, and get_v2_user_medias_by_secUid for all of the user's videos. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/playlists/by/username)

Inputs: username (required), count, page_id.

get_v1_user_suggested_by_secUidA
Read-only

List the accounts TikTok suggests as related to a user, by secUid, one page per call. Use it when you already have the secUid from a profile; use get_v1_user_suggested_by_username when you only have a handle. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/suggested/by/secUid)

Inputs: secUid (required), count, page_id.

get_v1_user_suggested_by_usernameA
Read-only

List the accounts TikTok suggests as related to a user, by username, one page per call. Use it to find similar accounts when you have a handle; use get_v1_user_suggested_by_secUid when you already have the secUid and get_v2_search to search by keyword instead. For the next page pass next_page_id from the previous response as page_id; count sets the page size (default 30). Live request to TikTok, billed per call. (GET /v1/user/suggested/by/username)

Inputs: username (required), count, page_id.

get_v2_user_likes_by_secUidA
Read-only

List videos a TikTok user has liked, one page per call. Use get_v2_user_medias_by_secUid for the user's own videos. Pass the user's secUid (from the profile tool); count sets the page size and cursor pages through. Live request to TikTok, billed per call. (GET /v2/user/likes/by/secUid)

Inputs: secUid (required), count, cursor.

get_v2_user_medias_by_secUidA
Read-only

List a TikTok user's videos, one page per call. Use it to read an account's content; use get_v2_user_likes_by_secUid for videos the user liked and get_v1_media_by_id for one video's details. Pass the user's secUid (from the profile tool); count sets the page size and max_cursor pages through. Live request to TikTok, billed per call. (GET /v2/user/medias/by/secUid)

Inputs: secUid (required), count, max_cursor.

get_v3_user_by_usernameA
Read-only

Get a TikTok profile by username, including profiles TikTok does not serve on the web (the ones get_v1_user_by_username answers with 404 ProfileUnavailable). Use it as the fallback when the v1 tool fails; the response has the same shape. Live request to TikTok, billed as 1 request per call and 2-3 for a restored profile. (GET /v3/user/by/username)

Inputs: username (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 23 tools

    Disambiguation4/5

    Tools are mostly distinct by resource and identifier type (username vs secUid, id vs url), and descriptions explicitly cross-reference alternatives. However, the many near-duplicate pairs (e.g. following by username vs secUid, download by id vs url) require careful reading to avoid misselection.

    Naming Consistency5/5

    All tool names follow a highly consistent snake_case pattern: get_<version>_<resource>_<action>_<qualifier>. The version prefixes (v1, v2, v3) are the only variation and clearly reflect API endpoints.

    Tool Count3/5

    23 tools is on the heavy side for a single MCP server, falling into the 16-25 borderline range. While each tool maps to a distinct TikTok API endpoint, the set feels large and could overwhelm an agent without strong routing guidance.

    Completeness4/5

    The surface covers user profiles, relationships, playlists, media, downloads, comments, hashtags, and search well. Minor gaps exist, such as no direct user lookup by secUid and no trending/live endpoints, but core read-only TikTok workflows are supported.

    Maintenance

    ActivitySlowing
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      MCP server for HikerAPI — auto-generates 100+ Instagram tools (profiles, posts, reels, stories, comments, hashtags, locations) from the live OpenAPI spec. Local stdio via npx -y hikerapi-mcp, requires only HIKERAPI_KEY.
      44
      130 npm
      9
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server for DataLikers — 51 tools for Instagram & TikTok data: Instagram user search by demographics (gender/age/race/country/city), profiles, engagement, posts, comments, hashtags, locations, stories, business accounts; TikTok users, videos, comments, hashtags, playlists. Local stdio via npx -y datalikers-mcp, requires only DATALIKERS_API_KEY.
      64 npm
      9
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server exposing the full CutPro v1 API as 34 tools for AI clients — analyze videos, submit clipping jobs, manage clips, render, and publish posts. Supports stdio, Streamable HTTP, and OAuth 2.1.
      953 npm
      3
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      An MCP server that exposes FortiCNAPP (formerly Lacework) API 2.0 operations as typed, auth-aware tools generated from the API spec at startup, supporting both local stdio and remote Streamable HTTP transports.
      MIT