@devrobotlabs/visionapi-mcp

@devrobotlabs/visionapi-mcp

MCP server that lets AI assistants like Claude or Cursor extract structured data (e.g., invoices) from images and PDFs via Vision API, with tools for analysis, questions, and preset management.

Category
访问服务器

README

@devrobotlabs/visionapi-mcp

MCP server for the Vision API. Point Claude Code, Claude Desktop, Cursor or any other MCP host at a folder of scans and ask for the invoices — no integration to write, no API key in generated code, no contract paraphrased from memory.

You: pull the totals out of every invoice in ~/inbox and put them in a CSV

Claude: [vision_analyze × 7]
        Done — 7 invoices, 14 credits. Three had no PO number; I left those cells empty.

Install

Nothing to install. Add it to your host's config and it runs via npx.

Claude Code — claude mcp add visionapi --env VISION_API_KEY=sk_live_... -- npx -y @devrobotlabs/visionapi-mcp ~/inbox

Claude Desktop — claude_desktop_config.json:

{
  "mcpServers": {
    "visionapi": {
      "command": "npx",
      "args": ["-y", "@devrobotlabs/visionapi-mcp", "/Users/me/inbox"],
      "env": { "VISION_API_KEY": "sk_live_..." }
    }
  }
}

Cursor — .cursor/mcp.json, same shape:

{
  "mcpServers": {
    "visionapi": {
      "command": "npx",
      "args": ["-y", "@devrobotlabs/visionapi-mcp", "."],
      "env": { "VISION_API_KEY": "sk_live_..." }
    }
  }
}

VS Code — .vscode/mcp.json:

{
  "servers": {
    "visionapi": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@devrobotlabs/visionapi-mcp", "${workspaceFolder}"],
      "env": { "VISION_API_KEY": "sk_live_..." }
    }
  }
}

Get a key at app.visionapi.io/dashboard/keys. New accounts get 50 credits, no card.

The host config blocks live in this README rather than in an examples/ directory — a departure from the nine client libraries, and a deliberate one. A snippet that exists only in a README cannot drift from a runnable script nobody runs.

Which directories it can read

Every positional argument is a directory the server may read files from. With none given, the process working directory is the only root — which is the safe default, because MCP hosts launch a stdio server with the project directory as its cwd.

This matters more than it may look. The server holds a live spending credential and runs with your filesystem permissions, so it can read anything your shell can. Asking it for the raw text of ~/Documents/passport.jpg is a working way to get that document's contents into a model's context and into whatever transcript your host keeps. The allowlist is what stops a confused or manipulated agent doing that by accident.

Paths are resolved with realpath on both sides before being compared, so a symlink inside an allowed directory cannot point out of it.

--allow-any-path turns the allowlist off entirely. It warns on stderr at startup and you should have a reason.

Tools

Tool What it does Cost
vision_analyze Structured fields out of one image or PDF 1 credit an image, 2 a PDF page
vision_ask Up to 5 plain-language questions about one file 1 credit an image, 1 a PDF page
vision_detect What is this file? Ranked presets, no extraction 1 credit per 5 calls
vision_list_presets The preset catalogue free
vision_get_preset Every field one preset returns free
vision_credits Balance and buckets free
vision_get_task Status/result of a queued task free

The three that spend credits are annotated readOnlyHint: false, so a host that auto-approves read-only tools will still stop and ask before one of them runs.

The catalogue is also exposed as resources — visionapi://presets and visionapi://presets/{name} — for hosts that prefer them. Tools are the primary surface, because resource support is uneven across hosts.

Output

Responses are rendered for a model to read, not dumped as JSON. A 37-field invoice preset over a document that fills twelve of them comes back as a table plus one Not found in this document (25): … line, rather than as twenty-five repetitions of {"value":null,"confidence":"low"} — three to four times smaller, and easier to act on.

Nothing is lost in the process. Every tool takes a format:

  • markdown (default) — the rendering above.
  • compact_json — the same information as data, with _not_found and _low_confidence arrays. For when the agent will parse rather than read.
  • json — the API response verbatim. What to reach for when writing real HTTP code against the contract.

Confidence is printed only when it is not high, so (mid) and (low) stand out and the common case costs nothing to read.

Long documents

Leave mode at auto. The API kills a synchronous request at 60 seconds; the server then re-submits it to the queue and polls, reporting progress to your host as it goes. You are charged once, because the timed-out attempt released its reservation in full.

Pass mode: "async" up front for anything over roughly ten pages, and pages: "1-5" to sample a long document cheaply — you are charged for selected pages only.

Costs and failures

Failures cost nothing. Every non-2xx releases the credit reservation in full, so a failed call is safe to correct and repeat and there is no cleanup to do. The tool descriptions say so, which is why an agent using this server behaves sensibly after an error instead of either giving up or retrying something that cannot work.

Two errors carry advice that is worth knowing yourself:

Error What it means
insufficient_credits Retrying cannot help — the balance does not change on its own. Top up.
too_many_tasks Your own async tasks are at the plan's cap. It clears when one of them finishes, not on a timer — so sleeping and retrying blocks the very thing you are waiting for.

Environment

Variable Required Purpose
VISION_API_KEY for billable tools Your key. The catalogue tools work without it.
VISION_API_URL no Override the API base URL. Rarely needed.

A missing key does not stop the server starting: it warns on stderr, tools/list still works, and the first billable call returns a message naming the fix. A server that refuses to start tells the user only that something is broken.

Development

npm install
npm run typecheck
npm test          # 37 offline tests — no key, no network
npx @modelcontextprotocol/inspector node ./dist/cli.js ~/some/dir

npm install --no-save ../node to test against a local build of the client. Not npm install ../node — that rewrites package.json to "file:../node", and that manifest is what gets published.

Links

MIT licensed.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选