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 分