# upAPI [Health: Active]

**Category:** 🔎 Search & Data Extraction  
**Repository:** https://github.com/DevinoSolutions/upapi-mcp  
**GitHub Stars:** 0  
**npm Downloads (last month):** 1082  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/upapi

## Description
All public upAPI operations as MCP tools: web scraping, search, screenshots, PDF, OCR and more.

## Tools
Capabilities this server exposes over MCP:

- **archive_wayback_get** — Find the closest Wayback Machine snapshot of a URL (optionally near a target timestamp). Returns the snapshot URL, its capture timestamp, and HTTP status.

upAPI operation `archive-wayback.get` (Data). Costs 1 unit of monthly quota per call.
- **audio_transcribe_result_get** — Fetch the result of a transcription started by audio-transcribe, using its jobId. Returns the finished transcript with time-coded segments, or the current progress while it is still running. Job ids are kept for 24 hours.

upAPI operation `audio-transcribe-result.get` (Media). Costs 1 unit of monthly quota per call.
- **audio_transcribe_post** — Transcribe speech from an audio or video URL, with time-coded segments and automatic language detection. Short clips come back in the same call; longer ones return a jobId to poll with audio-transcribe-result. GPU Whisper, up to two hours per file.

upAPI operation `audio-transcribe.post` (Media). Costs 10 units of monthly quota per call.
- **bbc_news_get** — Fetch headlines from a BBC section (news / world / business / technology / science-environment / entertainment-arts / sport) via the official BBC RSS feeds. Pure HTTP (no browser). Returns title, article URL, and summary for each headline.

upAPI operation `bbc-news.get` (Data). Costs 1 unit of monthly quota per call.
- **bluesky_profile_get** — Fetch a Bluesky (AT Protocol) profile by handle or DID. Returns display name, description, avatar/banner, follower and post counts, labels, and DID. Uses the public AppView - no auth required.

upAPI operation `bluesky-profile.get` (Social Media). Costs 1 unit of monthly quota per call.
- **cloudflare_page_title_get** — Fetch the <title> of a URL using curl-cffi with browser TLS impersonation. Handles sites that block plain-requests but allow browser-like TLS fingerprints.

upAPI operation `cloudflare-page-title.get` (Tools). Costs 1 unit of monthly quota per call.
- **crypto_price_get** — Current crypto prices (+ optional market cap and 24h change) for one or more coins across fiat or crypto quote currencies via CoinGecko's free simple-price endpoint.

upAPI operation `crypto-price.get` (Finance). Costs 1 unit of monthly quota per call.
- **currency_convert_get** — Convert a fiat amount across one or more target currencies using ECB daily reference rates via Frankfurter. Returns both unit rates and the converted amounts.

upAPI operation `currency-convert.get` (Finance). Costs 1 unit of monthly quota per call.
- **detect_tech_stack_post** — Analyze any website to detect its technology stack — frameworks (Next.js, Nuxt, WordPress, Shopify), hosting (Vercel, Netlify, AWS), analytics (GA, Plausible, Segment), CDNs, CSS frameworks, payment providers, and more. Uses HTTP headers, HTML patterns, and script analysis.

upAPI operation `detect-tech-stack.post` (Developer Tools). Costs 1 unit of monthly quota per call.
- **devto_articles_search_get** — Search articles on dev.to by tag, username, or top-of-week trending. Returns title, description, tags, author, reading time, reaction and comment counts.

upAPI operation `devto-articles-search.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **email_read_verification_code_post** — Connect to an IMAP mailbox and extract a verification code from the SUBJECT of a recent email. Polls with retries. Supports Gmail (with App Password), Outlook, and any IMAP server. Generic — works for any platform that puts its code in the subject line; for a token that only appears in the body, use email-read-verification-link.

upAPI operation `email-read-verification-code.post` (Utility). Costs 1 unit of monthly quota per call.
- **email_read_verification_link_post** — Connect to an IMAP mailbox and extract a link from the BODY of a recent email. Decodes quoted-printable/base64 bodies before matching, so URLs split across lines are returned whole. Polls with retries. Use this for verification mail whose token is a one-time URL rather than a code in the subject.

upAPI operation `email-read-verification-link.post` (Utility). Costs 1 unit of monthly quota per call.
- **fetch_markdown_post** — Convert any web page into clean, LLM-ready Markdown. Fetches over plain HTTP with browser headers (retrying once through a residential or datacenter proxy when the origin serves a bot wall), removes boilerplate with Mozilla Readability, and converts with GitHub-flavored Markdown tables, lists and code blocks. Article mode is verified against a whole-page conversion and downgrades itself when Readability strips too much, so you are never handed a gutted page. Returns the markdown plus title, byline, language, excerpt, the extracted link list, the final URL after redirects, and which transport served the body. No browser is used, so a client-rendered page is reported as an error rather than as empty content.

upAPI operation `fetch-markdown.post` (Tools). Costs 3 units of monthly quota per call.
- **github_repo_get** — Fetch metadata (stars, forks, topics, license, dates) for a public GitHub repository via the REST API.

upAPI operation `github-repo.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **github_trending_get** — Fetch the github.com/trending page for the most-starred repos in a time window, optionally filtered by language. Pure HTTP (no browser). Returns full name, URL, description, language, total stars, stars this window, forks.

upAPI operation `github-trending.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **github_user_get** — Fetch a GitHub user or organization's public profile: name, bio, company, location, follower/repo counts, avatar, Twitter handle.

upAPI operation `github-user.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **google_autocomplete_post** — Real Google search suggestions (autocomplete/suggest) via pure HTTP — no browser, no CAPTCHA. Set expand=true to mine long-tail keywords.

upAPI operation `google-autocomplete.post` (Search). Costs 1 unit of monthly quota per call.
- **google_maps_place_get** — Look up one Google Maps place by place id, CID, feature id or a pasted Maps link, and get its name, full address, coordinates, categories, rating, review count, phone, website and opening hours. Pairs with Google Maps Business Search, which returns the identifiers this accepts.

upAPI operation `google-maps-place.get` (Maps). Costs 4 units of monthly quota per call.
- **google_maps_reviews_get** — Read the reviews on any Google Maps place by place id, CID, feature id or a pasted Maps link. Returns each review's rating, full text, author, photos, timestamp and the owner's reply, sorted by relevance, date or rating, with cursor pagination through the whole feed.

upAPI operation `google-maps-reviews.get` (Maps). Costs 6 units of monthly quota per call.
- **google_maps_search_post** — Search Google Maps for businesses by text query, optionally centred on coordinates. Returns each place with its name, address, coordinates, category, rating, review count, opening hours, website and phone where Google publishes them, plus the place id you can pass to Google Maps Place Details.

upAPI operation `google-maps-search.post` (Maps). Costs 6 units of monthly quota per call.
- **hackernews_search_get** — Full-text + filter search over Hacker News (stories, comments, Show/Ask HN, front page) via Algolia's open API. Ordered by relevance or date.

upAPI operation `hackernews-search.get` (Tools). Costs 1 unit of monthly quota per call.
- **html_to_pdf_post** — Render a public web page or a raw HTML document to a print-quality PDF with headless Chromium — paper size, orientation, margins, scale and page ranges included. Returns base64 PDF bytes.

upAPI operation `html-to-pdf.post` (Tools). Costs 20 units of monthly quota per call.
- **image_ocr_post** — Read the text in an image, by URL or as an inline base64 upload. Returns the full text plus every detected line with its confidence score and pixel bounding box. Runs locally on PP-OCR/ONNX — no cloud vision API, no per-image fee.

upAPI operation `image-ocr.post` (Tools). Costs 4 units of monthly quota per call.
- **instagram_check_account_health_get** — Check if Instagram account is active/suspended. Returns follower, post counts, and verification status.

upAPI operation `instagram-check-account-health.get` (Social Media). Costs 15 units of monthly quota per call.
- **instagram_check_account_post** — Check if a username/email/phone is linked to an Instagram account. Returns existence + recovery channels.

upAPI operation `instagram-check-account.post` (Social Media). Costs 15 units of monthly quota per call.
- **instagram_discover_location_post** — Get 50-95 post shortcodes from a location page. No auth needed. Use with get-post-commenters for massive lead discovery.

upAPI operation `instagram-discover-location.post` (Social Media). Costs 15 units of monthly quota per call.
- **instagram_get_post_commenters_post** — Extract commenters, comment text, and sibling posts from a post page. One call = ~24 lead-gen entities. No auth needed.

upAPI operation `instagram-get-post-commenters.post` (Social Media). Costs 15 units of monthly quota per call.
- **instagram_get_post_info_post** — Get post metadata (caption, owner, media, comment count) via embed page. No auth needed, not rate-limited.

upAPI operation `instagram-get-post-info.post` (Social Media). Costs 15 units of monthly quota per call.
- **instagram_get_user_posts_post** — Get a user's recent posts with engagement metrics. Rate-limited — use proxy rotation for bulk. No auth needed.

upAPI operation `instagram-get-user-posts.post` (Social Media). Costs 15 units of monthly quota per call.
- **instagram_get_user_profile_post** — Get full Instagram user profile (bio, stats, verified, business status). Works for public profiles without auth.

upAPI operation `instagram-get-user-profile.post` (Social Media). Costs 15 units of monthly quota per call.
- **ip_geolocation_get** — Resolve an IP (IPv4 or IPv6) to city, region, country, lat/long, timezone, ASN, and currency. Omit the ip field to geolocate the caller.

upAPI operation `ip-geolocation.get` (Data). Costs 1 unit of monthly quota per call.
- **linkedin_check_account_health_post** — Check whether a LinkedIn session (cookies) is still authenticated via the Voyager me endpoint. Returns isValid plus the logged-in profile name/URL.

upAPI operation `linkedin-check-account-health.post` (Social Media). Costs 15 units of monthly quota per call.
- **linkedin_get_profile_post** — Fetch a LinkedIn profile (name, headline, location, vanity) by vanity name via the Voyager dash API. Cookie-authenticated.

upAPI operation `linkedin-get-profile.post` (Social Media). Costs 15 units of monthly quota per call.
- **linkedin_jobs_detail_get** — Fetch one LinkedIn job posting: full description, seniority level, employment type, job function, industries, applicant count and posting age. Accepts the job id from linkedin-jobs-search, a job URL or a urn:li:jobPosting URN. Reads LinkedIn's public guest surface — no LinkedIn account or cookie is required.

upAPI operation `linkedin-jobs-detail.get` (Social Media). Costs 6 units of monthly quota per call.
- **linkedin_jobs_search_get** — Search LinkedIn job postings by keyword and location. Returns title, company, location, posting date, salary hint and the job id you pass to linkedin-jobs-detail. Reads LinkedIn's public guest surface — no LinkedIn account or cookie is required.

upAPI operation `linkedin-jobs-search.get` (Social Media). Costs 6 units of monthly quota per call.
- **linkedin_profile_search_post** — Find LinkedIn profiles by job title and location. Returns name, headline, and profile URL. Web-search backed — no login required.

upAPI operation `linkedin-profile-search.post` (Search). Costs 15 units of monthly quota per call.
- **mastodon_profile_get** — Look up a Mastodon account by fully-qualified handle (e.g. Gargron@mastodon.social). Works against any Mastodon instance via its open REST API - no auth needed.

upAPI operation `mastodon-profile.get` (Social Media). Costs 1 unit of monthly quota per call.
- **nasa_apod_get** — Fetch NASA's Astronomy Picture of the Day (APOD). Today's by default, or any date from 1995-06-16 onwards. Returns title, explanation, media URL (+ HD variant), copyright. Uses DEMO_KEY by default; set NASA_API_KEY env for higher rate limits.

upAPI operation `nasa-apod.get` (Media). Costs 1 unit of monthly quota per call.
- **npm_package_get** — Fetch metadata for a public npm package: latest version, recent versions, maintainers, license, repository, keywords.

upAPI operation `npm-package.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **opengraph_parse_get** — Fetch a URL and extract its Open Graph, Twitter Card, <title>, description, canonical, and favicon metadata - everything needed to render a rich link preview.

upAPI operation `opengraph-parse.get` (SEO tools). Costs 1 unit of monthly quota per call.
- **pdf_extract_text_post** — Extract the text of a PDF, by URL or as an inline base64 upload. Optionally restrict it to a page range and detect tables, returned as Markdown. Runs locally on PDFium — no third-party document API, no per-page fee.

upAPI operation `pdf-extract-text.post` (Tools). Costs 2 units of monthly quota per call.
- **pokeapi_pokemon_get** — Look up a Pokemon by name or national dex id. Returns types, abilities, base stats (HP/attack/defense/sp.atk/sp.def/speed), height/weight, and artwork URLs.

upAPI operation `pokeapi-pokemon.get` (Media). Costs 1 unit of monthly quota per call.
- **pypi_package_get** — Fetch metadata for a public PyPI package: latest version, author, license, project URLs, classifiers, requirements.

upAPI operation `pypi-package.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **reddit_check_account_health_get** — Check the health and status of a Reddit account. Pass sessionCookies for the reliable authenticated read (required for new/low-karma accounts); otherwise falls back to parsing the public profile.

upAPI operation `reddit-check-account-health.get` (Social Media). Costs 4 units of monthly quota per call.
- **reddit_check_comment_visibility_get** — Detect shadowban/auto-removal: read a comment's focused permalink JSON as a non-author and report whether it is actually visible to the public.

upAPI operation `reddit-check-comment-visibility.get` (Social Media). Costs 4 units of monthly quota per call.
- **reddit_get_trending_get** — Fetch trending, hot, rising, top, or new posts from any subreddit with pagination and time filtering. Requires a Reddit session cookie in sessionCookies (obtain it from reddit-login.post, or copy reddit_session out of a signed-in browser) — Reddit has blocked every anonymous read surface since 2026-07-30.

upAPI operation `reddit-get-trending.get` (Social Media). Costs 4 units of monthly quota per call.
- **reddit_scrape_post_get** — Fetch a Reddit post with its comment tree: post metadata, selftext, and nested comments with scores and authorship. Requires a Reddit session cookie in sessionCookies (obtain it from reddit-login.post, or copy reddit_session out of a signed-in browser) — Reddit has blocked every anonymous read surface since 2026-07-30.

upAPI operation `reddit-scrape-post.get` (Social Media). Costs 4 units of monthly quota per call.
- **reddit_search_posts_get** — Search Reddit posts by keyword with subreddit filtering, sort and time range. Returns structured post data including scores, comment count and metadata. Requires a Reddit session cookie in sessionCookies (obtain it from reddit-login.post, or copy reddit_session out of a signed-in browser) — Reddit has blocked every anonymous read surface since 2026-07-30.

upAPI operation `reddit-search-posts.get` (Social Media). Costs 4 units of monthly quota per call.
- **reddit_subreddit_info_get** — Fetch subreddit metadata: subscriber count, description, rules, active users and appearance settings. Requires a Reddit session cookie in sessionCookies (obtain it from reddit-login.post, or copy reddit_session out of a signed-in browser) — Reddit has blocked every anonymous read surface since 2026-07-30.

upAPI operation `reddit-subreddit-info.get` (Social Media). Costs 4 units of monthly quota per call.
- **screenshot_post** — Render any public web page in headless Chromium and return a PNG or JPEG screenshot as base64 — viewport or full page, with a configurable viewport size, wait strategy and settle delay.

upAPI operation `screenshot.post` (Tools). Costs 20 units of monthly quota per call.
- **sitemap_parse_get** — Fetch and parse an XML sitemap, sitemap index, or plaintext URL list. Returns URL entries (with lastmod/changefreq/priority) or child sitemap locations.

upAPI operation `sitemap-parse.get` (SEO tools). Costs 1 unit of monthly quota per call.
- **stackexchange_search_get** — Full-text search over any Stack Exchange site (stackoverflow, superuser, askubuntu, etc.). Returns question id, title, tags, score, answer count, accepted-answer flag, asker, timestamps.

upAPI operation `stackexchange-search.get` (Developer Tools). Costs 1 unit of monthly quota per call.
- **text_analyze_post** — Analyze text: character / word / line / sentence / byte counts plus a SHA-256 digest. Pure-compute, no network — a native Rust marketplace endpoint.

upAPI operation `text-analyze.post` (Developer Tools). Costs 1 unit of monthly quota per call.
- **tiktok_check_account_health_get** — Check if TikTok account is active/suspended. Returns follower, video, and like counts.

upAPI operation `tiktok-check-account-health.get` (Social Media). Costs 15 units of monthly quota per call.
- **tiktok_discover_users_post** — Mine unique commenters from a video for lead discovery. No auth needed. Returns user profiles from comment threads.

upAPI operation `tiktok-discover-users.post` (Social Media). Costs 15 units of monthly quota per call.
- **tiktok_get_comments_post** — Get comments on a video with commenter info. No auth needed. Supports pagination via cursor.

upAPI operation `tiktok-get-comments.post` (Social Media). Costs 15 units of monthly quota per call.
- **tiktok_get_user_profile_post** — Get full user profile (bio, stats, verified status) via SSR scraping. No auth needed.

upAPI operation `tiktok-get-user-profile.post` (Social Media). Costs 15 units of monthly quota per call.
- **tiktok_get_video_detail_post** — Get full video metadata (description, stats, author, music) via SSR scraping. No auth needed.

upAPI operation `tiktok-get-video-detail.post` (Social Media). Costs 15 units of monthly quota per call.
- **timezone_lookup_get** — Resolve a lat/long to its IANA timezone, country, current local time, UTC offset (with DST detection), and standard offset. Uses the free timeapi.io.

upAPI operation `timezone-lookup.get` (Data). Costs 1 unit of monthly quota per call.
- **translate_text_get** — Translate short text (<=500 chars) between language codes via MyMemory Translated. Free tier is 5,000 words/day shared across callers; no auth required.

upAPI operation `translate-text.get` (Communication). Costs 1 unit of monthly quota per call.
- **weather_current_get** — Current temperature, humidity, wind, precipitation, and condition code at the given lat/long via Open-Meteo (free, no auth). Metric or imperial units.

upAPI operation `weather-current.get` (Data). Costs 1 unit of monthly quota per call.
- **web_search_post** — Search the web and get structured results (titles, URLs, snippets). DuckDuckGo-backed — no browser, no CAPTCHA, fast.

upAPI operation `web-search.post` (Search). Costs 1 unit of monthly quota per call.
- **wikipedia_article_get** — Fetch a Wikipedia article summary (description + extract + thumbnail + coordinates) from any supported language via the public REST API.

upAPI operation `wikipedia-article.get` (Data). Costs 1 unit of monthly quota per call.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "upapi": {
    "command": "npx",
    "args": ["-y","@upapi/mcp"],
    "env": {
      "UPAPI_API_KEY": "",
      "UPAPI_BASE_URL": "",
      "UPAPI_TOOL_MODE": ""
    }
  }
}
```

**Requires environment variables:** `UPAPI_API_KEY`, `UPAPI_BASE_URL`, `UPAPI_TOOL_MODE` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What upAPI MCP server does

upAPI MCP server makes the public operations in the upAPI marketplace available to MCP-compatible agents. The catalog spans web search and SERP access, social profiles, maps, finance, developer lookups, browser and file operations, screenshots, PDF processing, OCR, transcription, and other hosted services.

The server uses upAPI’s gateway rather than performing work locally. Each tool call invokes one hosted operation, and the resulting operation consumes quota from the upAPI account or API key. Agents can discover an operation before calling it, inspect its parameters and quota cost, then execute it by slug.

## How it works

The default compact tool surface contains two meta-tools:

- `search_ops` finds operations by intent and returns each matching slug, description, parameters, and quota cost.
- `call_op` runs a selected operation, using an input such as `{ "slug": "github-repo.get", "input": { ... } }`.

The same catalog can be exposed in other modes. `full` presents each operation as its own MCP tool. `directory` presents a curated set of named flagship tools, while `claude` exposes the operation set intended for the Claude connector. These modes change the advertised tools, not the operations available through the gateway. Tool names derived from operation slugs replace periods and hyphens with underscores.

Operation schemas include formats, bounds, defaults, and nullability from the underlying worker model. Tool metadata also includes read-only, destructive, idempotent, and open-world hints. Failed operations return ordinary MCP tool results with `isError: true` and a public error code such as `RATE_LIMITED`, `INVALID_INPUT`, or `UPSTREAM_UNREACHABLE`.

## Setup and configuration

For a hosted connection, point an MCP client at `https://app.upapi.io/api/mcp`. Authentication uses an upAPI account and browser sign-in, so a local API key is not required.

For local stdio use, run `npx -y @upapi/mcp` and set `UPAPI_API_KEY` to an `upapi_` key. Claude Code can register the command directly, while Claude Desktop, Cursor, and Windsurf accept the equivalent JSON MCP configuration. The key is checked for presence by the local process and validated by the gateway.

Optional configuration includes `UPAPI_BASE_URL`, which changes the gateway origin, and `UPAPI_TOOL_MODE`, which selects `compact`, `directory`, `claude`, or `full`. The default mode is `compact`.

## Tools and capabilities

The package also provides optional Mastra bindings. `createUpapiTools` exposes upAPI operations directly to a Mastra agent and can filter the catalog, such as limiting it to the Search category. `createUpapiMcpServer` creates a Mastra MCP server and defaults to a Code Mode surface using `search_tools` and `execute_typescript`.

## Limitations and notes

upAPI is not a workflow engine, orchestration layer, LLM provider, or local scraping library. Each request runs one hosted operation; chaining calls must be handled by the agent or application. Calls share the account’s pooled quota, and operation descriptions include quota costs so an agent can budget usage. The server does not declare MCP `outputSchema` because operation responses represent live third-party payloads with varying structures.

_Full upstream README: https://allmcps.com/mcp/upapi/readme_

