---
title: "SDKs and MCP"
description: "The TypeScript and Python SDKs, the MCP server for Claude Code, Codex and Cursor, and the OpenAPI document: every API, one key."
---

> Every apinoa docs page as markdown: https://apinoa.com/llms.txt (all in one file: https://apinoa.com/llms-full.txt)

Everything in these docs is plain HTTP, so any language can call it. These are the ready-made ways in. Each
one reaches every API: marketplaces, social platforms, search engines, AI answer engines and image
translation, with the same key and the same prices as a direct call.

## TypeScript

```bash
npm install @apinoa/sdk
```

```ts
import { ApinoaClient } from "@apinoa/sdk";

const apinoa = new ApinoaClient(); // reads APINOA_API_KEY

const { data } = await apinoa.amazon.search({ query: "wool socks", priceMax: 30 });
const posts = await apinoa.tiktok.posts({ username: "khaby.lame" });
const serp = await apinoa.google.search({ q: "trail running shoes", country: "US" });
const answer = await apinoa.chatgpt.answer({ prompt: "Best running shoes for beginners?", country: "US" });
```

Every call is `apinoa.<platform>.<operation>(params)`, spelled the way the URL is: `/v1/google-aio/answer`
is `apinoa.googleAio.answer(...)`. Node.js 20 or later, Bun, Deno and Cloudflare Workers. Source and
reference: [apinoahq/apinoa-typescript](https://github.com/apinoahq/apinoa-typescript).

## Python

```bash
pip install apinoa
```

```python
from apinoa import Apinoa

client = Apinoa()  # reads APINOA_API_KEY

res = client.amazon.search(query="wool socks", price_max=30)
posts = client.tiktok.posts(username="khaby.lame")
serp = client.google.search(q="trail running shoes", country="US")
answer = client.chatgpt.answer(prompt="Best running shoes for beginners?", country="US")
```

The same calls in snake_case: `/v1/amazon/image-search` is `client.amazon.image_search(...)` and `priceMax`
is `price_max`. An async client is included. Python 3.9 or later. Source and reference:
[apinoahq/apinoa-python](https://github.com/apinoahq/apinoa-python).

## MCP Server

`apinoa-mcp` gives an AI assistant the whole API as tools: ask *"compare the cheapest Stanley 40 oz on
Amazon and Walmart"* or *"does ChatGPT mention our brand for the best running shoes"* and it makes the calls.

### Hosted: Nothing to Install

`https://api.apinoa.com/mcp` is the same server, hosted. There is no key to copy: the first time a client
connects, it opens apinoa in your browser, you sign in and approve, and the client gets a key of its own. That
key expires after 90 days and is listed in Dashboard → API keys, where you can revoke it.

```bash
# Claude Code (then run /mcp and choose apinoa to sign in)
claude mcp add --transport http apinoa https://api.apinoa.com/mcp

# Codex
codex mcp add apinoa --url https://api.apinoa.com/mcp
codex mcp login apinoa
```

**Claude.ai and Claude Desktop**: Settings → Connectors → Add custom connector, with the URL above.
**Cursor and other clients**: `{ "mcpServers": { "apinoa": { "url": "https://api.apinoa.com/mcp" } } }`.

To use a key you already have instead of signing in, send it as a header:
`claude mcp add --transport http apinoa https://api.apinoa.com/mcp -H "Authorization: Bearer your_key"`.
The hosted server has one tool per kind of read (`search_products`, `get_product`, `list_social_posts`,
`call_apinoa`, …); the local server below can also run code the model writes.

### Local: npx

**Claude Code**

```bash
claude mcp add apinoa -e APINOA_API_KEY=your_key -- npx -y apinoa-mcp
```

**Codex**

```bash
codex mcp add apinoa --env APINOA_API_KEY=your_key -- npx -y apinoa-mcp
```

**Gemini CLI**: it asks for your key on install.

```bash
gemini extensions install https://github.com/apinoahq/apinoa-mcp
```

**Claude Code plugin**: the MCP server plus a skill for each API, which tells the agent when to use it and how.

```text
/plugin marketplace add apinoahq/apinoa-skills
/plugin install apinoa@apinoa
```

The same skills install into Codex, Cursor and other agents with `npx skills add apinoahq/apinoa-skills`.

**Cursor, Claude Desktop, Windsurf and other clients**: add it to the client's MCP configuration
(`.cursor/mcp.json`, `claude_desktop_config.json`, …):

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

It needs Node.js 20 or later. Calls are billed to the key at the normal rates, and a call that fails is not
billed. Source, tools and options: [apinoahq/apinoa-mcp](https://github.com/apinoahq/apinoa-mcp).

## OpenAPI

[`https://apinoa.com/openapi.json`](https://apinoa.com/openapi.json) is the OpenAPI 3.1 document of the
whole API: every operation, its parameters and its response types. Generate a client in another language
from it, or import it into Postman or an API gateway. The SDKs above are generated from it.

[`GET https://gateway.apinoa.com/v1/marketplaces`](https://gateway.apinoa.com/v1/marketplaces) is the live
catalog: every platform, its operations, what each costs and the parameters each accepts, as JSON. It needs
no key.

## For AI Coding Agents

Paste this into your project's `AGENTS.md` or `CLAUDE.md` so your coding agent reaches for the API instead of
writing a scraper:

```markdown
## Web data: apinoa
Use the apinoa API instead of writing a scraper for marketplace, social, search-engine or AI-answer data.
- Call: `GET https://gateway.apinoa.com/v1/{platform}/{operation}` with header `x-api-key: $APINOA_API_KEY`
  (AI answers and image search are `POST` with a JSON body). Responses are `{ success, data }`; on failure
  `{ success: false, error: { code, message } }`. Branch on `error.code`. Failed calls are not billed.
- SDKs: TypeScript `@apinoa/sdk` (`new ApinoaClient()`, `apinoa.<platform>.<operation>(params)`),
  Python `apinoa` (`Apinoa()`, snake_case). MCP server: `npx -y apinoa-mcp`, or hosted at
  `https://api.apinoa.com/mcp` (OAuth sign-in, or `Authorization: Bearer <key>`).
- Which platform for what:
  - Products, prices, reviews: `amazon`, `walmart`, `shopify` (any store), `aliexpress`, `tiktokshop`
    (`search`, `product`, `reviews`, `categories`, `browse`)
  - Social profiles, posts, comments: `tiktok`, `instagram`, `youtube`, `reddit`, `x`, `threads`, `linkedin`
    (`profile`, `posts`, `post`, `comments`)
  - Search results: `google`, `bing`, `naver`, `baidu`, `yandex`, `yahoo`, `duckduckgo`, `google-shopping`,
    `google-trends`, `app-store`, `google-play`, `tripadvisor` (`search`, `places`, `reviews`)
  - What AI engines answer: `chatgpt`, `gemini`, `google-aio`, `google-ai-mode`, `naver-ai-brief`, `naver-ai-tab`
    (`answer`)
  - Text inside images: `POST /v1/image-translate/translate`
- Every platform, operation, parameter and cost: `GET https://gateway.apinoa.com/v1/marketplaces` (no key).
  Docs as markdown: https://apinoa.com/llms.txt
```

- [`/llms.txt`](https://apinoa.com/llms.txt) lists every docs page as markdown, and
  [`/llms-full.txt`](https://apinoa.com/llms-full.txt) is all of them in one file.
- Each docs page is also served as markdown at `/en/docs-raw/<page>`, for example
  [`/en/docs-raw/getting-started`](https://apinoa.com/en/docs-raw/getting-started).
