apinoa

io.github.apinoahq由 GitHub 帳號 apinoahq 發布v0.2.8更新於 Nov 7, 2026

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

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取資料與分析商業與電商

概覽

AI 產生的概覽

apinoa MCP 讓助理透過 apinoa API 取得即時的產品、社群貼文、搜尋結果與 AI 回答資料,以 TypeScript 程式碼取代自行撰寫爬蟲。

可以做什麼
  • 用免費的文件搜尋查出任務可用的操作、參數、費用與回傳欄位
  • 執行 TypeScript 呼叫 apinoa API,抓取 Amazon、Walmart、Shopify、TikTok Shop 與 AliExpress 的商品、評論及分類
  • 蒐集 TikTok、Instagram、YouTube、Reddit、X、Threads 與 LinkedIn 的貼文、個人檔案與留言
  • 取得 Google、Bing、Naver、百度、Yandex 等搜尋引擎的結果,以及 ChatGPT、Gemini、Google AI Overviews 附引用的 AI 回答
  • 在程式碼中批次展開、翻頁、篩選與彙總,只回傳結果,並可用本機儲存保存資料
  • 把商品圖片中的文字換成譯文,保留字型、顏色與版面
適用情境
當助理需要最新的電商、社群媒體、搜尋排名或 AI 曝光資料,而你不想自行開發與維護爬蟲時適用。也適合圖片在地化,以及跨平台比價、查詢網站排名等問題。
執行需求
需要 apinoa API 金鑰,放在 APINOA_API_KEY 中,可在儀表板建立或用登入指令取得;也可透過 Authorization 標頭以 OAuth 登入。npm 套件需要 Node.js 20 以上版本,並會安裝 Deno 來執行產生的程式碼。需要能連線到 apinoa API 的網路。另有選用變數控制模式、預算、並行數、快取與資料目錄。
安裝前請注意
API 呼叫會依正常費率計入金鑰費用,每次執行有單位預算(預設 500,上限由 APINOA_MCP_MAX_BUDGET 控制),用完即停止。金鑰 90 天後過期,可在儀表板撤銷。execute 工具會執行模型撰寫的程式碼,但執行於僅能存取 apinoa API 與其資料目錄的 Deno 沙箱中,金鑰在程式碼之外注入。資料是經由 apinoa 從第三方平台取得。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 apinoa,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.apinoahq%2Fapinoa-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "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

來源:README.md,提交 9b5562e

工具

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.

輸入參數queryplatform

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,

輸入參數code必填budget_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.

輸入參數fontimage_url必填source_language必填target_language必填

版本歷史

2
  1. v0.2.8最新Nov 4, 2026
  2. v0.2.7Nov 4, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分