All public upAPI operations as MCP tools: web scraping, search, screenshots, PDF, OCR and more.
MCPpedia last refreshed this data
io.github.DevinoSolutions/upapi-mcp is an MCP server that all public upAPI operations as MCP tools: web scraping, search, screenshots, PDF, OCR and more. Its tool list has not been published yet over http and stdio, requires no API key, and scores 61/100 on MCPpedia's security, maintenance and efficiency rubric.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"upapi": {
"env": {
"UPAPI_API_KEY": "upapi_xxx"
},
"args": [
"-y",
"@upapi/mcp"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Every public upAPI operation as an MCP tool — web search, SERP, social profiles, dev-tool lookups, geo/finance data — so an agent can
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y '@upapi/mcp' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked @upapi/mcp against OSV.dev.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in browser
Chrome DevTools for coding agents
Monitor browser logs directly from Cursor and other MCP compatible IDEs.
🔥 Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM clients.
MCP server paired with a browser extension that enables AI agents to control the user's browser.
MCP Security Weekly
Get CVE alerts and security updates for io.github.DevinoSolutions/upapi-mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Every public upAPI operation as an MCP tool — web search, SERP, social profiles, dev-tool lookups, geo/finance data — so an agent can call them directly.
There are two ways to connect, and they differ only in how a call is authenticated:
| Local (stdio) | Hosted (HTTP) | |
|---|---|---|
| Endpoint | npx @upapi/mcp | https://app.upapi.io/api/mcp |
| Auth | your upapi_ API key | sign in with your upAPI account (OAuth) |
| Runs | on your machine | on upAPI |
| Best for | scripts, CI, self-hosted agents | Claude, IDEs, anything that speaks remote MCP |
Both expose the same tools with the same schemas, and both bill the same quota.
Point any MCP client that supports remote servers at:
https://app.upapi.io/api/mcp
It will walk you through signing in to upAPI in a browser; there is no key to copy. With Claude Code:
claude mcp add --transport http upapi https://app.upapi.io/api/mcp
Create a key at app.upapi.io → API Keys, then:
claude mcp add upapi -e UPAPI_API_KEY=upapi_xxx -- npx -y @upapi/mcp
Claude Desktop (claude_desktop_config.json), Cursor, and Windsurf take the same thing as JSON:
{
"mcpServers": {
"upapi": {
"command": "npx",
"args": ["-y", "@upapi/mcp"],
"env": { "UPAPI_API_KEY": "upapi_xxx" }
}
}
}
| Variable | ||
|---|---|---|
UPAPI_API_KEY | required | an upapi_ key |
UPAPI_BASE_URL | optional | gateway origin, defaults to https://api.upapi.io |
The key is never validated locally — only checked for presence, so a missing one fails immediately with a readable message instead of surfacing later as an unexplained 401 inside a tool call. Whether a key is real, expired, or over quota is answered at the gateway, the single place that answers it for every machine caller.
The hosted endpoint serves a compact table by default: two meta-tools plus a few always-on operations, a few kilobytes in total.
| Tool | What it does |
|---|---|
search_ops | Find operations by intent — returns slug, description, parameters, and quota cost |
call_op | Run one operation by slug: { "slug": "github-repo.get", "input": { … } } |
A tool table is re-sent as context on every turn, so one tool per operation means tens of
kilobytes of JSON Schema per turn and a table large enough to measurably degrade tool selection.
search_ops + call_op stays flat as the catalog grows. web-search.post, github-repo.get,
and wikipedia-article.get stay on the table as full tools so the common case needs no discovery
round-trip.
Want every operation as its own tool instead? Add ?tools=full:
claude mcp add --transport http upapi 'https://app.upapi.io/api/mcp?tools=full'
Both modes reach exactly the same operations — the mode changes what is advertised, never what is
allowed. Operations are named after their slug with . and - replaced by _
(web-search.post → web_search_post), and each advertises the operation's real JSON Schema
(formats, bounds, defaults, nullability), because that schema is generated from the worker's own
model and passed through untouched.
The local (stdio) server always serves one tool per operation, and the whole catalog: it is installed delib