Skip to main content
Glama
maxkuminov

Obsidian MCP (pgvector + Ollama, self-hosted)

by maxkuminov

check_upload

Check an upload link's status to confirm a transfer finished before reporting success, returning pending, uploading, completed, unknown, revoked, or expired, plus sha256 for verification.

Instructions

Ask what happened to an upload link you minted with request_upload.

Returns one of pending (nothing sent yet), uploading (bytes are in flight), completed (with the path, size, sha256 and MIME type of what landed), unknown (a stream started and the server never recorded how it ended), revoked (the link is dead because the credential or vault root changed under it), or expired. Use it to confirm a transfer really finished before you tell the user it did, and to get the sha256 if they want to verify it.

Visibility is scoped to the principal that minted the link, not to one credential row. For an API key that is the key itself. For OAuth it is the whole grant family behind the access token you are calling with, so a handle stays readable across the hourly token refresh that mints a new row. A different API key, a different client, or a separate approval of the same client reads as not found.

uploading names the deadline the stream has. Check again after it: past that point the answer becomes either completed or unknown. unknown does not mean nothing arrived — a publish can succeed and still fail to record its completion — so read or list the path before minting another link or telling anyone the file did not arrive.

Pass the upload_id itself — the short handle from request_upload, not the upload URL and not the token after the #. Anything else is refused without a lookup.

Args: upload_id: The upload_id that request_upload returned.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
upload_idYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.2
    • addedInput schema / additionalProperties
      Added value: +false
  2. Addedv0.7.0

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so thoroughly. It discloses the full set of return statuses, the visibility scoping by principal (API key vs OAuth grant family), the deadline semantics for `uploading`, the nuance that `unknown` does not imply nothing arrived, and that any input other than the raw `upload_id` is refused without a lookup. This is exemplary transparency.

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 long but each section earns its place: statuses, visibility, deadline, and input guidance. It is front-loaded with the key information (statuses) and structured logically. It could be trimmed slightly, but given the complexity and the need to cover edge cases, the length is justified and not wasteful.

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?

Despite having an output schema (which covers return value types), the description goes beyond it by explaining the meaning of each status, the visibility rules, and the deadline behavior. For a single-parameter tool, this is complete: an agent knows exactly how to call it, what to expect, and how to interpret results. Nothing critical is missing.

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 0%, so the description must compensate, and it does. It explains exactly what to pass: the `upload_id` from `request_upload`, and explicitly what not to pass (the upload URL or the token after the `#`). This adds critical meaning beyond the bare type definition, ensuring the agent won't misuse the parameter.

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: to check the status of an upload link created with `request_upload`. It enumerates the possible statuses and their meanings, and explicitly positions it as a way to confirm a transfer finished. This distinguishes it from siblings like `request_upload` (minting) and `request_download` (retrieval), leaving no ambiguity about what it does.

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

Usage Guidelines4/5

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

The description provides clear usage context: use it to confirm a transfer really finished and to retrieve the sha256. It also gives timing advice (check after the deadline) and explicitly warns about the `unknown` status. However, it doesn't explicitly state when *not* to use it or name alternative tools for related tasks, though the context strongly implies its role relative to `request_upload`.

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