Skip to main content
Glama
devrobotlabs

@devrobotlabs/visionapi-mcp

Official
by devrobotlabs

@devrobotlabs/visionapi-mcp

Vision API용 MCP 서버입니다. Claude Code, Claude Desktop, Cursor 또는 다른 MCP 호스트를 스캔 폴더에 연결하고 송장을 요청하세요 — 작성할 통합 코드도, 생성된 코드에 들어갈 API 키도, 기억에서 재구성한 계약서도 없습니다.

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.

설치

설치할 것이 없습니다. 호스트의 설정에 추가하면 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, 동일한 형식:

{
  "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_..." }
    }
  }
}

키는 app.visionapi.io/dashboard/keys에서 발급받으세요. 새 계정에는 카드 없이 50크레딧이 제공됩니다.

호스트 설정 블록은 examples/ 디렉터리가 아니라 이 README에 있습니다 — 아홉 개의 클라이언트 라이브러리와 달라진 점이며, 의도적인 결정입니다. README에만 존재하는 스니펫은 아무도 실행하지 않는 스크립트에서 벗어날 수 없습니다.

Related MCP server: receiptconverter-mcp

읽을 수 있는 디렉터리

모든 위치 인자는 서버가 파일을 읽을 수 있는 디렉터리입니다. 아무것도 지정하지 않으면 프로세스 작업 디렉터리만이 유일한 루트입니다 — MCP 호스트가 프로젝트 디렉터리를 cwd로 하여 stdio 서버를 실행하기 때문에 이것이 안전한 기본값입니다.

이것은 보기보다 중요합니다. 서버는 실시간 지출 자격 증명을 보유하고 파일시스템 권한으로 실행되므로 셸이 읽을 수 있는 모든 것을 읽을 수 있습니다. ~/Documents/passport.jpg의 원본 텍스트를 요청하는 것은 해당 문서의 내용을 모델의 컨텍스트와 호스트가 유지하는 모든 대화 기록에 가져오는 실제 작동 방식입니다. 허용 목록은 혼란에 빠지거나 조작된 에이전트가 실수로 그렇게 하는 것을 막는 장치입니다.

경로는 비교 전 양쪽 모두에서 realpath로 해석되므로 허용된 디렉터리 내부의 심볼릭 링크가 그 밖을 가리킬 수 없습니다.

--allow-any-path는 허용 목록을 완전히 끕니다. 시작 시 stderr에 경고를 출력하며, 사용할 이유가 있어야 합니다.

도구

도구

기능

비용

vision_analyze

이미지 또는 PDF 하나에서 구조화된 필드 추출

이미지 1크레딧, PDF 페이지 2크레딧

vision_ask

파일 하나에 대해 최대 5개의 일반 언어 질문

이미지 1크레딧, PDF 페이지 1크레딧

vision_detect

이 파일이 무엇인가? 추출 없는 순위 프리셋

5회 호출당 1크레딧

vision_list_presets

프리셋 카탈로그

무료

vision_get_preset

프리셋 하나가 반환하는 모든 필드

무료

vision_credits

잔액 및 버킷

무료

vision_get_task

대기 중인 작업의 상태/결과

무료

크레딧을 소비하는 세 도구는 readOnlyHint: false로 주석 처리되어 있어, 읽기 전용 도구를 자동 승인하는 호스트도 이 중 하나가 실행되기 전에 멈추고 물어봅니다.

카탈로그는 리소스로도 노출됩니다 — visionapi://presets 및 visionapi://presets/{name} — 리소스를 선호하는 호스트를 위한 것입니다. 도구가 기본 표면입니다. 리소스 지원이 호스트마다 고르지 않기 때문입니다.

출력

응답은 JSON 덤프가 아니라 모델이 읽을 수 있도록 렌더링됩니다. 37개 필드의 송장 프리셋이 그중 12개만 채우는 문서에 적용되면, 25번의 {"value":null,"confidence":"low"} 반복 대신 테이블과 Not found in this document (25): … 한 줄로 반환됩니다 — 3~4배 더 작고, 조치하기도 쉽습니다.

과정에서 손실되는 것은 없습니다. 모든 도구는 format을 받습니다:

  • markdown (기본값) — 위의 렌더링.

  • compact_json — _not_found 및 _low_confidence 배열이 포함된 동일한 정보를 데이터로. 에이전트가 읽기보다 파싱할 때 사용.

  • json — API 응답을 그대로. 계약에 따라 실제 HTTP 코드를 작성할 때 사용.

신뢰도는 높지 않을 때만 출력되므로 (mid)와 (low)가 눈에 띄고 일반적인 경우에는 읽을 비용이 없습니다.

긴 문서

mode는 auto로 두세요. API는 동기 요청을 60초에 종료합니다. 그러면 서버가 이를 큐에 다시 제출하고 폴링하며 진행 상황을 호스트에 보고합니다. 한 번만 청구됩니다. 시간 초과된 시도가 예약을 전액 해제했기 때문입니다.

대략 10페이지가 넘는 문서에는 처음부터 mode: "async"를 전달하고, 긴 문서를 저렴하게 샘플링하려면 pages: "1-5"를 사용하세요 — 선택한 페이지만 청구됩니다.

비용 및 실패

실패는 비용이 들지 않습니다. 모든 non-2xx는 크레딧 예약을 전액 해제하므로 실패한 호출은 수정하고 반복해도 안전하며 정리할 것도 없습니다. 도구 설명에 이 내용이 명시되어 있어, 이 서버를 사용하는 에이전트는 오류 후 포기하거나 작동할 수 없는 것을 재시도하는 대신 합리적으로 행동합니다.

두 가지 오류에는 직접 알아둘 가치가 있는 조언이 포함되어 있습니다:

오류

의미

insufficient_credits

재시도는 도움이 되지 않습니다 — 잔액은 스스로 변하지 않습니다. 충전하세요.

too_many_tasks

자신의 비동기 작업이 플랜 상한에 도달했습니다. 타이머가 아니라 그 작업 중 하나가 끝날 때 해제됩니다 — 따라서 대기하고 재시도하는 것은 기다리고 있는 바로 그 일을 막는 것입니다.

환경

변수

필수 여부

용도

VISION_API_KEY

청구 가능 도구용

사용자 키. 카탈로그 도구는 없이도 작동합니다.

VISION_API_URL

아니요

API 기본 URL 재정의. 거의 필요하지 않습니다.

키가 없어도 서버 시작은 멈추지 않습니다: stderr에 경고를 출력하고 tools/list는 여전히 작동하며, 첫 청구 가능 호출이 해결 방법을 알려주는 메시지를 반환합니다. 시작을 거부하는 서버는 사용자에게 무언가 고장났다는 것만 알려줍니다.

개발

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를 실행하세요. npm install ../node가 아닙니다 — 이는 package.json을 "file:../node"로 다시 쓰며, 그 매니페스트가 게시되는 것이기 때문입니다.

링크

MIT 라이선스.

Available Tools

7 tools
vision_analyzeExtract structured data from an image or PDFA

Extract structured data from ONE image or PDF (JPEG, PNG, WebP, TIFF, PDF — detected by magic bytes, the extension is ignored).

Cost: 1 credit per image, 2 per selected PDF page. Failures cost NOTHING — every non-2xx releases the reservation in full, so a failed call is safe to fix and repeat, and there is no cleanup to do.

Choose ONE way to say what you want:

  • preset — a catalogue name, or "auto" to have the API classify the file first, for free. "auto" is the right default when you do not already know the document type. Do not call vision_list_presets just to guess a preset; the classifier is better at it and free.

  • schema — your own fields, {"field_name": "what to extract"}. The description IS the prompt: "the invoice number exactly as printed, without the #" extracts better than "invoice number". A schema can be passed alongside a preset to add fields to it.

  • schema_name — a schema saved in the account's dashboard. Not combinable with the others.

Reading what comes back:

  • Fields the document did not carry are NOT printed as values — they are listed at the end under "Not found". A preset always defines every one of its fields, so an absent value means "this document does not have it", never "the call failed".

  • A "(mid)" or "(low)" after a value is its confidence; no marker means high. Decide deliberately what to do with a low-confidence number rather than treating it as fact.

  • Never hardcode a preset's field names from memory. Call vision_get_preset first if the names are going into code.

Long documents: leave mode at "auto". The server kills a synchronous request at 60 seconds; this tool then re-submits it to the queue and polls, and you are charged exactly once because the timed-out attempt refunded itself. Pass mode:"async" up front for anything over ~10 pages.

One file per call. To process a folder, call this once per file — and if you get too_many_tasks, wait for your own in-flight tasks rather than sleeping.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto (default) — try synchronously, and if the server times out at 60 s, resubmit to the queue and poll. The timed-out attempt refunds itself, so this costs one charge, not two. sync — fail rather than fall back. async — go straight to the queue. Pass this up front for anything over roughly 10 pages.auto
pagesNoPDF page selection, e.g. "1-3,7". You are charged for selected pages only, so this is the cheap way to sample a long document.
detailNo"high" renders pages at higher resolution for dense or low-quality scans. Same credit cost, slower.
formatNomarkdown (default) — compact, readable, absent fields summarised rather than repeated. compact_json — the same information as data, with _not_found and _low_confidence arrays, for when you will parse it. json — the API response verbatim; use it when you are writing HTTP code against the contract.markdown
outputNo"text" returns the raw transcription and nothing else. Cannot be combined with a preset or a schema.
presetNoA catalogue name, or "auto" to have the API classify the file first, for free. "auto" is the right default when you do not already know the document type.
schemaNoYour own fields, as {"field_name": "what to extract"}. The description IS the prompt — "the invoice number exactly as printed, without the #" extracts better than "invoice number". Can be passed alongside a preset to add fields to it.
file_urlNoPublic HTTPS URL the API fetches itself. Private and internal addresses are refused by the server.
file_pathNoAbsolute or relative path to a file on the user's disk. Must be inside a directory this server was given access to — the error names them if it is not.
max_charsNoCeiling on transcription text in the response. Raise it only if you truly need more than 20 000 characters.
schema_nameNoA schema saved in the account dashboard. Not combinable with preset or schema.
language_hintNoISO 639-1 code, e.g. "es". Auto-detected when omitted; only worth setting when detection is getting it wrong.
min_confidenceNoValues below this level come back null with their confidence preserved. Default low, which filters nothing.
include_raw_textNoAlso return the full transcription alongside the fields. Expensive in context — leave it off unless you need the prose.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag readOnlyHint=false, non-idempotent, and non-destructive; the description adds substantial behavior beyond that: credit costs, failure refunds with no cleanup, magic-byte detection, 60-second timeout with queue resubmission, absent-field reporting, and confidence markers. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but deliberately organized into labeled sections: cost, selection modes, reading output, long documents, and per-file limits. Every sentence carries operational information; there is no filler or repetition beyond what is needed for a 14-parameter tool with no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 14-param, 0-required tool with no output schema, the description covers input selection, costs, failure/refund semantics, output interpretation (Not found, mid/low confidence), timeout behavior, page selection, formatting choices, and folder-processing guidance. An agent has enough to call it correctly without external docs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents parameters, but the description adds critical semantics: the exclusivity rule ('Choose ONE way'), schema_name not being combinable, schema descriptions acting as prompts, mode fallback/refund behavior, and the meaning of the format options. This goes well beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with 'Extract structured data from ONE image or PDF' — a specific verb plus objects and file types. It distinguishes the tool's role from vision_list_presets by telling users not to call that sibling just to guess a preset, and clearly separates the preset/schema/schema_name configuration paths.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance: use 'auto' when the document type is unknown, call vision_get_preset before hardcoding field names, pass async for anything over ~10 pages, and process one file per call while waiting on too_many_tasks. It also names exclusions, such as 'Do not call vision_list_presets just to guess a preset.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_askAsk questions about an image or PDFA

Ask up to 5 plain-language questions about ONE image or PDF and get answers with a verdict.

Cost: 1 credit per image, and 1 per selected PDF page — half what extraction costs on a PDF, because the answer does not scale with the page. The questions themselves are free: asking five costs exactly what asking one costs. Failures cost NOTHING.

Reach for this over vision_analyze when the answer is a judgement rather than a field — "is this signed?", "does the delivery address match the billing address?", "is anyone wearing safety equipment?". Reach for vision_analyze when you want values you will store or compute with; asking for a total and then parsing the prose is slower, dearer and less reliable than extracting it.

Reading what comes back: branch on verdict, never on the prose.

  • "yes" / "no" — the images settle it.

  • "uncertain" — a yes/no question the images genuinely do not settle. Treat it as missing information, not as a "no".

  • "n-a" — the question was not a yes/no question; the answer is in the prose. Each verdict carries a confidence, shown as "(mid)" or "(low)"; no marker means high.

Answers are at document level, not per page. Long documents behave exactly as in vision_analyze — leave mode at "auto", or pass "async" up front past ~10 pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto (default) — try synchronously, and if the server times out at 60 s, resubmit to the queue and poll. The timed-out attempt refunds itself, so this costs one charge, not two. sync — fail rather than fall back. async — go straight to the queue. Pass this up front for anything over roughly 10 pages.auto
pagesNoPDF page selection, e.g. "1-3,7". You are charged for selected pages only, so this is the cheap way to sample a long document.
detailNo"high" renders pages at higher resolution for dense or low-quality scans. Same credit cost, slower.
formatNomarkdown (default) — compact, readable, absent fields summarised rather than repeated. compact_json — the same information as data, with _not_found and _low_confidence arrays, for when you will parse it. json — the API response verbatim; use it when you are writing HTTP code against the contract.markdown
file_urlNoPublic HTTPS URL the API fetches itself. Private and internal addresses are refused by the server.
file_pathNoAbsolute or relative path to a file on the user's disk. Must be inside a directory this server was given access to — the error names them if it is not.
max_charsNoCeiling on transcription text in the response. Raise it only if you truly need more than 20 000 characters.
questionsYesUp to 5 questions about the file. The questions themselves are free — asking five costs the same as asking one.
language_hintNoISO 639-1 code, e.g. "es". Auto-detected when omitted; only worth setting when detection is getting it wrong.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description explains cost behavior (per image/per page, failures cost nothing), the verdict semantics ('yes'/'no'/'uncertain'/'n-a'), confidence markers, document-level answers, and the auto/sync/async fallback behavior. This gives a clear mental model of what will happen when the tool runs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but well structured with distinct sections for purpose, cost, usage guidance, and reading the output. Every paragraph earns its place, though the sentence on max_chars duplicates the schema's message and could be trimmed without meaningful loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description fully explains the response format and semantics: branch on verdict, the meaning of each verdict value, confidence markers, and document-level scoping. It also covers cost, page selection, and long-document modes, making the tool self-contained for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with thorough parameter descriptions. The tool-level description mainly restates information already present in the schema, such as pages being charged per selected page and questions being free. It adds almost no new parameter-level meaning beyond what the input schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Ask up to 5 plain-language questions about ONE image or PDF and get answers with a verdict.' This is a specific verb+resource+scope statement. It also explicitly contrasts with vision_analyze by naming that tool, so sibling differentiation is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Reach for this over vision_analyze when the answer is a judgement rather than a field' and the reverse. It also gives concrete context for mode and pages, such as passing 'async' up front past ~10 pages.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_creditsVision API credit balanceA
Read-only

The account's credit balance and its per-bucket breakdown.

Free — no credits consumed.

Worth checking before a large batch, so you can tell the user up front that 300 files will not fit in the balance rather than stopping half way through with an insufficient_credits error. Buckets are spent in order: subscription, then rollover, then pack, then welcome.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
balanceYes
bucketsYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral details beyond the readOnlyHint annotation: it is free (consumes no credits), and it explains the order of bucket spending. This gives the agent a deeper understanding of what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main purpose. Each sentence adds unique information: the resource, the cost, the usage scenario, and the bucket order. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters), the existing annotations, and the presence of an output schema, the description fully covers the tool's context. It explains when and why to use it, and the cost implication.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no input parameters, so the description has nothing to add. Per the rubric, 0 params gets a baseline of 4; no further clarification is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as providing the account's credit balance and per-bucket breakdown, which is distinct from sibling tools focused on presets and analysis. The 'Worth checking before a large batch' phrasing reinforces its purpose as a balance check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool ('before a large batch') and explains the benefit (avoiding insufficient_credits errors). It also provides the bucket consumption order, giving the agent a clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_detectIdentify what a file is, without extracting itA

Identify what a file IS without paying to extract it: the presets that could handle it, ranked, each with a confidence and a one-line reason.

Cost: 1 credit per 5 calls, whatever the file — detection only ever reads page 1, so a 300-page PDF costs the same as a photo. Four calls in five report 0 credits used.

recommended is exactly what preset:"auto" would run on this file, so you can probe first and trust the answer.

Reach for this when the TYPE is the decision: routing a mixed inbox to different handlers, or refusing to spend two credits a page on a 40-page PDF sight unseen. Do NOT reach for it as a step before every vision_analyze call — if you want the data and do not care which preset produced it, preset:"auto" classifies the same way, for free, in the same request. Using detect first and then analyze is two calls where one would do.

If fallback is true, nothing matched confidently and the recommendation is the generic preset. That is an honest "unknown", and it is worth surfacing to the user rather than extracting against a shape nobody has confirmed.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNo"high" renders pages at higher resolution for dense or low-quality scans. Same credit cost, slower.
formatNomarkdown (default) — compact, readable, absent fields summarised rather than repeated. compact_json — the same information as data, with _not_found and _low_confidence arrays, for when you will parse it. json — the API response verbatim; use it when you are writing HTTP code against the contract.markdown
file_urlNoPublic HTTPS URL the API fetches itself. Private and internal addresses are refused by the server.
file_pathNoAbsolute or relative path to a file on the user's disk. Must be inside a directory this server was given access to — the error names them if it is not.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations give basic hints, but description adds substantial context: cost (1 credit per 5 calls), that detection only reads page 1, the meaning of 'recommended' as exactly what preset:'auto' runs, and fallback behavior as an honest 'unknown'. No contradictions with annotations; readOnlyHint false is clarified by the read-only nature described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with front-loaded purpose and cost, but is relatively long. Every sentence contributes value, yet it could be tightened without losing meaning, especially the repeated emphasis on cost and the comparison with vision_analyze.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description conveys enough about output structure (presets ranked with confidence and reason, recommended field). It also covers cost, fallback, and usage. However, it leaves ambiguity about file parameter requirement (both optional in schema) and does not explicitly state that at least one file source is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover all 4 parameters at 100% coverage, so the baseline is 3. The description adds no parameter-level semantics beyond the schema; it does not explain that at least one of file_url/file_path must be provided, nor how to choose between them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states the tool identifies what a file is without extraction, explicitly contrasting with vision_analyze. It also specifies output: presets ranked with confidence and reason. This distinguishes it from sibling tools and provides a clear verb+resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('when the TYPE is the decision') and when-not-to-use ('do NOT reach for it as a step before every vision_analyze call'), naming the alternative preset:"auto" within vision_analyze. Includes concrete scenarios like routing a mixed inbox and avoiding costs on large PDFs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_get_presetGet a Vision API presetA
Read-onlyIdempotent

The full field list for one preset: every field name, its type, its description, and whether it is always present.

Free — no credits, no API key needed.

This is the ONLY correct source for a preset's field names. Never write one from memory: the catalogue is versioned and a name you remember from another project may not exist here, and a schema built on a guessed name fails at the point where you are parsing the response rather than at the point where you made it up.

Fields marked ★ are present on every response; the rest appear only when the document carries them. A field holding null means the document did not have it, never that the call failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesA preset name from vision_list_presets, e.g. "invoice".
formatNomarkdown (default) — compact, readable, absent fields summarised rather than repeated. compact_json — the same information as data, with _not_found and _low_confidence arrays, for when you will parse it. json — the API response verbatim; use it when you are writing HTTP code against the contract.markdown

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and idempotent, but the description adds critical behavioral semantics: fields marked ★ are always present, others appear only when the document carries them, and null means absence rather than failure. This goes beyond the annotation hints and clarifies output interpretation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized, with the purpose front-loaded and each paragraph adding distinct value: field list definition, free access, correctness warning, and interpretation rules. It is concise, with zero fluff, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description fully explains what the response will contain (field names, types, descriptions, presence markers), the meaning of null, and how the format parameter affects the output. It is complete for a simple read-only getter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% description coverage for both parameters (name and format), including detailed enum descriptions. The tool description adds no new parameter information beyond what the schema already supplies, so the baseline score of 3 is justified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches the full field list for one preset, with every field name, type, description, and presence marker. It explicitly calls itself the 'ONLY correct source' for a preset's field names, distinguishing it from sibling tools like vision_list_presets and from guessing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent when to use this tool (to obtain authoritative field names) and when not to (never write from memory), while also noting it is free and requires no API key. It explains how to interpret the response (★ markers, null meaning) and warns against using guessed names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_get_taskGet a queued Vision API taskA
Read-only

Status, and once finished the result, of a queued task.

Free — no credits consumed. The result was already paid for when the task was submitted.

Call this with the id from a call that was queued — either one you made with mode:"async", or one where polling ran out of time and the answer told you to come back. A task that is still "queued" or "processing" has NOT failed; it is working, and re-submitting the file would be a second charge for the same work.

Results are kept for 7 days. After that only the metadata survives and the file has to be sent again.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (default) — compact, readable, absent fields summarised rather than repeated. compact_json — the same information as data, with _not_found and _low_confidence arrays, for when you will parse it. json — the API response verbatim; use it when you are writing HTTP code against the contract.markdown
task_idYesThe id returned when a call was queued.
max_charsNoCeiling on transcription text in the response. Raise it only if you truly need more than 20 000 characters.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=true, but the description adds important behavior: it is free (no credits consumed), results are kept for 7 days, and after that only metadata survives. It also explains that a queued state is working, not failed. However, it does not specify details like the exact structure of the result or how errors are reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured. It leads with a clear purpose sentence, then provides key behavioral details and usage notes in short paragraphs. Every sentence adds value, and the formatting makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description compensates by explaining what the result contains ('Status, and once finished the result'). It covers usage context, cost, data retention, and the meaning of intermediate states. For a tool with three simple parameters and clear behavior, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for parameters, so the baseline is 3. The description adds value by explaining the format parameter with details on each enum value (markdown, compact_json, json) and when to use each. It also provides guidance on max_chars: 'Raise it only if you truly need more than 20 000 characters.' This adds semantic context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Status, and once finished the result, of a queued task.' It identifies the specific resource (a queued Vision API task) and the action (get status/result). It distinguishes itself from siblings by referencing queued tasks and explaining the context of async calls or polling timeouts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: when to call it (with an id from a queued call, either from mode:"async" or when polling ran out of time), and what not to do (re-submitting the file would be a second charge). It also clarifies that queued/processing states are not failures, which helps the agent avoid unnecessary re-submission.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vision_list_presetsList Vision API presetsA
Read-onlyIdempotent

List the preset catalogue: every named schema, with its field count and what it is for.

Free — no credits, no API key needed.

Read this when the user asks what document types are supported, or when you need a preset name to put in code. Do NOT call it to pick a preset before an extraction: preset:"auto" classifies the file server-side for free and is better at it than matching a description by eye, and vision_detect costs a fifth of a credit if you want the ranking. Listing 28 presets to guess one is the expensive path to a worse answer.

The names here are catalogue entries, not field names. Call vision_get_preset before writing any field name into code.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (default) — compact, readable, absent fields summarised rather than repeated. compact_json — the same information as data, with _not_found and _low_confidence arrays, for when you will parse it. json — the API response verbatim; use it when you are writing HTTP code against the contract.markdown

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, and idempotent, but the description adds valuable context: it's free with no credits or API key, and the names are catalogue entries not field names (cautioning against misuse). No contradictions with annotations. This adds meaningful behavioral safety and cost information beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: it opens with what the tool does, then cost, then usage and anti-usage, then a caution. Every sentence earns its place and adds distinct value. It's compact yet comprehensive, avoiding fluff while covering all necessary aspects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a simple listing tool with good annotations. It explains the purpose, cost, usage contexts, and a critical caution (catalogue entries vs field names). Without an output schema, it gives enough about the content (field count and purpose). The combination of annotations and description offers a full picture for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the parameter (format) with a detailed description of each enum value. The tool description does not add extra parameter detail, but since schema coverage is complete, the baseline of 3 is appropriate. The description doesn't need to repeat schema info; it focuses on when to use the tool, which is fine.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists the preset catalogue with field count and purpose. It distinguishes itself from siblings by specifying exactly what it provides (catalogue entries) and explicitly contrasts with vision_get_preset (which retrieves a single preset) and other tools. This is a specific verb+resource with clear scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use scenarios (user asks about document types, needs preset name for code) and when-not-to-use scenarios (avoid for preset selection before extraction, with alternatives like preset:'auto' and vision_detect). It names specific alternative tools and explains why they are better in those situations. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.0
    • First observedvision_analyze
    • First observedvision_ask
    • First observedvision_credits
    • First observedvision_detect
    • First observedvision_get_preset
    • First observedvision_get_task
    • First observedvision_list_presets

TDQS

A4.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool serves a distinct purpose: catalog discovery, preset details, credit balance, extraction, Q&A, detection, and async task retrieval. Even the overlapping detect/analyze pair is explicitly disambiguated with guidance on when each is appropriate, eliminating selection ambiguity.

Naming Consistency5/5

All tools follow the vision_<action> pattern, with actions being clear verbs (list, get, analyze, ask, detect, get). The lone exception 'credits' represents a state query but still fits the pattern as a noun-based action. The prefix is consistent and each name clearly signals its function.

Tool Count5/5

Seven tools is well-scoped for a vision API server, covering catalog management, extraction, Q&A, detection, credits, and async task handling. Each tool earns its place with no redundancy or bloat, matching the typical range for a focused service.

Completeness5/5

The tool set provides full lifecycle coverage: discover presets (list/get), perform operations (analyze/ask/detect), handle async tasks (get_task), and monitor usage (credits). There are no obvious gaps, and any missing features like custom schema management are handled via the dashboard rather than needing tools.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server that lets AI assistants read and visually analyze local documents — PDFs, Excel spreadsheets, CSV files, Word documents, PowerPoint presentations, and images.
    4
    20 npm
    42 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that gives your Claude, Cline, or Cursor session the ability to extract text, tables, and metadata from any PDF URL — including scanned PDFs via OCR.
    19 PyPI
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that extracts clean text, tables, and structured data from documents, images, code, and audio files, supporting 97 formats with OCR, transcription, and code intelligence.
    MIT