apinoa

io.github.apinoahqPublished by GitHub account apinoahqv0.2.8Updated Nov 7, 2026

Products, social posts, search results and AI answers from Amazon, TikTok, Google, ChatGPT and more.

Overview

AI-generated overview

apinoa MCP gives assistants live product, social, search-engine and AI-answer data through a documented API, run as TypeScript code instead of a scraper.

What you can do
  • Look up operations, parameters, costs and return fields for a task with a free docs search
  • Run TypeScript against the apinoa API to fetch products, reviews and categories from Amazon, Walmart, Shopify, TikTok Shop and AliExpress
  • Collect posts, profiles and comments from TikTok, Instagram, YouTube, Reddit, X, Threads and LinkedIn
  • Retrieve search results from Google, Bing, Naver, Baidu, Yandex and other engines, and AI answers with citations from ChatGPT, Gemini and Google AI Overviews
  • Fan out, page, filter and aggregate inside the code so only the result returns, with a local store for saved data
  • Replace text in a product image with a translation, keeping fonts, colours and layout
When to use it
Useful when an assistant needs current e-commerce, social media, search-ranking or AI-visibility data and you would otherwise build or maintain a scraper. Also fits image localization tasks and questions like comparing prices across marketplaces or checking where a site ranks.
Requirements
An apinoa API key in APINOA_API_KEY, created in the dashboard or via the login command, or OAuth sign-in through the Authorization header. Node.js 20 or later for the npm package; the package installs Deno to run the generated code. Network access to the apinoa API. Optional variables set mode, budget, concurrency, cache and data directory.
Before you install
API calls are billed to the key at normal rates, and each run has a unit budget (500 by default, capped by APINOA_MCP_MAX_BUDGET) that stops it once spent. The key expires after 90 days and can be revoked in the dashboard. The execute tool runs model-written code, though in a Deno sandbox limited to the apinoa API and its data folder, with the key added outside the code. Data is fetched from third-party platforms through apinoa.

Installation

In SourceWeft

  1. Open apinoa in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.apinoahq%2Fapinoa-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "apinoa": {
      "type": "http",
      "url": "https://api.apinoa.com/mcp"
    }
  }
}

README

apinoa-mcp

An MCP server for apinoa. It gives Claude Code, Codex, Cursor and any other MCP client live product data from Amazon, Walmart, Shopify, TikTok Shop and AliExpress; posts, profiles and comments from TikTok, YouTube, Instagram, Threads, X, Reddit and LinkedIn; search results from Google, Bing, Naver and 13 more search engines; AI answers from ChatGPT, Gemini, Google AI Overviews, Google AI Mode and Naver; and image translation. Use it instead of writing a scraper.

Ask things like "which of @duolingo's last 30 TikToks got 3x its usual views", "compare the cheapest Stanley 40 oz on Amazon and Walmart", "where does example.com rank on Google for 'trail running shoes'", "does ChatGPT mention our brand when asked for the best running shoes" or "translate the text on this product photo into Korean".

Setup

Create a key under Dashboard > API keys at apinoa.com. Calls are billed to it at the API's normal rates; a call that fails is not billed.

Get a key from the terminal

sh
npx apinoa-mcp login

It prints a code and opens an apinoa page in your browser, where you sign in and enter the code. The new key is saved to .env in the current folder as APINOA_API_KEY (--out <path> writes it to another file, --no-browser only prints the address). It expires after 90 days and is listed under Dashboard > API keys, where you can revoke it. Give it to your client as below.

Claude Code

sh
claude mcp add apinoa -e APINOA_API_KEY=your_key -- npx -y apinoa-mcp

Codex

sh
codex mcp add apinoa --env APINOA_API_KEY=your_key -- npx -y apinoa-mcp

or in ~/.codex/config.toml:

toml
[mcp_servers.apinoa]command = "npx"args = ["-y", "apinoa-mcp"]env = { APINOA_API_KEY = "your_key" }

Claude Desktop, Cursor, Windsurf and others — add to the client's MCP configuration (claude_desktop_config.json, .cursor/mcp.json, …):

json
{  "mcpServers": {    "apinoa": {      "command": "npx",      "args": ["-y", "apinoa-mcp"],      "env": { "APINOA_API_KEY": "your_key" }    }  }}

Requires Node.js 20 or later. The package installs Deno, which runs the model's code.

Tools

ToolWhat it does
search_docsFinds the operations for a task: how to call each, every parameter, the cost, and the fields it returns. Free
executeRuns TypeScript the model writes against the API, and returns only what the code returns or prints
translate_imageReplaces the text in an image with a translation; returns the image

Instead of one tool call per API call, the model writes a short program. Fanning out over 50 accounts, following pages, filtering and averaging happen in the code, and only the answer comes back into the conversation:

ts
const page = await apinoa.tiktok.posts({ username: "duolingo", limit: 30 });const views = page.items.map((p) => p.metrics?.views ?? 0).sort((a, b) => a - b);const median = views[Math.floor(views.length / 2)];return page.items.filter((p) => (p.metrics?.views ?? 0) >= 3 * median).map((p) => p.url);

Inside execute:

  • apinoa.<platform>.<operation>(params): one API call; returns the answer's data, throws ApinoaError (code, status) on a refusal.
  • pages(op, params, { maxPages }): every item of a paged operation, following cursors.
  • many(items, fn, { concurrency }): fn over every item, 8 at a time; an item that fails comes back undefined and is counted.
  • store.save / load / list / saveFile: data kept on your machine between runs (videos from apinoa.tiktok.media, for example).
  • usage: this run's calls and units.

The code is type-checked against the API's types before it runs, so an operation, parameter or field that does not exist fails there, before anything is billed. Each run has a budget (500 units by default, set per run with budget_units) and stops once it is spent. Answers are cached for 10 minutes, so running fixed code again costs nothing for the calls already made.

The code runs in a Deno subprocess that can reach only the apinoa API and read and write only its data folder: no other hosts, no other files, no environment variables, no programs. The API key never enters the code; the sandbox adds it to each request.

The platforms, operations and parameters are read from the live API catalog when the server starts, so a platform added to apinoa appears without updating this package.

The tool set

APINOA_MCP_MODE=tools serves the 0.1 tools instead: one tool per kind of read (search_products, get_product, list_social_posts, get_social_comments, call_apinoa, list_platforms, …), one API call per tool call. The server falls back to it by itself where Deno cannot run. An answer over 100,000 characters keeps as many whole items as fit, with a note saying how many were left out.

Options

VariableDefault
APINOA_API_KEY—Required for every data call.
APINOA_BASE_URLhttps://gateway.apinoa.com
APINOA_API_URLhttps://api.apinoa.comWhere login signs in. https only (http for localhost).
APINOA_MCP_MODEcodetools for the 0.1 tool set.
APINOA_MCP_DATA_DIR~/.apinoa-mcpWhere the cache, store and saved files live.
APINOA_MCP_MAX_BUDGET20000The most units one run may be given.
APINOA_MCP_CONCURRENCY16API calls in flight at once within a run.
APINOA_MCP_CACHE_TTL_S600How long an answer is reused; 0 turns the cache off.
APINOA_MCP_MAX_OUTPUT40000The most characters of output one run hands back to the model.
APINOA_MCP_DENOthe bundled onePath to another deno.

Use as a library

ts
import { createApinoaServer } from "apinoa-mcp";
const server = await createApinoaServer({ apiKey: process.env.APINOA_API_KEY });// connect it to any MCP transport, e.g. Streamable HTTP

Related

License

MIT

Source: README.md at commit 9b5562e

Tools

3

search_docs

Search the apinoa docs

Find how to do a task with apinoa: the matching operations as you call them in execute (e.g. apinoa.tiktok.posts({ hashtag })), every parameter, the cost per call, and the fields of what they return. Free: it calls nothing. Use it before writing code. Pass words ('tiktok hashtag videos', 'instagram reels of an account', 'amazon product reviews'), a platform, or a type name ('Post'); with neither you get the list of every operation. Platforms: aliexpress, amazon, app-store, baidu, bing, chatgpt, daum, duckduckgo, gemini, google, google-ai-mode, google-aio, google-play, google-shopping, google-trends, instagram, linkedin, naver, naver-ai-brief, naver-ai-tab, reddit, seznam, shopify, sogou, threads, tiktok, tiktokshop, tripadvisor, walmart, x, yahoo, yahoo-japan, yandex, youtube.

Parametersqueryplatform

execute

Run code against apinoa

Run TypeScript that calls the apinoa API, and get back only what it prints or returns. Use it for every data task, from one call to thousands: fan out over accounts or posts, follow pages, then filter, count, rank and average in the code, so raw API answers never fill the conversation. The code is the body of an async function: use await, and `return` a small result (aggregate, slice, pick the fields you need). In scope: - apinoa.<platform>.<operation>(params): one API call, returns the answer's data; throws ApinoaError (code, status) on a refusal. search_docs lists the parameters and the fields returned. - pages(op, params, { maxPages }): every item of a paged operation, following cursors (default 5 pages). - many(items, fn, { concurrency }): fn over every item, 8 at a time by default; a failed item comes back undefined. - store.save(name, value) / store.load(name) / store.list() / store.saveFile(name, base64): data kept on this machine between runs. - usage: { calls, units, budget } of this run. The code is type-checked before it runs: an operation, parameter or field that does not exist fails there, before anything is billed. Each call costs units (1 unit = $0.001, per search_docs); the run stops once budget_units are spent. Answers are cached for 10 minutes, so re-running after a fix costs nothing for calls already made. Only the API is reachable from the code. Example: const page = await apinoa.tiktok.posts({ hashtag: "glassskin", limit: 50 }); const authors = [...new Set(page.items.map((p) => p.author.handle))].slice(0, 10); const recent = await many(authors, (u) => apinoa.tiktok.posts({ username: u, limit: 30 })); return authors.map((u, i) => { const views = (recent[i]?.items ?? []).map((p) => p.metrics?.views ?? 0).sort((a, b) => a - b); return { author: u, median: views[Math.floor(views.length / 2)] ?? null }; }); Operations (call search_docs with words or a platform for parameters, costs and the fields returned): - apinoa.aliexpress: search, browse,

Parameterscoderequiredbudget_unitstimeout_seconds

translate_image

Translate the text in an image

Replace the text inside a product image with a translation, keeping fonts, colours and layout. Give the image as a URL. Returns the translated image.

Parametersfontimage_urlrequiredsource_languagerequiredtarget_languagerequired

Version history

2
  1. v0.2.8LatestNov 4, 2026
  2. v0.2.7Nov 4, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts